注册

串行化隔离级别中,并发事务中的查询结果与任何一种串行调度的结果都不同

jyt 2025/06/18 162 2

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:win
【CPU】:x86_64
【问题描述】*:按以下顺序分别执行两个事务```sql

--init
CREATE TABLE T1(C1 INT);

/*tx1*/ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
/*tx2*/ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
/*tx1*/ START TRANSACTION;
/*tx2*/ START TRANSACTION;
/*tx1*/ insert into t1 values(1);--查询
/*tx2*/ insert into t1 values(2);--查询
/*tx1*/ select * from t1;
/*tx2*/ select * from t1;
/*tx1*/ commit;
/*tx2*/ commit;

若按tx1,tx2的串行顺序,tx1中将查到{1},tx2中将查到{1,2};
若按tx2,tx1的串行顺序,tx1中将查到{1,2},tx2中将查到{2};
实际tx1中查到{1},tx2中查到{2},与以上任何一种都不同,也没有报“串行化事务被打断”之类的错;
而mysql会在tx1查询时阻塞,tx2查询时报死锁并自动回滚
回答 0
暂无回答
扫一扫
联系客服