Heim >Datenbank >MySQL-Tutorial >Warum schlagen INSERT-Abfragen mit einer WHERE-Klausel in MySQL fehl?

Warum schlagen INSERT-Abfragen mit einer WHERE-Klausel in MySQL fehl?

DDD
DDDOriginal
2025-01-19 06:40:10967Durchsuche

Why Do INSERT Queries Fail with a WHERE Clause in MySQL?

MySQL INSERT-Anweisungen und die WHERE-Klausel: Eine häufige Falle

Die Verwendung einer WHERE-Klausel innerhalb einer MySQL-INSERT-Anweisung führt zu einem Fehler. Dies liegt daran, dass die WHERE-Klausel speziell für UPDATE- und DELETE-Vorgänge und nicht für INSERTs konzipiert ist.

Die bereitgestellte Abfrage zielt wahrscheinlich darauf ab, entweder einen neuen Benutzer hinzuzufügen oder einen vorhandenen zu ändern. Lassen Sie uns beide Szenarien klären:

Neuen Benutzer hinzufügen

Um einen neuen Benutzer mit der ID 1 einzufügen, lautet die korrekte MySQL-Syntax:

<code class="language-sql">INSERT INTO Users (id, weight, desiredWeight) VALUES (1, 160, 145);</code>

Dadurch werden id, weight und desiredWeight direkt Werte zugewiesen, wodurch ein neuer Benutzerdatensatz erstellt wird.

Ändern eines vorhandenen Benutzers

Wenn das Ziel darin besteht, einen vorhandenen Benutzer zu aktualisieren, verwenden Sie die UPDATE-Anweisung:

<code class="language-sql">UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;</code>

Dadurch werden die weight und desiredWeight für den Benutzer mit id = 1 geändert, ohne dass sich dies auf andere Einträge auswirkt.

Alternative Methoden: Bedingte Einfügungen und Aktualisierungen

Um sowohl das Einfügen als auch das Aktualisieren basierend auf der Datensatzexistenz zu handhaben, ziehen Sie die folgenden Alternativen in Betracht:

  • INSERT ... ON DUPLICATE KEY UPDATE:
<code class="language-sql">INSERT INTO Users (id, weight, desiredWeight) VALUES (1, 160, 145) ON DUPLICATE KEY UPDATE weight = 160, desiredWeight = 145;</code>

Dadurch wird eine neue Zeile eingefügt, wenn der Schlüssel nicht vorhanden ist. Andernfalls wird die vorhandene Zeile aktualisiert.

  • INSERT ... SET: (Obwohl diese Syntax funktional der oben genannten VALUES-Methode ähnelt, wird sie aus Gründen der Übersichtlichkeit oft weniger bevorzugt)

Denken Sie daran: Wenn id eine Spalte mit automatischer Inkrementierung ist, können Sie sie in der INSERT-Anweisung weglassen. MySQL generiert automatisch eine eindeutige ID.

Das obige ist der detaillierte Inhalt vonWarum schlagen INSERT-Abfragen mit einer WHERE-Klausel in MySQL fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn