锁定READ MYSQL的表

时间:2011-06-09 13:00:45

标签: php mysql

我想锁定一个特定的表进行阅读,但是当我查询时

   mysql_query("LOCK TABLES unique_voucher READ");

进入数据库,它允许我只读这个表而不读其他表。

是否可以仅锁定此特定表,并且在某些过程完成之前不允许用户查询此表?

(这是因为我拿着一个计数器,如果有很多用户同时连接它们会得到不明确的数字,所以直到一个用户准备好一次进程我想锁定一个表的读数)

1 个答案:

答案 0 :(得分:0)

如果为所有用户共享相同的数据库连接,一种可能的解决方案是锁定除所需的所有其他表。锁定的表格将可用。

来自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