L2 Info : Bases de données
 
◃  Ch. 4 Implantation des données avec SQL (DDL)  ▹
 

Automatisation de l'attribution des valeurs de clés

  • MySQL utilise la clause AUTO_INCREMENT lors de la définition de la colonne
    CREATE TABLE etudiant (
      etud_id INT AUTO_INCREMENT PRIMARY KEY,
      etud_nom VARCHAR(50) NOT NULL,
      etud_prenom VARCHAR(35) NOT NULL);
    • Depuis la version 4.1, MySQL a un introduit le type SERIAL en tant qu'alias pour BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
    • En cas d'usage de SERIAL associé à une clé primaire, il faut utiliser le type BIGINT UNSIGNED pour typer les clés étrangères pointant dessus.
  • PostgreSQL (2 possibilités) :
    • via la clause DEFAULT et de la fonction nextval()
    • via le type de colonne SERIAL : génère une séquence dont le nom est de la forme nomTable_nomColonne_seq, automatise l'attribution d'une nouvelle clé
    CREATE TABLE etudiant (
      etud_id SERIAL PRIMARY KEY,
            -- équivalent à :
            -- etud_id int DEFAULT nextval('etudiant_etud_id_seq')
      etud_nom VARCHAR(50) NOT NULL,
      etud_prenom VARCHAR(35) NOT NULL);
    
    --NOTICE:  CREATE TABLE will create implicit sequence "etudiant_etud_id_seq" for serial column "etudiant.etud_id"
    --NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "etudiant_pkey" for table "etudiant"
    
  • Oracle 11g: obligation de passer par un trigger... (version disponible sur ust-infoserv)
  • Oracle 12c : accepte la pseudo-colonne nextval d'une séquence en valeur par défaut
    CREATE SEQUENCE seq_etudiant;
    
    CREATE TABLE etudiant (
      etud_id INTEGER DEFAULT seq_etudiant.nextval PRIMARY KEY,
      etud_nom VARCHAR(50) NOT NULL,
      etud_prenom VARCHAR(35) NOT NULL);