在这个脚本中,我有:
$db = new PDO('mysql:host=localhost; dbname=name; charset=utf8', 'user', 'pass');
$db -> exec('LOCK TABLES `table1`, `table2` WRITE');
// Do some stuff here
$db -> exec('UNLOCK TABLES');
问题是这些表似乎没有被锁定。脚本的多个实例同时执行。这
// Do something here
代码仍然无法像 LOCK TABLES 语句所期望的那样以原子方式执行操作。
我究竟做错了什么?
我还注意到,虽然我没有明确锁定我使用的其他表(例如table3
),但我仍然可以读/写它们。根据 mySQL 手册,这应该是不可能的。
编辑:
该// Do some stuff here
代码实例化了一些执行 DB 工作但共享相同$db
PDO 连接的类。
据我了解,这不应该是问题的原因,正是因为它们共享相同的连接。锁定表语句应该由它们“继承”。