Was ist los mit dieser Abfrage:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Es funktioniert ohne die WHERE
Klausel. Ich habe anscheinend mein SQL vergessen.
Die MySQL INSERT-Syntax unterstützt die WHERE-Klausel nicht, sodass Ihre aktuelle Abfrage fehlschlägt. Angenommen, Ihre id
Spalte ist eindeutig oder Primärschlüssel:
Wenn Sie versuchen, eine neue Zeile mit der ID 1 einzufügen, sollten Sie Folgendes verwenden:
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
Wenn Sie versuchen, die Werte für Gewicht / gewünschtes Gewicht für eine vorhandene Zeile mit der ID 1 zu ändern, sollten Sie Folgendes verwenden:
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
Wenn Sie möchten, können Sie auch die Syntax INSERT .. ON DUPLICATE KEY wie folgt verwenden:
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
ODER auch so:
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
Es ist auch wichtig zu beachten, dass wenn Ihre id
Spalte eine Autoincrement-Spalte ist, Sie sie genauso gut in Ihrem INSERT weglassen können und MySQL sie wie gewohnt inkrementieren lassen können.
If you're trying to insert a new row with ID 1 you should be using
INSERT INTO. In Ihrem Fall versuchen Sie einzufügen, wenn ID 1 bereits vorhanden ist und es sich um einen Primär- oder eindeutigen Schlüssel handelt und fehlschlägt. Verwenden Sie daher entweder die UPDATE-Syntax oder INSERT. ON DUPLICATE KEY-SyntaxSie können eine WHERE-Klausel nicht mit einer VALUES-Klausel kombinieren. Soweit mir bekannt ist, haben Sie zwei Möglichkeiten:
INSERT, das Werte angibt
INSERT mit einer SELECT-Anweisung
quelle
Sie verwenden die WHERE-Klausel für UPDATE-Abfragen. Wenn Sie EINFÜGEN, gehen Sie davon aus, dass die Zeile nicht vorhanden ist.
Die Erklärung des OP würde dann werden;
Wenn Sie in MySQL INSERT oder UPDATE möchten, können Sie die REPLACE-Abfrage mit einer WHERE-Klausel verwenden. Wenn das WHERE nicht existiert, wird es eingefügt, andernfalls wird es aktualisiert.BEARBEITEN
Ich denke, dass Bill Karwins Argument wichtig genug ist, um aus den Kommentaren herauszukommen und es sehr offensichtlich zu machen. Danke Bill, es ist zu lange her, seit ich mit MySQL gearbeitet habe. Ich erinnerte mich, dass ich Probleme mit REPLACE hatte, aber ich vergaß, was sie waren. Ich hätte es nachschlagen sollen.
So funktioniert REPLACE von MySQL nicht. Es wird ein DELETE ausgeführt (was ein No-Op sein kann, wenn die Zeile nicht vorhanden ist), gefolgt von einem INSERT. Denken Sie an die Konsequenzen vis. Trigger und Fremdschlüsselabhängigkeiten. Verwenden Sie stattdessen INSERT ... ON DUPLICATE KEY UPDATE.
quelle
Ich glaube nicht, dass die Einfügung eine WHERE-Klausel enthält.
quelle
Abfrage einfügen unterstützt nicht, wo Schlüsselwort *
Bedingungen gelten, weil Sie where-Bedingung für Unterauswahlanweisungen verwenden können. Sie können komplizierte Einfügungen mit Unterauswahl durchführen.
Beispielsweise:
Durch Platzieren eines "select" in der insert-Anweisung können Sie schnell mehrere Einfügungen durchführen.
Bei dieser Art der Einfügung möchten Sie möglicherweise die Anzahl der eingefügten Zeilen überprüfen. Sie können die Anzahl der Zeilen bestimmen, die eingefügt werden sollen, indem Sie die folgende SQL-Anweisung ausführen, bevor Sie die Einfügung ausführen.
Sie können sicherstellen, dass Sie keine doppelten Informationen einfügen, indem Sie die EXISTS-Bedingung verwenden.
Wenn Sie beispielsweise eine Tabelle mit dem Namen clients mit dem Primärschlüssel client_id hatten, können Sie die folgende Anweisung verwenden:
Diese Anweisung fügt mehrere Datensätze mit einer Unterauswahl ein.
Wenn Sie einen einzelnen Datensatz einfügen möchten, können Sie die folgende Anweisung verwenden:
Durch die Verwendung der dualen Tabelle können Sie Ihre Werte in eine select-Anweisung eingeben, obwohl die Werte derzeit nicht in einer Tabelle gespeichert sind.
Siehe auch Einfügen mit der where-Klausel
quelle
Die richtige Antwort auf diese Frage lautet wie folgt:
ein). WENN Sie vor dem Einfügen auswählen möchten:
b). Wenn der Datensatz bereits vorhanden ist, verwenden Sie update anstelle von insert:
Sollte sein
c). Wenn Sie gleichzeitig aktualisieren oder einfügen möchten
d). Wenn Sie einen Datensatz aus der gleichen Tabelle klonen möchten, denken Sie daran, dass Sie nicht aus der Tabelle auswählen können, in die Sie daher einfügen
Ich denke, das deckt die meisten Szenarien ziemlich ab
quelle
Sie können WHERE einfach nicht verwenden, wenn Sie eine INSERT-Anweisung ausführen:
sollte sein:
Der WHERE-Teil funktioniert nur in SELECT-Anweisungen:
oder in UPDATE-Anweisungen:
quelle
Einfügen in = Hinzufügen von Zeilen zu einer Tabelle
Upate = Aktualisiere bestimmte Zeilen.
Was würde die where-Klausel in Ihrer Beilage beschreiben? Es hat nichts zu passen, die Zeile existiert (noch) nicht ...
quelle
Sie können bedingte EINFÜGUNGEN basierend auf Benutzereingaben ausführen. Diese Abfrage wird nur eingefügt, wenn die Eingabevariablen '$ userWeight' und '$ userDesiredWeight' nicht leer sind
quelle
Dies hängt von der Situation ab, in der INSERT tatsächlich eine where-Klausel haben kann.
Zum Beispiel, wenn Sie Werte aus einem Formular abgleichen.
Macht Sinn, nicht wahr?
quelle
Am einfachsten ist es, IF zu verwenden, um eine Schlüsseleinschränkung zu verletzen. Dies funktioniert nur für INSERT IGNORE, ermöglicht Ihnen jedoch die Verwendung von Einschränkungen in einem INSERT.
quelle
Nach der
WHERE
Klausel setzen Sie eine Bedingung, die entweder zum Abrufen von Daten oder zum Aktualisieren einer Zeile verwendet wird. Beim Einfügen von Daten wird davon ausgegangen, dass die Zeile nicht vorhanden ist.Die Frage ist also, gibt es eine Zeile mit der ID 1? Wenn ja, verwenden Sie MySQL UPDATE , andernfalls MySQL INSERT .
quelle
Wenn Sie eine bestimmte Datensatznummer für das Einfügen von Daten angeben, ist es besser, die
UPDATE
Anweisung anstelle derINSERT
Anweisung zu verwenden.Diese Art von Abfrage, die Sie in die Frage geschrieben haben, ähnelt einer Dummy-Abfrage.
Ihre Anfrage lautet: -
Hier geben Sie die ID = 1 an. Verwenden Sie daher besser die
UPDATE
Anweisung, um den vorhandenen Datensatz zu aktualisieren. Es wird nicht empfohlen, dieWHERE
Klausel zu verwenden , wennINSERT
.You verwenden sollteUPDATE
.Jetzt Update-Abfrage verwenden: -
quelle
Die Antwort ist definitiv nein.
Das Hinzufügen einer WHERE-Klausel nach INSERT INTO ... VALUES ... ist nur ungültiges SQL und wird nicht analysiert.
Der von MySQL zurückgegebene Fehler lautet:
Der wichtigste Teil der Fehlermeldung ist
Dies zeigt den spezifischen Teil, den der Parser hier nicht erwartet hatte: die WHERE-Klausel.
quelle
Es ist völlig falsch. INSERT QUERY hat keine WHERE-Klausel, nur UPDATE QUERY. Wenn Sie Daten hinzufügen möchten, bei denen id = 1 ist, lautet Ihre Abfrage
quelle
Soweit mir bekannt ist, können Sie die WHERE-Klausel nicht in diese Abfrage einfügen. Vielleicht habe ich auch mein SQL vergessen, weil ich nicht sicher bin, warum Sie es sowieso brauchen.
quelle
Sie sollten die where-Bedingung in der Insert-Anweisung nicht verwenden. Wenn Sie dies möchten, verwenden Sie Einfügen in eine Aktualisierungsanweisung und aktualisieren Sie dann einen vorhandenen Datensatz.
Kann ich eigentlich wissen, warum Sie eine where-Klausel in der Insert-Anweisung benötigen?
Vielleicht aus dem Grund, warum ich Ihnen eine bessere Option vorschlagen könnte.
quelle
Ich denke, Ihre beste Option ist REPLACE anstelle von INSERT
quelle
LESEN SIE DAS AUCH
Es macht keinen Sinn ... auch nicht wörtlich
INSERT
bedeutet, fügen Sie einnew row
und wenn Sie sagen,WHERE
Sie definieren, über welche Zeile Sie in der sprechenSQL
.Das Hinzufügen einer neuen Zeile ist daher mit einer Bedingung für eine vorhandene Zeile nicht möglich.
Sie müssen aus folgenden Optionen auswählen:
A. Verwenden Sie
UPDATE
anstelle vonINSERT
B. Verwenden
INSERT
und entfernen Sie dieWHERE
Klausel (ich sage es nur ...) oder wenn Sie wirklich verpflichtet sind, sie zu verwenden,INSERT
undWHERE
in einer einzigen Anweisung kann dies nur über die INSERT..SELECT-Klausel erfolgen ...Dies dient jedoch einem ganz anderen Zweck. Wenn Sie die ID als Primärschlüssel definiert haben, schlägt diese Einfügung fehl, andernfalls wird eine neue Zeile mit der ID = 1 eingefügt.
quelle
Ich bin mir bewusst, dass dies ein alter Beitrag ist, aber ich hoffe, dass dies noch jemandem helfen wird. Ich hoffe, dass dies ein einfaches Beispiel ist:
Hintergrund:
Ich hatte viele bis viele Fälle: Derselbe Benutzer wird mehrmals mit mehreren Werten aufgelistet und ich wollte einen neuen Datensatz erstellen. Daher wäre UPDATE in meinem Fall nicht sinnvoll und ich musste einen bestimmten Benutzer genau wie ich ansprechen mit einer WHERE-Klausel.
Mit diesem Konstrukt zielen Sie tatsächlich auf einen bestimmten Benutzer ab (Benutzer123, der über andere Datensätze verfügt), sodass Sie meiner Meinung nach keine where-Klausel benötigen.
Die Ausgabe könnte sein:
quelle
Eine Möglichkeit, INSERT und WHERE zu verwenden, ist
INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953);
In diesem Fall ist es wie ein Existenztest. Es gibt keine Ausnahme, wenn Sie es zwei oder mehr Mal ausführen ...quelle
Die korrekte Syntax für das Einfügen von MySQL in eine Anweisung mithilfe der Post-Methode lautet:
quelle
Ich glaube nicht, dass wir die where-Klausel in der insert-Anweisung verwenden können
quelle
quelle
Sie können INSERT und WHERE nicht zusammen verwenden. Sie können die UPDATE-Klausel verwenden, um einer bestimmten Spalte in einem bestimmten Feld einen Mehrwert zu verleihen, wie im folgenden Code angegeben.
quelle
Ich denke, dass das richtige Formular zum Einfügen eines Werts in eine bestimmte Zeile lautet:
Es funktioniert und ist ähnlich, wenn Sie auf Microsoft SQL Server schreiben
Auf MySQL müssen Sie die Tabelle aktualisieren.
quelle
Sie können dies mit dem folgenden Code tun:
quelle