7.13 INSERT

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] Nom_table [(Nom_col,...)]
VALUES (expression,...),(...),...
ou INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] Nom_table [(Nom_col,...)]
SELECT ...
ou INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] Nom_table
SET Nom_col=expression, Nom_col=expression, ...

INSERT insère une nouvelle ligne dans une table existante.. La forme de INSERT ... VALUES est basée sur des colonnes explicitement précisée. forme de INSERT ... SELECT insère des données depuis une autre table. La forme de INSERT ... VALUES avec plusieurs valeurs est acceptée MySQL à partir de la version 3.22.5 . La syntaxe Nom_col=expression est accepté par MySQL à partir de la version 3.22.10.

Nom_table est le nom de la table dans laquelle les lignes vont être insérée. La liste de nom de colonne ou la clause SET indique quelles colonnes vont être assignées.

mysql> INSERT INTO Nom_table (col1,col2) VALUES(15,col1*2);

Mais pas ceci :@:

mysql> INSERT INTO Nom_table (col1,col2) VALUES(col2*2,15);

Lors de l'utilisation de INSERT ... SELECT ou INSERT ... VALUES avec des listes de plusieurs lignes, la fonction mysql_info() permet d'obtenir des informations sur la requête. Le format de la réponse est comme suite :@:

Records:@: 100 Duplicates: 0 Warnings: 0

Duplicates indique le nombre de lignes qui n'a pas pus être insérées car elles tentaient de doubler une clé primaire.. Warnings indique le nombre d'insertions qui ont générer une erreur lors de l'insertion. Warnings surviennent lorsqu'il y a une tentative:@:

L'option DELAYED pour la commande INSERT est une caractéristique MySQL qui est très utile lorsque les clients ne peuvent pas attendre la fin de l'insertion. C'est utilisé habituellement par MySQL pour remplir des historiques, et que périodiquement, une longue commande SELECT est effectuée. DELAYED a été introduit à partir de MySQL 3.22.15. C'est une extension MySQL à la norme ANSI SQL92.

Un autre avantage majeur de l'utilisation de la commande INSERT DELAYED est que les insertions sont regroupées et traitées en même temps. C'est une manière plus rapide que d'effectuer autant d'insertions unitaires.

Il faut noter que les insertions en attente sont gardées en mémoire vive, jusqu'à ce qu'elles soient insérées dans la table. Cela signifie que si le processus mysqld est brutalement interrompu (kill -9) ou si mysqld se termine inopinément, les lignes ne seront pas écrites sur le disque, et ainsi perdues !

Les événements suivants surviennent lors de l'utilisation de l'option DELAYED des commandes INSERT ou REPLACE. Dans la description qui suit, le ``thread'' est le thread qui a recu la commande INSERT DELAYED et ``handler'' est le thread qui va gérer les INSERT DELAYED pour une table particulière.

Ces variables sont accessibles avec la commande SHOW STATUS ou, en ligne, avec mysqladmin extended-status.