¿Cómo mover columnas en una tabla MySQL?

Resuelto sumit asked hace 13 años • 6 respuestas

Actualmente tengo la siguiente tabla MySQL:Employees (empID, empName, department);

Quiero cambiar la tabla a la siguiente:Employees (empID, department, empName);

¿ Cómo se puede hacer esto usando ALTERdeclaraciones?

Nota: quiero cambiar solo las posiciones de las columnas.

sumit avatar Jul 24 '11 14:07 sumit
Aceptado

Si empNamees una VARCHAR(50)columna:

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

EDITAR

Según los comentarios, también puedes hacer esto:

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

Tenga en cuenta que la repetición de empNamees deliberada. Tienes que decirle a MySQL que quieres mantener el mismo nombre de columna.

Debes tener en cuenta que ambas versiones de sintaxis son específicas de MySQL. No funcionarán, por ejemplo, en PostgreSQL ni en muchos otros DBMS.

Otra edición: como señaló @Luis Rossi en un comentario, debe especificar completamente la definición de columna modificada justo antes del AFTERmodificador. Los ejemplos anteriores solo tienen VARCHAR(50), pero si necesita otras características (como NOT NULLun valor predeterminado), debe incluirlas también. Consulte los documentosALTER TABLE para obtener más información.

Ted Hopp avatar Jul 24 '2011 07:07 Ted Hopp

Cambiar la posición de la columna:

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

Si necesita moverlo a la primera posición, debe usar el término PRIMERO al final de la consulta ALTER TABLE CHANGE [COLUMNA]:

ALTER TABLE UserOrder 
   CHANGE order_id order_id INT(11) NOT NULL FIRST;
Igor Kostin avatar Jul 09 '2013 00:07 Igor Kostin

phpMyAdmin proporciona una GUI para esto dentro de la vista de estructura de una tabla. Marque para seleccionar la columna que desea mover y haga clic en la acción de cambio en la parte inferior de la lista de columnas. Luego puede cambiar todas las propiedades de la columna y encontrará la función "mover columna" en el extremo derecho de la pantalla.

Por supuesto, todo esto es simplemente construir las consultas en la respuesta principal perfectamente buena, pero los fanáticos de la GUI podrían apreciar la alternativa.

mi versión de phpMyAdmin es 4.1.7

 avatar May 19 '2014 20:05

Tuve que ejecutar esto para una columna introducida en las últimas etapas de un producto, en más de 10 tablas. Así que escribí este script rápido y desordenado para generar el comando de modificación para todas las tablas "relevantes".

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);
uchamp avatar Jun 20 '2017 06:06 uchamp