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 EXISTSy 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
CASCADEsi hay algo fuera de la tabla que dependa de la columna, por ejemplo, referencias de claves externas o vistas. Si se especificaIF EXISTSy 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
INSERToUPDATEposteriores; 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 EXISTSy 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 IDENTITYSET 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 comandosINSERTyUPDATEposteriores; no provocan cambios en las filas que ya se encuentran en la tabla.La opción
sequence_optiones una opción compatible con ALTER SEQUENCE comoINCREMENT BY. Estos formularios modifican la secuencia que subyace a una columna de identidad existente.nota
Amazon Aurora DSQL requiere un valor
CACHEexplícito cuando se utilizaADD GENERATED AS IDENTITY. Además, las columnas de identidad solo se admiten en columnasbigint.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.
ADDtable_constraintNOT VALID-
Este formulario añade una nueva restricción
CHECKa una tabla. En Aurora DSQL, las restriccionesCHECKañadidas medianteALTER TABLE ADD CONSTRAINTdeben usar la opciónNOT 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, utiliceALTER TABLE ASYNC ... VALIDATE CONSTRAINTpara 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 utilizandosys.jobs. ADDtable_constraint_using_index-
Este formulario agrega una nueva restricción
UNIQUEa 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 ASYNCnormal. 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 ejecuteALTER TABLE ASYNC ... VALIDATE CONSTRAINT, Aurora DSQL devuelve de forma inmediata unjob_id.Puede supervisar el estado de este trabajo asíncrono mediante la vista de sistema
sys.jobs. También puede usarsys.wait_for_job(para bloquear la sesión actual hasta que la validación se complete o se produzca un error.'job_id')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 EXISTSy 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
RENAMEcambian 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
ONLYantes del nombre de la tabla, solo se modifica esa tabla. Si no se especificaONLY, 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,CHECKlas restricciones se deben añadir con la opciónNOT VALIDmedianteALTER TABLE ADD CONSTRAINT. Consulte CREATE TABLE para ver la sintaxis completa de las restriccionesCHECK. 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.