web-dev-qa-db-ja.com

MySQLテーブルに挿入するか、存在する場合は更新します

データベーステーブルに行を追加したいのですが、同じ一意のキーを持つ行が存在する場合は、その行を更新します。

例えば、

insert into table (id, name, age) values(1, "A", 19)

一意のキーがidであり、私のデータベースにはid = 1の行があるとしましょう。その場合は、その行をこれらの値で更新します。通常これはエラーになります。 insert IGNOREを使用してもエラーは無視されますが、それでも更新されません。

737
Keshan

INSERT ... ON DUPLICATE KEY UPDATE を使用

QUERY:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name="A", age=19
1391
Donnie

REPLACEをチェックしてください

http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE into table (id, name, age) values(1, "A", 19)
211

一括挿入を使用する場合は、次の構文を使用してください。

INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
    name = VALUES (name),
    ...
32
Fabiano Souza

これを試してみてください。

INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;

お役に立てれば。

24
Luis Reyes

これを試して: 

INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21' 

注意:
ここでidが主キーの場合、最初にid='1'を挿入した後、id='1'を挿入するたびに名前と年齢が更新され、前の名前の年齢が変わります。

18

SQLiteを使用する場合:

REPLACE into table (id, name, age) values(1, "A", 19)

idが主キーであるとします。それ以外の場合は、単に別の行を挿入します。_ insert _(SQLite)を参照してください。

9
DawnSong
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);

これらすべての解決策はあなたの質問に関してうまくいくでしょう。

あなたがこれらのステートメントに関する詳細で知りたいのなら このリンクにアクセスしてください

8
user2613580

私がここでこの解決策を探していたのだが、他の同一構造のテーブルから更新するためのものであったという理由だけで(私の場合は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の後に含まれる必要があります。

INSERTSELECTに列をリストする必要はありません、おそらく私はそれがより良い習慣であることに同意します。

6
SteveCinq

場合に、古いフィールドを保持する(例:名前)。クエリは次のようになります。

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name=name, age=19;
0
Xman Classical

私の場合、クエリの下に作成したのですが、最初のクエリで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

それはあなたを助けるかもしれません...

0
Renish Gotecha