You are on page 1of 5

USOS DE ALTER EN (MYSQL):

ALTER TABLE permite modificar la estructura de una tabla existente. Por ejemplo, se pueden
aadir o eliminar columnas, crear y destruir ndices, cambiar el tipo de una columna existente o
renombrar columnas o la propia tabla. Tambin es posible modificar el comentario y el tipo de la
tabla.
Si se usa ALTER TABLE para cambiar la especificacin de una columna pero tbl_name indica que la
columna no ha cambiado, es posible que MySQL haya ignorado la modificacin por alguna razn.
Por ejemplo, si se ha intentado cambiar una columna VARCHAR a CHAR, MySQL seguir
usandoVARCHAR si la tabla contiene otras columnas de longitud variable.
ALTER TABLE trabaja haciendo una copia temporal de la tabla original. La modificacin se realiza
durante la copia, a continuacin la tabla original se borra y la nueva se renombra. Esto se hace
para realizar que todas las actualizaciones se dirijan a la nueva tabla sin ningn fallo de
actualizacin. Mientras ALTER TABLE se ejecuta, la tabla original permanece accesible en lectura
para otros clientes. Las actualizaciones y escrituras en la tabla se retrasan hasta que la nueva tabla
est preparada.
Hay que tener en cuenta que si se usa otra opcin para ALTER TABLE como RENAME, MySQL
siempre crear una tabla temporal, aunque no sea estrictamente necesario copiarla (como cuando
se cambia el nombre de una columna). Est previsto corregir esto en el futuro, pero como no es
corriente usar ALTER TABLE para hacer esto, no es algo urgente de hacer. Para tablas MyISAM, se
puede aumentar la velocidad de la recreacin de ndices (que es la parte ms lenta del proceso)
asignando un valor alto a la variable myisam_sort_buffer_size.

Para usar ALTER TABLE, es necesario tener los privilegios ALTER, INSERT y CREATE en
la tabla.

IGNORE es una extensin MySQL a SQL-92. Controla el modo de trabajar de ALTER
TABLE si hay claves duplicadas o nicas en la nueva tabla. Si no se especifica IGNORE,
la copia se aborta y se deshacen los cambios. Si se especifica IGNORE, en las filas
duplicadas en una clave nica slo se copia la primera fila; el resto se eliminan.

Se pueden usar mltiples clasulas ADD, ALTER, DROP y CHANGE en una sentencia
sencilla ALTER TABLE. Esto es una extensin MySQL aSQL-92, que permite slo una
aparicin de cada clusula en una sentencia ALTER TABLE.

CHANGE col_name, DROP col_name y DROP INDEX tambin son extensiones MySQL
a SQL-92.

MODIFY es una extensin Oracle a ALTER TABLE.

La palabra opcional COLUMN es una palabra ruidosa y puede ser omitida.

Si se usa ALTER TABLE tbl_name RENAME TO new_name sin ninguna otra opcin,
MySQL sencillamente renombra los ficheros correspondientes a la tabla tbl_name.
No hay necesidad de crear una tabla temporal.

Las clasulas create_definition usan la misma sintaxis para ADD y CHANGE que . Esta
sintaxis incluye slo el nombre de columna, no el tipo.
Se puede renombrar una columna usando una clusula CHANGE old_col_name
create_definition. Para hacerlo, hay que especificar los nombres antiguo y nuevo de
la columna y el tipo que la columna tiene actualmente. Por ejemplo, para renombrar
una columna INTEGER desde a a b, se puede hacer esto:

mysql> ALTER TABLE t1 CHANGE a b INTEGER;
Si se quiere cambiar el tipo de una columna, pero no su nombre, la sintaxis
de CHANGEsigue necesitando un nombre de columna antiguo y nuevo, aunque
mantenga en mismo nombre. Por ejemplo:

mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
Sin embargo, desde la versin 3.22.16a de MySQL, se puede usar
tambin MODIFY para modificar el tipo de una columna sin renombrarla:

mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
Si se usa CHANGE o MODIFY para acortar una columna para la cual existe un ndice
en parte de la columna (por ejemplo, si se tiene un ndice en los primeros 10
caracteres de una columna VARCHAR), no ser posible acortar la columna a un
nmero de caracteres menos que los indexados.

Cuando se cambia un tipo de columna usando CHANGE o MODIFY, MySQL intenta
convertir datos al nuevo tipo lo mejor posible.

En versiones 3.22 o siguientes de MySQL, se puede usar FIRST o ADD ... AFTER
col_namepara aadir una columna en una posicin especfica dentro de una fila de la
tabla. Por defecto se aade la columna al final. Desde MySQL 4.0.1, se pueden usar
las palabras FIRSTy AFTER en un CHANGE o MODIFY.

ALTER COLUMN especifica un nuevo valor por defecto para una columna o elimina el
valor por defecto anterior. Si se elimina el anterior valor por defecto y la columna
puede ser NULL, el nuevo valor por defecto es NULL. Si la columna no puede ser
NULL, MySQL asigna un nuevo valor por defecto, como se describe en .

DROP INDEX elimina un ndice. Esto es una extensin MySQL para SQL-92. Ver la
sintaxis de .
Si se quitan columnas de una tabla, tambin se eliminan de cualquier ndice de las
que formen parte. Si todas las columnas que forman parte de un ndice se eliminan,
el ndice se elimina tambin.
Si la tabla contiene slo una columna, sta no puede ser eliminada. Si lo que se
pretende es eliminar la tabla, se debe usar .

DROP PRIMARY KEY elimina el ndice primario. Si no existiera ese ndice, se eliminar
el primer ndice UNIQUE de la tabla. (MySQL marca la primera clave UNIQUE como
laPRIMARY KEY si no se ha especificado una PRIMARY KEY explcitamente.) Si se
aade unaUNIQUE INDEX o una PRIMARY KEY a la tabla, se almacena antes de
cualquier ndiceUNIQUE de modo que MySQL pueda detectar claves duplicadas lo
ms pronto posible.

ORDER BY permite crear una nueva tabla con un orden especfico para las filas. La
tabla no permanecer en ese orden despus de nuevas inserciones o borrados. En
alginos casos, es ms fcil hacer que MySQL ordenar si la tabla est indexada por la
columna por la que se desea ordenarla ms tarde. Esta opcin es corriente
principalmente cuando se sabe que se va a consultar la tabla principalmente en un
orden determinado; usando esta opcin despus de grandes campos en la tabla, es
posible obtener un mejor rendimiento.

Si se usa ALTER TABLE en una tabla MyISAM, todos los ndices no nicos sern
creados en un proceso separado (como en ). Esto hace ALTER TABLE mucho ms
rpido cuando existe muchos ndices.

Desde MySQL 4.0 la caracterstica anterior puede ser activada explcitamente. ALTER
TABLE ... DISABLE KEYS hace que MySQL detenga la actualizacin de ndices no
nicos para tablas MyISAM. ALTER TABLE ... ENABLE KEYS debe ser usado para
recrear ndices perdidos. Como MySQL hace esto con un algoritmo especial que es
mucho ms rpido cuando se insertan claves una a una, desactivar las claves puede
proporcionar una considerable mejora de tiempo cuando se inserta gran cantidad de
filas.

Con la funcin del API de C mysql_info, se puede obtener ccuantos registros han sido
copiados, y (si se ha usado IGNORE) cuantos registros fueron borrados por la
duplicacin de valores de clave.

Las clasulas FOREIGN KEY, CHECK y REFERENCES actualmente no hacen nada,
excepto para tablas del tipo InnoDB que soportant ... ADD [CONSTRAINT [symbol]]
FOREIGN KEY (...) REFERENCES ... (...) y ... DROP FOREIGN KEY .... Ver restricciones . La
sintaxis para otros tipos de tabla se proporciona slo por compatibilidad, para hacer
ms fcil portar cdigo desde otros servidores SQL y para ejecutar aplicaciones que
crean tablas con referencias.

ALTER TABLE ignora las opciones de tabla DATA DIRECTORY y INDEX DIRECTORY.

