0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

しごできスーパーマンが書いた”upsert”の意味

Posted at

Mapper.upsertってなんだろう...

既存のソースコードの修正作業を行っていた際、DBの更新処理中に、"upsert"と定義されたMapperクラスのメソッドがありました。なんだろう?と思って中身を見てみると...

完全に初心者の備忘録です。温かい目で見守ってださい!

INSERT + UPDATE = ON DUPLICATE KEY UPDATE!!

その中身は、ON DUPLICATE KEY UPDATEでした!
このステートメントは、INSERTで指定した値のPRIMARY KEY、もしくはUNIQUEインデックスがすでにテーブルに存在している場合、そのレコードに対してUPDATEを実行することができる構文です。

SELECT(レコードが存在するか)
INSERT(存在しない場合新規登録)
UPDATE(存在する場合は値を更新)

上記のクエリを一気に実行してくれる、ということになります。なんてありがたい。

 INSERT INTO tableA (
            NAME,
            AGE,
            ID,
            ADRESS
        ) VALUES (
            #{name},
            #{age},
            #{id},
            #{adress}
        )
        ON DUPLICATE KEY UPDATE
            NAME = #{name},
            AGE = #{age}...

注意点

このステートメントを使用する際は、「対象のテーブルにユニーク制約またはプライマリキーが設定されている」ことを確認する必要があり、これがないと重複が正しく検出されないそうです。

まとめ

ステートメントが便利なことは大前提として、"upsert"というネーミングに、感動してしまいました(笑)。私もこんなふうにスマートなネーミングができるようになりたい!

0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?