なかったらINSERTする
SELECTして行がなかったらINSERTする
SELECTして、行がなかったらINSERTする
pros
素朴
UNIQUE制約なくても使える
cons
ちゃんとロックを取らないと、UNIQUE制約違反になったり、重複したデータが挿入されたりする
utgwkk.icon これから挿入しようとする行に対するロックをSQLで取れるのだろうか、SELECT FOR UPDATEは既存の行をUPDATEする目的でロックをかけるのに使えるけど
ON DUPLICATE KEY UPDATEで更新を空振りさせる
code:sql
INSERT INTO tbl (a, b, created) VALUES (1, 2, NOW())
ON DUPLICATE KEY UPDATE created = created
ON DUPLICATE KEY UPDATEで無駄な更新をすることで、重複したら何もしない、というのを実現する
pros
アトミック
cons
UNIQUE制約がないと使えない
謎のUPDATEがあるね~みたいに見える