View a markdown version of this page

ALTER TABLE - Amazon Aurora DSQL

ALTER TABLE

ALTER TABLE cambia la definición de una tabla.

Sintaxis admitida

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER TABLE [ IF EXISTS ] name RENAME TO new_name ALTER TABLE [ IF EXISTS ] name SET SCHEMA new_schema ALTER TABLE ASYNC [ IF EXISTS ] [ ONLY ] name [ * ] VALIDATE CONSTRAINT constraint_name where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER [ COLUMN ] column_name DROP DEFAULT ALTER [ COLUMN ] column_name DROP NOT NULL ALTER [ COLUMN ] column_name DROP EXPRESSION [ IF EXISTS ] ALTER [ COLUMN ] column_name ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...] ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ] ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ADD table_constraint NOT VALID ADD table_constraint_using_index DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } and table_constraint is: [ CONSTRAINT constraint_name ] CHECK ( expression ) and table_constraint_using_index is: [ CONSTRAINT constraint_name ] UNIQUE USING INDEX index_name

Descripción

ADD [ COLUMN ] [ IF NOT EXISTS ]

Este formulario añade una nueva columna a la tabla utilizando la misma sintaxis que CREATE TABLE. Si se especifica IF NOT EXISTS y ya existe una columna con este nombre, no se genera ningún error.

DROP [ COLUMN ] [ IF EXISTS ]

Este formulario elimina una columna de una tabla. Los índices y las restricciones de tabla que afecten a la columna se eliminarán automáticamente, excepto las restricciones de clave principal. No se admite la eliminación de las columnas de clave principal. Las estadísticas multivariantes que hacen referencia a la columna eliminada también se eliminarán si la eliminación de la columna hace que las estadísticas contengan datos de una sola columna. Deberá indicar CASCADE si hay algo fuera de la tabla que dependa de la columna, por ejemplo, referencias de claves externas o vistas. Si se especifica IF EXISTS y la columna no existe, no se genera ningún error. En este caso, se emite un aviso en su lugar.

SET/DROP DEFAULT

Estos formularios establecen o eliminan el valor por defecto de una columna (siendo la eliminación equivalente a establecer el valor por defecto en NULL). El nuevo valor por defecto solo se aplicará en los comandos INSERT o UPDATE posteriores; no provoca ningún cambio en las filas que ya figuran en la tabla.

DROP NOT NULL

Este formulario cambia una columna para permitir valores nulos.

DROP EXPRESSION [ IF EXISTS ]

Este formulario convierte una columna generada almacenada en una columna base normal. Se retendrán los datos existentes en las columnas, pero los cambios futuros ya no se aplicarán mediante la expresión de generación. Si se especifica DROP EXPRESSION IF EXISTS y la columna no es una columna generada, no se genera ningún error. En este caso, se emite un aviso en su lugar.

ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY
SET GENERATED { ALWAYS | BY DEFAULT }
DROP IDENTITY [ IF EXISTS ]

Estos formularios cambian si una columna es una columna de identidad o cambian el atributo de generación de una columna de identidad existente. Para obtener más información, consulte CREATE TABLE. Al igual que SET DEFAULT, estos formularios solo afectan al comportamiento de los comandos INSERT y UPDATE posteriores; no provocan cambios en las filas que ya se encuentran en la tabla.

La opción sequence_option es una opción compatible con ALTER SEQUENCE como INCREMENT BY. Estos formularios modifican la secuencia que subyace a una columna de identidad existente.

nota

Amazon Aurora DSQL requiere un valor CACHE explícito cuando se utiliza ADD GENERATED AS IDENTITY. Además, las columnas de identidad solo se admiten en columnas bigint.

Cuando se utilizan columnas de identidad, se debe considerar con cuidado el valor de la caché. Para obtener más información, consulte el aviso Importante de la página CREATE SEQUENCE.

Para obtener orientación sobre la mejor manera de utilizar las columnas de identidad en función de los patrones de carga de trabajo, consulte Trabajar con secuencias y columnas de identidad.

SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }

Este formulario establece el modo de almacenamiento de una columna. Para obtener más información sobre los modos de almacenamiento disponibles, consulte Modo de almacenamiento en la página CREATE TABLE.

ADD table_constraint NOT VALID

Este formulario añade una nueva restricción CHECK a una tabla. En Aurora DSQL, las restricciones CHECK añadidas mediante ALTER TABLE ADD CONSTRAINT deben usar la opción NOT VALID. Aurora DSQL crea la restricción, pero no la valida inmediatamente con los datos existentes. Esto permite añadir la restricción sin necesidad de escanear toda la tabla. La restricción se aplica inmediatamente a todas las filas nuevas y a todas las actualizaciones.

Tras añadir una restricción con NOT VALID, utilice ALTER TABLE ASYNC ... VALIDATE CONSTRAINT para validar que los datos existentes también cumplen la restricción. La validación se ejecuta como un trabajo DDL asíncrono. Puede supervisar su progreso utilizando sys.jobs.

ADD table_constraint_using_index

