Curso de MySQL
Consultas, lista de correo 'C++ Con Clase' 'MySQL Con Clase' página de entrada Tabla de contenido Contactar con Webmaster
Curso Sentencias Funciones API C

SQL

Sentencias

ANALYZE TABLE BACKUP TABLE BEGIN BEGIN WORK CHECK TABLE CHECKSUM TABLE COMMIT CREATE DATABASE CREATE TABLE CREATE USER DELETE DESCRIBE DO DROP DATABASE DROP INDEX DROP TABLE DROP USER FLUSH GRANT HANDLER INSERT INSERT ... SELECT INSERT DELAYED JOIN KILL LOAD DATA LOCK TABLES OPTIMIZE TABLE RENAME TABLE REPAIR TABLE REPLACE RESET REVOKE ROLLBACK SELECT SET SET TRANSACTION SHOW SHOW CHARACTER SET SHOW COLLATION SHOW COLUMNS SHOW CREATE DATABASE SHOW CREATE TABLE SHOW CREATE VIEW SHOW DATABASES SHOW ENGINES SHOW ERRORS SHOW GRANTS SHOW INDEX SHOW INNODB STATUS SHOW KEYS SHOW LOGS SHOW PRIVILEGES SHOW PROCESSLIST SHOW STATUS SHOW TABLE STATUS SHOW TABLES SHOW VARIABLES SHOW WARNINGS START TRANSACTION TRUNCATE UNION UNLOCK TABLES UPDATE USE

ALTER TABLE

ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification ...]

Sintaxis para alter_specification:

    ADD [COLUMN] create_definition [FIRST | AFTER column_name ]
  | ADD [COLUMN] (create_definition, create_definition,...)
  | ADD INDEX [index_name] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...)
  | ADD [CONSTRAINT [symbol]] UNIQUE [index_name] (index_col_name,...)
  | ADD FULLTEXT [index_name] (index_col_name,...)
  | 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 create_definition
           [FIRST | AFTER column_name]
  | MODIFY [COLUMN] create_definition [FIRST | AFTER column_name]
  | DROP [COLUMN] col_name
  | DROP PRIMARY KEY
  | DROP INDEX index_name
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO] new_tbl_name
  | ORDER BY col
  | CHARACTER SET character_set_name [COLLATE collation_name]
  | table_options

ALTER TABLE permite modificar la estructura de una tabla existente. Por ejemplo, se pueden añadir o eliminar columnas, crear y destruir índices, cambiar el tipo de una columna existente o renombrar columnas o la propia tabla. También es posible modificar el comentario y el tipo de la tabla.

Si se usa ALTER TABLE para cambiar la especificación de una columna pero DESCRIBE tbl_name indica que la columna no ha cambiado, es posible que MySQL haya ignorado la modificación por alguna razón. Por ejemplo, si se ha intentado cambiar una columna VARCHAR a CHAR, MySQL seguirá usando VARCHAR si la tabla contiene otras columnas de longitud variable.

ALTER TABLE trabaja haciendo una copia temporal de la tabla original. La modificación se realiza durante la copia, a continuación 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 ningún fallo de actualización. 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 opción 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 recreación de índices (que es la parte más lenta del proceso) asignando un valor alto a la variable myisam_sort_buffer_size.

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 además renombrando de b a c:

mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);

Para añadir una columna TIMESTAMP llamada d:

mysql> ALTER TABLE t2 ADD d TIMESTAMP;

Para añadir 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 añadir 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 también que hemos declarado c como NOT NULL, proque las columnas indexadas no pueden ser NULL.

Cuandos e añade una columna AUTO_INCREMENT, los calores de columna se llenan con una secuencia numérica automáticamente. Se puede elegir el primer número de la secuencia ejecutando SET INSERT_ID=value antes de ALTER TABLE o usando la opción de tanbla AUTO_INCREMENT=value.

Con tablas MyISAM, si no se modifica la columna AUTO_INCREMENT, la secuencia de numérica no resultará afectada. Si se elimina una columna AUTO_INCREMENT y después se añade otra columna AUTO_INCREMENT, los números empezarám en 1 otra vez.

(4.0)