指一组相关SQL操作,我们所有的操作都在事务中。
注:在数据库中,执行业务的基本单位是事务,而不是某一条SQL。
默认情况下,数据库会打开所有的事务,也就是说,一个事务的结束代表着下一个事务的开始。
执行commit或者rollback指令将结束当前事务
功能:确保数据的稳定性和可预测性
例如:银行转账业务
【SQL1:A账号转到B账号100000
update tbl_account set balance=balance-10000 where accountNo=A账号;
SQL2:
update tbl_account set balance=balance 10000 where accountNo=B账号;
SQL1和SQL2必须处于同一事务中,以确保同时成功或失败。
事务的四大特点(ACID):
atomic,原子是不可分割的,要么同时成功,要么同时失败;
consistency,一致性,一旦事务结束,内存中的数据与数据库中的数据保持一致;
isolation,隔离,事务不相互干扰,一件事的结束意味着下一件事的开始;
duration,持久性,事务一旦提交,则数据持久化到数据库中,永久保存
在oracle操作事务命令:
1.commit,提交事务
将事务中的所有数据持续到磁盘中
2.rollback to 回滚点,回滚事务
取消事务中的所有操作,回到初始状态
3.savepoint 回滚点,设置回滚点
事务回滚时,回滚到起点
总结:
1.目前主流数据库支持事务,其中Oracle支持的最好
2.一个事务不能读取另一个事务尚未提交的数据
3.DDL句子会自动提交事务
4.DML语句不会自动提交事务,需要手动提交commit
多事务并发处理机制:
原因:多个事务同时操作表中的同一行数据。如果同时修改这些操作,就会出现并发问题。如果不处理,数据就会不一致
数据库并发问题包括:
1.脏读
这意味着一个事务正在访问数据并修改数据,而该修改尚未提交到数据库,另一个事务也访问并使用数据。
解决方案:在修改数据时,不能访问其他事务
2.不能重复:
这意味着一个事务多次读取相同的记录。如果此时另一个事务也访问并修改数据,数据将不一致,原始数据将成为不可重复读取的数据。
解决方案:修改事务完全提交后才能读取数据
3.幻读
指一个事务修改表中的多行记录,但此时另一个事务插入数据,第一个事务会发现表中没有修改,就像幻觉一样;
解决方案:在事务提交数据之前,其他事务不能添加数据
【Oracle并发处理采用‘锁’
1.表级排他锁(X)exclusive mode
2.表级共享锁(S)share mode
3.表中行排他锁share row exclusive
注:这三种锁是通过特殊命令申请的
语法:
lock table tbl_name in mode;
例如:
--共享锁表
lock table tbl_emp in share mode;
--排他锁表
lock table tbl_emp in exlusive mdoe;
4.行级共享锁(RS)row share
5.行级排他锁(RX)row exclusive
注:这两种锁不需要通过特殊命令申请,而是通过DQL和DML自动申请
注意:
1.所有的DQL默认情况下,语句会自动申请RS锁
2.所有的DML默认情况下,语句会自动申请RX锁,每行记录都是唯一的RX锁
3.在项目中,为了满足业务要求,一般select句子需要申请RX锁
select语句通过for update来申请RX锁:
select * from s_emp for update;
select * from s_emp for update wait 5;等待5秒
select * from s_emp for update nowait;
Oracle DTL 数据事务语言
标签:行记录情况下开启microsoft支持行业数据不一致定义sel
本技术文章来自互联网。如果您无意侵犯您的权益,请点击此处反馈版权投诉 本文系统来源:http://www.cnblogs.com/ty-v/p/7880497.html