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
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.
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.
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.
La longitud está comprendida entre 1 y 32767 bytes.
entero es la longitud máxima.
El registro especial CURRENT DATE también genera la fecha actual en el formato ISO.
El registro especial CURRENT TIME también genera la hora actual en el formato ISO.
El registro especial CURRENT TIMESTAMP también genera la indicación de hora actual.
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.
Vea la descripción de PRIMARY KEY en la página ***.
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.
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.
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.
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.
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.
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
Tipo de datos | Número de bytes de la columna |
---|---|
INTEGER | 4 |
SMALLINT | 4 |
DECIMAL(n, m) | 4 - 20 |
CHAR(n) | n+1 |
VARCHAR(n) | i+5 donde i es la longitud real |
BLOB | i+4 donde i es la longitud real |
DATE | 4 |
TIME | 4 |
TIMESTAMP | 12 |
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