Si se quieren cambiar todas las columnas CHAR/VARCHAR/TEXT a un nuevo juego de
caracteres (por ejemplo despus de actualizar desde MySQL 4.0.x a 4.1.1) se puede
hacer:
ALTER TABLE table_name CHARACTER SET character_set_name;


El comando siguiente slo cambia el juego de caracteres por defecto para la tabla:
ALTER TABLE table_name DEFAULT CHARACTER SET character_set_name;
El juego de caracteres por defecto es el que se usa si no se especifica un juego de
caracteres para una nueva columna que se aada a la tabla (por ejemplo con ALTER
TABLE ... ADD column).
Seguidamente se muestra un ejemplo que demuestra como usar ALTER TABLE. Empezamos
creando una tabla t1 como:
mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));
Para renombrar la tabla de t1 a t2:
mysql> ALTER TABLE t1 RENAME t2;
Para cambiar la columna a de INTEGER a TINYINT NOT NULL (dejando el mismo nombre), y
cambiar la columna b de CHAR(10) a CHAR(20) y adems renombrando de b a c:

mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
Para aadir una columna TIMESTAMP llamada d:
mysql> ALTER TABLE t2 ADD d TIMESTAMP;
Para aadir un ndice en la columna d, y hacer la columna a la clave primaria:
mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
Para eliminar la columna c:
mysql> ALTER TABLE t2 DROP COLUMN c;
Para aadir una nueva columna entera AUTO_INCREMENT llamada c:
mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
ADD INDEX (c);
Anotar que debemos indexar en c, porque las columnas AUTO_INCREMENT deben estar
indexadas, y tambin que hemos declarado c como NOT NULL, proque las columnas indexadas no
pueden ser NULL.
Cuandos e aade una columna AUTO_INCREMENT, los calores de columna se llenan con una
secuencia numrica automticamente. Se puede elegir el primer nmero de la secuencia
ejecutando antes de ALTER TABLE o usando la opcin de tanbla AUTO_INCREMENT=value.
Con tablas MyISAM, si no se modifica la columna AUTO_INCREMENT, la secuencia de numrica no
resultar afectada. Si se elimina una columna AUTO_INCREMENT y despus se aade otra
columnaAUTO_INCREMENT, los nmeros empezarm en 1 otra vez.
USOS DE ALTER EN (SQL):
Modifica una base de datos o los archivos y grupos de archivos asociados a la base de
datos. Agrega o quita archivos y grupos de archivos en una base de datos, cambia los atributos de
una base de datos o de sus archivos y grupos de archivos, cambia la intercalacin de base de datos
y establece las opciones de base de datos. Las instantneas de base de datos no se pueden
modificar. Para modificar las opciones de base de datos asociadas a la replicacin,
utilicesp_replicationdboption.
Se aplica a: de SQL Server (SQL Server 2008 a la versin actual), Base de datos SQL de Azure.
Debido a su longitud, la sintaxis de ALTER DATABASE se divide en los temas siguientes:
ALTER DATABASE
El tema actual proporciona la sintaxis para cambiar el nombre y la intercalacin de una
base de datos.
Opciones File y Filegroup de ALTER DATABASE
Proporciona la sintaxis para agregar y eliminar archivos y grupos de archivos de una base
de datos y para cambiar los atributos de archivos y grupos de archivos.
Opciones SET de ALTER DATABASE
Proporcionan la sintaxis para cambiar los atributos de una base de datos usando las
opciones SET de ALTER DATABASE.
Creacin de reflejo de la base de datos de ALTER DATABASE
Proporciona la sintaxis de las opciones SET de ALTER DATABASE relacionadas con la
creacin de reflejo de la base de datos.
ALTER DATABASE SET HADR
Proporciona la sintaxis de las opciones Grupos de disponibilidad AlwaysOn de ALTER
DATABASE para configurar una base de datos secundaria en una rplica secundaria de un
grupo de disponibilidad AlwaysOn.
Nivel de compatibilidad de ALTER DATABASE
Proporciona la sintaxis de las opciones SET de ALTER DATABASE relacionadas con los
niveles de compatibilidad de la base de datos.

You might also like