0

新しいプロジェクトで、更新の処理中にテーブルをロックする必要がありました。How to lock mysql tables in phphttp://dev.mysql.com/doc/refman/5.1/en/innodb-locking-reads.htmlなど、見つけることができるすべての提案とガイドに従いましたが、常に取得します同じエラー: #1064 - SQL 構文にエラーがあります。1 行目の 'LIMIT 0, 30' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

ライブ テーブルで発生する可能性のある悪魔を回避するために、テスト用に INNODB エンジンに新しいテーブルを作成し、一意のインデックスを追加し、いくつかの行を挿入し、次の構文を使用してクエリを実行しました。

SELECT svalue FROM `test` WHERE skey='key2' for update;

同じエラーが発生します。更新のために削除します。from クエリを使用すると、クエリをエラーなしで実行できます。

何が間違っているのかわからず、考えられることはすべて試しました。私が欠けているものを理解するのを手伝ってください!

ありがとう

4

2 に答える 2

0

ほとんどの場合、トランザクション (InnoDB タイプ) を使用している場合、MySQL はテーブルまたは行のロックを処理します。

//Doing transactions
mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");
$query = "SELECT svalue FROM `test` WHERE skey='key2'";

if($query)
{
  mysql_query("COMMIT");
}else{
  mysql_query("ROLLBACK");
}
于 2013-06-16T12:09:10.657 に答える
0

トランザクション外でのロックはほとんど意味がありません。これはおそらく構文エラーを説明しています。

ところで、列の値 (コメント) を増やしたいだけの場合は、直接更新してください。

update tbl set col = col + 1 where ...
于 2013-06-16T13:24:58.873 に答える