-- 事务A(未提交)
BEGIN;
UPDATE users SET balance = 500 WHERE id = 1; -- 修改未提交
-- 事务B(脏读)
BEGIN;
SELECT balance FROM users WHERE id = 1; -- 读到500(脏数据)
-- 事务A回滚
ROLLBACK;
-- 事务B基于脏数据继续操作(可能导致错误)
2. 不可重复读(Non-Repeatable Read)
-- 事务A
BEGIN;
SELECT balance FROM users WHERE id = 1; -- 第一次读,结果为200
-- 事务B(已提交)
BEGIN;
UPDATE users SET balance = 100 WHERE id = 1;
COMMIT;
-- 事务A再次读取同一行
SELECT balance FROM users WHERE id = 1; -- 结果为100(值变化)
3. 幻读(Phantom Read)
-- 事务A
BEGIN;
SELECT * FROM users WHERE age > 20; -- 第一次查询,返回2条记录
-- 事务B(已提交)
BEGIN;
INSERT INTO users (name, age) VALUES ('Charlie', 25);
COMMIT;
-- 事务A再次查询
SELECT * FROM users WHERE age > 20; -- 返回3条记录(行数变化