在数据库事务隔离级别中,SERIALIZABLE(可串行化) 是最高的隔离级别。之所以要使用它,核心原因是:在并发环境下,保证数据的一致性(Correctness),避免各种并发异常。
下面从“问题 → 解决 → 代价 → 适用场景”来说明。
如果隔离级别较低(如 READ COMMITTED、REPEATABLE READ),并发事务可能出现:
脏读(Dirty Read)
不可重复读(Non-repeatable Read)
幻读(Phantom Read)
写冲突导致业务错误
这些问题在金融、库存、账务、票务等场景中是不可接受的。
SERIALIZABLE 保证:
多个事务并发执行的结果,等价于某种“串行执行”的结果。
也就是说:
它通常通过:
来实现。
因为 SERIALIZABLE 有代价:
所以:
适合用 SERIALIZABLE 的场景:
示例:
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT balance FROM account WHERE id = 1;
-- 业务判断
UPDATE account SET balance = balance - 100 WHERE id = 1;
COMMIT;
这样能保证不会两个事务同时扣成负数。
用 SERIALIZABLE,是因为在并发系统中,有时候“绝对不能算错”比“算得快”更重要。
如果你愿意,我也可以帮你:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。