INSERT [LOW_PRIORITY] [IGNORE] [INTO] nom_de_la_table [(liste des colonnes)] SELECT ...
La requête INSERT ... SELECT permet de
rapidement insérer dans une table un grand nombre de lignes
d'une ou plusieurs autres tables.
INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID FROM tblTemp1 WHERE tblTemp1.fldOrder_ID > 100;
Les conditions suivantes s'appliquent à la requête
INSERT ... SELECT:
Avant MySQL version 4.0.1, INSERT ...
SELECT opérait implicitement en mode
IGNORE. Depuis MySQL version 4.0.1,
vous devez spécifier le mode IGNORE
explicitement, pour ignorer les lignes qui causeront des
erreurs de doublons pour les index uniques.
N'utilisez pas DELAYED avec
INSERT ... SELECT.
Avant MySQL version 4.0.14, la table de destination de la
requête INSERT ne peut apparaître
dans la clause FROM de la partie
SELECT de la requête car il est
interdit par le ANSI SQL de lire la table dans laquelle on
est en train de faire un insert. (le problème est que le
SELECT pourrait trouver des
enregistrements qui aurait été insérés auparavant dans
la même exécution. L'utilisation de "subselect" peut
rendre la situation confuse !)
Les colonnes AUTO_INCREMENT
fonctionnent comme d'habitude.
Pour s'assurer que les journaux des modifications ou les
journaux binaires puissent être utilisés pour re-créer
les tables originales, MySQL n'autorise pas les inserts
concurrents pendant INSERT ... SELECT.
Il est bien sûr possible d'utiliser
REPLACE à la place de
INSERT pour remplacer les anciennes lignes.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
