| 14.1.4 Syntaxe de INSERT
 14.1 Manipulation de données : SELECT , INSERT , UPDATE , DELETE
 14 Syntaxe des commandes SQL
 Manuel de Référence MySQL 4.1 : Version Française
 
 ->Syntaxe de INSERT ... SELECT
 . Syntaxe de INSERT DELAYED
 
 
 | 
  14.1.4.1 Syntaxe de INSERT ... 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 [LOW_PRIORITY] [IGNORE] [INTO] nom_de_la_table [(liste des colonnes)] SELECT ...
 | 
 Les conditions suivantes s'appliquent à la requête  
INSERT ... SELECT
 :| 
INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID FROM tblTemp1 WHEREtblTemp1.fldOrder_ID > 100;
 | 
 
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.
 |