在 MySQL(尤其是 5.5)中,我们似乎有两种不同的方法来设置事务隔离级别。我只是想知道我的想法是否正确
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
Run Code Online (Sandbox Code Playgroud)
完全一样
SET tx_isolation = 'REPEATABLE-READ'
Run Code Online (Sandbox Code Playgroud)
并且对于其他可能的隔离级别也是如此。
编辑 1
我不够精确。鉴于我的问题,@danihp 的回答是正确的。但其实我是想问
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
Run Code Online (Sandbox Code Playgroud)
相对
SET SESSION tx_isolation = 'REPEATABLE-READ'
Run Code Online (Sandbox Code Playgroud)
(注意SET SESSION代替SET)。
它们完全一样吗?
服务器系统变量:
您可以使用服务器系统变量SET tx_isolation = 'REPEATABLE-READ'设置默认隔离级别。“MySQL 服务器维护着许多指示其配置方式的系统变量”该变量设置默认事务级别。
当前交易:
您可以使用将当前事务的SET TRANSACTION ISOLATION LEVEL REPEATABLE READ隔离级别从默认级别更改为新级别。
注意:
“transaction_isolation在 MySQL 5.7.20 中添加为 的别名tx_isolation,现已弃用并在 MySQL 8.0 中删除。应用程序应调整为transaction_isolation优先使用tx_isolation。”
参考:
已编辑
您可以使用事务将多个语句“封装”为单个操作。当你启动一个事务时,就在这个时候,你可以改变这个新事务的隔离级别:
START TRANSACTION;
/** change isolation level here with SET TRANSACTION statement
to avoid default isolation level **/
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7499 次 |
| 最近记录: |