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.