7

脚本 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

4 回答 4

9

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

LOCK TABLES test1 WRITE;

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

希望能帮助到你...

于 2012-08-29T13:45:31.883 回答
6

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

关于read锁类型的信息:

  • 持有锁的会话可以读取表(但不能写入)。
  • 多个会话可以同时获取表的读取锁。
  • 其他会话无需显式获取 READ 锁即可读取该表。

如果你想停止其他任何事情,比如 reding 表,你需要使用write锁,如下所示:

$query_ = "lock tables test1 as test11 write";
于 2012-08-29T13:43:15.720 回答
2

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

于 2014-12-30T08:36:07.660 回答
1

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

于 2015-11-09T16:33:41.763 回答