0

現在、MySQL データベースで次の SQL ステートメントを実行しています。

INSERT INTO `Table` (`Col1`, `Col2`, `Col3`) VALUES ('a','b','c')
ON DUPLICATE KEY UPDATE `Col1`=`Col1`, `Col2`=`Col2`, `Col3`=`Col3`

ただし、実行するたびに、次のエラーが発生します#1205 - Lock wait timeout exceeded; try restarting transaction。正確に何が間違っていたのか分からないので、それはかなり恐ろしいことです。私の意図は、既存の行のすべての値を更新することです(idテーブルの主キーである を除く)。

何かアイデアがありましたら、お知らせください。

編集:詳細情報... これidは自動インクリメント フィールドです。別の列もありUNIQUEます (それを と呼びましょうIdentityNo。したがって、ステートメントで実行したいのは、1. に競合がない場合は挿入しIdentityNo2. 競合がある場合は既存の行を更新します(を変更せずに)。 id)。

4

1 に答える 1

0

上記のステートメントの挿入セクションの列の値を参照する場合は、values(column_name)を使用する必要があります。あなたは次のようなものを使用する必要があります INSERT INTO Table (Col1, Col2, Col3) VALUES ('a','b','c') ON DUPLICATE KEY UPDATE Col1=values(Col1), Col2=values(Col2), Col3=values(Col3)

于 2012-08-29T20:28:57.207 に答える