CREATE TABLE

La sentencia CREATE TABLE define una tabla. La definición debe incluir el nombre de la tabla y los nombres y atributos de sus columnas. La definición puede también incluir otros atributos de la tabla, tales como su clave primaria.

Invocación

Esta sentencia puede utilizarse en un programa de aplicación utilizando las funciones de CLI de DB2 o emitirse a través del CLP.

Sintaxis

>>-CREATE TABLE--nombre-tabla--| lista-elementos |--+-----------------+-><
                                                    '-WITH ENCRYPTION-'
 
lista-elementos:
 
      .-,--------------------------------------------------------.
      V                                                          |
|--(----+-nombre-columna--| tipo-datos |--| opciones-columna |-+-+--)--|
        |                 .-,--------------.                   |
        |                 V                |                   |
        +-PRIMARY KEY--(----nombre-columna-+--)----------------+
        +-| restricción-referencial |--------------------------+
        '-CHECK--(--condición-comprobación--)------------------'
 
tipo-datos:
 
|--+-+-INTEGER-+----------------------+-------------------------|
   | '-INT-----'                      |
   +-SMALLINT-------------------------+
   +-DECIMAL--(--entero--,--entero--)-+
   +-CHAR--(--entero--)---------------+
   +-CHARACTER--(--entero--)----------+
   +-VARCHAR--(--entero--)------------+
   +-BLOB--(--entero--)---------------+
   +-DATE-----------------------------+
   +-TIME-----------------------------+
   '-TIMESTAMP------------------------'
 
opciones-columna:
 
   .----------------------------------------------.
   V                                              |
|----+------------------------------------------+-+-------------|
     +-NOT NULL---------------------------------+
     +-+-PRIMARY KEY-------------------------+--+
     | +-REFERENCES--nombre-tabla------------+  |
     | '-CHECK--(--condición-comprobación--)-'  |
     +-DEFAULT--+-constante-------------------+-+
     |          '-registro-especial-fechahora-' |
     '-GENERATED ALWAYS AS IDENTITY-------------'
 
restricción-referencial:
 
                   .-,--------------.
                   V                |
|--FOREIGN KEY--(----nombre-columna-+--)--REFERENCES--nombre-tabla--|
 
 

Descripción

nombre-tabla
Designa la tabla. El nombre puede tener hasta 18 caracteres de longitud. El nombre no debe identificar una tabla contenida en el catálogo. El nombre debe ser exclusivo para el dispositivo portátil.

Los nombres de tabla se convierten a mayúsculas antes de almacenarse en el catálogo. Puede utilizar identificadores delimitados (con comillas dobles) para impedir esa conversión. Debe utilizar identificadores delimitados cuando un nombre de tabla contenga espacios en blanco o caracteres especiales.

Los nombres de tabla pueden incluir caracteres DBCS (de doble byte).

Restricción: Los archivos de datos creados por el sistema que corresponden a tablas creadas y denominadas por nombres de usuario no distinguen entre caracteres en mayúsculas y minúsculas. Por ejemplo, el archivo de datos para una tabla denominada TB se denomina DSY_TB. El archivo de datos para una tabla denominada "tb" también es DSY_TB. Por consiguiente le recomendamos firmemente que, para asegurarse de la integridad de los datos, no denomine una tabla utilizando una serie de caracteres idéntica, a excepción de la consideración sobre mayúsculas y minúsculas, a la de un nombre de tabla existente.

WITH ENCRYPTION
Crea una tabla de usuario cifrada. Para cifrar una tabla, el usuario tiene que estar autentificado y conectado. Se le tiene que otorgar explícitamente el privilegio de cifrado. (Para obtener más información, consulte el apartado GRANT.)

Una tabla de usuario únicamente se puede cifrar en el momento de su creación. Una vez que se ha creado, no se puede añadir ni eliminar cifrado, si no es suprimiendo la tabla.

nombre-columna
Designa una columna de la tabla. El nombre puede tener hasta 18 caracteres de longitud. El nombre no puede estar calificado y no puede utilizarse un mismo nombre para más de una columna de la tabla.

Los nombres de columna se convierten a mayúsculas antes de almacenarse en el catálogo. Puede utilizar identificadores delimitados (con comillas dobles) para impedir esa conversión. También debe utilizar identificadores delimitados cuando un nombre de columna contenga espacios en blanco o caracteres especiales.

Los nombres de columna pueden incluir caracteres DBCS.

tipo-datos
Es uno de los tipos mostrados en la lista siguiente. Utilice:

INTEGER  o  INT
Para un entero de cuatro bytes, con signo, comprendido entre 2147483647 y -2147483648.
SMALLINT
Para un entero de dos bytes, con signo, comprendido entre -32768 y 32767.
DECIMAL(entero-precisión, entero-escala)
Para un número decimal. El primer entero indica la precisión del número; es decir, el número total de dígitos; su valor está comprendido entre 1 y 31. El segundo entero es la escala del número; es decir, el número de dígitos situados a la derecha de la coma decimal; su valor está comprendido entre 0 y la precisión del número.
CHAR(entero)
Para una serie de caracteres de longitud fija, cuya longitud es entero y puede oscilar entre 1 y 32767.
CHARACTER(entero)
Para una serie de caracteres de longitud fija, cuya longitud es entero y puede oscilar entre 1 y 32767.
VARCHAR(entero)
Para una serie de caracteres de longitud variable, cuya longitud máxima es entero y puede oscilar entre 1 y 32767.
BLOB(entero)
Para un gran objeto binario de tipo serie, cuya longitud máxima en bytes es la especificada.

