在数据库和并发系统中,SERIALIZABLE(可串行化) 是最高的隔离级别,它的存在主要是为了解决并发事务带来的数据不一致问题,并在某些关键场景下保证“结果正确”。
下面从“为什么需要”的角度来说明。
如果多个事务同时读写数据,而没有足够强的隔离,会出现:
这些问题在普通业务里可能只是小bug,但在钱、库存、权限、合同等场景里就是严重事故。
SERIALIZABLE 的核心目标是:
多个并发事务的执行结果,必须等价于某种“一个接一个串行执行”的结果
也就是说:
这在以下场景是必须的:
举个例子(没有 SERIALIZABLE):
事务A:查余额 = 100
事务B:查余额 = 100
事务A:扣50,写50
事务B:扣80,写20
最终余额是 20,但:
SERIALIZABLE 会阻止这种交叉执行,保证一致性。
很多业务规则不是单条 SQL 能表达的,例如:
这些规则依赖:
SERIALIZABLE 能保证这一步不会被别的事务“插队”。
如果没有 SERIALIZABLE:
而 SERIALIZABLE:
因为代价高:
所以一般原则:
SERIALIZABLE 的存在,是为了在并发环境下,依然保证数据结果“绝对正确、像串行一样可靠”。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。