J'ai actuellement la table MySQL suivante: Employees (empID, empName, department);
Je souhaite modifier le tableau comme suit: Employees (empID, department, empName);
Comment cela peut-il être fait en utilisant les instructions ALTER
?
Remarque: je souhaite modifier uniquement les positions de colonne.
Si empName est une colonne VARCHAR (50):
ALTER TABLE Employees MODIFY COLUMN empName VARCHAR(50) AFTER department;
EDIT
Selon les commentaires, vous pouvez également le faire:
ALTER TABLE Employees CHANGE COLUMN empName empName VARCHAR(50) AFTER department;
Notez que la répétition de empName
est délibérée. Vous devez indiquer à MySQL que vous souhaitez conserver le même nom de colonne.
Vous devez savoir que les deux versions de syntaxe sont spécifiques à MySQL. Ils ne fonctionneront pas, par exemple, dans PostgreSQL ou dans de nombreux autres SGBD.
Autre modification: comme l'a souligné @Luis Rossi dans un commentaire, vous devez spécifier complètement la définition de colonne modifiée juste avant le modificateur AFTER
. Les exemples ci-dessus n'ont que VARCHAR(50)
, mais si vous avez besoin d'autres caractéristiques (telles que NOT NULL
ou une valeur par défaut), vous devez également les inclure. Consultez la documentation sur ALTER TABLE
pour plus d'informations.
Changer la position de la colonne:
ALTER TABLE Employees
CHANGE empName empName VARCHAR(50) NOT NULL AFTER department;
Si vous devez le déplacer à la première position, vous devez utiliser le terme FIRST à la fin de la requête ALTER TABLE CHANGE [COLUMN]:
ALTER TABLE UserOrder
CHANGE order_id order_id INT(11) NOT NULL FIRST;
phpMyAdmin fournit une interface graphique pour cela dans la vue de la structure d'une table. Cochez pour sélectionner la colonne que vous souhaitez déplacer et cliquez sur l'action de modification au bas de la liste des colonnes. Vous pouvez ensuite changer toutes les propriétés de la colonne et vous trouverez la fonction 'déplacer la colonne' à l'extrême droite de l'écran.
Bien sûr, il ne s’agit que de construire les requêtes dans la réponse parfaite, mais les fans de GUI pourraient apprécier l’alternative.
ma version de phpMyAdmin est 4.1.7
Je devais l'exécuter pour une colonne introduite au cours des dernières étapes d'un produit, sur plus de 10 tables. Ainsi a écrit ce script désordonné rapide pour générer la commande alter pour toutes les tables "pertinentes".
SET @NeighboringColumn = '<YOUR COLUMN SHOULD COME AFTER THIS COLUMN>';
SELECT CONCAT("ALTER TABLE `",t.TABLE_NAME,"` CHANGE COLUMN `",COLUMN_NAME,"`
`",COLUMN_NAME,"` ", c.DATA_TYPE, CASE WHEN c.CHARACTER_MAXIMUM_LENGTH IS NOT
NULL THEN CONCAT("(", c.CHARACTER_MAXIMUM_LENGTH, ")") ELSE "" END ," AFTER
`",@NeighboringColumn,"`;")
FROM information_schema.COLUMNS c, information_schema.TABLES t
WHERE c.TABLE_SCHEMA = '<YOUR SCHEMA NAME>'
AND c.COLUMN_NAME = '<COLUMN TO MOVE>'
AND c.TABLE_SCHEMA = t.TABLE_SCHEMA
AND c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_TYPE = 'BASE TABLE'
AND @NeighboringColumn IN (SELECT COLUMN_NAME
FROM information_schema.COLUMNS c2
WHERE c2.TABLE_NAME = t.TABLE_NAME);