ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 与事务有关的数据并发问题

与事务有关的数据并发问题

原创 Linux操作系统 作者:grjsj 时间:2012-12-17 13:55:38 0 删除 编辑

与事务有关的数据并发问题

1. 脏读(Dirty Read)

事务A读到事务B尚未提交的数据,并基于这个数据进行后续操作。

     脏读强调的是:A事务读到的不够新

Transaction 1

Transaction 2

/* Query 1 */

SELECT age FROM users WHERE id = 1;

/* will read 20 */

/* Query 2 */

UPDATE users SET age = 21 WHERE id = 1;

/* No commit here */

/* Query 1 */

SELECT age FROM users WHERE id = 1;

/* will read 21 */

ROLLBACK; /* lock-based DIRTY READ */

2. 不可重复读(Unrepeatable Read)

事务A读取数据后,被事务B修改或删除,事务A再次读取时前后两次读取的数据不一致。

不可重复读强调的是: 同一事务,两次读取到的数据不一样。

Transaction 1

Transaction 2

/* Query 1 */

SELECT * FROM users WHERE id = 1;

/* Query 2 */

UPDATE users SET age = 21 WHERE id = 1;

COMMIT; /* in multiversion concurrency

   control, or lock-based READ COMMITTED */

/* Query 1 */

SELECT * FROM users WHERE id = 1;

COMMIT; /* lock-based REPEATABLE READ */


3. 虚读/幻象读(Phantom read)

事务A读取数据后,事务B新增了数据,事务A再次读取是前后两次读取的数据不一致。

虚读强调的是:记录的条数发生了变更。

Transaction 1

Transaction 2

/* Query 1 */

SELECT * FROM users

WHERE age BETWEEN 10 AND 30;

/* Query 2 */

INSERT INTO users VALUES ( 3, 'Bob', 27 );

COMMIT;

/* Query 1 */

SELECT * FROM users

WHERE age BETWEEN 10 AND 30;

4. 第一类更新丢失

事务A和事务B同时访问并修改同一个数据,事务B先提交修改,事务A回滚操作。导致事务B的修改丢失。

5. 第二类更新丢失

事务A和事务B同时访问并修改同一个数据,事务B先提交修改,事务A再提交。导致事务B的修改被覆盖。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/238581/viewspace-751211/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 学生作息时间表
下一篇: 正斜杠, 反斜杠
请登录后发表评论 登录
全部评论

注册时间:2008-12-18

  • 博文量
    21
  • 访问量
    28166