温馨提示×

温馨提示×

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

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

怎样开启SERIALIZABLE可串行化

发布时间:2026-11-05 14:08:08 来源:亿速云 阅读:90 作者:小樊 栏目:数据库

“开启 SERIALIZABLE(可串行化)”通常指把数据库事务隔离级别设置为 SERIALIZABLE。不同数据库设置方式不同,下面按常见数据库说明。


一、MySQL(InnoDB)

1️⃣ 会话级(只对当前连接生效)

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;

2️⃣ 全局级(所有新连接生效)

SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;

3️⃣ 查看当前隔离级别

SELECT @@transaction_isolation;
-- 或(老版本)
SELECT @@tx_isolation;

4️⃣ 使用示例

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
SELECT * FROM account WHERE id = 1;
-- 其他事务修改会被阻塞
COMMIT;

二、PostgreSQL

1️⃣ 会话级

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

或

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;

2️⃣ 事务级(推荐)

BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 业务逻辑
COMMIT;

3️⃣ 查看

SHOW TRANSACTION ISOLATION LEVEL;

⚠️ PostgreSQL 的 SERIALIZABLE 是 真正的可串行化(SSI),可能抛出序列化失败错误,需要重试事务。


三、Oracle

Oracle 默认就是 READ COMMITTED,可改为:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

⚠️ 必须在事务开始前设置:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT ...
COMMIT;

四、SQL Server

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- 操作
COMMIT;

查看:

DBCC USEROPTIONS;

五、Java(JDBC)示例

connection.setTransactionIsolation(
    Connection.TRANSACTION_SERIALIZABLE
);
connection.setAutoCommit(false);

六、注意事项(很重要)

  • SERIALIZABLE 性能最低(锁最多或冲突重试最多)
  • 常用于:
    • 强一致性要求
    • 金额、库存、对账
  • 不适合高并发写场景
  • PostgreSQL 要处理序列化异常并重试

如果你能告诉我:

  • 用的是哪种数据库
  • 是代码里、命令行、还是配置文件里开启

我可以给你最精确的写法。

向AI问一下细节

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

AI
助
手