脚本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_);
问题是如果我在运行第一个脚本时运行第二个脚本。表未锁定。我可以从中读取任何数据。
我需要将其锁定并返回错误。
如何使这项工作?
答案 0 :(得分:8)
如果您不希望其他人访问该表,请使用
LOCK TABLES test1 WRITE;
其他脚本不会返回错误,但会等到锁定被释放。
希望它有所帮助...
答案 1 :(得分:6)
您read
锁定了$query_ = "lock tables test1 as test11 read";
表 - 这意味着其他查询仍然可以毫无问题地阅读它(相关link - 向下滚动到该部分关于锁类型):
read
锁定类型的信息:
如果你想停止任何其他,那么你需要使用write
锁,如下所示:
$query_ = "lock tables test1 as test11 write";
答案 2 :(得分:2)
您必须将锁定表的权限授予db用户。
答案 3 :(得分:1)
你对锁做什么有误解。锁定不会阻止其他脚本访问数据,而是锁定会影响其他脚本何时访问数据的时间。当脚本2尝试访问或修改由于锁定而不允许的数据时,它将暂停并等待锁定被释放。在脚本1解锁表之后,脚本2将继续并完成而没有任何问题。