次の3つの列を含むMySQLテーブルがあるとします。 id、、aおよびbという名前の列idはAUTO INCREMENTフィールドです。次のようなクエリをMySQLに渡すと、正常に機能します。
REPLACE INTO `table` (`id`, `a`, `b`) VALUES (1, 'A', 'B')
しかし、フィールドをスキップするidと、機能しなくなります。これは予想どおりです。
クエリignoreの一部のフィールドにアクセスする方法があるかどうかを知りたいです。REPLACEしたがって、上記のクエリは次のようになります。
REPLACE INTO `table` (`a`, `b`) VALUES ('A', 'B')
なぜそんなものが必要なのですか?
SELECT行が存在するかどうかを確認するために、クエリを使用してデータベースをチェックする必要がある場合があります。存在する場合UPDATEは既存の行に移動する必要があり、存在しない場合INSERTは新しい行に移動する必要があります。REPLACE単一のクエリで同様の結果(ただし同じではない)を達成できるかどうか疑問に思っています。
なぜ同じ結果になれないのですか?既存の行と新しい行がREPLACE失われるため、現在の行が失われ、自動インクリメントされた値が増加します。対照的に、クエリでは、フィールドは変更されません。DELETEINSERTprimary keyUPDATEprimary keyAI
MySQLREPLACE 。_