LOCK TABLES クエリで MySQL エラーが発生しているかどうかを確認します。
$q = 'LOCK TABLES table1 WRITE';
$r = mysql_query($q) or die(mysql_error());
ただし、これだけの場合は、単純に次のように書くこともできます。
UPDATE `table1 SET `is_delete` = 1 WHERE `is_delete` = 0 LIMIT 1
ロックをまったく必要としません。is_delete
もちろん、これは、最初のクエリのデータがまったく処理されていない場合にのみ機能し、更新する行が0 に設定されている限り、どの行を更新するかは問題ではありません。これはあなたが投稿したコードも何をしますが、このコードを何に使用したいかはすぐにはわかりません:)
より一般的には、MySQL テーブルにデフォルトの InnoDB ストレージ エンジンを使用している場合は、SELECT ... FOR UPDATE を調べてください:
http://dev.mysql.com/doc/refman/5.0/en/innodb- Locking-reads.html
あなたは書くことができます:
$q = 'select id from table1 where is_delete = 0 limit 1 for update';
$res = mysql_fetch_assoc(mysql_query($q));
if($res) {
$q = 'UPDATE table1 SET is_delete = 1 WHERE id = '".$res['id']."'';
mysql_query($q);
}
参照: http://www.mysqlperformanceblog.com/2006/08/06/select-lock-in-share-mode-and-for-update/