MySQL : bases et tables
Création et modification de la structure : bases, tables, colonnes, contraintes. Les exemples construisent la base boutique, réutilisée dans les pages suivantes.
Bases de données
Section intitulée « Bases de données »CREATE DATABASE boutique CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;SHOW DATABASES;USE boutique;SHOW CREATE DATABASE boutique;-- DROP DATABASE boutique; -- supprime la base et tout son contenuutf8mb4 couvre tous les caractères Unicode (dont les émojis) : à utiliser plutôt que l’ancien utf8. Le suffixe _ai_ci signifie comparaisons insensibles aux accents et à la casse.
Types de données courants
Section intitulée « Types de données courants »| Type | Usage |
|---|---|
INT, BIGINT |
Entiers (UNSIGNED pour les valeurs positives uniquement) |
DECIMAL(10,2) |
Nombres exacts (montants) : 10 chiffres dont 2 décimales |
FLOAT, DOUBLE |
Nombres approchés (mesures), à éviter pour l’argent |
VARCHAR(255) |
Texte de longueur variable limitée |
TEXT |
Texte long |
BOOLEAN |
Vrai ou faux (stocké en TINYINT(1)) |
DATE, DATETIME, TIMESTAMP |
Date, date et heure, horodatage |
ENUM('a','b') |
Une valeur parmi une liste |
JSON |
Document JSON |
Créer des tables
Section intitulée « Créer des tables »CREATE TABLE clients ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, nom VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL, ville VARCHAR(100), cree_le TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uq_clients_email (email)) ENGINE=InnoDB;
CREATE TABLE commandes ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, client_id INT UNSIGNED NOT NULL, montant DECIMAL(10,2) NOT NULL, statut ENUM('nouvelle','payee','expediee','annulee') NOT NULL DEFAULT 'nouvelle', passee_le DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), CONSTRAINT fk_commandes_client FOREIGN KEY (client_id) REFERENCES clients (id) ON DELETE CASCADE, CONSTRAINT ck_commandes_montant CHECK (montant >= 0)) ENGINE=InnoDB;PRIMARY KEY: identifiant unique de chaque ligne ;AUTO_INCREMENTle génère automatiquement.FOREIGN KEY: garantit queclient_iddésigne un client existant ;ON DELETE CASCADEsupprime les commandes d’un client supprimé.CHECK: contrainte vérifiée à chaque insertion et modification (appliquée depuis MySQL 8.0.16).- InnoDB est le moteur par défaut : il gère les transactions et les clés étrangères.
Inspecter le schéma
Section intitulée « Inspecter le schéma »SHOW TABLES;DESCRIBE clients;SHOW CREATE TABLE commandes\GSHOW INDEX FROM clients;SELECT table_name, table_rows, ROUND((data_length + index_length) / 1024 / 1024, 2) AS taille_moFROM information_schema.tablesWHERE table_schema = 'boutique';Modifier une table
Section intitulée « Modifier une table »ALTER TABLE clients ADD COLUMN telephone VARCHAR(20) AFTER email;ALTER TABLE clients MODIFY COLUMN telephone VARCHAR(30);ALTER TABLE clients RENAME COLUMN telephone TO tel;ALTER TABLE clients DROP COLUMN tel;ALTER TABLE clients ADD INDEX idx_clients_ville (ville);ALTER TABLE clients DROP INDEX idx_clients_ville;RENAME TABLE clients TO clients_archive; -- renommer une tableRENAME TABLE clients_archive TO clients;Vider et supprimer
Section intitulée « Vider et supprimer »TRUNCATE TABLE commandes; -- vide la table (rapide, remet AUTO_INCREMENT à 1)DROP TABLE IF EXISTS essai; -- supprime la tableBonnes pratiques
Section intitulée « Bonnes pratiques »- Une clé primaire sur chaque table.
DECIMALpour les montants, jamaisFLOAT.NOT NULLpar défaut,NULLseulement quand l’absence de valeur a un sens.- Des noms en minuscules, sans espaces ni accents (
passee_le). - Des clés étrangères pour garantir la cohérence des données.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuel : CREATE TABLE
- Suite : Requêtes SQL