2

在这个脚本中,我有:

$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 工作但共享相同$dbPDO 连接的类。

据我了解,这不应该是问题的原因,正是因为它们共享相同的连接。锁定表语句应该由它们“继承”。

4

1 回答 1

0

你的语法有点不对劲。WRITE在每个表名之后添加:

$db -> exec('LOCK TABLES `table1` WRITE, `table2` WRITE');
于 2013-10-15T12:19:43.797 回答