Php 如何同时从多个脚本更新同一mysql行?

Php 如何同时从多个脚本更新同一mysql行?,php,mysql,innodb,Php,Mysql,Innodb,我正在编写一些php脚本,我需要更新一个mysql行来跟踪一些进度。我读到我应该使用InnoDB,但是我找不到任何我能理解的完整的例子。一位朋友告诉我他使用以下php代码: mysql_query("SET AUTOCOMMIT=0;"); mysql_query("START TRANSACTION;"); mysql_query("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;"); // UPDATE QUERY HERE mysql_que

我正在编写一些php脚本,我需要更新一个mysql行来跟踪一些进度。我读到我应该使用InnoDB,但是我找不到任何我能理解的完整的例子。一位朋友告诉我他使用以下php代码:

mysql_query("SET AUTOCOMMIT=0;");
mysql_query("START TRANSACTION;");
mysql_query("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;");

// UPDATE QUERY HERE

mysql_query("COMMIT;");
mysql_query("UNLOCK TABLES;");      
mysql_query("SET AUTOCOMMIT=1;");
他告诉我,他尝试了其他方法,但过了一段时间后,除了代码以外的所有方法都使他的服务器超载


有人能告诉我这段代码是否能满足我的需要,或者是否有更好的方法来实现它吗?

数据库类型无关紧要。MySQL被设计为自动对异步请求排队,并按照它们到达的顺序执行它们。然而,这些请求甚至可能不是异步的,除非您同时运行许多请求。无论哪种方式,您都不应该对此有问题,除非您的脚本必须按特定顺序更新行。在这种情况下,您应该使用一个脚本,这样您可以更紧密地控制更新顺序。

您的意思是我甚至不需要使用我发布的代码,我可以从多个脚本中更新行,而不用担心他们是否会同时尝试这样做?(我只需要将列+1添加到行列中,这样就不需要顺序,但我确实需要读取列值)。这就是MySQL的美妙之处,大多数数据库系统都是如此。你不必担心死锁或比赛条件。如果你只是增加一个字段,你就不必担心。如果在100个不同的脚本中,你在相同(或几乎相同)的时间增加同一个字段,你可以确定字段的最终值将比它原来的值多100个(当然,在所有100条语句执行之后)。只需测试打开200个“线程”(php脚本)使用100x循环更新同一行而无需睡眠,我得到了20000作为行的最终值,看起来效果很好,我认为尝试更新同一行会出现错误,感谢您为我澄清。