Services webmasters
Partenaires
Jeux concours gratuits
 
Syntaxe de HANDLER
<<<
Syntaxe de INSERT Syntaxe de INSERT DELAYED
>>>

6.4 Manipulation de données : SELECT , INSERT , UPDATE , DELETE
6 Référence du langage MySQL
 Manuel de Référence MySQL 4.1 : Version Française

Syntaxe de SELECT
Syntaxe de HANDLER
->Syntaxe de INSERT
Syntaxe de INSERT DELAYED
Syntaxe de UPDATE
Syntaxe de DELETE
Syntaxe de TRUNCATE
Syntaxe de REPLACE
Syntaxe de LOAD DATA INFILE
Syntaxe de DO

6.4.3 Syntaxe de INSERT


INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
    [INTO] nom_de_table [(nom_colonne,...)]
    VALUES ((expression | DEFAULT),...),(...),...
    ou  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
    [INTO] nom_de_table [(nom_colonne,...)]
    SELECT ...
    ou  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
    [INTO] nom_de_table
:    SET nom_colonne=(expression | DEFAULT), ...
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 Version 3.22.5 ou supérieure. la syntaxe nom_colonne=expression est supportée à partir de la version 3.22.10 de MySQL.

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:

  • 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.
  • 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 Syntaxe de CREATE TABLE .Il est également possible d'utiliser le mot DEFAULT pour qu'une colonne prenne sa valeur par défaut. (Nouveauté de MySQL 4.0.3) Il est ainsi plus simple d'écrire des requêtes INSERT qui donnent des valeurs à toutes les colonnes sauf quelques unes, car cela permet de ne pas avoir à écrire la liste incomplète de VALUES() (une liste qui ne comprend pas une valeur pour chaque colonne de la table). Sans cela, il faudrait écrire la liste des noms de colonnes correspondant a chaque valeur de la liste VALUES() .

    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.
  • 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 pas cela:
    
    mysql> INSERT INTO nom_de_table (col1,col2) VALUES(col2*2,15);
    
  • 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. Syntaxe des INSERT DELAYED . On peut remarquer que LOW_PRIORITY ne devrait en principe pas être utiliser avec des tables de type MyISAM , étant donné que celle si n'autorisent pas les inserts concurrents. 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'insert est abandonné 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 MySQL a été configuré avec l'option DONT_USE_DEFAULT_FIELDS , les opérations INSERT génère une erreur tant que les valeurs de toutes les colonnes qui attendent une valeur autre que NULL ne sont pas spécifiées explicitement. Les options habituelles de configure .
  • Il est possible de récupérer la valeur utilisée pour une colonne AUTO_INCREMENT avec la fonction mysql_insert_id . mysql_insert_id() .
Si on fait une opération INSERT ... SELECT ou INSERT ... VALUES avec plusieurs listes de valeurs, la fonction mysql_info() de l'API C permet d'obtenir des informations relatives à la requête. Le format de la chaîne d'information est la suivante:

Records: 100 Duplicates: 0 Warnings: 0
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'inserts 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 . Cette colonne a été enregistrée avec sa valeur par défaut.
  • 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 zero appropriée pour le type.

Sommaire :

<< Syntaxe de INSERT >>
Syntaxe de HANDLER Manipulation de données : SELECT , INSERT , UPDATE , DELETE Syntaxe de INSERT DELAYED
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -