Question

Actuellement, j'ai la table MySQL suivante: Employees (empID, empName, department);

Je souhaite modifier la table à ce qui suit: Employees (empID, department, empName);

Comment cela peut-il être fait en utilisant des déclarations de ALTER?

Note: Je veux changer de position que la colonne.

Était-ce utile?

La solution

Si EmpName est une colonne VARCHAR (50):

ALTER TABLE Employees MODIFY COLUMN empName VARCHAR(50) AFTER department;

EDIT

Par les commentaires, vous pouvez aussi faire ceci:

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 dire à MySQL que vous voulez garder le même nom de colonne.

Vous devez savoir que les deux versions de syntaxe sont spécifiques à MySQL. Ils ne fonctionnent pas, par exemple, dans PostgreSQL ou plusieurs autres SGBD.

Une autre édition: 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 de AFTER. Les exemples ci-dessus ont juste VARCHAR(50), mais si vous avez besoin d'autres caractéristiques (comme NOT NULL ou une valeur par défaut), vous devez inclure ceux aussi bien. Consultez les docs sur ALTER TABLE pour plus d'informations.

Autres conseils

Change column position:

ALTER TABLE Employees 
   CHANGE empName empName VARCHAR(50) NOT NULL AFTER department;

If you need to move it to the first position you have to use term FIRST at the end of ALTER TABLE CHANGE [COLUMN] query:

ALTER TABLE UserOrder 
   CHANGE order_id order_id INT(11) NOT NULL FIRST;

phpMyAdmin provides a GUI for this within the structure view of a table. Check to select the column you want to move and click the change action at the bottom of the column list. You can then change all of the column properties and you'll find the 'move column' function at the far right of the screen.

Of course this is all just building the queries in the perfectly good top answer but GUI fans might appreciate the alternative.

my phpMyAdmin version is 4.1.7

I had to run this for a column introduced in the later stages of a product, on 10+ tables. So wrote this quick untidy script to generate the alter command for all 'relevant' tables.

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top