Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Tables et clés

Après cette leçon: Je peux créer des tables avec des clés dans une base de données relationnelle.

Leçon de 55 min13 commandesLab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Deux machines, une seule étiquette

Le service informatique d'une entreprise note son parc d'ordinateurs dans un tableur. Deux portables ont reçu la même étiquette, PC-014.

Une panne est signalée sur PC-014. Le technicien se rend chez la mauvaise personne et remplace la mauvaise machine.

Une base de données empêche cette erreur. Elle refuse la seconde étiquette PC-014 avant que le mal ne soit fait.

À la fin de cette leçon

Remarque

Je peux créer des tables avec des clés dans une base de données relationnelle.

Mots clés

MotCe que ça veut direExemple
Tabledes lignes et des colonnes qui décrivent une seule sorte de chose
Type de donnéela sorte de valeur qu'une colonne accepteINT
Clé primairela colonne qui identifie chaque ligne, sans doublon possibleid
Clé étrangèreune colonne qui désigne une ligne d'une autre tableservice_id
Contrainteune règle que la base vérifie à chaque changementNOT NULL
NULLla marque d'une valeur manquante

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une table décrit une seule sorte de chose

Une base relationnelle range ses données dans des tables. Une table décrit une seule sorte de chose : des clients, des produits ou des commandes.

Chaque colonne a un type de donnée. La base refuse du texte dans une colonne de nombres.

Avant tout, dites au terminal comment se connecter. Ces deux Runs servent pour toute la leçon.

Accepter le certificat du serveur

Commande
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un nom court pour la boutique

Commande
alias sql='mariadb -h db -u student -pstudent shop -t -e'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Les colonnes de la table products

Commande
sql "DESCRIBE products"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple : choisir un type

Fait à rangerTypePourquoi
Un nombre d'articlesINTDes nombres entiers seulement
Un prix en eurosDECIMAL(8,2)Les centimes exacts, sans erreur d'arrondi
Le nom d'une villeVARCHAR(40)Du texte de 40 caractères au plus
Un jour d'achatDATELa base sait compter les jours entre deux dates
Machine hors service ou nonBOOLEANSeulement oui ou non

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une clé primaire identifie chaque ligne

Une clé primaire est une colonne dont la valeur est différente dans chaque ligne. Elle ne peut jamais être NULL.

C'est souvent un numéro que la base compte seule : AUTO_INCREMENT. La base refuse une seconde ligne avec la même clé.

Une clé peut aussi réunir deux colonnes. C'est alors le couple qui doit être unique.

Une clé faite de deux colonnes

Commande
sql "DESCRIBE order_items"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent qu'un nom ou un courriel fait une bonne clé primaire. Les noms se répètent et les gens changent de courriel. Prenez un numéro compté par la base. Gardez le courriel dans une colonne UNIQUE à côté.

Une clé étrangère désigne une autre table

Un ordinateur appartient à un service. La table des ordinateurs ne recopie pas la description du service. Elle garde son numéro.

Cette colonne est une clé étrangère. La base vérifie que ce numéro existe dans la table des services.

On ne peut donc pas affecter une machine à un service qui n'existe pas.

Construisez deux tables à vous

Le laboratoire vous laisse créer toute base dont le nom commence par student_. Vous allez créer student_parc pour un petit parc informatique.

La base de la boutique reste intacte. Lancez ces Runs dans l'ordre. Un Run qui finit par une erreur fait partie de la leçon.

Créer votre base

Commande
sql "CREATE DATABASE IF NOT EXISTS student_parc"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un nom court pour elle

Commande
alias parc='mariadb -h db -u student -pstudent student_parc -t -e'

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Repartir de zéro : supprimer les deux tables

Commande
parc "DROP TABLE IF EXISTS ordinateurs, services"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer la table services

Commande
parc "CREATE TABLE services (id INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(40) NOT NULL UNIQUE, etage INT NOT NULL DEFAULT 0)"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer la table ordinateurs

Commande
parc "CREATE TABLE ordinateurs (id INT AUTO_INCREMENT PRIMARY KEY, etiquette VARCHAR(10) NOT NULL UNIQUE, service_id INT NOT NULL, prix DECIMAL(8,2) NOT NULL, achete_le DATE NOT NULL, FOREIGN KEY (service_id) REFERENCES services(id))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ajouter deux services

Commande
parc "INSERT INTO services (nom, etage) VALUES ('Comptabilite', 2), ('Juridique', 3)"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une machine pour le service 9

Commande
parc "INSERT INTO ordinateurs (etiquette, service_id, prix, achete_le) VALUES ('PC-001', 9, 899.00, '2026-03-02')"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ajouter Juridique une seconde fois

Commande
parc "INSERT INTO services (nom) VALUES ('Juridique')"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Essayer de supprimer la table services

Commande
parc "DROP TABLE services"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Pour aller plus loin

Donnez un utilisateur à chaque machine. Créez dans student_parc une table utilisateurs avec un numéro en clé primaire, un nom et un numéro de badge UNIQUE.

Ajoutez ensuite à ordinateurs une colonne utilisateur_id avec ALTER TABLE, et une clé étrangère vers utilisateurs. Prouvez que chaque règle fonctionne avec une ligne qui l'enfreint.

À propos de ce labo et de sa source: Lab MySQL et phpMyAdmin avec une base de boutique pour s’exercer en SQL

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.