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