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.
|