Mission Carthage

Accueil › Cours › Bases de données : créer les tables

Bases de données MySQL : créer les tables, clés et contraintes

Chapitre 27 · 3ème SI, Bac SI

Organise des données en tables reliées : champs, types, clé primaire, clé étrangère, contraintes, puis remplis et modifie les tables en SQL.

Les leçons de ce chapitre

  1. Tables, champs et types
  2. Clés étrangères et contraintes
  3. Remplir et modifier une table

Leçon 27.1 : Tables, champs et types

10 min

Une base de données range des informations dans des tables. Une table ressemble à un tableau : chaque colonne est un champ (nom, prénom, moyenne…) et chaque ligne est un enregistrement (un élève).

La clé primaire

La clé primaire est le champ qui identifie chaque ligne : deux lignes n'ont jamais la même valeur, et elle n'est jamais vide. Dans le schéma d'une table, on la souligne (ici en gras) : eleve (id, nom, prenom, moyenne).

Les types de MySQL

Créer la base et une table

CREATE DATABASE ecole;
USE ecole;
CREATE TABLE eleve (
  id INT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  prenom VARCHAR(30) NOT NULL,
  moyenne DECIMAL(4,2)
);

NOT NULL oblige à remplir le champ. La commande DESCRIBE eleve; affiche la structure de la table : ses champs, leurs types, la clé.

Attention : Une virgule sépare les champs, mais il n'y en a pas après le dernier. Et VARCHAR a toujours sa taille : VARCHAR(30), jamais VARCHAR seul.

En SQL

Exécute le script et lis le résultat de DESCRIBE. Puis ajoute un champ ville VARCHAR(20) à la table et exécute de nouveau.

CREATE DATABASE ecole;
USE ecole;
CREATE TABLE eleve (
  id INT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  prenom VARCHAR(30) NOT NULL,
  moyenne DECIMAL(4,2)
);
DESCRIBE eleve;

Leçon 27.2 : Clés étrangères et contraintes

12 min

Les tables d'une base sont reliées. Une classe a plusieurs élèves, un élève est dans une seule classe : c'est une relation un à plusieurs (1:n). On la représente par une clé étrangère : la table eleve garde le code de sa classe.

Dans le schéma, la clé étrangère est précédée de # : classe (code, niveau) et eleve (id, nom, #code_classe).

CREATE TABLE classe (
  code VARCHAR(5) PRIMARY KEY,
  niveau VARCHAR(20) NOT NULL
);
CREATE TABLE eleve (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  code_classe VARCHAR(5),
  FOREIGN KEY (code_classe) REFERENCES classe(code)
);

Les contraintes d'intégrité

Astuce : AUTO_INCREMENT numérote tout seul : à l'insertion, on ne donne pas l'id, MySQL met 1, 2, 3…

Une relation plusieurs à plusieurs (n:m), par exemple des élèves inscrits à plusieurs clubs, se fait avec une table de plus qui contient les deux clés étrangères ; sa clé primaire est faite des deux champs : PRIMARY KEY (id_eleve, code_club).

En SQL

Exécute le script. Puis enlève les -- devant la dernière ligne et exécute de nouveau : cet INSERT est refusé (erreur #1452), car la classe 9Z n'existe pas.

CREATE TABLE classe (
  code VARCHAR(5) PRIMARY KEY,
  niveau VARCHAR(20) NOT NULL
);
CREATE TABLE eleve (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  code_classe VARCHAR(5),
  FOREIGN KEY (code_classe) REFERENCES classe(code)
);
INSERT INTO classe VALUES ('3SI1', '3ème SI');
INSERT INTO eleve (nom, code_classe) VALUES ('Trabelsi', '3SI1');
SELECT * FROM eleve;
-- INSERT INTO eleve (nom, code_classe) VALUES ('Jaziri', '9Z');

Leçon 27.3 : Remplir et modifier une table

10 min

Insérer des lignes : INSERT INTO

INSERT INTO eleve VALUES (1, 'Ben Salah', 'Amine', 12.50);
INSERT INTO eleve (id, nom, prenom) VALUES (2, 'Trabelsi', 'Sarra');
INSERT INTO eleve (id, nom, prenom, moyenne) VALUES
  (3, 'Jaziri', 'Yassine', 9.75),
  (4, 'Mansour', 'Rim', 14.00);

Modifier la structure : ALTER TABLE

ALTER TABLE eleve ADD tel VARCHAR(8);
ALTER TABLE eleve MODIFY nom VARCHAR(40) NOT NULL;
ALTER TABLE eleve DROP COLUMN tel;

ADD ajoute un champ, MODIFY change son type ou ses règles, DROP COLUMN le supprime. DROP TABLE eleve; supprime toute la table, avec ses lignes.

Attention : Une date s'écrit toujours 'AAAA-MM-JJ' : '15/06/2009' est refusé (erreur #1292).

En SQL

Exécute, puis ajoute un cinquième élève avec un seul INSERT et regarde le résultat du SELECT.

CREATE TABLE eleve (
  id INT PRIMARY KEY,
  nom VARCHAR(30) NOT NULL,
  prenom VARCHAR(30) NOT NULL,
  moyenne DECIMAL(4,2)
);
INSERT INTO eleve VALUES (1, 'Ben Salah', 'Amine', 12.50);
INSERT INTO eleve (id, nom, prenom) VALUES (2, 'Trabelsi', 'Sarra');
ALTER TABLE eleve ADD ville VARCHAR(20) DEFAULT 'Tunis';
SELECT * FROM eleve;

S'entraîner gratuitement

Chaque leçon a 3 exercices gratuits avec indices pour appliquer ce chapitre avec Hannibot.

Ouvrir le chapitre dans Mission Carthage Essayer dans le compilateur en ligne

← Chapitre précédent : JavaScript et la page · Chapitre suivant : Requêtes SQL simples →

Tous les chapitres · Voir les devoirs corrigés de 2ème TI

Cours écrit pour Mission Carthage d'après le programme officiel. Ton professeur reste la référence.