脏读、不可重读度、幻读

1、脏读:脏读是指一个事务可以读取到另一个事务尚未提交的数据。
2、不可重复读:不可重复读是指同一个事务中,前后两次查询同一条记录,结果不一致,因为中间该记录被其他事务修改了并提交了。
不可重复读的例子:
初始数据:

id name balance
1 张三 100
事务A
BEGIN;
SELECT balance FROM user WHERE id = 1;  -- 得到 100

事务 B(并发事务):

BEGIN;
UPDATE user SET balance = 50 WHERE id = 1;
COMMIT;

事务 A 继续:

SELECT balance FROM user WHERE id = 1;  -- 得到 50(发生了不可重复读)

3、幻读:事务在读取某个范围内的记录时,另一个事务往这个范围插入了新记录,导致前后两次读取的结果不一致,多出“幻影”记录
幻读的例子:
CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, amount DECIMAL(10, 2) );

id user_id amount
1 1001 200.00
2 1002 150.00
START TRANSACTION;

SELECT * FROM orders WHERE amount > 100;
-- 返回两条记录,id=1 和 id=2
START TRANSACTION;
INSERT INTO orders(user_id, amount) VALUES (1003, 300.00);
COMMIT;
SELECT * FROM orders WHERE amount > 100;
-- 结果现在有 3 条记录!新插入的这条也被查出来
-- 这就是“幻读”

事务的隔离级别有脏读和不可重复读的例子

posted @ 2025-07-14 11:01  Charlie-Pang  阅读(36)  评论(0)    收藏  举报