在脚本运行期间正确锁定我的数据库

时间:2012-03-02 22:52:37

标签: php mysql innodb

我不知道任何锁定。我一直在查看一些MySQL文档,无法完全理解整个过程是如何进行的。我需要的是我脚本中的以下事件发生:

步骤1)表用户被锁定
步骤2)我的脚本从表用户中选择两行 步骤3)我的脚本对表用户进行更新
步骤4)表用户因脚本完成而解锁

我该怎么做呢?当另一个用户在表被锁定时运行同一个脚本时会发生什么?有没有办法让脚本知道何时继续(当表被解锁时?)。我已经研究了启动事务并选择更新,但文档非常不清楚。任何帮助表示赞赏。是的,桌子是innodb。

2 个答案:

答案 0 :(得分:0)

通过在更新调用中执行选择查询来消除第2步。然后MySQL负责其余部分。只有一个写入查询可以同时运行,其他写入查询将排在后面。

答案 1 :(得分:0)

我相信你所寻找的是InnoDB表可用的SELECT ... FOR UPDATE语法。这将仅锁定您要更新的记录。您需要将其包装在事务中。 http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

例如,运行您的查询:

START TRANSACTION
SELECT ... FOR UPDATE
UPDATE ...
COMMIT