La instrucción Oracle ALTER TABLE le permite realizar cambios en una tabla existente. Aprenda a usarlo y vea algunos ejemplos en esta guía.
¿Qué es la instrucción SQL ALTER TABLE?
La instrucción SQL ALTER TABLE le permite cambiar una tabla que ya se ha creado.
El uso de la instrucción CREATE TABLE le permite crear una tabla, pero el uso de ALTER TABLE le permite cambiarla sin soltar la tabla y volver a crearla.
¿Qué puede y no puede hacer con la declaración ALTER TABLE?
Hay muchas cosas que puede hacer con la instrucción SQL ALTER TABLE y algunas que no puede hacer.
Con este comando, puedes:
Agregar una o más columnas a una tabla
Cambiar el tipo de datos de una o más columnas
Agregar una restricción a una columna
Soltar una columna de una tabla
Renombrar una columna
Renombrar una mesa
Mucho más
Por ahora, este artículo se centrará en los usos más comunes de ALTER TABLE. Con el tiempo, actualizaré este artículo para agregarle más información.
ALTER TABLE Sintaxis
La sintaxis del comando SQL ALTER TABLE es:
ALTER TABLE [esquema.] table_name alter_table_clause;
Hay muchas cláusulas diferentes, que discutiremos en este artículo, junto con algunos ejemplos.
ALTER TABLE ADD COLUMN
A veces, es posible que desee agregar una columna a una tabla. Puede hacerlo sin DROP y crear la tabla utilizando la instrucción ALTER TABLE SQL.
La sintaxis de ALTER TABLE para hacer esto es:
ALTER TABLE table_name
ADD [COLUMN] column_name column_definition;
Los parámetros son:
tabl_name: el nombre de la tabla que está cambiando.
column_name: el nombre de la nueva columna que está agregando.
column_definition: información sobre la nueva columna que está agregando.
Algunas cosas a tener en cuenta sobre este comando son:
No necesita especificar ADD COLUMN. Solo la palabra ADD es suficiente.
Los nombres de columna deben ser inferiores al número máximo de caracteres permitidos, que es 128 para Oracle y SQL Server, 64 para MySQL y 63 para PostgreSQL.
La column_definition es similar a la de la instrucción CREATE TABLE. Puede contener algunas cosas:
El tipo de datos y la precisión de la nueva columna.
Cualquier restricción que se aplique a la tabla (por ejemplo, NOT NULL)
Ejemplos
Veamos algunos ejemplos de la funcionalidad SQL ALTER TABLE Add Column.
Este ejemplo agrega una nueva columna llamada materia_favorita a la tabla del alumno.
ALTER TABLE estudiante ADD materia_favorita VACHAR2(100);
Lo convertí en una columna VACHAR (o VACHAR2) con 100 caracteres, por lo que puede almacenar un valor de texto para el nombre de un sujeto aquí.
Todos los valores existentes tendrán un valor de NULL para este campo.
Veamos otro ejemplo usando un tipo de datos diferente y una restricción.
Este ejemplo agrega una nueva columna llamada dificultad_calificación.
ALTER TABLE materia
ADD rating NUMBER(2) NOT NULL;
Esta nueva columna es un tipo de datos numéricos. También lo marqué como NOT NULL, lo que significa que necesita un valor.
¿Qué sucede con los valores existentes en una tabla, si agrega una columna con NOT NULL?
Obtendrá una excepción porque las filas existentes tendrán un valor de NULL.
Para evitar esto, especifique un valor predeterminado (default value).
ALTER TABLE materia
ADD rating NUMBER(2) NOT NULL DEFAULT 99;
La sintaxis es la misma entre estos cuatro proveedores, a excepción de Oracle, donde los corchetes deben rodear las definiciones de las columnas.
Esto funciona de la misma manera que el comando ALTER TABLE para una sola columna, excepto que puede especificar varios nombres de columna, cada uno con su propia definición.
Un ejemplo de esto sería:
Oracle
ALTER TABLE estudiante
ADD (
materia_favorita VACHAR2(100),
fecha_nac DATE,
login_id NUMBER(6)
);
ALTER TABLE DROP COLUMN
Para eliminar una columna de una tabla existente en SQL, use el comando ALTER TABLE DROP COLUMN. Forma parte del comando ALTER TABLE y utiliza la palabra estándar «soltar» para eliminar algo de un objeto.
La sintaxis para soltar una columna es:
Oracle
ALTER TABLE tablename
DROP [COLUMN] column_1 [, column_n] [CASCADE CONSTRAINTS] ;
Ejemplo:
ALTER TABLE estudiante DROP COLUMN materia_favorita;
ALTER TABLE estudiante DROP (materia_favorita);
ALTER TABLE estudiante DROP (materia_favorita, difficulty_rating);
ALTER TABLE estudiante DROP COLUMN (materia_favorita, fecha_nac, login_id);
Existen algunas restricciones para descartar columnas de una tabla:
No puede dropear una columna que sea parte de la clave de partición para una tabla particionada.
No puede dropear una columna que sea parte de la clave primaria.
ALTER TABLE MODIFY COLUMN o ALTER COLUMN
También puede usar el comando ALTER TABLE para modificar una columna en una tabla.
La sintaxis para esto es:
Oracle
ALTER TABLE tablename MODIFY column_name data_type;
El comando ALTER TABLE MODIFY COLUMN (o ALTER TABLE ALTER COLUMN) le permite realizar los siguientes tipos de cambios:
Cambiar el tipo de datos de una columna existente
Agregue restricciones a las columnas existentes (como NOT NULL)
Establecer el valor predeterminado
Para cambiar el nombre de una columna, use el comando ALTER TABLE RENAME COLUMN, que se detalla a continuación.
Veamos algunos ejemplos de esto.
ALTER TABLE estudiante MODIFY COLUMN materia_favorita NUMBER(5);
ALTER TABLE estudiante MODIFY COLUMN materia_favorita VACHAR2(500);
ALTER TABLE estudiante MODIFY COLUMN (
materia_favorita NUMBER(10),
fecha_nac VACHAR2(8)
);
ALTER TABLE estudiante MODIFY COLUMN materia_favorita NOT NULL;
ALTER TABLE RENAME COLUMN
Si desea cambiar el nombre de una columna, hay un comando específico para eso: ALTER TABLE RENAME COLUMN.
Es un comando simple de ejecutar, pero puede ser difícil de recordar.
La sintaxis para hacer esto es:
ALTER TABLE table_name RENAME COLUMN column1 TO column2;
Algunos ejemplos de esto serían:
ALTER TABLE estudiante RENAME COLUMN materia_favorita TO materia_favorita_id;
ALTER TABLE estudiante RENAME COLUMN last_name TO surname;
ALTER TABLE ADD PRIMARY KEY
Otra cosa que puede hacer con el comando ALTER TABLE es agregar claves primarias.
No puede agregar una clave principal con el comando MODIFY COLUMN porque esto se hace con la sintaxis ALTER TABLE ADD PRIMARY KEY.
En realidad, puede agregar todo tipo de restricciones utilizando esta sintaxis.
ALTER TABLE table_name
ADD CONSTRAINT constraint_name constraint_type (columns) [parameters];
Algunas cosas a tener en cuenta sobre esta sintaxis:
Puede agregar los cinco tipos de restricciones usando esta sintaxis (Primary Key, Foreign Key, Not Null, Unique, and Check Constraint)
Los parámetros al final dependerán del tipo de restricción que esté agregando
Puede agregar un nombre de restricción que se recomienda, ya que facilita el trabajo con restricciones.
Veamos algunos ejemplos de cómo agregar una clave principal.
ALTER TABLE estudiante
ADD CONSTRAINT pk_estudiante_stdid PRIMARY KEY (estudiante_id);
En este ejemplo, he agregado una clave principal llamada «pk_estudiante_stdid» en la columna estudiante_id en la tabla de estudiantes.
Me gusta nombrar mis restricciones usando un estándar de nomenclatura consistente. El pk significa Clave primaria, luego un guión bajo, luego el nombre de la tabla, luego otro guión bajo, luego una versión corta de la columna.
ALTER TABLE ADD FOREIGN KEY
Puede agregar una clave foránea a una tabla con el comando ALTER TABLE.
Funciona de manera similar a agregar una clave primaria, y similar al comando de clave externa dentro del comando CREATE TABLE.
La sintaxis es:
ALTER TABLE table_name
ADD CONSTRAINT constraint_name constraint_type (columns) [parameters]
Entonces, para agregar una clave foránea, su declaración podría verse así:
ALTER TABLE estudiante
ADD CONSTRAINT fk_estudiante_addid
FOREIGN KEY (address_id) REFERENCES address(address_id);
Esta declaración agregará una clave foránea en el campo address_id en la tabla del alumno. Apuntará a la columna address_id en la tabla de direcciones.
ALTER TABLE DROP CONSTRAINT
Para eliminar una restricción con el comando ALTER TABLE, usa una declaración como esta:
ALTER TABLE tablename
DROP constraint_type constraint_name [CASCADE];
Al igual que con muchos de los otros ejemplos, comienza con ALTER TABLE y luego especifica el nombre de la tabla.
Luego, agrega la palabra DROP y luego el tipo de restricción. Este puede ser el tipo de restricción si lo conoce (como PRIMARY KEY o UNIQUE), o simplemente la palabra CONSTRAINT.
Luego especifica el nombre de la restricción que se va a soltar.
Finalmente, la palabra clave opcional CASCADE se puede proporcionar al descartar claves primarias, y le indicará a Oracle que elimine cualquier clave foránea que haga referencia a la clave primaria.
Un ejemplo del comando ALTER TABLE DROP CONSTRAINT es:
ALTER TABLE estudiante
DROP CONSTRAINT fk_address_addid;
O podemos usar el tipo de restricción directamente:
ALTER TABLE estudiante
DROP PRIMARY KEY pk_estudiante_id;
ALTER TABLE RENAME TABLE
Otra tarea que puede hacer con el comando ALTER TABLE es renombrar tablas.
La sintaxis para renombrar una tabla es:
ALTER TABLE tablename RENAME TO new_tablename;
Es una declaración simple, pero es fácil olvidar su sintaxis.
Un ejemplo de este comando es
ALTER TABLE estudiante RENAME TO person;
Otro ejemplo podría ser:
ALTER TABLE materia RENAME TO old_materia;