在数据库中,SERIALIZABLE(可串行化) 是事务隔离级别中最严格的一级,它保证并发事务的执行效果等同于按某种顺序串行执行,从而避免脏读、不可重复读和幻读。
一般来说,只有当业务逻辑对数据一致性和正确性要求极高、且并发冲突代价很高时,才考虑使用 SERIALIZABLE。下面按“典型业务场景”来说明哪些业务适合用它。
典型业务:
原因:
示例:
-- 转账
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT;
典型业务:
原因:
示例:
BEGIN ISOLATION LEVEL SERIALIZABLE;
SELECT stock FROM item WHERE id = 10;
-- 应用判断 stock > 0
UPDATE item SET stock = stock - 1 WHERE id = 10;
COMMIT;
注:高并发场景下,SERIALIZABLE 可能导致大量锁等待,常配合“乐观锁 / 分布式锁”使用。
典型业务:
原因:
典型业务:
原因:
典型业务:
原因:
| 业务类型 | 原因 |
|---|---|
| 普通商品浏览 | 读多写少,不需要强一致 |
| 用户评论 | 允许短暂不一致 |
| 日志、埋点 | 最终一致即可 |
| 高并发写场景 | 性能差、易死锁 |
这些通常用:
SERIALIZABLE 适合“错一次代价极大”的业务:钱、库存、对账、关键状态变更。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。