2012-08-30 134 views
-2

任何人都可以用2个php脚本测试mysql表锁。和mysql_query()。如何用php锁定mysql myisam表格

我试了一天,但我无法锁定桌子。

我想当一个php脚本使用mysql表时,所有其他脚本将无法访问它。

你能提供2个简单测试的PHP脚本。如果你能展示他们如何在网上工作,那将是完美的。

但它应该是这样的,当第一个脚本工作并锁定mysql表时,其他脚本应该等待轮到它。

就像一个队列一样,只有一个脚本可以同时访问myisam mysql表。但请在回答之前测试您的脚本,因为我尝试了很多建议,并且没有任何效果。

+1

如发现自己的所有下面的评论下的任何答案人给想帮你,你是非常傲慢。任何试图帮助像你这样的人只是在浪费他们的时间。 –

+0

我很高兴人们正在努力提供帮助。但是当我提出100次同样的问题,而人们仍然给出错误的答案时,我该如何反应?或者,如果我不明白的东西。尝试自己的建议。我根本无法得到它的工作。阅读文档。并尝试各种事情。它没有帮助。人们仍然在10个论坛上创建了10个问题。人们仍然给错误的建议。我怎么反应? –

回答

1

我不会建议明确锁定数据库表,如果它不是针对事务级别来管理复杂的数据库逻辑。查询仍将被发送出去,但由于锁定或其他交易由于在错误时间获取的锁定而变得死锁,则会导致查询失败。

因此,您喜欢在应用程序中使用任何外观。

编辑:

http://dev.mysql.com/doc/refman/5.1/en/lock-tables.html

MySQL的文档提供的锁是如何运作的详细解释。使用它的会话会获取锁,因此如果您希望会话无法访问某些表和别名,那么您希望锁定除希望拒绝会话访问的表之外的所有内容。

不知道你想测试什么锁作为例子。

 define("READ_LOCK", 0) 
     define("WRITE_LOCK",1) 
     function lock_on_to_tables ($Tables, $lockType=0) 
     { 
     $sql = "LOCK TABLES " 
     foreach ($Tables as $table) 
      $sql .= $table . " ,"; 
     $sql = substr($sql, 0, -1); // cut off last comma 
     $sql .= $lockType ? " WRITE" : " READ; 
     mysqli_query($sql); // or pdo or whatever is in use. 
     } 

解锁只是

mysqli_query("UNLOCK TABLES") ; 
+0

好了。没有脚本没有语言意义。我尝试了一切。如果你知道它自己尝试。如果它适用于每个人。 –

+0

好,再次读你的答案。你必须明白。我不是在试图找出这种方法是否好。我只是想了解它是如何工作的。它不会......除非有人能够展示它。因为我无法锁定。 –

+0

添加了基本的脚本布局,注意它获取会话的锁定,所以它不会锁定会话 – Ikstar

1

您不使用PHP锁定表。你用mysql查询来锁定。所以基本上你会用in mysql docs所描述的语法来进行查询,就是这样。例如:

mysqli_query("LOCK TABLES my_table READ"); 

和DROP mysql_赞成mysqli_PDO

+0

我看不到脚本。我看到空的话) –

+0

Rly?为什么我需要愚蠢的mysqli和缓慢的PDO,如果我有简单的任务?它将如何帮助。我尝试过PDO,它不会改变任何东西。我可以执行任何查询并不重要什么锁我 –

+0

也当你尝试再次发布的东西。首先阅读“READ”指令甚至不会为其他脚本锁定某些内容。它不允许仅为当前会话写入表。其他会话可以编写和阅读并完成一切。 –

1

有两种类型的锁。一个是@ WebnetMobile.com发布的。

另一个被称为咨询锁 - 你挂了一面旗子,每个人都被要求在被允许访问之前检查该旗子。它在你身上到处检查需要它的标志。但优点是你可以准确地调整锁定到你的需求。

另外,使用InnoDB,您可以锁定表的特定行,而不锁定整个表。

参见:http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

+0

谢谢你告诉我有多少种锁。但我的问题是脚本。如果你认为你知道如何去做。显示每个人。 +你给我链接到innodb锁定读取,我告诉我有MyISAM。你为什么认为所有脚本不能同时访问那一个标志?它可以做到。关于把行锁定好,但它只适用于innodb。所有mysql引擎中都存在表锁。但我没有看到让它工作的方法。如果你看到。测试它。 –