温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

数据库SERIALIZABLE是什么

发布时间:2026-10-16 03:17:25 来源:亿速云 阅读:82 作者:小樊 栏目:数据库

在数据库中,SERIALIZABLE(可串行化) 是 事务隔离级别(Transaction Isolation Level) 中最严格的一级。


一、它是什么?

SERIALIZABLE 表示:

多个事务并发执行的结果,等价于 这些事务按某种顺序一个一个串行执行的结果。

也就是说,数据库会保证:

  • 不会出现脏读
  • 不会出现不可重复读
  • 不会出现幻读
  • 并发事务之间“好像互不影响”

二、SQL 标准中的隔离级别对比

隔离级别 脏读 不可重复读 幻读
READ UNCOMMITTED ❌ 可能 ❌ 可能 ❌ 可能
READ COMMITTED ✅ 防止 ❌ 可能 ❌ 可能
REPEATABLE READ ✅ 防止 ✅ 防止 ❌ 可能
SERIALIZABLE ✅ 防止 ✅ 防止 ✅ 防止

三、SERIALIZABLE 是怎么做到的?

常见实现方式包括:

  • 锁机制(Locking)
    • 读加共享锁,写加排他锁
    • 范围锁(防止幻读)
  • 多版本并发控制 + 冲突检测(如 Serializable Snapshot Isolation, SSI)
    • PostgreSQL 使用这种方式

四、示例说明

事务 A

BEGIN;
SELECT * FROM accounts WHERE id = 1;
-- 做一些判断
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;

事务 B(同时发生)

BEGIN;
SELECT * FROM accounts WHERE id = 1;
UPDATE accounts SET balance = balance + 50 WHERE id = 1;
COMMIT;

在 SERIALIZABLE 下:

  • 数据库会确保 A 和 B 不会交叉影响
  • 要么 A 先执行,要么 B 先执行
  • 如果检测到冲突,可能其中一个事务被回滚(如 PostgreSQL)

五、优缺点

✅ 优点

  • 数据一致性最强
  • 最适合对正确性要求极高的场景(金融、账务)

❌ 缺点

  • 并发性能差
  • 容易发生锁等待或事务回滚
  • 吞吐量低

六、适用场景

  • 银行转账
  • 库存扣减
  • 订单与支付强一致场景

七、不同数据库中的 SERIALIZABLE

  • MySQL(InnoDB):默认 REPEATABLE READ,可设为 SERIALIZABLE
  • PostgreSQL:真正支持 SSI(可串行化快照隔离)
  • Oracle:默认 READ COMMITTED,SERIALIZABLE 基于快照

如果你愿意,我也可以:

  • 用 例子讲幻读 vs SERIALIZABLE
  • 对比 MySQL / PostgreSQL 的实现差异
  • 讲 什么时候不该用 SERIALIZABLE

你想看哪一个?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手