如何使用mysqli在PHP中将事务的隔离级别设置为'SERIALIZABLE'?我到处寻找,但我找不到任何相关信息。
Here是对隔离级别的解释。
答案 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
标志将影响所有后续查询。现有会话不会受到影响。