“开启 SERIALIZABLE(可串行化)”通常指把数据库事务隔离级别设置为 SERIALIZABLE。不同数据库设置方式不同,下面按常见数据库说明。
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT @@transaction_isolation;
-- 或(老版本)
SELECT @@tx_isolation;
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
SELECT * FROM account WHERE id = 1;
-- 其他事务修改会被阻塞
COMMIT;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
或
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- 业务逻辑
COMMIT;
SHOW TRANSACTION ISOLATION LEVEL;
⚠️ PostgreSQL 的 SERIALIZABLE 是 真正的可串行化(SSI),可能抛出序列化失败错误,需要重试事务。
Oracle 默认就是 READ COMMITTED,可改为:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
⚠️ 必须在事务开始前设置:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT ...
COMMIT;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
-- 操作
COMMIT;
查看:
DBCC USEROPTIONS;
connection.setTransactionIsolation(
Connection.TRANSACTION_SERIALIZABLE
);
connection.setAutoCommit(false);
如果你能告诉我:
我可以给你最精确的写法。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。