SERIALIZABLE 隔离级别的疑问
来源:9-14 【实战】 事务阻塞的捕获

Anthony_Duan
2019-08-11
我这里有个需求,一张表有复合唯一索引,还有一列名为 value 为数值型,根据复合索引查,如果查询到了,那么就更新value 值为原来的 value+1 如果没有查询到,就插且 value 为 1. web业务。
我想到的解决方案是 用 for update 行锁 第一次查的时候加上 for update 这样别人就无法读了。自然也无法更新。插入也不受影响,其他索引也受到影响。
今天看到了 SERIALIZABLE 这个隔离级别,但是我实验了下,一个 session 查询查询一条数据未提交事务时,另外的 session 依旧可以查到该数据。这个不是串行的吗?还是我对这个串行理解有错误?
写回答
2回答
-
Anthony_Duan
提问者
2019-08-12
mysql 为 5.7
数据库连接工具为 DataGrip
打开控制台1 输入语句
再打开控制台 2 输入语句
执行控制台 1 的语句 正确查询出结果
再执行控制台 2
同样得出正确结果,
但是此时如果控制台 2 执行 update 语句会被阻塞
由此我觉得SERIALIZABLE 对读是不会串行化处理的。
这个结论是对的吗?还是我实验哪里有问题了?
00 -
sqlercn
2019-08-12
可以说一下你的试验过程吗?
042019-08-14
相似问题