SET tx_isolation 与 SET TRANSACTION ISOLATION LEVEL

Bin*_*rus 5 mysql

在 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)。

它们完全一样吗?

dan*_*era 4

服务器系统变量:

您可以使用服务器系统变量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)