Gibt es eine einfache Möglichkeit, INSERT
eine Zeile zu verwenden, wenn sie nicht vorhanden ist, oder UPDATE
mithilfe einer MySQL-Abfrage , wenn sie vorhanden ist?
sql
mysql
insert-update
upsert
blub
quelle
quelle
MERGE
. Im Allgemeinen wird das Konzept oft als bezeichnet"UPSERT"
.geb
undtopic
dieser funktioniert (ALTER TABLE table ADD UNIQUE geb_by_topic (geb, topic)
).MERGE
aber ich bin nicht sicher, ob seine Syntax mit der von SQL Server identisch ist.NULL
, damit dasauto_increment
Verhalten funktioniert (was ansonsten ja so funktioniert, wie Sie es annehmen ; siehe dev.mysql.com/doc/refman/5.5/en/example-auto-increment). html ).VALUES(col)
, um den Wert aus dem Einfüge-Argument im Falle eines Duplikats zu erhalten. ZB:ON DUPLICATE UPDATE b = VALUES(b), c = VALUES(c)
Ich weiß, dass dies eine alte Frage ist, aber Google hat mich kürzlich hierher geführt, sodass ich mir vorstellen kann, dass auch andere hierher kommen.
@chaos ist richtig: Es gibt die
INSERT ... ON DUPLICATE KEY UPDATE
Syntax.Die ursprüngliche Frage wurde jedoch speziell zu MySQL gestellt, und in MySQL gibt es die
REPLACE INTO ...
Syntax. IMHO ist dieser Befehl einfacher und unkomplizierter für Upserts zu verwenden. Aus dem Handbuch:Beachten Sie, dass dies kein Standard-SQL ist. Ein Beispiel aus dem Handbuch:
Edit: Nur eine faire Warnung,
REPLACE INTO
die nicht so istUPDATE
. Wie im Handbuch angegeben, wirdREPLACE
die vorhandene Zeile gelöscht und eine neue eingefügt. (Beachten Sie die lustigen "2 betroffenen Zeilen" im obigen Beispiel.) Das heißt, es ersetzt die Werte aller Spalten eines vorhandenen Datensatzes (und aktualisiert nicht nur einige Spalten.) Das Verhalten von MySQLREPLACE INTO
ist dem von Sqlite sehr ähnlichINSERT OR REPLACE INTO
. In dieser Frage finden Sie einige Problemumgehungen, wenn Sie nur einige Spalten (und nicht alle Spalten) aktualisieren möchten, wenn der Datensatz bereits vorhanden ist.quelle