Create table

CREATE TABLE table (
    attribut type propriété,
    ...
    définitions-de-propriétés
) options;

Types

Propriétés

Définitions de propriétés

Options

Index

INDEX nomIndey (attribut),

Remarque : - KEY = INDEX

Index nommés automatiquement (nom attribut), noms des index unique dans la base.

Clés étrangères

  1. Les deux tables doivent être en InnoDB.
  2. Se place :

    • soit dans l'attribut :

      attribut type [propriétés] REFERENCES table (attribut),
      
    • soit dans la définition des propriétés :

      FOREIGN KEY (attributs, ...) REFERENCES table (attribut),
      
  3. Sous MySQL, en plus de la déf de la clé étrangère, il faut créer un index.

    INDEX nomIndey (attribut),
    

Remarque : CONSTRAINT nom FOREIGN KEY ... : "CONSTRAINT nom" optionnel

Comportement en cas de suppression ou modification dans la table parent

FOREIGN KEY ... REFERENCES ... ON DELETE **comportement** ON UPDATE **comportement**

Comportements : - CASCADE reporte en cascade - RESTRICT interdit - SET NULL transforme en null - NO ACTION

Exemples

Contact :

CREATE TABLE contact (
    numContact int PRIMARY KEY auto_increment,
    nom varchar(50) NOT NULL,
    prenom varchar(50),
    fonction varchar(50),
    telephone varchar(13),
    numEntreprise int NOT NULL REFERENCES entreprise (numEntreprise),
    INDEX numEntreprise (numEntreprise),
) ENGINE=InnoDB;

Stage :

CREATE TABLE stage (
    numEtudiant int,
    numEntreprise int NOT NULL,
    numResponsable int,
    dateDebut date NOT NULL,
    dateFin date NOT NULL,
    sujet varchar(50),
    PRIMARY KEY (numEtudiant),
    FOREIGN KEY (numEtudiant) REFERENCES etudiant (numEtudiant)
        ON DELETE RESTRICT ON UPDATE CASCADE,
    FOREIGN KEY (numEntreprise) REFERENCES entreprise (numEntreprise),
    FOREIGN KEY (numResponsable) REFERENCES contact (numContact),
    INDEX (numEtudiant),
    INDEX (numEntreprise),
    INDEX (numResponsable)
) ENGINE=InnoDB;

Sous MySQL pour afficher la création d'une table :

SHOW CREATE TABLE table;

Donne :

CREATE TABLE etudiant (
    numEtudiant int(11) NOT NULL auto_increment,
    nom varchar(50) default NULL,
    prenom varchar(50) default NULL,
    email varchar(100) default NULL,
    PRIMARY KEY (numEtudiant)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;