MySQL 的可重复读怎么实现的?
MySQL 可重复读是事务隔离级别中的一种。它确保了在同一事务中多次读取同一数据时,该数据不会被其他事务修改。MySQL 通过MVCC(多版本并发控制)和锁机制来实现可重复读。
MVCC 是通过保存数据在某个时间点的快照来实现的。在可重复读隔离级别下,事务开始时会读取一致的快照,事务期间,即使其他事务修改了数据,也不会影响当前事务的数据。
锁机制则确保了在可重复读隔离级别下,当事务在读取数据时,其他事务不能修改该数据。
具体实现上,MySQL 会在读取数据时对其加读锁,在事务结束前,其他事务不能修改这些数据。
以下是一个简单的例子,演示了在可重复读隔离级别下,事务中的两次读取操作读取的是同一份数据快照:
-- 设置事务隔离级别为可重复读
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
-- 初始值为10
SELECT balance FROM account WHERE id = 1; -- 第一次读取,值为10
-- 另一个事务对数据进行修改
START TRANSACTION;
UPDATE account SET balance = balance - 5 WHERE id = 1;
COMMIT;
SELECT balance FROM account WHERE id = 1; -- 第二次读取,仍然是10,不受上面事务的影响
COMMIT;
在这个例子中,第一次和第二次读取的balance
值都是事务开始时的快照,不受其他事务的更新操作影响。
评论已关闭