web-dev-qa-db-fra.com

Comment déplacer des colonnes dans une table MySQL?

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.

182
Sumit Gupta

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.

308
Ted Hopp

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;
62
Igor Kostin

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

11
Matt Bracewell

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);
1
uchamp