0

挿入クエリで、特定の列に特定の値があるかどうかを確認してから、行を更新するにはどうすればよいですか。それ以外の場合は、新しい行を挿入する必要があります。

このようなものが私が欲しいものです:

INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) UPDATE IF col3 = $number
4

3 に答える 3

2

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)
于 2012-07-16T10:00:40.473 に答える
2

REPLACE INTOコマンド(MySQL docu )を見てください。

REPLACE INTO table (col1, col2, col3) VALUES (val1, val2, val3);

主キーと一意のインデックスをチェックし、一致するエントリがすでに存在する場合、その行は新しい行に置き換えられます。それ以外の場合は、新しい行が挿入されます。

編集

@eggyalがこれに言及したように、行が置き換えられた場合の動作は、実際には古い行の削除とその後の新しい行の挿入です。これは、トリガーや外部キーなどを使用している場合に、いくつかの問題を引き起こす可能性があります。

実際には、一部の列の内容も失う可能性があります。col13つの列( to col3)を持つテーブルがありREPLACE、そのうちの2つ(col1col2)を設定するだけで、3番目の列col3は指定されたデフォルト値を受け取り、古い値を保持しないとします。

于 2012-07-16T10:00:52.267 に答える
1

その列に一意のインデックスがある場合は、これを使用します

INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3) 
ON DUPLICATE KEY UPDATE col3 = $number
于 2012-07-16T10:03:23.867 に答える