我想对一个特定的表进行读取锁定,但当我查询该表时
mysql_query("LOCK TABLES unique_voucher READ");
将数据写入数据库后,我只能读取该表而不能读取其他表。
是否可能仅锁定此特定表,并且不允许用户查询此表,直到某个进程完成?
(这是因为我正在进行计数,如果很多用户同时连接,他们可能会得到模糊的数字,因此在一个用户准备好一个进程之前,我想锁定对表的读取)
如果您为所有用户共享相同的DB连接,则一种可能的解决方案是锁定除您想要的表之外的所有其他表。被锁定的表将可用。
来自http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html:
“需要锁定的会话必须在单个LOCK TABLES语句中获取其所需的所有锁定。在持有这些锁定的同时,会话只能访问已锁定的表。例如,在以下语句序列中,尝试访问t2时会出现错误,因为它没有在LOCK TABLES语句中锁定:”
mysql> LOCK TABLES t1 READ;
mysql> SELECT COUNT(*) FROM t1;
+----------+
| COUNT(*) |
+----------+
| 3 |
+----------+
mysql> SELECT COUNT(*) FROM t2;
ERROR 1100 (HY000): Table 't2' was not locked with LOCK TABLES