揮発性のメモ2

http://d.hatena.ne.jp/iww/

REPLACE INTO の挙動

REPLACE INTO は基本的に削除して追加する。
UPDATEではないので、書いていない項目は全て初期値になる。
しかし、ユニークキーが2つ以上あるときはおかしな挙動になる。


主キーは大体AUTO_INCREMENTなので、その前提で検証する。

id ukey data1 data2
1 A aaa 111
2 B bbb 222

idを主キー、ukeyをユニークキーとして、これにどんどん足してく

主キーがユニーク(または無し)でユニークキーもユニークなとき

平和に追加される
例:REPLACE INTO hoge SET ukey='C',data1='ccc',data2='333'

id ukey data1 data2
1 A aaa 111
2 B bbb 222
3 C ccc 333

3が追加される

主キーがユニーク(または無し)でユニークキーがダブるとき

ユニークキーで削除してから追加する
例:REPLACE INTO hoge SET ukey='A',data1='AAA'

id ukey data1 data2
2 B bbb 222
3 C ccc 333
4 A AAA

1が消され、4が追加される

主キーがダブっててユニークキーがユニークなとき

主キーを元に更新する
例:REPLACE INTO hoge SET id=2,ukey='D',data1='DDD'

id ukey data1 data2
2 D DDD
3 C ccc 333
4 A AAA

2が削除され、新たに2が追加される

主キーがダブっててユニークキーもダブるとき

ユニークキーがダブってるのを削除した上で主キーを元に更新する
例:REPLACE INTO hoge SET id=3,ukey='D',data1='ddd'

id ukey data1 data2
2 D ddd 333
4 A AAA

3が消され、2が更新される