開発では、我々は多くの場合、INTOステートメントREPLACE使用し、以下の内容は、私の小さなノートの過程です。
影響を受けた上の行の1数
1または1より大きい:影響を受けた行数が表示されますINTOステートメントREPLACE使用した後、すなわち2つの問題が、あります。
1.1影響を受けた行の数1
説明文のINTO REPLACEデータテーブルの元データを置き換えるものではありません、この時点での対応は、文のINSERT INTOステートメントREPLACE
1.2 1影響を受けた行の数よりも大きいです
図2は、一般的にINTOステートメントは、データテーブル内のデータの行を削除し、データの行を挿入することで、データテーブルに元のデータを置き換えるREPLACE記載されています。
2.インデックスのみ
REPLACEとINSERT操作は非常に似ています。唯一の例外は、PRIMARY用のテーブル内の古いレコードの場合は
、新しいレコードを挿入する前に、KEYまたはUNIQUEインデックスと同じ値を持つ新しいレコード、古いレコードが削除されます。
テーブルがない限りPRIMARY KEYまたはUNIQUEインデックスがあることに注意してください、そうでない場合は、使用REPLACE文は意味がありません。
同じINSERTステートメントと、インデックスが新しい行が他の行を複製するかどうかを決定するために使用されないからです。
通常、私たちは、主キーIDを設定し、idは、一般的にまたとない特性を持っているので、我々は典型的には、例えば、データテーブル内のデータを制限するために、一意のインデックスを使用します。私たちは、電話番号があり、我々は携帯電話が可能なデータを複製する必要はありません番号フィールドは、我々が持っている場合は、同じ電話番号情報が挿入されないように、一意のインデックスに設定されています。
3.例
まず、自動インクリメントの主キーと一意のインデックスを持つテーブルを作成します。
CREATE TABLE example
(
`id` int NOT NULL AUTO_INCREMENT ,
`name` varchar(255) NOT NULL ,
`gender` varchar(255) NOT NULL ,
`age` int NOT NULL ,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `test_index`(`name`,`gender`) USING BTREE
)
私たちは共同一意のインデックスとして名前とセックスします。
データの断片を挿入します。
INSERT INTO example (name,gender,age) values ("王大锤",0,18)
さて、テーブル内のデータが状況です
次に、我々は同じ名前と性別を挿入しようとするが、異なる年齢データ
INSERT INTO example (name,gender,age) values ("王大锤",0,19)
結果は文句を言うだろう
し、我々はINTOステートメントをREPLACE使用しよう
REPLACE INTO example (name,gender,age) values ("王大锤",0,19)
SQLステートメントが正常に実行され、あなたが影響を受けた行の数が2つので見ることができる
データと、テーブルを見て
疑問を持って、ここで、なぜ自動インクリメントidは私が答えることは大きな神の助けを持っていることを期待して、1から3に指示しますです。