La longitud está comprendida entre 1 y 32767 bytes.

entero es la longitud máxima.

DATE
Para una fecha. Un valor de entrada puede tener uno de estos formatos: MM/DD/AAAA, AAAA-MM-DD o MM.DD.AAAA. El valor de fecha se imprime sólo en el formato ISO: AAAA-MM-DD.

El registro especial CURRENT DATE también genera la fecha actual en el formato ISO.

TIME
Para una hora. Es un valor de entrada que puede tener uno de los formatos siguientes: HH:MM am (o pm), HH:MM:SS, HH.MM am (o pm), o HH.MM.SS. Los SS, segundos, son opcionales con los formatos HH:MM:SS o HH.MM.SS. El valor de hora sólo se imprime en el formato ISO: HH:MM:SS.

El registro especial CURRENT TIME también genera la hora actual en el formato ISO.

TIMESTAMP
Para una indicación de hora. Un valor de entrada debe tener el siguiente formato: AAAA-MM-DD-HH.MM.SS.ZZZZZZ. Un valor de indicación de hora se imprime con el siguiente formato: AAAA-MM-DD-HH.MM.SS.ZZZZZZ.

El registro especial CURRENT TIMESTAMP también genera la indicación de hora actual.

opciones-columna
Define opciones adicionales referentes a las columnas de la tabla.
NOT NULL
Impide que la columna contenga valores nulos.

Si no se especifica NOT NULL, la columna puede contener valores nulos, y su valor por omisión es el valor nulo o el valor proporcionado por la cláusula DEFAULT.

PRIMARY KEY
Proporciona un atajo para definir una clave primaria formada por una sola columna. Por tanto, si se especifica PRIMARY KEY en la definición de la columna C, el efecto es el mismo que si se especifica PRIMARY KEY(C) como cláusula separada.

Vea la descripción de PRIMARY KEY en la página ***.

REFERENCES nombre-tabla
Vea la descripción de REFERENCES en la página ***.
CHECK (condición-comprobación)
Vea la descripción de CHECK en la página ***.
DEFAULT
Proporciona un valor por omisión cuando no se especifica un valor en una sentencia INSERT.

Si no se especifica DEFAULT en una definición de columna, se utiliza el valor nulo como valor por omisión de la columna. Si dicha columna se define como NOT NULL, no tendrá un valor por omisión válido.

constante
Especifica la constante como valor por omisión de la columna. La constante especificada debe:
  • Representar un valor que se pueda asignar a la columna.
  • No tener dígitos distintos de cero que sobrepasen la escala del tipo de datos de la columna si la constante es una constante decimal (por ejemplo, 1,234 no puede ser el valor por omisión de una columna DECIMAL(5,2)).
registro-especial-fechahora
Especifica como valor por omisión de la columna el valor que tiene el registro especial de fecha-hora (CURRENT DATE, CURRENT TIME o CURRENT TIMESTAMP) cuando se ejecuta INSERT. El tipo de datos de la columna debe corresponder al registro especial especificado (por ejemplo, el tipo de datos debe ser DATE cuando se especifica CURRENT DATE).
GENERATED ALWAYS AS IDENTITY
Al crear una tabla, un usuario puede especificar una columna como "GENERATED ALWAYS AS IDENTITY". Posteriormente, el valor de esta columna lo generará DB2 Everyplace cada vez que el usuario realiza una operación INSERT o INSERT con sub-SELECT. Esta columna tiene que ser de tipo numérico, (tipo INTEGER, SMALLINT o DECIMAL) y DB2 Everyplace genera automáticamente números serie exclusivos comenzando por 1 y aumentando dicho valor en 1 cada vez.

El valor generado para la columna IDENTITY comienza en 1 y aumenta de 1 en 1 cada vez que una fila se inserta en la tabla. De este modo, se garantiza la exclusividad, aunque DB2 Everyplace no crea automáticamente un índice en una columna IDENTITY. Si desea disponer de un índice en una columna IDENTITY, deberá o crear un índice explícitamente, o especificar la columna como PRIMARY KEY. Cuando se agota el rango de los valores de una columna IDENTITY (se llega al valor máximo), las sentencias INSERT adicionales ocasionarán un error (SQLSTATE 23522). El valor máximo de una columna IDENTITY de los tipos INT y SMALLINT son los valores máximos que admitan esos 2 tipos. El valor máximo de una columna IDENTITY de un tipo DECIMAL se determina mediante (1) la definición del tipo de datos (precisión, escala) y (2) el valor máximo que se permite para la columna IDENTITY: 2.15* (10^18) (19 dígitos decimales). El valor más pequeño para el (1) y (2) es el límite de rango. Para una columna IDENTITY de un tipo DECIMAL, la parte fraccionaria es siempre 0 y la parte entera aumenta de 1 en 1 cada vez.

