MySQL: 并发数据访问以及事务隔离级别

并发数据访问经常导致的问题有脏读、不可重复读、幻读。

脏读:是指一个事务正在访问数据,做了修改,但尚未提交,这时,另一个事务也访问并使用了这个数据。

不可重复读 :是指在一个事务内,多次读同一数据,但期间由于数据被另外的事务所修改,导致读取结果不一致。

幻读 : 是指一个事务对一个表中的所有数据进行了修改。同时,另外一个事务添加了表中数据,那么就产生了第一次操作未完全成功的幻觉。

前面两种问题发生于数据更改时,幻读发生于数据增删时。


对于上述的并发数据访问问题,数据库有事务隔离级别来分别处理。

READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )
READ_COMMITTED  会出现不可重复读、幻读(锁定正在读取的行)
REPEATABLE_READ 会出现幻读(锁定所读取的所有行)
SERIALIZABLE 无并发问题(锁表)
DEFAULT 数据库默认隔离级别 

对于MySQL,可以详细阅读mysql manual:

http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html

MySQL InnoDB默认事务隔离级别是REPEATABLE_READ, MyISAM不支持事务。


参考链接:

http://en.wikipedia.org/wiki/Isolation_(database_systems)#



by iefreer


已标记关键词 清除标记
相关推荐