【发布时间】:2017-04-20 21:17:59
【问题描述】:
如果我有一个针对 InnoDB 表的简单语句
UPDATE <table> SET locked=1, col2=<Val2> WHERE locked=0
真的有必要做 SELECT FOR UPDATE 吗?
由于 InnoDB 支持行级锁定,即使数千个客户端同时执行同一个脚本,是否有可能发生冲突?
更新:
这样的东西可以防止锁
$dbh = new PDO(DSN, DB_USER, DB_PASS);
$dbh->beginTransaction();
$selQuery = $dbh->prepare("SELECT <col> FROM <table> WHERE status=0 LIMIT 1 FOR UPDATE");
$selQuery->bindColumn(<col1>, $col1);
$selQuery->execute();
$selQuery->fetch(PDO::FETCH_BOUND);
$dbh->query("UPDATE <table> SET status=1 WHERE status=0 LIMIT 1");
$dbh->commit();
【问题讨论】: