INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    VALUES ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
ou :
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
    [INTO] tbl_name
    SET col_name={expr | DEFAULT}, ...
    [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
ou :
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    SELECT ...
        INSERT insère une nouvelle ligne dans une
        table existante. La syntaxe INSERT ... VALUES
        insère une ligne à partir de valeurs explicitement fournies.
        La syntaxe INSERT ... SELECT insère des
        valeurs à partir d'une autre table. La syntaxe INSERT
        ... VALUES avec plusieurs valeurs est supportées à
        partir de MySQL 3.22.5 ou supérieure. la syntaxe
        nom_colonne=expression est supportée à
        partir de la version 3.22.10 de MySQL.
      
        INSERT ... SELECT est présenté plus en
        détails : See Section 13.1.4.1, « Syntaxe de INSERT ... SELECT ».
      
        nom_de_table est le nom de la table dans
        laquelle les valeurs seront insérées. La liste de noms de
        colonne ou la clause SET indiquent les
        colonnes qui seront affectées:
      
            La liste des noms de colonnes ou la clause
            SET indique explicitement les colonnes
            utilisées.
          
            Si vous ne spécifiez pas de liste de colonnes avec
            INSERT ... VALUES ou INSERT ...
            SELECT, les valeurs pour toutes les colonnes
            doivent être fournies dans la clause
            VALUES() ou par la commande
            SELECT. Si vous ne connaissez pas l'ordre
            des colonnes, utilisez la commande DESCRIBE
            nom_de_table pour le connaître.
          
Les valeurs des colonnes peuvent être spécifiées de plusieurs fa¸ons :
            
            A chaque fois qu'on ne donne pas explicitement une valeur
            pour une colonne, celle prend la valeur par défaut. Par
            exemple, si on définit une liste de colonnes qui ne compte
            pas toutes les colonnes de la tables, toutes les colonnes
            qui ne sont pas nommées prendront leur valeur par défaut.
            La définition de la valeur par défaut se fait avec
            Section 13.2.5, « Syntaxe de CREATE TABLE ».
          
MySQL a toujours une valeur par défaut pour chaque champs. C'est obligatoire pour MySQL pour pouvoir fonctionner aussi bien avec des tables supportant les transactions qu'avec des tables ne les supportant pas.
Nous pensons que le contrôle du contenu des champs devrait être fait pas l'application et non par le serveur de base de données.
            Note : si vous voulez que les commandes
            INSERT génèrent une erreur si vous ne
            spécifiez pas explicitement de valeur pour toutes les
            colonnes qui requièrent des valeurs non-nulles
            (NULL), vous pouvez aussi configurer
            MySQL avec l'option
            DONT_USE_DEFAULT_FIELDS. Ce comportement
            n'est pas disponible si vous compilez MySQL depuis le
            source. See Section 2.4.2, « Options habituelles de configure ».
          
            Vous pouvez utiliser le mot clé DEFAULT
            pour donner explicitement à une colonne sa valeur par
            défaut. Cette fonctionnalité a été ajoutée en MySQL
            version 4.0.3. Cela rend plus simple l'écriture de
            commandes INSERT lors de l'assignation de
            quelques colonnes, sans écrire de valeurs
            VALUES incomplètes. Sinon, il faut
            écrire la liste des colonnes utilisées pour chaque valeur
            de la liste VALUES.
          
            Si la liste de colonnes et de valeurs
            VALUES sont vides,
            INSERT crée une ligne pour chaque
            colonne avec sa valeur par défaut :
          
mysql> INSERT INTO tbl_name () VALUES();
            Une expression peut faire référence à
            n'importe quelle colonne qui a été définie précédemment
            dans une liste de valeurs. Par exemple, on peut dire ceci :
          
mysql> INSERT INTO nom_de_table (col1,col2) VALUES(15,col1*2);
            Mais vous ne pouvez pas faire cela, car la valeur de
            col1 fait référence à
            col2, qui est assigné après
            col1 :
          
mysql> INSERT INTO nom_de_table (col1,col2) VALUES(col2*2,15);
        Les commandes INSERT supportent les options
        suivantes :
      
            Si vous spécifiez l'option DELAYED, le
            serveur met la ligne ou les lignes à insérer dans un
            tampon, et le client qui a émis la commande INSERT
            DELAYED est immédiatement libéré. Si la table
            est occupée, le serveur conserve les lignes. Lorsque la
            table se libère, il va insérer les lignes, tout en
            vérifiant périodiquement s'il n'y a pas de lectures dans
            la table. Si une lecture arrive, l'insertion est suspendue
            jusqu'à la prochaine libération. See
            Section 13.1.4.2, « Syntaxe de INSERT DELAYED ».
          
            Si on spécifie le mot LOW_PRIORITY,
            l'exécution de INSERT sera retardé
            jusqu'à ce qu'il n'y ait plus de clients qui lisent la
            table. Dans ce cas le client doit attendre jusqu'à la fin
            de l'opération d'insertion, ce qui peut prendre beaucoup de
            temps si la table est fréquemment accédée. C'est la
            grande différence avec INSERT DELAYED,
            qui laisse le client continuer tout de suite. See
            Section 13.1.4.2, « Syntaxe de INSERT DELAYED ». On peut remarquer que, en
            principe, LOW_PRIORITY ne devrait pas
            être utilisé avec des tables de type
            MyISAM, étant donné que celles-ci
            n'autorisent pas les insertions simultanées. See
            Section 14.1, « Le moteur de tables MyISAM ».
          
            Si on spécifie le mot IGNORE dans un
            INSERT avec les valeurs de plusieurs
            lignes, chaque ligne qui qui ferait doublon avec une clé
            PRIMARY ou UNIQUE
            existante dans la table sera ignoré et ne sera pas
            insérée. Si on ne spécifie pas IGNORE,
            l'insertion est abandonnée si quelque ligne que ce soit
            fait doublon avec une clé existante. La fonction
            mysql_info() de l'API C permet de savoir
            combien de lignes ont été insérées dans la table.
          
        Si vous spécifiez la clause ON DUPLICATE KEY
        UPDATE (nouveau en MySQL 4.1.0), et qu'une ligne
        insérée engendre un doublon pour une clé
        PRIMARY ou UNIQUE, une
        commande UPDATE sera faite à la place de
        l'insertion. Par exemple, les commandes ont le même effet :
      
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)->ON DUPLICATE KEY UPDATE c=c+1;mysql>UPDATE table SET c=c+1 WHERE a=1;
        Note : si la colonne
        b est aussi unique, la commande
        UPDATE sera réécrite telle que
      
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
        Si a=1 OR b=2 trouve plusieurs lignes,
        uniquement une ligne sera mise à jour! En
        général, il faut éviter d'utiliser la clause ON
        DUPLICATE KEY sur des tables avec des clés
        UNIQUE multiples.
      
        Depuis MySQL version 4.1.1, on peut utiliser la fonction
        VALUES(col_name) pour faire référence à la
        valeur de la colonne dans la clause INSERT
        d'une commande INSERT ... UPDATE : c'est la
        valeur qui sera insérée s'il n'y a pas de conflit de clé.
        Cette valeur est particulièrement utile dans les commandes
        INSERT ... UPDATE et retourne
        NULL sinon.
      
