如果我有一個簡單的語句,這樣的一個InnoDB表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();
我用應該工作的代碼更新了問題。謝謝! –