ブログBlog

INSERTとUPDATE

投稿日:2016年02月08日

2016年02月08日 『insertとupdate』

ヌノです。

たまには真面目な話でも・・・

MySQLでデータベースに読み書きする時、SELECT、INSERT、UPDATE、DELETE等、SQL文を使い分けます。

データベースへ登録する時はINSERT、データを更新する時はUPDATEを使い分けるのですが、primary key(主キー)が重複した値をINSERTするとSQLエラーになります。
なので、エラーを出さないように注意が必要ですが、ON DUPLICATE KEY UPDATE 構文を使うことで、一つのSQL文で共通化する事ができます。

簡単に説明すると「INSERT文を実行し、primary keyが重複している場合はUPDATE文を実行」します。

つまり、データがあれば更新し、なければ新規登録する事ができます。

書き方は

INSERT INTO
テーブル (カラムA, カラムB, カラムC)
VALUES
(値1, 値2, 値3)
ON DUPLICATE KEY UPDATE
カラムC = 値3;

(カラムAがprimary keyとします)

カラムAに値1が登録されていない場合
カラムAに値1、カラムBに値2、カラムCに値3のレコードを登録(INSERT)する。

カラムAに値1が登録されている場合
カラムAのレコードのカラムCを値3で更新(UPDATE)する

この時注意なのが、カラムBがNOT NULLの場合。

更新するのはカラムCだけなので、値1と値3だけ入れて、値2をNULLにすると、SQLエラーになります。

例え重複していてUPDATE文の処理が行われる場合でも、先にINSERT文の処理時にNOT NULLのカラムBにNULLが入るからです。

使うときは注意しましょう。

PAGE TOP