Agregar múltiples columnas DESPUÉS de una columna específica en MySQL


362

Necesito agregar varias columnas a una tabla pero colocar las columnas después de una columna llamada lastname.

He intentado esto:

ALTER TABLE `users` ADD COLUMN
(
    `count` smallint(6) NOT NULL,
    `log` varchar(12) NOT NULL,
    `status` int(10) unsigned NOT NULL
) 
AFTER `lastname`;

Me sale este error:

Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para obtener la sintaxis correcta para usar cerca de ') DESPUÉS lastname' en la línea 7


¿Cómo puedo usar DESPUÉS en una consulta como esta?


55
Que dialecto estas hablando A mí me parece mysql. Pero la ALTER TABLEsintaxis varía un poco entre dialectos.
Damien_The_Unbeliever


1
Creo que necesita una palabra clave DESPUÉS en cada una de las columnas que está agregando. Si eso significa que necesita que los 3 sean DESPUÉS del apellido o una declaración ALTER TABLE por columna nueva, no puedo decir con certeza.
Zec

Respuestas:


729

Prueba esto

ALTER TABLE users
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

verificar la sintaxis


66
[ Como información adicional ] múltiple ADD, ALTER, DROP, y CHANGEcláusulas están permitidos en una sola ALTER TABLEdeclaración, separados por comas. Esta es una extensión de MySQL para SQL estándar, que permite solo una de cada cláusula por instrucción ALTER TABLE.
informatik01

@Ayyappan ¿Podemos hacer esto en el servidor SQL?
Roshan

77

Si desea agregar una sola columna después de un campo específico, la siguiente consulta MySQL debería funcionar:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL
    AFTER lastname

Si desea agregar varias columnas, debe usar el comando 'AGREGAR' cada vez para una columna. Aquí está la consulta MySQL para esto:

ALTER TABLE users
    ADD COLUMN count SMALLINT(6) NOT NULL,
    ADD COLUMN log VARCHAR(12) NOT NULL,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL
    AFTER lastname

Punto a tener en cuenta

En el segundo método, la última ADD COLUMN columna debería ser la primera columna que desea agregar a la tabla.

Por ejemplo, si desea agregar count, log, statusen el orden exacto después lastname, la sintaxis en realidad sería la siguiente:

ALTER TABLE users
    ADD COLUMN log VARCHAR(12) NOT NULL AFTER lastname,
    ADD COLUMN status INT(10) UNSIGNED NOT NULL AFTER lastname,
    ADD COLUMN count SMALLINT(6) NOT NULL AFTER lastname

3
La segunda versión funcionó perfectamente bien para mí. Estoy usando MySql 5.5.25.
Norman

¿el último bit de código de añadir las columnas en el orden count, log, statuso count, status, log?
Sarfaraaz

1
nota: si no agrega el bit 'DESPUÉS del apellido', entonces el orden en el que aparece la última columna que coloca en esa lista de tablas alternativas no se aplica realmente. Entonces, cuando haga la tabla ALTER TABLE ADD COLUMN blah1, ADD COLUMN blah2; (tenga en cuenta la cláusula 'DESPUÉS'), la columna blah1 se agregará primero, luego blah2.
Hongyi Li

10

No puede mencionar varios nombres de columna con comas usando ADD COLUMN. Debe mencionar ADD COLUMNcada vez que defina una nueva columna.


44
Di

9

Este es correcto:

ALTER TABLE `users`
    ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`,
    ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `count`,
    ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `log`;

3
ALTER TABLE `users` ADD COLUMN
`COLUMN NAME` DATATYPE(SIZE) AFTER `EXISTING COLUMN NAME`;

Puedes hacerlo con esto, trabajando bien para mí.


1

Una posibilidad sería no molestarse en reordenar las columnas de la tabla y simplemente modificarla agregando las columnas. Luego, cree una vista que tenga las columnas en el orden que desee, suponiendo que el orden sea realmente importante. La vista se puede cambiar fácilmente para reflejar cualquier pedido que desee. Como no puedo imaginar que el orden sea importante para aplicaciones programáticas, la vista debería ser suficiente para aquellas consultas manuales en las que podría ser importante.


44
si puedo agregar mis dos centavos, la "ubicación", ya sean columnas o filas de la tabla, no debería ser importante. Las hojas de cálculo usan la ubicación para encontrar cosas, las bases de datos no.
Mike S.

1

ALTER TABLE listingADD countINT (5), ADD logVARCHAR (200), ADD statusVARCHAR (20) DESPUÉS de stat

Dará buenos resultados.


0

Esto funciona bien para mi:

ALTER TABLE 'users'
ADD COLUMN 'count' SMALLINT(6) NOT NULL AFTER 'lastname',
ADD COLUMN 'log' VARCHAR(12) NOT NULL AFTER 'count',
ADD COLUMN 'status' INT(10) UNSIGNED NOT NULL AFTER 'log';

Robar un comentario para obtener votos. No hagas eso amigo.
MBouwman el

0

La solución que funcionó para mí con el valor predeterminado 0 es la siguiente

ALTER TABLE reservations ADD COLUMN isGuest BIT DEFAULT 0

0

Alternativamente:

ALTER TABLE users
ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `lastname`,
ADD COLUMN `log` VARCHAR(12) NOT NULL AFTER `lastname`,
ADD COLUMN `count` SMALLINT(6) NOT NULL AFTER `lastname`;

Los colocará en el orden que desee mientras racionaliza la declaración DESPUÉS.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.