La especificación IDENTITY sólo puede definirse en las columnas cuyo tipo de datos es uno de los 3 tipos numéricos: INT, SMAIINT, DECIMAL. En caso contrario, se suscita un error (SQLSTATE 42815). Como mínimo puede haber una columna IDENTITY por tabla (en caso contrario el error SQLSTATE 428C1). El usuario no puede proporcionar un valor para una columna IDENTITY en una sentencia INSERT (debe tomar por omisión el valor generado por el sistema de DB2 Everyplace), ni tampoco actualizar (UPDATE) una columna IDENTITY.

PRIMARY KEY (nombre-columna, ...)
Define una clave primaria formada por las columnas identificadas. Esta cláusula no se puede especificar más de una vez y las columnas indicadas no deben estar definidas como NOT NULL. Cada nombre de columna debe identificar una columna de la tabla y una misma columna no se debe identificar más de una vez.

El número de columnas especificadas no debe ser mayor que 8.

Se creará un índice exclusivo de modo automático en las columnas especificadas.

Sólo se puede definir una sola clave primaria para una tabla.

El atributo de longitud de cada una de las columnas especificadas no puede ser mayor que 1024 bytes.

restricción-referencial
Define una restricción referencial.
FOREIGN KEY (nombre-columna, ...)
Define una restricción referencial con el nombre de restricción especificado.

Supongamos que T1 denota la tabla objeto de la sentencia. La clave foránea de la restricción referencial está formada por las columnas identificadas. Cada nombre de la lista de nombres de columna debe identificar una columna de T1 y una misma columna no se debe identificar más de una vez. El número de columnas especificadas no debe ser mayor que 8. DB2 Everyplace no da soporte a las claves foráneas.

REFERENCES nombre-tabla
La tabla especificada en la cláusula REFERENCES debe identificar una tabla base que esté descrita en el catálogo, pero no debe denotar una tabla del catálogo.

Una restricción referencial es un duplicado si su clave foránea es igual que la tabla de clave foránea de una restricción referencial especificada anteriormente.

En la explicación siguiente, supongamos que T2 representa la tabla padre identificada y T1 representa la tabla que se está creando.

La clave foránea debe tener el mismo número de columnas que la clave padre de T2 y la descripción de la columna enésima de la clave foránea debe ser comparable con la descripción de la columna enésima de esa clave padre. Las columnas de fecha-hora no se consideran comparables con las columnas de tipo serie para los efectos de esta regla. DB2 Everyplace no da soporte a las claves foráneas.

CHECK (condición-comprobación)
Define una restricción de comprobación. Una condición-comprobación es una condición de búsqueda. Una referencia de columna debe ser una columna de la tabla que se está creando. Los valores que se insertan o actualizan en una tabla deben cumplir las restricciones de comprobación que existan.

Si una restricción de comprobación se especifica como parte de una definición de columna, la referencia de columna sólo puede hacerse a la misma columna. Las restricciones de comprobación especificadas como parte de una definición de tabla pueden tener referencias que identifican columnas definidas previamente en la sentencia CREATE TABLE. No se verifica si las restricciones de comprobación contienen incoherencias, condiciones duplicadas o condiciones equivalentes. Por tanto, se pueden definir restricciones de comprobación contradictorias o redundantes.

Aunque se puede especificar la condición de comprobación "IS NOT NULL", es recomendable utilizar el atributo NOT NULL para habilitar directamente la capacidad de una columna para contener nulos. Por ejemplo, CHECK (salario + prima > 30000) es aceptable si salario = NULL, pues las restricciones de comprobación deben ser ciertas o desconocidas, y en este caso el salario es un valor desconocido. En cambio, CHECK (salario IS NOT NULL) sería una condición falsa y vulneraría la restricción si salario = NULL.

Las restricciones de comprobación se aplican cuando se actualizan o insertan filas en una tabla.

Todas las restricciones de comprobación definidas en una sentencia CREATE TABLE se combinan y almacenan en el catálogo del sistema. En DB2 Everyplace, esta restricción de comprobación combinada puede tener un tamaño máximo de 512 bytes.

Reglas

Notas

Ejemplo

En este ejemplo se crea una tabla EMPLOYEE con los nombres de columna EMPNO, FIRSTNAME, LASTNAME, DEPT, PHONENO, SALARY y HIREDATE. CHAR significa que la columna contendrá datos de tipo carácter. NOT NULL significa que la columna no puede contener un valor nulo. VARCHAR significa que la columna contendrá datos de tipo carácter de longitud variable. La clave primaria está formada por la columna EMPNO.

     CREATE TABLE EMPLOYEE
       (EMPNO       CHAR(3)    PRIMARY KEY,
        FIRSTNAME   VARCHAR(12)   NOT NULL,
        LASTNAME    VARCHAR(15)   NOT NULL,
        DEPT        CHAR(3),
        PHONENO     CHAR(4),
        SALARY      INT,
        HIREDATE    DATE)

Consulta relacionada