数据库事务机制(一)
时间:2010-10-13 来源:my_lovely_p..
一、
ACID
二、
事务并发时可能出现的三类问题
1)脏读
——读了别的事务还没有提交的事务数据
2)不可重复读
——读了一条有两个状态的数据,另一个状态,是由于其他事务的更新操作引起的
3)幻读
——读了一条有两个状态的数据,另一个状态,常是由于其他事务的插入或者删除操作引起的
三、数据库事务隔离机制
引入:
mysql的隔离机制:
#select @@tx_isolation
可以看到,mysql的隔离机制是:repeatable-read
Oracle是read-committed
1、那么,数据库的四种级别的隔离机制分别是什么呢?(它们的等级是1,2,4,8)
1)read-uncommitted: 可以读没有提交的事务的数据,显然这会产生所有前3类的事务错误
2)read-committed:只能读提交了的事务的数据,这就不会产生脏读,但是其他两种异常还是可能的
3)repeatable-read:这就是在读事务数据的时,给这条数据加了一把锁,这样,其他事务就不能修改这条数据了,必须等这个事务完成,释放了这把锁,其他事务才能进行修改。
比如我们的#select where XXXXX for update
4)serial:序列化的方式,将所有事务串行操作,这样可以解决所有问题,但是效率有多低下。。。。。
也就是说,这四种方法,逐渐变得保险,但是以牺牲性能为前提,二者在特定的应用场景下需要权衡,数据库调优时进行选择。
一般情况下,选择2的时候比较多,然后通过其他方法尝试解决repeatable-read
相关阅读 更多 +