将MySQL表锁定以进行读取

4

我想对一个特定的表进行读取锁定,但当我查询该表时

   mysql_query("LOCK TABLES unique_voucher READ");

将数据写入数据库后,我只能读取该表而不能读取其他表。

是否可能仅锁定此特定表,并且不允许用户查询此表,直到某个进程完成?

(这是因为我正在进行计数,如果很多用户同时连接,他们可能会得到模糊的数字,因此在一个用户准备好一个进程之前,我想锁定对表的读取)


你最终找到了如何做这个吗? - Fabien Warniez
1个回答

0

如果您为所有用户共享相同的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

我无法锁定其他正在广泛使用的表格。我只想锁定特定的表格。 - BoqBoq
@MRR:您所说的“广泛规模”是什么意思? - J.C. Inacio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接