mySQL - 使用PHP的mysqli设置隔离级别

时间:2009-11-13 20:28:49

标签: php mysql transactions innodb isolation-level

如何使用mysqli在PHP中将事务的隔离级别设置为'SERIALIZABLE'?我到处寻找,但我找不到任何相关信息。

Here是对隔离级别的解释。

2 个答案:

答案 0 :(得分:8)

您可以在运行语句之前在查询中设置隔离级别。这假设您使用相同的会话执行所有操作:

$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");
...

您可能还希望事先关闭autocommit,因为它会改变serializable isolation works的方式。

答案 1 :(得分:0)

简短答案:

$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->query("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE");

长答案:除非使用 SESSION GLOBAL 修饰符,否则设置交易级别仅适用于下一个查询。

tldr;

根据带有InnoDB表的MySQL documentation

  

没有任何SESSION或GLOBAL关键字:

     

该语句仅适用于下一次执行的交易   在会话中。

     

后续事务将还原为使用指定的会话值   特征。

     

在交易中不允许使用该语句

请注意,设置GLOBAL标志将影响所有后续查询。现有会话不会受到影响。