sqliteのREPLACE

https://www.sqlite.org/lang_conflict.html

・REPLACEとINSERT OR REPLACEは同じ
ここでいうORは制約エラーが発生した場合でUNIQUEやPRIMARY_KEYもしくはNOT NULL制約
UNIQUEやPRIMARY KEYの時はその行を削除してからINSERTが行われる。
NOT NULLの時はデフォルト値で置き換えられる。

とのことなのでREPLACEが使えるのはコラムを全部指定したときで一部しか指定しないと
他のコラムが消えるかデフォルト値で置き換えられるのだろう。

一部しか指定しないと他のコラムが消えてしまう。

こう書けばOKだが、コラムが増えたとき対応できない。
やる方法もあるのかも知れないが返って複雑になりそうだから素直にUPDATEとINSERTに分けたほうがいいのか

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)