0

REPLACE INTO がどのように機能するかは、私にはよくわかりません。私が理解していることから、値のいずれかが古い行の値と一致する場合、行を削除して更新されたデータを挿入しますか?

たとえば、私はこのテーブルを持っています

+-------------+----------------+------+---------+
| name        | value          | city | address |
+-------------+----------------+------+---------+
| First book  | a value        | NY   | NULL    |
| second book | an other value | LA   | NULL    |
+-------------+----------------+------+---------+

今、私は2冊目の都市を変更して実行したい

REPLACE INTO book(name,value,city) VALUES ('second book','an other value','CA');

注: 名前と値は同じですが、mysql は新しい行を挿入しますか?

+-------------+----------------+------+---------+
| name        | value          | city | address |
+-------------+----------------+------+---------+
| First book  | a value        | NY   | NULL    |
| second book | an other value | LA   | NULL    |
| second book | an other value | CA   | NULL    |
+-------------+----------------+------+---------+
4

3 に答える 3

3

このリンクから読むことができるように:

上記の 2 つの SQL コマンドの結果は、単一のクエリ (REPLACE INTO を使用) を使用して取得できます。REPLACE ステートメントは、INSERT クエリと同じように機能します。唯一の違いは、重複レコードの処理方法です。テーブルに一意のインデックスが存在し、以前に挿入されたキー値を持つレコードを挿入しようとすると、そのレコードが最初に削除され、新しいレコードが挿入されます。

これは、テーブルに一意のキーが存在し、このキーに存在する値を挿入しようとしている場合にのみ更新されることを意味します。その場合、更新、そうでない場合は挿入を行います

于 2012-08-27T01:32:17.373 に答える
1

MySQL は、 への行を識別する方法を知る必要がありますREPLACE。その方法は、単にデータを挿入すると違反する一意のキーを持つことです。

UNIQUE KEYあなたの例では、1つの解決策はonを置くことnameです。その後、REPLACE正しく動作します。

于 2012-08-27T01:32:01.937 に答える
0

を使用してみてください。ただし、 であるべきINSERT ON DUPLICATE KEY UPDATE制約があることを確認してください。nameunique key

INSERT INTO book (`name`, `value`, `city`)
VALUES ('second book', 'an other value', 'CA')
ON DUPLICATE KEY 
UPDATE `value` = 'an other value',
        `city` = 'CA'

リンク
INSERT ON DUPLICATE KEY UPDATE と REPLACE INTO のパフォーマンスの例を参照してください。

于 2012-08-27T01:32:15.377 に答える