在不同的数据库产品中,SERIALIZABLE(可串行化)隔离级别的设置方式有所不同。下面按常见数据库分别说明。
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
-- 业务SQL
COMMIT;
SELECT @@transaction_isolation;
⚠️ MySQL 的 SERIALIZABLE 实质是通过 Next-Key Lock(间隙锁) 实现,并发性能较低。
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN ISOLATION LEVEL SERIALIZABLE;
-- 业务SQL
COMMIT;
default_transaction_isolation = 'serializable'
修改后需重启或 reload:
pg_ctl reload
SHOW transaction_isolation;
✅ PostgreSQL 使用 SSI(Serializable Snapshot Isolation),能真正检测串行化冲突。
Oracle 默认就是 SERIALIZABLE 级别附近(实际为 Read Committed),但可显式设置:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
或:
ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRAN
-- SQL
COMMIT
查看:
DBCC USEROPTIONS;
如果你能告诉我 具体使用的数据库类型和版本,我可以给你更精确、可落地的配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。