IBM PureData System for Analytics, Version 7.1

ALTER TABLE

Utilice el comando ALTER TABLE para cambiar la estructura de una tabla existente. Si una consulta activa está utilizando la tabla, el comando ALTER espera hasta que se complete la consulta.

Utilice el comando ALTER TABLE para:
  • Cambiar o descartar un valor predeterminado de columna. Los valores predeterminados que se establecen solo se aplican a comandos INSERT, no a filas que ya están en la tabla.
  • Cambiar el nombre de una columna o una tabla sin cambiar el tipo de datos o el tamaño dentro de la columna o tabla. Puede omitir la columna de la palabra clave.
  • Añadir o descartar una restricción de tabla o de columna. No se puede cambiar una restricción. En lugar de eso debe descartar la restricción y crear una nueva.
  • Modificar la longitud de una columna varchar.

Si un procedimiento almacenado hace referencia a una tabla, no se permite la adición o descarte de una columna. Primero debe descartar el procedimiento almacenado antes de ejecutar el comando ALTER TABLE y, a continuación, volver a crear el procedimiento almacenado después de que se modificara la tabla.

Sintaxis

Sintaxis para modificar una tabla:
ALTER TABLE <table> <action> [ORGANIZE ON {(<columns>) | NONE}]
Donde <action> puede ser una de las siguientes opciones:
ADD COLUMN <col> <type> [<col_constraint>][,…] |
ADD <table_constraint> |
ALTER [COLUMN] <col> { SET DEFAULT <value> | DROP DEFAULT } |
DROP [COLUMN] column_name[,column_name…] {CASCADE | RESTRICT } |
DROP CONSTRAINT <constraint_name> {CASCADE | RESTRICT} |
MODIFY COLUMN (<col> VARCHAR(<maxsize>)) |
OWNER TO <user_name> |
RENAME [COLUMN] <col> TO <new_col_name> |
RENAME TO <new_table> |
SET PRIVILEGES TO <table> 
Donde <col_constraint> representa:
[ CONSTRAINT <constraint_name> ]
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <value> | <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
Donde <table_constraint> representa:
[ CONSTRAINT <constraint_name> ]
{UNIQUE (<col>[,<col>…] ) |
PRIMARY KEY (<pkcol_name>[,<pkcol_name>…] ) |
FOREIGN KEY (<fkcol_name>[,<fkcol_name>…] ) <ref>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
Donde <ref> representa:
REFERENCES <reftable> [ (<refcol_name>[,<refcol_name>…] ) ]
[ MATCH FULL ]
[ ON UPDATE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
[ ON DELETE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]

Entradas

El comando ALTER TABLE toma las siguientes entradas:

Tabla 1. Entradas de ALTER TABLE
Entrada Descripción
<table> Nombre de la tabla que se quiere modificar.
<action> Acción que se quiere realizar para la tabla especificada:
ADD COLUMN
Añada una columna. Esta entrada no se puede especificar en un bloque de transacción.
ADD <table_constraint>
Añada una restricción de tabla.
ALTER [COLUMN]
Cambie o descarte un valor predeterminado de columna.
DROP [COLUMN]
Descarte una columna. Las restricciones que dependen de la columna descartada también se descartan automáticamente. Esta entrada no se puede especificar en un bloque de transacción. No se puede descartar una columna de distribución, una columna “organize on” o la última columna restante de una tabla.

Si se descarta una columna y se desea reutilizar su nombre, antes hay que ejecutar el comando GROOM TABLE <tablename> VERSIONS; si no, pueden producirse errores.

DROP CONSTRAINT
Descarte una restricción.
MODIFY COLUMN
Cambie la longitud de una columna.
OWNER TO
Cambie el propietario de la tabla.
RENAME [COLUMN]
Cambie el nombre de una columna.
RENAME TO
Cambie el nombre de la tabla. Cuando se cambia el nombre de una tabla, todas las vistas que se basan en la tabla dejan de funcionar porque las vistas utilizan enlace de nombre.
SET PRIVILEGES TO
Establezca los privilegios de la tabla modificada como los de otra tabla.
<col> Nombre de una columna.
<user_name> Nombre de un usuario.
<new_col_name> Nuevo nombre que dar a una columna.
<new_table> Nombre nuevo de la tabla.
ORGANIZE ON En qué columnas (de una a cuatro) se va a organizar la tabla. No se puede especificar para tablas externas. Si se especifican columnas, la tabla no puede tener ninguna vista materializada, y todos los tipos de datos de columna especificados se deben poder asignar a una zona. La reorganización de datos de la tabla surte efecto cuando se ejecuta GROOM TABLE. Para obtener más información, consulte "Using Clustered Base Tables" en la IBM Netezza System Administrator’s Guide.
<constraint_name> Nombre que desea dar a una restricción de columna o a una restricción de tabla. Si no se especifica ningún nombre, el sistema genera uno.
NOT DEFERRABLE | DEFERRABLE Controla si la restricción se puede aplazar hasta el final de la transacción. NOT DEFERRABLE es el valor predeterminado. (Netezza no da soporte a la comprobación de restricciones y a la integridad referencia.)
INITIALLY Especifica DEFERRED (al final de la transacción) o IMMEDIATE (al final de cada sentencia).
NOT NULL | NULL Especifica si la columna tiene permitido contener valores nulos. El valor predeterminado es NULL.
UNIQUE (restricción de columna y de tabla) Define si cada valor de la columna debe ser exclusivo.
PRIMARY KEY (restricción de columna y de tabla) Define si si las columnas especificadas deben formar la clave principal de la tabla.

Esta restricción es fundamentalmente una combinación de las restricciones UNIQUE y NOT NULL, pero identificar un conjunto de columnas como clave primaria también proporciona metadatos sobre el diseño del esquema. Una clave primaria implica que otras tablas pueden confiar en este conjunto de columnas como identificadores exclusivos para filas.

Solo se puede especificar una restricción de clave primaria para una tabla, ya sea una restricción de columna o bien una restricción de tabla.

El conjunto de columnas que conforma la clave primaria debe ser diferente de todos los demás conjuntos de columnas nombrados en cualquier restricción exclusiva que esté definida para esta tabla.

DEFAULT (restricción de columna) El valor predeterminado que se colocará en cada fila de esta columna.
REFERENCES (restricción de columna) Las columnas especificadas de la nueva tabla deben contener únicamente valores que coincidan con valores de las columna especificadas de la tabla especificada.
Tabla FOREIGN KEY y REFERENCES (restricción de tabla) Las columnas especificadas de la nueva tabla deben contener únicamente valores que coincidan con valores de las columna especificadas de la tabla especificada. Si no se especifica ninguna columna, el valor debe coincidir con la clave primaria de la tabla. Las columnas especificadas de la tabla referenciada deben tener una restricción exclusiva o de clave primaria en dicha tabla.
MATCH FULL MATCH FULL impide que una columna de clave foránea de varias columnas sea nula si otras partes de la clave foránea no son nulas. Este es el valor predeterminado.MATCH PARTIAL no se admite.
ON UPDATE | ON DELETE La acción que se realiza cuando la tabla o las columnas especificadas se actualicen o se supriman:
NO ACTION
Emite un error si se vulnera la clave foránea. Este es el valor predeterminado.
RESTRICT
Igual que NO ACTION.
CASCADE
Suprime cualquier fila que haga referencia a la fila suprimida.
SET NULL
Establece los valores de la columna de referencia a su valor predeterminado.
SET DEFAULT
Establece los valores de la columna de referencia a su valor predeterminado.

Salidas

El comando ALTER TABLE produce las siguientes salidas:

Tabla 2. Salidas de ALTER TABLE
Salida Descripción
ALTER El comando se ha ejecutado correctamente.
ERROR la tabla o la columna especificada no está disponible.

Privilegios

Es necesario ser el usuario administrativo, el propietario de la tabla o el propietario de la base de datos o el esquema en el que se define la tabla, o la cuenta debe tener el privilegio Alter para la tabla o para la clase de objeto Table. Si está cambiando el propietario de la tabla, hay que tener el acceso List para la cuenta de usuario.

Uso

A continuación se proporciona el uso de muestra:
  • Descartar el valor predeterminado de la columna a:
    MYDB.SCH1(USER)=> ALTER TABLE distributors ALTER COLUMN address DROP
    DEFAULT;
  • Cambiar la longitud de varchar para una columna:
    MYDB.SCH1(USER)=> ALTER TABLE t3 MODIFY COLUMN (col1 VARCHAR(6));
  • Cambiar el nombre de una columna:
    MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME COLUMN address TO
    city;
  • Cambiar el nombre de una tabla:
    MYDB.SCH1(USER)=> ALTER TABLE distributors RENAME TO suppliers;
  • Cambiar el propietario de la tabla:
    MYDB.SCH1(USER)=> ALTER TABLE distributors OWNER TO carmen;
  • Cambiar los privilegios a los que se hayan establecido para otra tabla:
    MYDB.SCH1(USER)=> ALTER TABLE distributors SET PRIVILEGES TO suppliers;
  • Añadir una restricción:
    MYDB.SCH1(USER)=> ALTER TABLE distributors ADD CONSTRAINT empkey
    PRIMARY KEY(col1) INITIALLY IMMEDIATE;
  • Descartar una restricción:
    MYDB.SCH1(USER)=> ALTER TABLE distributors DROP CONSTRAINT empkey
    CASCADE;


Feedback | Copyright IBM Corporation 2014 | Last updated: 2014-02-28