Manipulation de données : SELECT , INSERT , UPDATE , DELETE
<<<
Syntaxe de INSERT ... SELECT Syntaxe de INSERT DELAYED
>>>

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


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.

<< Syntaxe de INSERT ... SELECT >>
Manipulation de données : SELECT , INSERT , UPDATE , DELETE Syntaxe de INSERT Syntaxe de INSERT DELAYED