数据库的事务隔离级别

来源:互联网 发布:淘宝连帽 编辑:程序博客网 时间:2024/05/20 18:04

数据库的四个事务特性(ACID):

1,原子性(Atomicity):以一个事务为最小操作单位,事务中的包含的sql语句要么都执行,要么都不执行。

2,一致性(Consistency):保证一个事务中涉及多个数据编辑后的结果数据是保持一致的。

3,隔离性(Isolation):多个事务之间是相互隔离的,互不影响,详细参考下面的事务的隔离性。

4,持久性(Durability):是指一个事务一旦提交成功,他就永久的存在数据中。


事务的隔离级别:

1,Rade Uncommitted(读未提交):

两个事务A,事务B,事务A读取到事务B中修改但未提交的数据。

2,Rade Committed(读已提交,oracle等多个数据库默认的隔离级别):

也可叫不可重复读,两个事务A,事务B,数据库中某条数据result1,例如事务A中有两条select语句s1,s2,且都是查询result1数据。

首先事务A执行了s1,此时事务B修改了result1,然后事务A执行s2,此时s1和s2读取到的数据不一致,即不可重复读。

Rade Committed能避免脏读,不能避免幻读,不可重复读。

3,Repetable Read(可重复度,mysql的InnoDB引擎默认的隔离级别) :

两个事务A,事务B,数据库中某条数据test,例如事务A中有两条select语句s1,s2,且都是查询test数据。

首先事务A执行了s1,此时事务B修改了result1,然后事务A执行s2,此时s1和s2读取到的数据是一致的,即可重复读。

但是读取某个范围内的数据时,例如读取满足条件condition有result1,result2,result3  可能出现幻读:

两个事务A,事务B,数据库中满足条件condition,例如事务A中有两条select语句s1,s2,且都是满足条件condition。

首先事务A执行了s1,得到result1,result2,result3,此时事务B增加了满足条件condition的数据result4,然后事务A执行s2,得到的数据为result1,result2,result3,result4

此时s1和s2读取到的数据是不一致的,即出现幻读。

Repetable Read能避免脏读,不可重复读,不能避免幻读

4,Serializable(串行化)

这个隔离级别对系统性能的影响比较大,事务是串行化执行,能避免脏读,不可重复读,幻读




0 0
原创粉丝点击