在数据库中,SERIALIZABLE(可串行化) 是 事务隔离级别(Transaction Isolation Level) 中最严格的一级。
SERIALIZABLE 表示:
多个事务并发执行的结果,等价于 这些事务按某种顺序一个一个串行执行的结果。
也就是说,数据库会保证:
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| READ UNCOMMITTED | ❌ 可能 | ❌ 可能 | ❌ 可能 |
| READ COMMITTED | ✅ 防止 | ❌ 可能 | ❌ 可能 |
| REPEATABLE READ | ✅ 防止 | ✅ 防止 | ❌ 可能 |
| SERIALIZABLE | ✅ 防止 | ✅ 防止 | ✅ 防止 |
常见实现方式包括:
BEGIN;
SELECT * FROM accounts WHERE id = 1;
-- 做一些判断
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;
BEGIN;
SELECT * FROM accounts WHERE id = 1;
UPDATE accounts SET balance = balance + 50 WHERE id = 1;
COMMIT;
在 SERIALIZABLE 下:
如果你愿意,我也可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。