用php锁定mysql表

时间:2012-08-29 13:38:43

标签: php mysql locking

脚本1。

$query_ = "lock tables test1 as test11 write";
mysql_query($query);
$query_ = "select * from test11";
sleep(20);
$query_ = "unlock tables";
mysql_query($query_);

脚本2。

$query_ = "select * from test1";
$result = mysql_query($query_);

问题是如果我在运行第一个脚本时运行第二个脚本。表未锁定。我可以从中读取任何数据。

我需要将其锁定并返回错误。

如何使这项工作?

4 个答案:

答案 0 :(得分:8)

如果您不希望其他人访问该表,请使用

LOCK TABLES test1 WRITE;

其他脚本不会返回错误,但会等到锁定被释放。

希望它有所帮助...

答案 1 :(得分:6)

read锁定了$query_ = "lock tables test1 as test11 read";表 - 这意味着其他查询仍然可以毫无问题地阅读它(相关link - 向下滚动到该部分关于锁类型):

read锁定类型的信息:

  • 持有锁的会话可以读取表(但不能写入)。
  • 多个会话可以同时为表获取READ锁。
  • 其他会话可以在不明确获取READ锁的情况下读取该表。

如果你想停止任何其他,那么你需要使用write锁,如下所示:

$query_ = "lock tables test1 as test11 write";

答案 2 :(得分:2)

您必须将锁定表的权限授予db用户。

答案 3 :(得分:1)

你对锁做什么有误解。锁定不会阻止其他脚本访问数据,而是锁定会影响其他脚本何时访问数据的时间。当脚本2尝试访问或修改由于锁定而不允许的数据时,它将暂停并等待锁定被释放。在脚本1解锁表之后,脚本2将继续并完成而没有任何问题。