L2 Info : Bases de données
 
◃  Ch. 5 Édition des données avec SQL (DML)  ▹
 

Insertion de nouveaux enregistrements

  • Commande INSERT INTO
  • Syntaxe standard :
    INSERT INTO nom_table VALUES (val1, ...,valn);
    
    INSERT INTO nom_table(col1, ...,coln)
       VALUES (val1, ..., vali, ..., valn);
    
    INSERT INTO nom_table(col1, ...,coln) SELECT ... FROM ...;
    
  • vali peut être au choix :
    • une valeur de même type que la colonne coli ciblée
    • la valeur NULL si la colonne n'est pas obligatoire (définie avec l'option NOT NULL),
    • la valeur DEFAULT Si la colonne est de type SERIAL ou associée à une valeur par défaut (définie avec l'option DEFAULT ou AUTO_INCREMENT)
  • Toutes les colonnes obligatoires de la table (déclarées NOT NULL) et sans valeur par défaut doivent être renseignées lors de l'insertion
  • Syntaxe PostgreSQL et MySQL :
    INSERT INTO nom_table(col1, ...,coln) VALUES
       (val11, ..., val1n),
       (val21, ..., val2n),
       ...
       (valp1, ..., valpn);
  • Exemples :
    INSERT INTO professeur VALUES (1, 'Amanton', 'Laurent', NULL, NULL, 'MCF');
    
    INSERT INTO professeur (prof_id, prof_nom, prof_prenom, prof_statut)
                VALUES (2, 'Ponty', 'Jean-Luc', 'MCF');
    
    INSERT INTO professeur (prof_id, prof_nom, prof_prenom, prof_statut)
                VALUES (3, 'Jay', 'Véronique', 'MCF'),
                       (4, 'Balev', 'Stefan', 'MCF'),
                       (5, 'Arfi', 'Mustapha', 'MCF'),
                       (6, 'Fournier', 'Dominique', 'MCF') ;
    
  • Syntaxe Oracle :
    INSERT ALL
          INTO nom_table(col1, ...,coln) VALUES (val11, ..., val1n)
          INTO nom_table(col1, ...,coln) VALUES (val21, ..., val2n)
       ...
          INTO nom_table(col1, ...,coln) VALUES (val21, ..., val2n)
       SELECT * FROM dual;
  • Syntaxe lourde et très limitée : pas d'utilisation de séquence par défaut sur les clés ni de colonne identité auto-générée !
  • Exemple :
    INSERT ALL
        INTO etudiant VALUES (20000003, 'Dalton', 'Joe', 'Pénitencier fédéral', TO_DATE('1865-04-01','YYYY-MM-DD'), NULL)
        INTO etudiant VALUES(20000004, 'Dalton', 'Jack', 'Pénitencier fédéral', TO_DATE('1866-07-04','YYYY-MM-DD'), NULL)
        INTO etudiant(etud_num, etud_nom, etud_prenom, etud_adresse, etud_naissance)
                VALUES(20000005, 'Dalton', 'William', 'Pénitencier fédéral', TO_DATE('1867-11-28','YYYY-MM-DD'))
        INTO etudiant(etud_num, etud_nom, etud_prenom, etud_adresse, etud_naissance)
                VALUES(20000006, 'Dalton', 'Averell', 'Pénitencier fédéral', TO_DATE('1868-12-25','YYYY-MM-DD'))
    SELECT * FROM dual;