データベーステーブルに行を追加したいのですが、同じ一意のキーを持つ行が存在する場合は、その行を更新します。
例えば、
insert into table (id, name, age) values(1, "A", 19)
一意のキーがid
であり、私のデータベースにはid = 1
の行があるとしましょう。その場合は、その行をこれらの値で更新します。通常これはエラーになります。 insert IGNORE
を使用してもエラーは無視されますが、それでも更新されません。
INSERT ... ON DUPLICATE KEY UPDATE
を使用
QUERY:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
REPLACEをチェックしてください
http://dev.mysql.com/doc/refman/5.0/en/replace.html
REPLACE into table (id, name, age) values(1, "A", 19)
一括挿入を使用する場合は、次の構文を使用してください。
INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
...
これを試してみてください。
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;
お役に立てれば。
これを試して:
INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'
注意:
ここでidが主キーの場合、最初にid='1'
を挿入した後、id='1'
を挿入するたびに名前と年齢が更新され、前の名前の年齢が変わります。
SQLiteを使用する場合:
REPLACE into table (id, name, age) values(1, "A", 19)
id
が主キーであるとします。それ以外の場合は、単に別の行を挿入します。_ insert _(SQLite)を参照してください。
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);
INSERT INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE NAME = "A", AGE = 19;
REPLACE INTO table (id, name, age) VALUES(1, "A", 19);
これらすべての解決策はあなたの質問に関してうまくいくでしょう。
あなたがこれらのステートメントに関する詳細で知りたいのなら このリンクにアクセスしてください
私がここでこの解決策を探していたのだが、他の同一構造のテーブルから更新するためのものであったという理由だけで(私の場合はWebサイトテストDBからライブDBへ)
INSERT live-db.table1
SELECT *
FROM test-db.table1 t
ON DUPLICATE KEY UPDATE
ColToUpdate1 = t.ColToUpdate1,
ColToUpdate2 = t.ColToUpdate2,
...
他の場所で述べたように、更新したい列だけがON DUPLICATE KEY UPDATE
の後に含まれる必要があります。
INSERT
やSELECT
に列をリストする必要はありません、おそらく私はそれがより良い習慣であることに同意します。
場合に、古いフィールドを保持する(例:名前)。クエリは次のようになります。
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name=name, age=19;
私の場合、クエリの下に作成したのですが、最初のクエリでid
1が既に存在し、年齢がすでに存在している場合は、その後age
なしで最初のクエリを作成するとage
の値はnoneになります。
REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19
上記の問題を回避するため
INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19
それはあなたを助けるかもしれません...