it-swarm.com.de

Einfügen in eine MySQL-Tabelle oder Aktualisierung, falls vorhanden

Ich möchte einer Datenbanktabelle eine Zeile hinzufügen, aber wenn eine Zeile mit demselben eindeutigen Schlüssel existiert, möchte ich die Zeile aktualisieren.

Zum Beispiel,

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

Angenommen, der eindeutige Schlüssel ist id, und in meiner Datenbank gibt es eine Zeile mit id = 1. In diesem Fall möchte ich diese Zeile mit diesen Werten aktualisieren. Normalerweise gibt dies einen Fehler. Wenn ich insert IGNORE verwende, wird der Fehler ignoriert, aber es wird immer noch nicht aktualisiert.

737
Keshan

Verwenden Sie 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

Schauen Sie sich REPLACE an

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

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

Wenn Sie Batch-Insert verwenden, verwenden Sie folgende Syntax:

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

Probieren Sie es aus:

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

Hoffe das hilft.

24
Luis Reyes

Versuche dies:

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

Hinweis:
Wenn id der Primärschlüssel ist, werden nach dem ersten Einfügen mit id='1' Bei jedem Versuch, id='1' Einzufügen, Name und Alter aktualisiert und das vorherige Alter des Namens wird geändert.

18

Bei Verwendung von SQLite:

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

Vorausgesetzt, dass id der Primärschlüssel ist. Oder es fügt nur eine weitere Zeile ein. Siehe 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);

Alle diese Lösungen funktionieren in Bezug auf Ihre Frage.

Wenn Sie nähere Informationen zu dieser Erklärung wünschen besuchen Sie diesen Link

8
user2613580

Nur weil ich hier nach dieser Lösung gesucht habe, aber von einer anderen identisch strukturierten Tabelle (in meinem Fall testet die Datenbank die Datenbank in der Live-Datenbank):

INSERT  live-db.table1
SELECT  *
FROM    test-db.table1 t
ON DUPLICATE KEY UPDATE
        ColToUpdate1 = t.ColToUpdate1,
        ColToUpdate2 = t.ColToUpdate2,
        ...

Wie an anderer Stelle erwähnt, müssen nur die Spalten, die Sie aktualisieren möchten, nach ON DUPLICATE KEY UPDATE eingefügt werden.

Es ist nicht notwendig, die Spalten in der Variablen INSERT oder SELECT aufzulisten, obwohl ich damit einverstanden bin, dass dies wahrscheinlich eine bessere Praxis ist.

6
SteveCinq

Für den Fall, dass Sie ein altes Feld behalten möchten (Zum Beispiel: Name). Die Abfrage lautet:

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

In meinem Fall habe ich unten Abfragen erstellt, aber in der ersten Abfrage, ob id 1 bereits existiert und das Alter bereits vorhanden ist. Wenn Sie die erste Abfrage ohne age erstellen, wird der Wert von age nicht verwendet 

REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19

um das oben genannte Problem zu vermeiden, erstellen Sie eine Abfrage wie unten

INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19

möge es dir helfen ...

0
Renish Gotecha