ハックライフノート

技術的な話とか、覚え書き

[MySQL]レコードが無ければINSERT、あればUPDATE

誰だって一度は夢見るINSERT文とUPDATE文の両立・・・

まあ、方法は色々とあるんですが、今回はON DUPULICATE KEY UPDATEを使ってスマートに実現しましょう。

こんな感じのクエリを書きます。

INSERT INTO table (column1, column2, column3)
VALUES (1, 2, 3)
ON DUPULICATE KEY UPDATE
column2 = 20, column3 = 30;

普通のINSERT文の後ろにON DUPULICATE KEY UPDATEを付けて、アップデート対象カラムと値を書くだけ。

ね、簡単でしょ?

ただし、レコードの有無の判定をする為、いずれかのカラムがプライマリキー(主キー)である必要があります。

上記の場合、例えばcolumn1がPKだとして1という値が無ければ
column1=1
column2=2
column3=3
なレコードがINSERTされます。

逆に、column1に既に1という値が存在すれば、そのレコードは
column2=20
column3=30
といった感じにUPDATEされます。

1クエリで同時にINSERTとUPDATEができるので、便利ですよ。