CREATE TABLE crea una tabla nueva y vacía en la base de datos actual. El usuario que ejecuta la sentencia se convierte en el propietario de la tabla. Después de que cree una tabla, use INSERT para agregar filas y ALTER TABLE para modificar su estructura o agregar restricciones.
Sintaxis
CREATE [ GLOBAL TEMPORARY ] TABLE table_name (
{ column_name data_type [ DEFAULT default_expr ]
[ column_constraint [ ... ] ] | table_constraint } [, ...]
)
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ]
[ TABLESPACE tablespace ]
Donde column_constraint es una de estas opciones:
[ CONSTRAINT constraint_name ]
{ NOT NULL
| NULL
| UNIQUE [ USING INDEX TABLESPACE tablespace ]
| PRIMARY KEY [ USING INDEX TABLESPACE tablespace ]
| CHECK (expression)
| REFERENCES reftable [ ( refcolumn ) ]
[ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
Y table_constraint es una de estas opciones:
[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ...] )
[ USING INDEX TABLESPACE tablespace ]
| PRIMARY KEY ( column_name [, ...] )
[ USING INDEX TABLESPACE tablespace ]
| CHECK ( expression )
| FOREIGN KEY ( column_name [, ...] )
REFERENCES reftable [ ( refcolumn [, ...] ) ]
[ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
Parámetros
|
Parámetro |
Descripción |
|
|
Crea una tabla temporal que se elimina automáticamente al final de la sesión actual. Los índices creados en una tabla temporal también son temporales. Si una tabla temporal comparte el mismo nombre que una tabla permanente, la tabla permanente no está visible en la sesión actual a menos que se haga referencia a ella mediante su nombre calificado por el esquema. |
|
|
Nombre de la tabla. Use el nombre calificado por el esquema para hacer referencia a la tabla cuando sea necesario. |
|
|
Nombre de una columna de la tabla. |
|
|
Tipo de datos de la columna. El valor puede incluir especificadores de matriz. |
|
|
Expresión de valor predeterminado para la columna. La expresión no puede contener subconsultas ni referencias a otras columnas de la tabla, y su tipo de datos debe coincidir con el tipo de datos de la columna. Si no se inserta ningún valor y no se define un valor predeterminado, se usa |
|
|
Nombre opcional para la restricción de columna o de tabla. Si se omite, el sistema genera un nombre automáticamente. |
|
|
Evita que la columna contenga valores |
|
|
Requiere que los valores de la columna identifiquen de manera única cada fila y que no sean nulos. Una tabla solo puede tener una clave primaria. Las columnas de la clave primaria no pueden aparecer también en una restricción |
|
|
Define una clave primaria compuesta en varias columnas. |
|
|
Expresión booleana que debe evaluarse como |
|
|
Define una restricción de clave externa. Si se omite |
|
|
Define una restricción de clave externa en varias columnas. |
|
|
Acción que se debe ejecutar cuando se elimina una fila referenciada. Las acciones referenciales no pueden diferirse incluso si la restricción es diferible. Acciones compatibles: |
|
|
Indica si la comprobación de la restricción puede diferirse hasta el final de una transacción. Use |
|
|
Indica cuándo se comprueba una restricción diferible. |
|
|
Acción que se debe aplicar a una tabla temporal al final de un bloque de transacción. |
|
|
El tablespace en el que se creará la tabla. |
Notas de uso
Si se incluye un nombre de esquema (por ejemplo,
CREATE TABLE myschema.mytable), la tabla se crea en ese esquema; de lo contrario, se crea en el esquema actual.Las tablas temporales siempre existen en un esquema dedicado; no especifique un esquema cuando cree una.
El nombre de la tabla debe ser único dentro del esquema; no puede duplicar el nombre de ninguna tabla, secuencia, índice o vista existente.
CREATE TABLEtambién crea un tipo de datos compuesto que representa una fila de la tabla. El nombre de la tabla no puede coincidir con el nombre de un tipo de datos existente en el mismo esquema.Una tabla puede tener hasta 1,600 columnas. En la práctica, el límite efectivo puede ser menor debido a las restricciones de longitud de tupla.
Una restricción de columna se aplica a una sola columna. Una restricción de tabla se aplica a varias columnas. Para facilitar la administración, una restricción de una sola columna puede escribirse en cualquiera de las dos formas.
PolarDB crea automáticamente un índice para cada restricción
UNIQUEyPRIMARY KEY; no es necesario crear un índice explícito.
Notas de compatibilidad
El comportamiento de CREATE TABLE en PolarDB for Oracle es diferente al de las bases de datos Oracle. A continuación se indican las diferencias:
Temporary table visibility: Las tablas temporales están visibles solo en la sesión actual. Este mecanismo es diferente del mecanismo de tablas temporales globales de las bases de datos Oracle.
**
ON COMMITpredeterminado**: El comportamiento predeterminado esPRESERVE ROWS. En Oracle, el valor predeterminado esDELETE ROWS.
Ejemplos
Cree dos tablas relacionadas
A continuación se muestra un ejemplo que crea una tabla dept y una tabla emp con una clave externa que hace referencia a dept.
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
);
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
Agregue una restricción UNIQUE
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14) CONSTRAINT dept_dname_uq UNIQUE,
loc VARCHAR2(13)
);
Agregue una restricción CHECK de nivel de columna
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2) CONSTRAINT emp_sal_ck CHECK (sal > 0),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
Agregue una restricción CHECK de nivel de tabla
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno),
CONSTRAINT new_emp_ck CHECK (ename IS NOT NULL AND empno > 7000)
);
Defina una clave primaria compuesta
A continuación se muestra un ejemplo que crea una tabla jobhist con una clave primaria compuesta en empno y startdate.
CREATE TABLE jobhist (
empno NUMBER(4) NOT NULL,
startdate DATE NOT NULL,
enddate DATE,
job VARCHAR2(9),
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2),
chgdesc VARCHAR2(80),
CONSTRAINT jobhist_pk PRIMARY KEY (empno, startdate)
);
Establezca valores predeterminados para las columnas
La columna job tiene como valor predeterminado 'SALESMAN'. La columna hiredate tiene como valor predeterminado la fecha en que se inserta la fila.
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9) DEFAULT 'SALESMAN',
mgr NUMBER(4),
hiredate DATE DEFAULT SYSDATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
Cree una tabla en un tablespace específico
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
) TABLESPACE diskvol1;
Pasos siguientes
Para modificar la estructura o las restricciones de una tabla existente, use
ALTER TABLE.Para eliminar una tabla, use
DROP TABLE.Para agregar índices además de los que se crean automáticamente para las claves primarias y las restricciones UNIQUE, use
CREATE INDEX.Para insertar datos en la tabla, use
INSERT.