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.
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
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)
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),
...
Probieren Sie es aus:
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;
Hoffe das hilft.
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.
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).
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
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.
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;
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 ...