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

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

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博客 ” ,链接:http://blog.itpub.net/238581/viewspace-751211/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/238581/viewspace-751211/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值