Exemple :
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)->ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
La commande ci-dessus est identique à :
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)->ON DUPLICATE KEY UPDATE c=3;mysql>INSERT INTO table (a,b,c) VALUES (4,5,6)->ON DUPLICATE KEY UPDATE c=9;
        Lors de l'utilisation de ON DUPLICATE KEY
        UPDATE, l'option DELAYED est
        ignorée.
      
        Vous pouvez trouver la valeur utilisée pour une colonne
        AUTO_INCREMENT en utilisant la fonction
        LAST_INSERT_ID(). Depuis l'interface C,
        utilisez la fonction mysql_insert_id().
        Cependant, notez que les deux fonctions ne se comportement pas
        de la la même fa¸ons dans toutes les circonstances. Le
        comportement des commandes INSERT avec les
        colonnes AUTO_INCREMENT sont décrites dans
        la section Section 12.8.3, « Fonctions d'informations » et
        Section 24.2.3.33, « mysql_insert_id() ».
      
        Si vous utilisez une commande INSERT ...
        VALUES avec plusieurs listes de valeurs ou
        INSERT ... SELECT, la commande retourne les
        informations sous ce format :
      
Records: 100 Duplicates: 0 Warnings: 0
        Records indique le nombre de ligne qui ont
        été traitées par cette commande. Ce n'est pas forcément le
        nombre de ligne insérées. Duplicates peut
        être non-nulle. Duplicates indique le nombre
        de lignes qui n'ont pas peut être insérées pour cause de
        conflit avec une clé unique existante.
        Warnings indique le nombre de tentatives
        d'insertion de valeurs dans une colonne qui ont généré des
        problèmes. Les Warnings peuvent apparaître
        dans les conditions suivantes:
      
            Insertion de NULL dans une colonne
            déclarée NOT NULL. Pour les commandes
            d'insertions multiples INSERT ou les
            commandes INSERT ... SELECT, la colonne
            prend la valeur par défaut adaptée au type de colonne.
            C'est 0 pour les types numériques, la
            chaîne vide pour les textes et la valeur ``zéro'' pour les
            types temporels
          
Enregistrement dans une colonne numérique d'une valeur qui déborde de la taille de la colonnes. Cette valeur a été tronquée à l'extrémité la plus adaptée de la colonne.
            Attribution à une colonne numérique d'une valeur telle que
            '10.34 a'. Celle valeur refusée est
            séparée, et la partie numérique résultante est
            insérée. Si cette valeur n'a pas une valeur numérique
            sensée, la valeur 0 est insérée.
          
            L'insertion d'une chaîne dans une colonne
            CHAR, VARCHAR,
            TEXT, ou BLOB qui
            dépasse la taille maximale de la colonne. La valeur est
            tronquée à la taille maximale de la colonne.
          
            L'insertion d'une valeur illégale pour une colonne de type
            DATE ou TIME. La
            colonne est alors enregistrée avec la valeur de zéro
            appropriée pour le type.
          
        Si vous utilisez l'interface C, la chaîne d'information peut
        être obtenue en invoquant la fonction
        mysql_info(). See
        Section 24.2.3.31, « mysql_info() ».
      
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.

