一、事务完整性问题
脏读:可以读取其他事务未提交的数据,如果该事务回滚,则数据为错误数据。
不可重复读:A事务查看,B事务修改提交,A事务再次查看,数据不一样。
幻读:幻读与不可重复读相似,但不可重复读重点在于update和delete,幻读重点在于insert
t Session A Session B
|
| START TRANSACTION; START TRANSACTION;
|
| SELECT * FROM t_bitfly;
| empty set
| INSERT INTO t_bitfly
| VALUES (1, 'a');
|
| SELECT * FROM t_bitfly;
| empty set
| COMMIT;
|
| SELECT * FROM t_bitfly;
| empty set
|
| INSERT INTO t_bitfly VALUES (1, 'a');
| ERROR 1062 (23000):
| Duplicate entry '1' for key 1
v (???刚刚明明告诉我没有这条记录的)
t Session A Session B
|
| START TRANSACTION; START TRANSACTION;
|
| SELECT * FROM t_bitfly;
| +------+-------+
| | id | value |
| +------+-------+
| | 1 | a |
| +------+-------+
| INSERT INTO t_bitfly
| VALUES (2, 'b');
|
| SELECT * FROM t_bitfly;
| +------+-------+
| | id | value |
| +------+-------+
| | 1 | a |
| +------+-------+
| COMMIT;
|
| SELECT * FROM t_bitfly;
| +------+-------+
| | id | value |
| +------+-------+
| | 1 | a |
| +------+-------+
|
| UPDATE t_bitfly SET value='z';
| Rows matched:

本文详细介绍了MySQL中的事务隔离级别,包括脏读、不可重复读和幻读的问题,以及对应的读未提交、读提交、可重复读和串行化的隔离级别。重点讲解了InnoDB事务中的MVCC(多版本并发控制)机制,如何通过隐式字段、版本链和一致性视图解决并发问题,以及redo log和undo log在事务中的作用。
1万+

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



