Aller au contenu

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.

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 contenu

utf8mb4 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.

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
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_INCREMENT le génère automatiquement.
  • FOREIGN KEY : garantit que client_id désigne un client existant ; ON DELETE CASCADE supprime 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.
SHOW TABLES;
DESCRIBE clients;
SHOW CREATE TABLE commandes\G
SHOW INDEX FROM clients;
SELECT table_name, table_rows, ROUND((data_length + index_length) / 1024 / 1024, 2) AS taille_mo
FROM information_schema.tables
WHERE table_schema = 'boutique';
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 table
RENAME TABLE clients_archive TO clients;
TRUNCATE TABLE commandes; -- vide la table (rapide, remet AUTO_INCREMENT à 1)
DROP TABLE IF EXISTS essai; -- supprime la table
  • Une clé primaire sur chaque table.
  • DECIMAL pour les montants, jamais FLOAT.
  • NOT NULL par défaut, NULL seulement 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.