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が更新される