Avec MySQL, les tables pourront gérer les contraintes d'intégrité uniquement si elles sont de type INNODB (ce qui n'est généralement pas le cas par défaut). Pour vous assurer de bien créer des tables de type INNODB vous devez ajouter, à la fin de la requête de création de la table, l'instruction TYPE=INNODB.
CREATE TABLE ... TYPE=INNODB;
L'ajout de la contrainte se fait via l'instruction
FOREIGN KEY suivi de la liste des champs liés (de la table à laquelle s'applique l'instruction) suivi de l'instruction
REFERENCES, la nom de la table référencée et enfin la liste des champs référencés.
... FOREIGN KEY (realisateur_id) REFERENCES realisateurs (id) ...
Si l'on reprend l'exemple initial des 2 tables liées films et realisateurs. Les requêtes de création de ces tables sans contrainte d'intégrité seraient quelque chose du genre:
CREATE TABLE realisateurs (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(64) NOT NULL,
prenom VARCHAR(64));
CREATE TABLE films (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
titre VARCHAR(64) NOT NULL,
realisateur_id INT);
Avec une contrainte d'intégrité les requêtes deviennent:
CREATE TABLE realisateurs (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(64) NOT NULL,
prenom VARCHAR(64)
) TYPE=INNODB;
CREATE TABLE films (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
titre VARCHAR(64) NOT NULL,
realisateur_id INT,
FOREIGN KEY (realisateur_id) REFERENCES realisateurs (id)
) TYPE=INNODB;