我想锁定一个特定的表进行阅读,但是当我查询时
mysql_query("LOCK TABLES unique_voucher READ");
进入数据库,它允许我只读这个表而不读其他表。
是否可以仅锁定此特定表,并且在某些过程完成之前不允许用户查询此表?
(这是因为我拿着一个计数器,如果有很多用户同时连接它们会得到不明确的数字,所以直到一个用户准备好一次进程我想锁定一个表的读数)
答案 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