次のSQLチュートリアルを実行しています: http://sql.learncodethehardway.org/book/ex11.html
この演習では、著者は2番目の段落で次のように述べています。
この状況では、レコードを別の男に置き換えますが、一意のIDを保持します。問題は、トランザクションでDELETE/INSERTを実行してアトミックにするか、完全なUPDATEを実行する必要があることです。
誰かが私にUPDATEを行うことの問題を説明できますか?whenUPDATEの代わりにREPLACEを選択するかもしれませんか?
更新コード:
UPDATE person SET first_name = "Frank", last_name = "Smith", age = 100
WHERE id = 0;
REPLACEコードは次のとおりです。
REPLACE INTO person (id, first_name, last_name, age)
VALUES (0, 'Frank', 'Smith', 100);
編集:私が持っている別の質問は、引用されたセクションで説明されているように、なぜUPDATEだけでなくDELETE/INSERTを行うのでしょうか?
ドキュメント によると、違いは次のとおりです。
REPLACEはINSERTとまったく同じように機能しますが、テーブル内の古い行がPRIMARY KEYまたはUNIQUEインデックスの新しい行と同じ値を持つ場合、新しい行が挿入される前に古い行が削除されます。
それが何をするのか:
これを使用すると、別々のinsert
およびupdate
ステートメントで役立つ場合がありますか?
inserting
/updating
のときに関連データを削除する場合は、replace
を使用できます。関連データもすべて削除されます)。insert
(悪い理由、大丈夫)を期待する場合。First Replaceは、すべてのデータベースエンジンで広く理解されているわけではありません。
次に、主キーに基づいてレコードを挿入/更新します。更新では、より複雑な条件を指定できます:
UPDATE person SET first_name = 'old ' + first_name WHERE age > 50
また、UPDATEはレコードを作成しません。
更新は、特定の条件に基づいてテーブル内の既存のレコード値を変更します。したがって、1つのクエリで1つまたは複数のレコードを変更できます。
レコードがテーブルに存在しない場合、InsertまたはReplaceは新しいレコードを挿入し、それ以外の場合は置換します。 置換クエリは、挿入または置換クエリで主キー値を指定した場合にのみ機能します。主キーフィールド値を追加することを忘れると、テーブルに新しいレコードが作成されます。
事例:-
更新:列の値を使用する式に基づいて行われる賃金の計算があります。この場合、単一のクエリを使用して複数のレコードを更新できるため、常に更新クエリを使用します。
挿入または置換:共有したリンクで既に言及されています。
行が存在しない場合、UPDATE
は効果がありません。
行が存在しない場合はINSERT
またはREPLACE
が挿入するか、存在する場合は値を置き換えます。