SQL Leçon 4
Créer des tables
Décrire une table avec CREATE TABLE : choisir les types de colonnes, la clé primaire et les règles.
À la fin de cette leçon, tu sauras
- Créer une table avec CREATE TABLE
- Choisir le bon type pour chaque colonne
- Définir une clé primaire et des contraintes
CREATE TABLE
Avant de ranger des données, on décrit la table : son nom, ses colonnes et le type de chacune.
CREATE TABLE eleves (
id INT PRIMARY KEY AUTO_INCREMENT,
prenom VARCHAR(50) NOT NULL,
nom VARCHAR(50) NOT NULL,
age INT,
ville VARCHAR(80) DEFAULT 'Chartres',
inscrit_le DATE
);Les types les plus courants
INT: un nombre entier ;DECIMAL(6, 2): un nombre à virgule exact, idéal pour les prix (6 chiffres dont 2 après la virgule) ;VARCHAR(50): un texte court, ici 50 caractères au maximum ;TEXT: un texte long (un message, une description) ;DATE,DATETIME: une date, une date avec l'heure ;BOOLEAN: vrai ou faux.
Les contraintes
PRIMARY KEY: la clé primaire, qui identifie chaque ligne de façon unique. Presque toutes les tables en ont une, souvent une colonneid;AUTO_INCREMENT: la base remplit l'idtoute seule (1, 2, 3…) ;NOT NULL: la colonne doit obligatoirement avoir une valeur ;UNIQUE: deux lignes ne peuvent pas avoir la même valeur (utile pour un e-mail) ;DEFAULT: la valeur utilisée si on n'en donne pas.
Astuce : AUTO_INCREMENT s'écrit ainsi dans MySQL et MariaDB. Avec SQLite, on écrit id INTEGER PRIMARY KEY AUTOINCREMENT, et PostgreSQL utilise SERIAL. Le reste du SQL est presque identique partout.
Supprimer une table
DROP TABLE eleves;Attention : DROP TABLE supprime la table et toutes ses données, définitivement.
À toi de jouer
Crée une table produits avec :
- une colonne
id, nombre entier, clé primaire, remplie automatiquement ; - une colonne
nom, texte de 100 caractères maximum, obligatoire ; - une colonne
prix, nombre décimalDECIMAL(6, 2).
Pour vérifier, ajoute ensuite un produit avec INSERT et affiche la table avec SELECT * FROM produits;.
Écris une requête : elle s'exécute pendant que tu tapes, sur une base d'exemple qui repart de zéro à chaque fois.
Voir les tables de la base d'exemple
classes (3 lignes)
| id | nom |
|---|---|
| 1 | BTS SIO 1 |
| 2 | BTS SIO 2 |
| 3 | Terminale STMG |
eleves (7 lignes)
| id | prenom | nom | age | ville | classe_id |
|---|---|---|---|---|---|
| 1 | Léa | Martin | 18 | Chartres | 1 |
| 2 | Tom | Bernard | 19 | Dreux | 2 |
| 3 | Inès | Petit | 18 | Chartres | 1 |
| 4 | Hugo | Durand | 20 | Paris | 2 |
| 5 | Chloé | Lambert | 17 | Lucé | 3 |
| 6 | Nathan | Dubois | 19 | Chartres | 1 |
| 7 | Sarah | Moreau | 18 | Dreux | NULL |
notes (9 lignes)
| id | eleve_id | matiere | note |
|---|---|---|---|
| 1 | 1 | Développement | 16 |
| 2 | 1 | Réseau | 12 |
| 3 | 2 | Développement | 11 |
| 4 | 2 | Réseau | 15 |
| 5 | 3 | Développement | 18 |
| 6 | 4 | Réseau | 9 |
| 7 | 6 | Développement | 13 |
| 8 | 6 | Réseau | 14 |
| 9 | 5 | Gestion | 15 |
- La table produits existe vraiment, avec les colonnes id, nom et prix
- La table produits est créée
- id est un entier, clé primaire
- id est rempli automatiquement
- nom est un VARCHAR(100) obligatoire
- prix est un DECIMAL(6, 2)
Bravo, toutes les consignes sont réussies !
Bloqué ? Voir une solution
CREATE TABLE produits (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(100) NOT NULL,
prix DECIMAL(6, 2)
);