- 脏读:A事物读取B事物尚未提交的更改数据,并在这个基础上操作。如果B事物回滚,则A事物读到的数据将不被承认。需要增加行级锁。
- 不可重复读:A事物读到B事物提交的数据导致前后两次读到的数据不一致。
- 幻读:A事物读到B事物新提交的数据。需要增加表级锁。
- 第一类丢失更新:A事物撤销时,把已经提交的B事物覆盖了。
- 第二类丢失更新:A事物覆盖B事物已经提交的数据。
数据库锁
共享锁定会防止独占锁定,但允许其他的共享锁定,独占锁会防止其他锁定。
行共享锁:通过INSERT FOR UPDATE 语句隐式获得行共享锁,允许进行多个并发的行共享和行独占锁定,还允许数据表的共享或者采用共享行独占锁。
行独占锁:通过INSERT UPDATE DELETE语句隐式获得,或者通过LOCK TABLE IN ROW EXCLUSIVE MODE 语句显示获得,可以防止其他会话获取一个共享锁定,共享行独占锁或独占锁。
表共享锁定:通过LOCK TABLE IN SHARE MODE 语句显示获得,可以防止其他会话获取行独占锁或其他表共享行独占锁定、表独占锁定。允许表中有多个行共享锁和表共享锁定,可以让具有对表事物级一致性访问,因为其他会话在用户提交或者回滚该事物并释放对该表的锁定之前不能更改这张被锁定的表。
表共享行独占锁定:通过LOCK TABLE IN SHARE ROW EXCLUSIVE MODE 语句显示获得。可以防止其他会话获取一个表共享,行独占或表独占锁定,允许其他行共享锁定,一次对一张表只能放一个表共享行独占锁定,如果A会话拥有该锁定,则B会话可以执行 INSERT FOR UPDATE ,但是B如果想更新选择的行,则需要等待。
表独占锁:通过LOCK TABLE IN EXCLUSIVE MODE 语句显示获得。可以防止其他会话对该表的任何其他锁定。
事物隔离级别
- READ UNCOMMITED 允许脏读、不可重复读、幻读、第二类丢失更新。
- READ COMMITED 允许不可重复读、幻读、第二类丢失更新。
- REPEATABLE READ 允许幻读。
- SERIALIZABLE 都不允许。
- 事物隔离级别和数据库的并发性是对立的。SQL92推荐使用 REPEATABLE READ。

被折叠的 条评论
为什么被折叠?



