Kapitel 7: MySQL-Sprachreferenz 441
[INTO] tabelle
SET spalten_name=ausdruck, spalten_name=ausdruck, ...
INSERT f¨ugt neue Zeilen in eine bestehende Tabelle ein. Die INSERT ... VALUES-Form
des Statements f¨ugt Zeilen basierend auf explizit angegebenen Werten ein. Die INSERT
... SELECT-Form f¨ugt Zeilen ein, die aus einer oder mehreren anderen Tabellen ausgew¨ahlt
wurden. Die INSERT ... VALUES-Form mit mehrfachen Wertelisten wird ab MySQL-Version
3.22.5 unterst¨utzt. Die spalten_name=expression-Syntax wird ab MySQL-Version 3.22.10
unterst¨utzt.
tabelle ist die Tabelle, in die Zeilen eingef¨ugt werden sollen. Die Spaltennamenliste oder
die SET-Klausel geben an, f¨ur welche Spalten das Statement Werte angibt:
• Wenn Sie keine Spaltenliste f¨ur INSERT ... VALUES oder INSERT ... SELECT angeben,
m¨ussen f¨ur alle Spalten Werte in der VALUES()-Liste oder vom SELECT bereit stehen.
Wenn Sie die Reihenfolge der Tabellenspalten nicht kennen, benutzen Sie DESCRIBE
tabelle, um sie herauszufinden.
• Jede Spalte, die nicht explizit in einer Werteliste angegeben wird, wird auf ihren Vor-
gabewert gesetzt. Wenn Sie beispielsweise eine Spaltenliste angeben, die nicht alle
Tabellenspalten nennt, werden unbenannte Spalten auf ihre Vorgabewerte gesetzt.
Die Zuweisung von Vorgabewerten ist in Abschnitt 7.5.3 [CREATE TABLE], Seite 456
beschrieben.
•
Ein
ausdruck
kann sich auf jede Spalte beziehen, die vorher in einer Werteliste
angegeben wurde. Beispielsweise k¨onnen Sie folgendes eingeben:
mysql> INSERT INTO tabelle (spalte1,spalte2) VALUES(15,spalte1*2);
Aber nicht das hier:
mysql> INSERT INTO tabelle (spalte1,spalte2) VALUES(spalte2*2,15);
• Wenn Sie das Schl¨usselwort LOW_PRIORITY angeben, wird die Ausf¨uhrung von INSERT
verz¨ogert, bis kein anderer Client mehr aus der Tabelle liest. In diesem Fall muss
der Client warten, bis das INSERT-Statement fertig ist, was lange Zeit dauern kann,
wenn die Tabelle stark benutzt wird. Das ist im Gegensatz zu INSERT DELAYED, was den
Client sofort weitermachen l¨aßt. Siehe Abschnitt 7.4.4 [INSERT DELAYED], Seite 443.
Beachten Sie, dass LOW_PRIORITY normalerweise nicht bei MyISAM-Tabellen benutzt
werden sollte, weil dadurch gleichzeitige Einf¨ugeoperationen verhindert werden. Siehe
Abschnitt 8.1 [MyISAM], Seite 483.
• Wenn Sie das Schl¨usselwort IGNORE in einem INSERT mit vielen Wertezeilen angeben,
werden alle Zeilen, die einen bestehenden PRIMARY- oder UNIQUE-Schl¨ussel duplizieren
w¨urden, ignoriert und nicht eingef¨ugt. Wenn Sie IGNORE nicht angeben, wird die
Einf¨ugeop eration a/jointfilesconvert/293675/bgebrochen, wenn es eine Zeile gibt, die einen b estehenden
Schl¨usselwert duplizieren w¨urde. Mit der C-API-Funktion mysql_info() k¨onnen Sie
feststellen, wie viele Zeilen in die Tabelle eingef¨ugt wurden.
• Wenn MySQL mit der DONT_USE_DEFAULT_FIELDS-Option konfiguriert wurde, erzeu-
gen INSERT-Statements einen Fehler, wenn Sie nicht explizit Werte f¨ur alle Spalten
angeben, die einen Nicht-NULL-Wert erfordern. Siehe Abschnitt 3.3.3 [configure-
Optionen], Seite 71.
Comentarios a estos manuales