La commande SQL RENAME (ou ses équivalents) change le nom d’une table existante sans modifier ses données ni sa structure. Elle est utile pour normaliser des conventions de nommage incohérentes ou clarifier le schéma d’une base en production. Pour les modifications sur les colonnes, voir l’article dédié à ALTER TABLE.
Table des matières
Pourquoi utiliser la commande RENAME en SQL ?
Cette instruction corrige les noms de tables créés avec des conventions devenues incohérentes au fil du temps ce qui facilite la maintenance par différentes équipes de développement. En revanche, les vues et procédures stockées nécessitent une mise à jour manuelle des références internes.
Syntaxes de la commande RENAME en fonction des systèmes de gestion de base de données
La syntaxe varie selon le moteur utilisé :
| SGBD | Commande |
|---|---|
| MySQL / MariaDB | RENAME TABLE ancien TO nouveau |
| PostgreSQL | ALTER TABLE ancien RENAME TO nouveau |
| SQL Server | EXEC sp_rename 'ancien', 'nouveau', 'OBJECT' |
Renommer une table
MySQL / MariaDB
MySQL exécute RENAME TABLE de manière atomique : soit toutes les opérations réussissent, soit aucune n’est appliquée. Le moteur vérifie que le nouveau nom n’existe pas déjà avant d’appliquer le changement.
-- Renommage simple
RENAME TABLE clients_old TO clients;
-- Renommages multiples en une seule instruction
RENAME TABLE produits_v1 TO produits, commandes_temp TO commandes;
PostgreSQL
PostgreSQL intègre RENAME TO dans la famille ALTER TABLE. Le schéma de la table reste inchangé. En revanche, PostgreSQL ne permet pas de renommer plusieurs tables en une seule instruction — une requête par table est obligatoire.
-- Renommage simple
ALTER TABLE clients_legacy RENAME TO clients;
-- Avec schéma explicite
ALTER TABLE public.commandes_old RENAME TO commandes;
SQL Server
SQL Server utilise la procédure système sp_rename. Le troisième paramètre ('OBJECT', 'COLUMN', 'INDEX') précise le type d’objet à renommer. Les métadonnées système sont mises à jour automatiquement.
-- Renommer une table
EXEC sp_rename 'dbo.clients_old', 'clients', 'OBJECT';
-- Renommer une colonne (même procédure, paramètre différent)
EXEC sp_rename 'dbo.commandes.numero_old', 'numero_commande', 'COLUMN';
Objets renommables
| Objet | MySQL | PostgreSQL | SQL Server |
|---|---|---|---|
| Table | ✅ RENAME TABLE | ✅ ALTER TABLE...RENAME TO | ✅ sp_rename...'OBJECT' |
| Colonne | ✅ ALTER TABLE...CHANGE | ✅ ALTER TABLE...RENAME COLUMN | ✅ sp_rename...'COLUMN' |
| Index | ✅ ALTER TABLE...RENAME INDEX | ✅ ALTER INDEX...RENAME TO | ✅ sp_rename...'INDEX' |
Avant de renommer : auditer les dépendances
Un renommage casse silencieusement les vues, procédures et triggers qui référencent l’ancien nom. Ces requêtes identifient les objets à mettre à jour avant d’exécuter le RENAME.
-- Vues qui dépendent de la table cible
SELECT view_name
FROM information_schema.view_table_usage
WHERE table_name = 'table_ancien_nom';
-- Procédures stockées qui contiennent l'ancien nom
SELECT routine_name
FROM information_schema.routines
WHERE routine_definition LIKE '%table_ancien_nom%';
Bonnes pratiques
- Sauvegarder la table source avant tout renommage en production.
- Auditer les dépendances (vues, procédures, triggers) avant d’exécuter la commande.
- Informer les équipes applicatives qui utilisent l’ancien nom dans leur code.
- Valider immédiatement après le renommage avec une requête simple.
-- Vérification post-renommage
SELECT * FROM nouvelle_table LIMIT 5;
SHOW CREATE TABLE nouvelle_table;
Cas pratique : normalisation e-commerce
Migration de noms de tables au singulier vers le pluriel standard :
-- Renommage groupé (MySQL)
RENAME TABLE product TO products,
order TO orders,
user TO users;
-- Vérification
SELECT COUNT(*) FROM products;
SELECT COUNT(*) FROM orders;
SELECT COUNT(*) FROM users;
⚠️
ORDERest un mot réservé en SQL. Si la table s’appelle réellementorder, elle doit être entourée de backticks en MySQL :`order`.
Erreurs courantes
-- ❌ Nouveau nom déjà utilisé par une autre table
RENAME TABLE clients TO users; -- ERREUR si "users" existe déjà
-- ✅ Vérifier l'existence avant
SHOW TABLES LIKE 'users';
RENAME TABLE clients TO users;
-- ❌ PostgreSQL : tentative de renommer deux tables en une requête
ALTER TABLE clients RENAME TO customers,
ALTER TABLE orders RENAME TO commandes; -- ERREUR
-- ✅ Une requête par table
ALTER TABLE clients RENAME TO customers;
ALTER TABLE orders RENAME TO commandes;