Nuevo post para repasar la sentencia ALTER TABLE de MySQL, su meta es la de modificar la estructura de las tablas y sus columnas de una base de datos.
ALTER TABLE cambia la estructura de una tabla. Por ejemplo, agrega o elimina columnas, crea o elimina índices, modificar el tipo de columnas existentes o renombrar columnas o la propia tabla.
También modifica las características tales como el tipo de almacenamiento utilizado para las tablas. Otras sentencias para trabajar con tablas son:
Sintaxis de ALTER TABLE en MySQL
Veamos la sintaxis de esta sentencia extraída de su página web oficial:
1 2 |
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE nombre_tabla [alter_specification [, alter_specification] ...] |
El código supererior muestra la estructura básica de la sentencia ALTER TABLE, veamos ahora la sintaxis de las diferentes opciones para modificar una tabla en MySQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# alter_specification: # table_options | ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ] | ADD [COLUMN] (col_name column_definition,...) | ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option] ... | ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) [index_option] ... | ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option] ... | ADD FULLTEXT [INDEX|KEY] [index_name] (index_col_name,...) [index_option] ... | ADD SPATIAL [INDEX|KEY] [index_name] (index_col_name,...) [index_option] ... | ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} | CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name] | MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] | DROP [COLUMN] col_name | DROP PRIMARY KEY | DROP {INDEX|KEY} index_name | DROP FOREIGN KEY fk_symbol | DISABLE KEYS | ENABLE KEYS | RENAME [TO|AS] new_tbl_name | ORDER BY col_name [, col_name] ... | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name] | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name] |
Ejemplos prácticos de ALTER TABLE en MySQL
Comenzamos con un ejemplo para renombrar y/o cambiar el nombre la tabla:
1 |
ALTER TABLE nombre_tabla RENAME nombre_nuevo_tabla; |
Cambiar el juego de caracteres de la tabla:
1 |
ALTER TABLE nombre_tabla CHARACTER SET latin1; |
Cambiar el engine (motor) de almacenamiento:
1 |
ALTER TABLE nombre_tabla ENGINE = InnoDB; |
Eliminar una columna de la tabla:
1 |
ALTER TABLE nombre_tabla DROP COLUMN nombre_columna; |
Eliminar varias columnas de la tabla:
1 |
ALTER TABLE nombre_tabla DROP COLUMN nombre_columna, DROP COLUMN nombre_columna2; |
Eliminar una clave primaria y clave externa (FOREING KEY y PRIMARY KEY):
1 2 3 4 |
#Eliminar clave primaria ALTER TABLE nombre_tabla DROP PRIMARY KEY; #Eliminar clave externa ALTER TABLE nombre_tabla DROP FOREIGN KEY nombre_columna; |
En el siguiente código vamos a insertar una nueva columna al final de la tabla:
1 |
ALTER TABLE nombre_tabla ADD fecha_nacimiento date; |
Añadir una nueva columna después de otra:
1 |
ALTER TABLE nombre_tabla ADD nombre_columna VARCHAR(5) AFTER nombre_columna_anterior; |
Añadir una nueva columna en la primera posición de la tabla:
1 |
ALTER TABLE nombre_tabla ADD nombre_columna VARCHAR(5) INT FIRST; |
Añadir un indice a una columna y eliminar un íncide:
1 2 |
ALTER TABLE nombre_tabla ADD INDEX (nombre_columna); ALTER TABLE nombre_tabla DROP INDEX nombre_indice; |
En estos 3 post tenéis más info sobre la creación, eliminación y tipos de índices:
Asignar como clave primaria a una columna:
1 |
ALTER TABLE nombre_Tabla ADD PRIMARY KEY(nombre_columna); |
Modificar el valor de la columna con propiedad autoincrement para que comiencen por el valor 15000:
1 |
ALTER TABLE nombre_tabla AUTO_INCREMENT=15000; |
Cambiar el nombre o renombrar una columna:
1 |
ALTER TABLE nombre_tabla CHANGE nombre_viejo_columna nombre_nuevo_columna; |
Cambiar el nombre y tipo de dato de una columna:
1 |
ALTER TABLE nombre_tabla CHANGE nombre_viejo_columna nombre_nuevo_columna VARCHAR(20); |
Solamente cambiar el tipo de dato de una columna:
1 |
ALTER TABLE nombre_tabla MODIFY nombre_columna DATE NOT NULL; |