在数据库和并发编程里,SERIALIZABLE(串行化)是隔离级别(或并发控制级别)中最严格的一种。之所以“要用 SERIALIZABLE”,通常是因为业务正确性比性能更重要,并且其他 weaker 隔离级别无法避免某些并发问题。
下面从「为什么需要」和「什么时候才该用」两个角度说。
在 SQL 标准里,较低的隔离级别可能出现:
SERIALIZABLE 的目标是:
多个事务并发执行的结果,等价于按某种顺序一个一个串行执行
也就是说:
有些业务逻辑,只看单行数据是对的,但跨数据就不对了。
例子:
如果不用 SERIALIZABLE:
SERIALIZABLE 能确保:
并发结果和串行执行一致,业务规则不会被打破
低隔离级别常需要:
而 SERIALIZABLE:
因为它有代价:
所以一般原则:
只有在“并发错误不可接受”时才用 SERIALIZABLE
用 SERIALIZABLE,是因为你宁愿慢一点、重试多一点,也不能让数据“逻辑上错”。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。