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

Asked
Viewd4528

4

如何使用mysqli在PHP中将事务的隔离级别设置为“ SERIALIZABLE”?我到处都是,却找不到任何信息。

此处是隔离级别的说明。

2 个答案

8

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

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

您可能还想先关闭自动提交,因为它会更改可串行化隔离的工作方式

  • https://dba.stackexchange.com/questions/175550/mysql-5-7-scope-of-set-transaction-isolation-level-for-select

    Kevin MesiabOctober 31, 2018 14:08
  • 是否有关于“您可能还需要先关闭自动提交功能,因为它改变了可序列化隔离的工作方式。”评论吗?

    Juha PalomäkiAugust 30, 2016 09:27
0

简短答案:

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

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

tldr;

根据带有InnoDB的MySQL 文档表格:

没有任何SESSION或GLOBAL关键字:

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

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

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

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