挿入クエリで、特定の列に特定の値があるかどうかを確認してから、行を更新するにはどうすればよいですか。それ以外の場合は、新しい行を挿入する必要があります。
このようなものが私が欲しいものです:
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) UPDATE IF col3 = $number
挿入クエリで、特定の列に特定の値があるかどうかを確認してから、行を更新するにはどうすればよいですか。それ以外の場合は、新しい行を挿入する必要があります。
このようなものが私が欲しいものです:
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) UPDATE IF col3 = $number
UNIQUE
あなたの上にキーを作成しますcol3
:
ALTER TABLE `table` ADD UNIQUE KEY (col3)
次に、以下を使用しますINSERT ... ON DUPLICATE KEY UPDATE
。
INSERT INTO `table` (col1, col2, col3) VALUES (val1, val2, val3)
ON DUPLICATE KEY UPDATE col1 = VALUES(col1), col2 = VALUES(col2)
REPLACE INTO
コマンド(MySQL docu )を見てください。
REPLACE INTO table (col1, col2, col3) VALUES (val1, val2, val3);
主キーと一意のインデックスをチェックし、一致するエントリがすでに存在する場合、その行は新しい行に置き換えられます。それ以外の場合は、新しい行が挿入されます。
編集
@eggyalがこれに言及したように、行が置き換えられた場合の動作は、実際には古い行の削除とその後の新しい行の挿入です。これは、トリガーや外部キーなどを使用している場合に、いくつかの問題を引き起こす可能性があります。
実際には、一部の列の内容も失う可能性があります。col1
3つの列( to col3
)を持つテーブルがありREPLACE
、そのうちの2つ(col1
、col2
)を設定するだけで、3番目の列col3
は指定されたデフォルト値を受け取り、古い値を保持しないとします。
その列に一意のインデックスがある場合は、これを使用します
INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)
ON DUPLICATE KEY UPDATE col3 = $number