Weiter Zurück [Inhalt] Online Suche im Handbuch

28.10 INSERT



    INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] tbl_name [(col_name,...)]
        VALUES (expression,...),(...),...
oder  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] tbl_name [(col_name,...)]
        SELECT ...
oder  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
        [INTO] tbl_name
        SET col_name=expression, col_name=expression, ...

INSERT fürgt neue Reihen in eine Tabelle ein. Die INSERT ... VALUES Ausdruck fügt Reihen ein, unter Verwendung genau angegeber Zahlen. Das INSERT ... SELECT Ausdruck fügt eine Reihe ein, die aus einer anderen Tabelle ausgewählt wurden. Der Ausdruck INSERT ... VALUES mit der Angabe einer mehrfachen Werteliste wird ab MySQL 3.22.5 unterstützt. Der Ausdruck col_name=expression wird ab MySQL 3.22.10 unterstützt.

tbl_name ist die Tabelle, in welche die Reihen eingefügt werden sollen. Die Zusatzangabe der Liste col_name oder der Ausdruck SET zeigt an, auf welche Spalten der Ausdruck wirkt.

Wenn keine Spalten Liste bei INSERT ... VALUES oder INSERT ... SELECT, angegeben ist, dann müssen die Spalten in der VALUES() Liste oder im SELCT Statement angegeben werden. Allen Spalten, denen kein Wert zugewiesen wird, fallen auf den Defaultwert zurück. Wenn, zum Beispiel, eine Spaltenliste angegeben wird, die nicht alle Spalten in der Tabelle aufzählt, dann werden die ungenannten Spalten auf ihre Defaultwerte gesetzt. Der Default Wert ist bei CREATE angegeben. Ein Ausdruck kann sich aber auch auf alle Spalten beziehen, die etwas früher in einer Liste genannt wurden:


      mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
Dieser Ausdruck ist nicht erlaubt:

      mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);
Wenn das Schlüsselwort LOW_PRIORITY angegeben wird, dann wird die Ausführung des INSERT Befehls solange verzögert, bis keine Abfrage mehr stattfindet. Wenn das Schlüsselwort IGNORE in einem INSERT Statement mit vielen Reihen angegeben wird, werden alle Reihen ignoriert, die einen existerenden PRIMARY oder UNIQUE Schlüsseleintrag enthalten. Wenn IGNORE nicht angegeben wird, bricht der INSERT genau dann ab, wenn dort eine Reihe ist, die einen Schlüsselwert gerade dupliziert. Mit Hilfe des Befehls mysql_info() kann abgefragt werden, wieviele Reihen in die Tabelle ingefügt worden sind. Wenn MySQL so konfiguriert wurde, daß die Option DONT_USE_DEFAULT_FIELDS aktiviert wurde, erzeugen INSERT Statements eine Fehlermeldung, wenn speziell Werte für alle Spalten angegeben werden, die einen NON-NULL Wert erwarten.

Die folgenden Zusatzbedingungen für ein INSERT INTO ... SELECT Statement müssen erfüllt sein:

Wenn INSERT ... SELECT oder ein INSERT ... VALUES Statement mit vielfachen Wertelisten verwendet wird, dann kan die C API Funktion mysql_info() verwendet werden, um Informationen über die Abfrage zu erhalten. Das Format lautet wie folgt:

Records: 100 Duplicates: 0 Warnings: 0

Duplicates zeigt die Zahl der Reihen an, welche nicht eingefügt werden konnten, weil sie einen eindeutigen Index Wert kopieren würden. Warnings zeigt die Zahl der Versuche, Spaltenwerte einzufügen, an. Warnungen können aber auch unter folgenden Bedingungen auftreten:

Die Option DELAYED für das INSERT Statement ist eine MySQL spezifische Option, die sehr sinvoll ist, wenn es Clients gibt, die nicht auf die Beendigung eines INSERT warten können. Das kann z.B. passieren, wenn MySQL für Logging verwendet wird, und gleichzeitig SELECT Statements laufen müssen, die sehr lange dauern. DELAYED wurde in MySQL 3.22.15 eingeführt und ist eine Erweiterung gegenüber dem ANSI SQL92 Standard.

Ein weiterer Vorteil von INSERT DELAYED ist, daß INSERTS von vielen Clients gebündelt werden, um in einem Vorgang geschrieben zu werden. Diese Vorgehensweise ist viel schneller, als einzelne INSERTS durchzuführen.

Die gequeuten Reihen werden immer nur im RAM gehalten, bis sie in die Tabelle eingefügt werden. Das bedeutet, wenn der mysqld Dämon gekillt wird, beispielsweise mit kill -9, dann sind die Daten verloren.


Weiter Zurück [Inhalt] Online Suche im Handbuch