Este formulario agrega una nueva restricción UNIQUE a una tabla en función de un índice único existente. Todas las columnas del índice se incluirán en la restricción.

El índice debe estar en un estado VALID; no se admite agregar una restricción única mediante un índice mientras el índice se está creando actualmente.

Si se proporciona un nombre de restricción, se cambiará el nombre del índice para que coincida con el nombre de la restricción. De lo contrario, la restricción tendrá el mismo nombre que el índice.

Tras ejecutar este comando, el índice pasa a ser propiedad de la restricción, del mismo modo que si el índice lo hubiera creado un comando CREATE UNIQUE INDEX ASYNC normal. En concreto, si se elimina la restricción, el índice también desaparecerá.

VALIDATE CONSTRAINT

Este formulario valida una restricción que se creó previamente con la opción NOT VALID. Este comando es una operación DDL asíncrona que no bloquea otras transacciones. Cuando ejecute ALTER TABLE ASYNC ... VALIDATE CONSTRAINT, Aurora DSQL devuelve de forma inmediata un job_id.

Puede supervisar el estado de este trabajo asíncrono mediante la vista de sistema sys.jobs. También puede usar sys.wait_for_job('job_id') para bloquear la sesión actual hasta que la validación se complete o se produzca un error.

El trabajo de validación escanea toda la tabla para comprobar que todas las filas existentes cumplen la restricción. Una vez que la validación se complete correctamente, Aurora DSQL marca la restricción como válida y el planificador de consultas la aplica a todas las consultas. Si la validación falla porque las filas existentes infringen la restricción, se produce un error en el trabajo y la restricción permanece con el estado NOT VALID.

Este comando valida únicamente las restricciones que haya creado con la opción NOT VALID. Intentar validar una restricción que ya es válida producirá un error.

DROP CONSTRAINT [ IF EXISTS ]

Este formulario elimina la restricción especificada en una tabla, junto con cualquier índice subyacente a la restricción. Si se especifica IF EXISTS y la restricción no existe, no se genera ningún error. En este caso, se emite un aviso en su lugar.

OWNER TO

Este formulario cambia el propietario de la tabla al usuario especificado.

RENAME

Los formularios RENAME cambian el nombre de una tabla, el nombre de una columna individual de una tabla o el nombre de una restricción de la tabla. Al cambiar el nombre de una restricción que tiene un índice subyacente, también se cambia el nombre del índice. Esto no afecta en modo alguno a los datos almacenados.

SET SCHEMA

Este formulario mueve la tabla a otro esquema. También se mueven los índices, las restricciones y las secuencias asociadas a las columnas de la tabla.

Parameters

IF EXISTS

No generar un error si la tabla no existe. En este caso, se emite un aviso.

name

El nombre (opcionalmente calificado por el esquema) de una tabla existente que se va a modificar. Si se especifica ONLY antes del nombre de la tabla, solo se modifica esa tabla. Si no se especifica ONLY, la tabla y todas sus tablas descendientes (si las hay) se modifican. Si lo desea, se puede especificar * después del nombre de la tabla para indicar explícitamente que se incluyen las tablas descendientes.

column_name

Nombre de una columna nueva o ya existente.

new_column_name

Nuevo nombre para una columna existente.

new_name

Nuevo nombre para la tabla.

data_type

Tipo de datos de la columna nueva.

table_constraint

Una definición de restricción CHECK. En Aurora DSQL, CHECK las restricciones se deben añadir con la opción NOT VALID mediante ALTER TABLE ADD CONSTRAINT. Consulte CREATE TABLE para ver la sintaxis completa de las restricciones CHECK.

constraint_name

Nombre de una restricción nueva o ya existente.

CASCADE

Elimine automáticamente los objetos que dependan de la columna o restricción eliminada (por ejemplo, las vistas que hagan referencia a la columna) y, a su vez, todos los objetos que dependan de esos objetos.

RESTRICT

No elimine la columna o restricción si hay algún objeto dependiente. Este es el comportamiento predeterminado.

new_owner

El nombre de usuario del nuevo propietario de la tabla.

new_schema

Nombre del esquema al que se moverá la tabla.

Notas

El formulario DROP COLUMN no elimina físicamente la columna, sino que simplemente la hace invisible para las operaciones de SQL. Las operaciones de inserción y actualización posteriores en la tabla almacenarán un valor nulo para la columna. Por lo tanto, eliminar una columna es rápido, pero no reduce inmediatamente el tamaño de la tabla en disco, ya que no se recupera el espacio ocupado por la columna eliminada. El espacio se recuperará con el tiempo a medida que se actualicen las filas existentes.

Si se hace referencia a una columna eliminada como columna INCLUDE en la clave principal, la definición de la clave principal se actualizará para eliminar la columna eliminada.

Una tabla en Aurora DSQL puede tener un máximo de 255 columnas activas a la vez y un máximo de 1600 columnas durante la vida útil de la tabla. Si se elimina una columna, no se recupera su número de atributo. La elimina del conjunto de columnas activas, pero la columna eliminada sigue contando para el límite de por vida de 1600 columnas. Para obtener más información, consulte Límites de base de datos en Aurora DSQL.