以前にSQLで使用されていたINSERT OR REPLACE INTO names (id, name) VALUES (1, "John")
という構文を見たことがありません。なぜUPDATE names SET name = "John" WHERE id = 1
。一方を他方よりも使用する正当な理由はありますか。この構文はSQLiteに固有ですか?
行が存在しない場合、UPDATEは何もしません。
INSERT OR REPLACEは行が存在しない場合は挿入し、存在する場合は値を置換します。
私は現在、そのようなステートメントに取り組んでおり、注意すべき別の事実を見つけました:INSERT OR REPLACEはステートメントで指定されていない値を置き換えます。たとえば、テーブルに「lastname」列が含まれている場合値を指定しなかった場合、INSERT OR REPLACEは、可能であれば「ラストネーム」を無効にします(制約により許可されます)、または失敗します。
REPLACE INTO table(column_list) VALUES(value_list);
の短い形式です
INSERT OR REPLACE INTO table(column_list) VALUES(value_list);
REPLACEを正しく実行するには、単純な主キーまたは一意のインデックスに関係なく、テーブル構造に一意の行が必要です。
REPLACEは、レコードを削除してからINSERTし、セットアップがある場合はINSERTトリガーを実行します。 INSERTのトリガーがある場合、問題が発生する可能性があります。
これは回避策です。速度をチェックしません。
INSERT OR IGNORE INTO table (column_list) VALUES(value_list);
に続く
UPDATE table SET field=value,field2=value WHERE uniqueid='uniquevalue'
このメソッドを使用すると、トリガーを発生させずに置換を実行できます。
Id = 1が存在しない場合、挿入または置換クエリは新しいレコードを挿入します。
更新クエリは、存在する場合はid = 1のみを出力し、存在しない場合は新しいレコードを作成しません。