Comando MySQL ALTER

Cuando necesitamos modificar el nombre de una tabla de datos o modificar los campos de una tabla de datos, necesitamos usar el comandoALTERMySQL.

El comando MySQLALTERse utiliza para modificar la estructura de objetos como bases de datos, tablas e índices.

ALTEREl comando te permite agregar, modificar o eliminar objetos de base de datos, y también se puede usar para cambiar la definición de columnas de una tabla, agregar restricciones, crear y eliminar índices, entre otras operaciones.

El comando ALTER es muy poderoso, permite realizar modificaciones y ajustes flexibles cuando cambia la estructura de la base de datos.

A continuación se presentanALTERlos usos comunes y ejemplos del comando:

1. Agregar columna

ALTER TABLE table_name
ADD COLUMN new_column_name datatype;

La siguiente instrucción SQL agrega una columna de fecha llamada birth_date a la tabla employees:

Ejemplo

ALTER TABLE employees
ADD COLUMN birth_date DATE;

2. Modificar el tipo de datos de una columna

Ejemplo

ALTER TABLE TABLE_NAME
MODIFY COLUMN column_name new_datatype;

La siguiente instrucción SQL modifica el tipo de datos de la columna salary en la tabla employees a DECIMAL(10,2):

Ejemplo

ALTER TABLE employees
MODIFY COLUMN salary DECIMAL(10,2);

3. Cambiar el nombre de una columna

ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name datatype;

La siguiente instrucción SQL cambia el nombre de una columna en la tabla employees de old_column_name a new_column_name, y también puede modificar el tipo de datos al mismo tiempo:

Ejemplo

ALTER TABLE employees
CHANGE COLUMN old_column_name new_column_name VARCHAR(255);

4. Eliminar columna

ALTER TABLE table_name
DROP COLUMN column_name;

La siguiente instrucción SQL elimina la columna birth_date de la tabla employees:

Ejemplo

ALTER TABLE employees
DROP COLUMN birth_date;

5. Agregar PRIMARY KEY

ALTER TABLE table_name
ADD PRIMARY KEY (column_name);

La siguiente instrucción SQL agrega una clave primaria a la tabla employees:

Ejemplo

ALTER TABLE employees
ADD PRIMARY KEY (employee_id);

6. Agregar FOREIGN KEY

ALTER TABLE child_table
ADD CONSTRAINT fk_name
FOREIGN KEY (column_name)
REFERENCES parent_table (column_name);

La siguiente instrucción SQL agrega una clave externa a la tabla orders, que hace referencia a la columna customer_id de la tabla customers:

Ejemplo

ALTER TABLE orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id);

7. Cambiar el nombre de la tabla

ALTER TABLE old_table_name
RENAME TO new_table_name;

La siguiente instrucción SQL cambia el nombre de la tabla de employees a staff:

Ejemplo

ALTER TABLE employees
RENAME TO staff;

Nota:

Pero al usarALTERel comando, hay que tener especial cuidado, porque algunas operaciones pueden requerir reconstruir tablas o índices, lo que puede afectar el rendimiento y el tiempo de ejecución de la base de datos.

Al realizar modificaciones estructurales importantes, se recomienda hacer una copia de seguridad de los datos primero y operar con precaución en entornos de producción.


Ejemplo

Antes de comenzar este capítulo del tutorial, vamos a crear una tabla, cuyo nombre es:testalter_tbl。

Ejemplo

root@host# mysql -u root -p password;
Enter password:*******
mysql> USE EJEMPLO;
DATABASE changed
mysql> CREATE TABLE testalter_tbl
    -> (
    -> i INT,
    -> c CHAR(1)
    -> );
Query OK, 0 ROWS affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| FIELD | TYPE    | NULL | KEY | DEFAULT | Extra |
+-------+---------+------+-----+---------+-------+
| i     | INT(11) | YES  |     | NULL    |       |
| c     | CHAR(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 ROWS IN SET (0.00 sec)

Eliminar, agregar o modificar campos de tabla

El siguiente comando utiliza el comando ALTER y la cláusula DROP para eliminar el campo i de la tabla creada anteriormente:

mysql> ALTER TABLE testalter_tbl  DROP i;

Si solo queda un campo en la tabla de datos, no se puede usar DROP para eliminar el campo.

En MySQL se usa la cláusula ADD para agregar columnas a una tabla de datos. El siguiente ejemplo agrega el campo i a la tabla testalter_tbl y define su tipo de datos:

mysql> ALTER TABLE testalter_tbl ADD i INT;

Después de ejecutar el comando anterior, el campo i se agrega automáticamente al final de los campos de la tabla de datos.

mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

Si necesitas especificar la posición del nuevo campo, puedes usar las palabras clave que proporciona MySQL: FIRST (para establecerlo como la primera columna) y AFTER nombre_de_campo (para establecerlo después de un campo determinado).

Prueba la siguiente instrucción ALTER TABLE. Después de ejecutarla correctamente, usa SHOW COLUMNS para ver los cambios en la estructura de la tabla:

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

Las palabras clave FIRST y AFTER se pueden usar con las cláusulas ADD y MODIFY, por lo que si deseas restablecer la posición de un campo en la tabla de datos, primero debes usar DROP para eliminar el campo y luego usar ADD para agregarlo y establecer su posición.

Modificar el tipo y el nombre de un campo

Si necesitas modificar el tipo y el nombre de un campo, puedes usar las cláusulas MODIFY o CHANGE en el comando ALTER.

Por ejemplo, para cambiar el tipo del campo c de CHAR(1) a CHAR(10), puedes ejecutar el siguiente comando:

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

Con la cláusula CHANGE, la sintaxis es muy diferente. Después de la palabra clave CHANGE, va el nombre del campo que deseas modificar, y luego se especifica el nuevo nombre y el tipo. Prueba el siguiente ejemplo:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

Efecto de ALTER TABLE sobre valores NULL y valores predeterminados

Al modificar un campo, puedes especificar si debe contener un valor o si se establece un valor predeterminado.

En el siguiente ejemplo, se especifica que el campo j es NOT NULL y su valor predeterminado es 100.

mysql> ALTER TABLE testalter_tbl 
    -> MODIFY j BIGINT NOT NULL DEFAULT 100;

Si no estableces un valor predeterminado, MySQL establecerá automáticamente el campo como NULL por defecto.

Modificar el valor predeterminado de un campo

Puedes usar ALTER para modificar el valor predeterminado de un campo. Prueba el siguiente ejemplo:

mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | 1000    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

También puedes usar el comando ALTER con la cláusula DROP para eliminar el valor predeterminado de un campo, como en el siguiente ejemplo:

mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
Changing a Table Type:

Para modificar el tipo de una tabla de datos, puedes usar el comando ALTER con la cláusula TYPE. Prueba el siguiente ejemplo, donde cambiaremos el tipo de la tabla testalter_tbl a MYISAM:

Nota:Para ver el tipo de una tabla de datos, puedes usar la instrucción SHOW TABLE STATUS.

mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;
mysql>  SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
           Name: testalter_tbl
           Type: MyISAM
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 25769803775
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-06-03 08:04:36
    Update_time: 2007-06-03 08:04:36
     Check_time: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

Cambiar el nombre de la tabla

Si necesitas cambiar el nombre de una tabla de datos, puedes usar la cláusula RENAME en la instrucción ALTER TABLE.

Prueba el siguiente ejemplo para renombrar la tabla de datos testalter_tbl a alter_tbl:

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

El comando ALTER también se puede usar para crear y eliminar índices de tablas de datos MySQL. Esta función la presentaremos en los próximos capítulos.

Otras extensiones