Antworten:
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-Syntax
Sie 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 INTO Users(weight, desiredWeight)
VALUES (160,145)
INSERT mit einer SELECT-Anweisung
INSERT INTO Users(weight, desiredWeight)
SELECT weight, desiredWeight
FROM AnotherTable
WHERE id = 1
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;
UPDATE Benutzer SET Gewicht = 160, gewünschtes Gewicht = 45 wobei id = 1;
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.
Ich glaube nicht, dass die Einfügung eine WHERE-Klausel enthält.
Bedingungen gelten, weil Sie where-Bedingung für Unterauswahlanweisungen verwenden können. Sie können komplizierte Einfügungen mit Unterauswahl durchführen.
Beispielsweise:
INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';
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.
SELECT count(*)
FROM customers
WHERE city = 'Newark';
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:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);
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:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);
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
Die richtige Antwort auf diese Frage lautet wie folgt:
ein). WENN Sie vor dem Einfügen auswählen möchten:
INSERT INTO Users( weight, desiredWeight )
select val1 , val2 from tableXShoulatNotBeUsers
WHERE somecondition;
b). Wenn der Datensatz bereits vorhanden ist, verwenden Sie update anstelle von insert:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Sollte sein
Update Users set weight=160, desiredWeight=145 WHERE id = 1;
c). Wenn Sie gleichzeitig aktualisieren oder einfügen möchten
Replace Users set weight=160, desiredWeight=145 WHERE id = 1;
Note):- you should provide values to all fields else missed field in query
will be set to null
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
create temporary table xtable ( weight int(11), desiredWeight int(11) ;
insert into xtable (weight, desiredWeight)
select weight, desiredWeight from Users where [condition]
insert into Users (weight, desiredWeight)
select weight , desiredWeight from xtable;
Ich denke, das deckt die meisten Szenarien ziemlich ab
Sie können WHERE einfach nicht verwenden, wenn Sie eine INSERT-Anweisung ausführen:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
sollte sein:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 );
Der WHERE-Teil funktioniert nur in SELECT-Anweisungen:
SELECT from Users WHERE id = 1;
oder in UPDATE-Anweisungen:
UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;
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 ...
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
INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
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.
Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,bb@yy.com,160,145) WHERE name != fred AND email != bb@yy.com
Macht Sinn, nicht wahr?
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.
INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');
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 .
Wenn Sie eine bestimmte Datensatznummer für das Einfügen von Daten angeben, ist es besser, die UPDATE
Anweisung anstelle der INSERT
Anweisung zu verwenden.
Diese Art von Abfrage, die Sie in die Frage geschrieben haben, ähnelt einer Dummy-Abfrage.
Ihre Anfrage lautet: -
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Hier geben Sie die ID = 1 an. Verwenden Sie daher besser die UPDATE
Anweisung, um den vorhandenen Datensatz zu aktualisieren. Es wird nicht empfohlen, die WHERE
Klausel zu verwenden , wenn INSERT
.You verwenden sollte UPDATE
.
Jetzt Update-Abfrage verwenden: -
UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;
Kann die WHERE-Klausel in jedem Fall tatsächlich mit INSERT-INTO-VALUES verwendet werden?
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:
mysql> INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 1' at line 1
Der wichtigste Teil der Fehlermeldung ist
... syntax to use near 'WHERE id = 1' ...
Dies zeigt den spezifischen Teil, den der Parser hier nicht erwartet hatte: die WHERE-Klausel.
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.
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.
Ich denke, Ihre beste Option ist REPLACE anstelle von INSERT
IN Benutzer ERSETZEN (ID, Gewicht, gewünschtes Gewicht) WERTE (1, 160, 145);
Es macht keinen Sinn ... auch nicht wörtlich
INSERT
bedeutet, fügen Sie ein new row
und wenn Sie sagen, WHERE
Sie definieren, über welche Zeile Sie in der sprechen SQL
.
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 die WHERE
Klausel (ich sage es nur ...) oder wenn Sie wirklich verpflichtet sind, sie zu verwenden, INSERT
und WHERE
in einer einzigen Anweisung kann dies nur über die INSERT..SELECT-Klausel erfolgen ...
INSERT INTO Users( weight, desiredWeight )
SELECT FROM Users WHERE id = 1;
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.
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.
INSERT into MyTable(aUser,aCar)
value(User123,Mini)
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:
aUser aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
Die korrekte Syntax für das Einfügen von MySQL in eine Anweisung mithilfe der Post-Methode lautet:
$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";
Ich glaube nicht, dass wir die where-Klausel in der insert-Anweisung verwenden können
INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
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.
UPDATE Users
SET weight='160',desiredWeight ='145'
WHERE id =1
Ich denke, dass das richtige Formular zum Einfügen eines Werts in eine bestimmte Zeile lautet:
UPDATE table SET column = value WHERE columnid = 1
Es funktioniert und ist ähnlich, wenn Sie auf Microsoft SQL Server schreiben
INSERT INTO table(column) VALUES (130) WHERE id = 1;
Auf MySQL müssen Sie die Tabelle aktualisieren.