数据库事务隔离级别与原理
|
读到未提交的内容。因为这种隔离级别下查询是不会加锁的,所以可能会产生“脏读”、“不可重复读”、“幻读”。在实际开发中如无特殊情况基本是不会使用该隔离级别的。 (2) 读提交(TRANSACTION_READ_COMMITTED) 读提交,指只能读到已经提交了的内容。这是最常用的一种隔离级别也是Oracle和SQLServer的默认级别,该级别可以有效地避免脏读。(注意:除非显示加锁如共享锁、排他锁,否则查询是默认不加锁的。而区别于“读未提交”,“读提交”可避免脏读的原因是采用了 “快照读”) (3) 可重复读(TRANSACTION_REPEATABLE_READ) 可重复读,该级别可以有效的避免“不可重复读”,也是MySQL数据库innodb默认的级别。在这个级别下,普通的查询同样是使用的“快照读”,但是,和“读提交”不同的是,当事务启动时就不允许进行Update操作,而“不可重复读”是因为两次读取之间进行了数据的修改所导致的。因此“可重复读”能够有效的避免“不可重复读”,但却避免不了“幻读”,因为幻读是由于“插入或者删除操作”而产生的。 (4) 串行化(TRANSACTION_SERIALIZABLE) 串行化是数据库最高的隔离级别,这种级别下事务串行化一个一个排队顺序执行,可避免脏读、不可重复读、幻读。安全性高相应的执行效率低,性能开销也最大,在实际开发中比较少用。 快照读
数据库读分为:一致非锁定读、锁定读,上面提到“快照读”也就是非锁定读。可简单理解为执行SELECT语句的时候会生成一个快照。 (编辑:烟台站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


