0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

無いときはINSERT・在る時はUPDATEするSQL

Last updated at Posted at 2022-06-01

世間ではUPSERTというらしい

そもそもUPSERTを知らなかった。
長いことOracleのSQL書いてたけど、いつのまにそんな便利なものができていたのか。
あ、でも、MERGEなら使ったことあるかも。UPSERTはMERGEのエイリアスらしい。
OracleとMySQLで記法が違うみたいなので、差がわかるように書いておく。

ChatGPT による説明

Oracle の Merge と MySQL の ON DUPLICATE KEY UPDATE とは

OracleのMergeとMySQLのON DUPLICATE KEY UPDATEは、両方ともUPSERT(UPDATEまたはINSERT)と呼ばれる操作を実行するためのSQL文法であり、データベースのテーブルにレコードを挿入する際に、既存のレコードを更新するか新しいレコードを挿入するかを判断することができます。

共通点と相違点

共通点

  1. 両方の操作は、テーブル内の重複する行を特定するために、一意制約(unique constraint)やプライマリキー(primary key)の使用が必要です。

  2. 両方の操作は、データベースのパフォーマンスを向上させることができます。従来のUPDATEとINSERT文よりも効率的に、一意な識別子を使用してデータを更新することができます。

相違点

  1. OracleのMergeは、マッチングするレコードを更新するために、更新条件を指定することができます。MySQLのON DUPLICATE KEY UPDATEでは、重複するキーが見つかった場合に更新される列と値を指定することができます。

  2. OracleのMergeは、複数のテーブルからデータをマージすることもできます。MySQLのON DUPLICATE KEY UPDATEは、INSERTするテーブル内の既存のレコードを更新する場合に使用されます。
    OracleのMergeは、テーブル内の更新が必要なレコードのみを更新します。MySQLのON DUPLICATE KEY UPDATEは、重複するキーが存在する場合はすべての行が更新されます。

OracleでのUPSERT(MERGE)

例えばこんな感じ。
キーが一致する時はMATCHED句(UPDATE)、そうでもないときはNOT MATCHED句(INSERT)が動く。

MERGE INTO table1
USING table2 
ON (table1.id = table2.tab1_id)
WHEN MATCHED THEN
	UPDATE SET 
        col1 = table2.col1,
        col2 = table2.col2
WHEN NOT MATCHED THEN
	INSERT (col1, col2)
	VALUES (table2.col1, table2.col2) ;

参考:
https://www.shift-the-oracle.com/sql/merge.html

MySQLでのUPSERT(ON DUPLICATE KEY UPDATE)

キーが一致するかどうかで振る舞いが決まるのは、Oracleと同じ。
一致する時はINSERTとして動く、そうでもないときはON DUPLICATE KEY UPDATE句が動く。

INSERT INTO table1(col1, col2) 
    SELECT col1, col2 FROM table2
    ON DUPLICATE KEY UPDATE 
      col1=table2.col1,
      col2=table2.col2;

参考:
https://dev.mysql.com/doc/refman/5.6/ja/insert-on-duplicate.html


プログラムで条件分岐しなくていいって、楽ねー。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?