English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderá cómo modificar o modificar una tabla existente usando SQL.
Después de crear la tabla, es probable que al comenzar a usarla, descubra que olvidó crear una columna o restricción necesaria, o especificó un nombre incorrecto para esa columna.
En este caso, puede usar la instrucción ALTER TABLE para modificar o modificar una tabla existente agregando, modificando o eliminando columnas.
Consideremos queshippersEn la base de datos hay una tabla con la siguiente estructura:
+--------------+-------------+------+-----+---------+----------------+ | Field | | Type | | Key | | Default | | Extra | +--------------+-------------+------+-----+---------+----------------+ | shipper_id | int | | NO | PRI | NULL | auto_increment | | shipper_name | | varchar(60) | NO | | NULL | | | | phone | | varchar(60) | NO | | NULL | | | +--------------+-------------+------+-----+---------+----------------+
Vamos a usar esta tabla shippers para todas las instrucciones ALTER TABLE.
Supongamos que queremos expandir la tabla shippers existente agregando una columna. Pero, ¿cómo podemos hacerlo usando una instrucción SQL? Vamos a ver.
La sintaxis básica para agregar una nueva columna a una tabla existente:
ALTER TABLE table_name ADD column_name data_type constraints;
La siguiente instrucción agrega una nueva columna fax a la tabla shippers.
ALTER TABLE shippers ADD fax VARCHAR(20);
Ahora, después de ejecutar las instrucciones anteriores, si usa el comando DESCRIBE shippers para ver la estructura de la tabla; En la línea de comandos de MySQL, se ve así:
+--------------+-------------+------+-----+---------+----------------+ | Field | | Type | | Key | | Default | | Extra | +--------------+-------------+------+-----+---------+----------------+ | shipper_id | int | | NO | PRI | NULL | auto_increment | | shipper_name | | varchar(60) | NO | | NULL | | | | phone | | varchar(60) | NO | | NULL | | | | fax | varchar(2| fax | varchar( +--------------+-------------+------+-----+---------+----------------+
Nota:Si desea agregar una columna NOT NULL a una tabla existente, debe especificar explícitamenteValor predeterminado. Este valor predeterminado se utiliza para llenar cada nueva fila existente en la tabla.
Consejo:Al agregar una nueva columna a la tabla, si no se especifica NULL ni NOT NULL, se considera que se ha especificado NULL para la columna.
MySQL por defecto agrega nuevas columnas al final. Sin embargo, si desea agregar una nueva columna después de una columna específica, puede usar la cláusula AFTER como se muestra a continuación:
mysql> ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;
MySQL primero proporcionó otra cláusula que puede usar para agregar una nueva columna en la primera posición de la tabla. Simplemente reemplace la cláusula AFTER del ejemplo anterior con FIRST para agregar una nueva columna enshippersAgregar la columna fax al principio de la tabla.
En MySQL, si ya ha creado una tabla pero no está satisfecho con la posición de las columnas existentes en la tabla, puede cambiarla en cualquier momento con la siguiente sintaxis:
ALTER TABLE table_name MODIFY column_name column_definition AFTER column_name;
La siguiente instrucción modificará la columnafaxcolocadoshippersen la tablashipper_namedespués de la columna.
mysql> ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;
Nuestra tabla shippers actual tiene un problema principal. Incluso si inserta un registro con un número de teléfono repetido, no se le impedirá hacerlo, lo que no es bueno, el número de teléfono debe ser único.
Puede agregar la restricción mediantephoneAgregar restricción UNIQUE a la columna para resolver este problema. Puede agregar la restricción a una columna existente en una tabla existente con la siguiente sintaxis básica:
ALTER TABLE table_name ADD UNIQUE (column_name,...);
La siguiente instrucción UNIQUE se dirige aphoneAgregar restricciones a la columna.
mysql> ALTER TABLE shippers ADD UNIQUE (phone);
Después de ejecutar esta instrucción, si intenta insertar un número de teléfono repetido, recibirá un mensaje de error.
Del mismo modo, si la tabla que ha creado no tiene PRIMARY KEY, puede usar lo siguiente:
ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);
Si no se ha definido, la siguiente sentencia lo haráPRIMARY KEY Se añade la restricciónshipper_idcolumna.
mysql> ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);
La sintaxis básica para eliminar una columna de una tabla existente es:
ALTER TABLE table_name DROP COLUMN column_name;
La siguiente sentencia eliminaráshippersEliminaremos de la tabla el nuevofaxcolumna.
mysql> ALTER TABLE shippers DROP COLUMN fax;
Ahora, después de ejecutar la sentencia superior, si ves la estructura de la tabla, se verá así:
+--------------+-------------+------+-----+---------+----------------+ | Field | | Type | | Key | | Default | | Extra | +--------------+-------------+------+-----+---------+----------------+ | shipper_id | int | | NO | PRI | NULL | auto_increment | | shipper_name | | varchar(60) | NO | | NULL | | | | phone | | varchar(20) | NO | UNI | NULL | | | +--------------+-------------+------+-----+---------+----------------+
Puedes usar la siguiente cláusula ALTER para modificar el tipo de datos de una columna en SQL Server:
ALTER TABLE table_name ALTER COLUMN column_name new_data_type;
Pero el servidor de bases de datos MySQL no admite la sintaxis ALTER COLUMN. Sí admite cláusulas alternativas para modificar columnas, como se muestra a continuación:
ALTER TABLE table_name MODIFY column_name new_data_type;
La siguiente sentencia modificaráshippersen la tablaphoneEl tipo de datos actual de la columna se cambia de VARCHAR a CHAR, la longitud de20 a15.
mysql> ALTER TABLE shippers MODIFY phone CHAR(15);
Del mismo modo, puedes usar la cláusula MODIFY para cambiar si una columna de una tabla de MySQL permite valores nulos, especificando nuevamente la definición de la columna existente y agregando la restricción null o not null al final, como se muestra a continuación:
mysql> ALTER TABLE shippers MODIFY shipper_name CHAR(15) NOT NULL;
La sintaxis básica para renombrar una tabla existente en MySQL es:
ALTER TABLE current_table_name RENAME new_column_name;
La siguiente sentencia cambiará nuestroshippersEl nombre de la tabla se cambia ashipper.
mysql> ALTER TABLE shippers RENAME shipper;
También puede usar la siguiente sentencia RENAME TABLE para lograr el mismo objetivo en MySQL:
mysql> RENAME TABLE shippers TO shipper;