INSERT INTO … ON DUPLICATE KEY UPDATE このように機能します:
- 通常どおり行を挿入しようとします
- いずれかの列で制約違反が発生すると、
UPDATEが実行されます。 代わりに、INSERTが使用する既存の行のステートメント ステートメントが衝突しました
これは単に、UPDATE ステートメントだけで成功し、そのON DUPLICATE KEY UPDATE 同等のものも動作します。つまり、明らかにUPDATEの制約に違反することはできません。 ステートメントのいずれか、またはすべてが失敗します(たとえば、UNIQUEに値を設定しようとしています 別の行にすでに存在する列)。
同じ列に同じ値を再度設定した場合、それは基本的に何もしません。列の値は変更されないため、エラーが発生することもありません(本当にファンキーなBEFORE UPDATEがないと仮定します。 誤動作する可能性のあるトリガー)。ここでは列の数は関係ありません。1つのステートメントで必要な数だけ変更できます。