CREATE TABLE

Nombre

CREATE TABLE  --  Crea una nueva tabla

Synopsis

CREATE [ TEMPORARY | TEMP ] TABLE table (
    column type
    [ NULL | NOT NULL ] [ UNIQUE ] [ DEFAULT value ]
    [column_constraint_clause | PRIMARY KEY } [ ... ] ]
    [, ... ]
    [, PRIMARY KEY ( column [, ...] ) ]
    [, CHECK ( condition ) ]
    [, table_constraint_clause ]
    ) [ INHERITS ( inherited_table [, ...] ) ]
  

Entradas

TEMPORARY

Se crea la tabla s�lo para esta sesi�n, y es eliminada autom�ticamente con el fin de la sesi�n. Las tablas permanentes existentes con el mismo nombre no son visibles mientras la table temporal existe.

table

El nombre de una nueva clase o tabla a crear.

column

El nombre de un campo.

type

El tipo del campo. Puede incluir especificadores de array. Consulte la PostgreSQL User's Guide para m�s informaci�n sobre tipos y arrays.

DEFAULT value

Un valor por defecto para el campo. Consulte la cl�usula DEFAULT para m�s informaci�n.

column_constraint_clause

La cl�usula opcional de restricciones (constraint) especifica una lista de restricciones de integridad o comprueba que las nuevas inserciones o actualizaciones deben satisfacer para que la inserci�n o la actualizaci�n tenga �xito. Cada restricci�n debe evaluarse a una expresi�n booleana. Aunque SQL92 requiere la column_constraint_clause para referirse a ese campo s�lamente, Postgres permite que m�ltiples campos sean referenciados dentro de un �nico campo constraint. Consulte la cl�usula constraint para m�s informaci�n.

table_constraint_clause

La cl�usula opcional CONSTRAINT especifica una lista de restricciones de integridad que las nuevas inserciones o las actualizaciones deber�n satisfacer para que una sentencia insert o update tenga �xito. Cada restricci�n debe ser evaluada a una expresi�n booleana. Se pueden referenciar m�ltiples campos con una �nica restricci�n. S�lo se puede definir una �nica cl�usula PRIMARY KEY por tabla; PRIMARY KEY column (una restricci�n de tabla) and PRIMARY KEY (una restricci�n de campo) son mutuamente excluyentes. Consulte la cl�usula de restricci�n de tabla para m�s informaci�n.

INHERITS inherited_table

La cl�usula opcional INHERITS especifica una colecci�n de nombres de tabla de las cuales esta tabla hereda todos los campos. Si alg�n campo heredado aparece m�s de una vez, Postgres informa de un error. Postgres permite autom�ticamente a la tabla creada heredar funciones de las tablas superiores a ella en la jerarqu�a de herencia.

NotaAside
 

La herencia de funciones se realiza siguiendo las convenciones del Common Lisp Object System (CLOS).

Salidas

CREATE

Mensaje devuelto si la table se ha creado con �xito.

ERROR

Mensaje devuelto si la creaci�n de la tabla falla. Este mensaje viene normalmente acompa�ado por alg�n texto explicativo, como: ERROR: Relation 'table' already exists que ocurre en tiempo de ejecuci�n, si la tabla especificada ya existe en la base de datos.

ERROR: DEFAULT: type mismatched

Si el tipo de datos o el valor por defecto no corresponde al tipo de datos de la definici�n del campo.

Description

CREATE TABLE introducir� una nueva clase o tabla en la base de datos actual. La tabla ser� pose�da por el usuario que introduce la sentencia.

Cada type puede ser un tipo simple, un tipo complejo (set) o un tipo array. Cada atributo puede ser especificado para ser no nulo, y puede tener un valor por defecto, especificado por la Cl�usula DEFAULT.

Nota

Al igual que en la versi�n 6.0 de Postgres, consistant array dimensions within an attribute are not enforced. Esto cambiar� probablemente en las versiones futuras.

La cl�usula opcional INHERITS especifica una colecci�n de nombres de clases de los cuales esta clase hereda autom�ticamente todos los campos. Si cualquier nombre de campo heredado aparece m�s de una vez, Postgres informa de un error. Postgres permite autom�ticamente a la clase creada heredar funciones de clases superiores en la jerarqu�a de herencia. La herencia de funciones se hace siguiendo las convenciones del Common Lisp Object System (CLOS).

Cada nueva tabla o clase table es creada autom�ticamente como tipo. Por tanto, una o m�s instancias de la clase son autom�ticamente un tipo y pueden ser usadas en otras MODIFICAR TABLA sentencias CREATE TABLE.

The new table is created as a heap with no initial data. Una tabla no puede tener m�s de 1600 campos (realmente, esto viene limitado por el hecho que el m�ximo tama�o de una tupla debe ser menor que 8192 bytes), pero este l�mite puede ser configurado a un tama�o menor en algunos sitios. Una tabla no puede tener el mismo nombre que una tabla de cat�logo del sistema.

Cl�usula DEFAULT

DEFAULT value
   

Entradas

value

Los posibles valores para la expresi�n DEFAULT (valor por defecto) son:

  • un literal

  • una funci�n de usuario

  • una funci�n niladic

Salidas

Ninguna.

Descripci�n

La cl�usula DEFAULT asigna una valor por defecto a un campo (a trav�s de una definici�n de campo en la sentencia CREATE TABLE). El tipo de dato de un valor por defecto debe corresponder al tipo de dato de la definici�n del campo.

Una operaci�n de inserci�n (INSERT) que incluya un campo sin un valor especificado por defecto asignar� el valor NULL al campo si no se le proporciona un valor expl�cito. Si el valor por defecto es un literal significa que que es un valor constante. Si el valor por defecto es una niladic-function o una user-function significa que dicho valor es el de la funci�n especificada en el momento de la inserci�n.

Hay dos tipos de funciones niladic:

niladic USER

CURRENT_USER / USER

Consulte las funciones CURRENT_USER

SESSION_USER

todav�a no soportadas

SYSTEM_USER

todav�a no soportadas

niladic datetime

CURRENT_DATE

Consulte las funciones CURRENT_DATE

CURRENT_TIME

Consulte las funciones CURRENT_TIME

CURRENT_TIMESTAMP

Consulte la funci�n CURRENT_TIMESTAMP

En la versi�n actual (v6.5), Postgres eval�a todas las expresiones por defecto en el momento en que la tabla es definida. Por tanto, las funciones que son "non-cacheable" como CURRENT_TIMESTAMP pueden no producir el efecto deseado. Para el caso particular de tipos date/time , se puede trabajar sobre este comportamiento usando "DEFAULT TEXT 'now'" en lugar de "DEFAULT 'now'" o "DEFAULT CURRENT_TIMESTAMP". Esto fuerza Postgres a considerar la constante como un tipo string y as� convertirla al valor timestamp en tiempo de ejecuci�n.

Uso

Para asignar un valor constante como valor por defecto para los campos did and number, y una cadena al campo did:

CREATE TABLE video_sales (
    did      VARCHAR(40) DEFAULT 'luso films',
    number   INTEGER DEFAULT 0,
    total    CASH DEFAULT '$0.0'
);
    

Para asignar una secuencia existente como valor por defecto para el campo did, y un literal para el campo name:

CREATE TABLE distributors (
    did      DECIMAL(3)  DEFAULT NEXTVAL('serial'),
    name     VARCHAR(40) DEFAULT 'luso films'
);
    

Column CONSTRAINT Clause

[ CONSTRAINT name ] { [
    NULL | NOT NULL ] | UNIQUE | PRIMARY KEY | CHECK constraint } [, ...]
   

Entradas

name

Un nombre arbitrario dado a la restricci�n de integridad Si no se especifica name, se genera de los nombres de l tabla y campos, lo que asegura unicidad para name.

NULL

El campo puede contener valores NULL. �sta es la opci�n por defecto.

NOT NULL

El campo no puede contener valores NULL. Esto equivale a la restricci�n de campo CHECK (column NOT NULL).

UNIQUE

El campo debe contener un valor �nico. En Postgres esto es forzado por medio de la creaci�n impl�cita de un �ndice �nico sobre la tabla.

PRIMARY KEY

Este campo es una clave primaria, lo que implica que la unicidad es forzada por el sistema y que otras tablas pueden confiar en este campo como identificador �nico para los registros. Consulte PRIMARY KEY para m�s informaci�n.

constraint

La definici�n de la restricci�n.

Descripci�n

La cl�usula opcional de restricci�n (CONSTRAINT) especifica restricciones o verifica qu� deben cumplir las nuevas inserciones o las actualizaciones para que una operaci�n de inserci�n o de actualizaci�n tenga �xito. Cada restricci�n debe evaluarse a una expresi�n booleana. Con una �nica restricci�n se pueden referenciar m�ltiples atributos. El uso de PRIMARY KEY como restricci�n de tabla es mutuamente incompatible con el uso de PRIMARY KEY como restricci�n de campo.

Una restricci�n es una regla con nombre: un objeto SQL que ayuda a definir conjuntos de valores v�lidos poniendo l�mites a los resultados de las operaciones INSERT, UPDATE or DELETE sobre una tabla.

Existen dos maneras de definir restricciones de integridad: restricciones de tabla, que veremos m�s adelante, y restricciones de campo, que pasamos a ver.

Una restricci�n de campo es una restricci�n de integridad definida como parte de la definici�n de campo, y l�gicamente se convierte en una restricci�n de tabla nada m�s ser creada. Las restricciones de campo disponibles son:

PRIMARY KEY
REFERENCES
UNIQUE
CHECK
NOT NULL

Nota

Postgres todav�a no soporta (en su versi�n 6.5) restricciones de integridad especificadas por REFERENCES. Se acepta la sintaxis pero se ignora la cl�usula (disponible, en cambio, a partir de la versi�n 7.0)

Restricci�n NOT NULL

[ CONSTRAINT name ] NOT NULL 
   

La restricci�n NOT NULL especifica una regla que obliga que un campo contenga �nicamente valores no nulos. �sta es �nicamente una restricci�n de campo, y no se permite como restricci�n de tabla..

Salidas

status

ERROR: ExecAppend: Fail to add null value in not null attribute "column".

Este error ocurre en tiempo de ejecuci�n cuando se intenta insertar un valor nulo en un campo que contiene la restricci�n NOT NULL.

Descripci�n

Uso

Definir dos restricciones de campo NOT NULL en la tabla distributors, una de las cuales se nombra:

CREATE TABLE distributors (
    did      DECIMAL(3) CONSTRAINT no_null NOT NULL,
    name     VARCHAR(40) NOT NULL
);
     

Restricci�n UNIQUE

[ CONSTRAINT name ] UNIQUE
   

Entradas

CONSTRAINT name

Una etiqueta arbitraria dada a una restricci�n.

Salidas

status

ERROR: Cannot insert a duplicate key into a unique index.

Este error ocurre en tiempo de ejecuci�n si se intenta insertar un valor duplicado en un campo.

Descripci�n

La restricci�n UNIQUE especifica una regla que obliga a un grupo de uno o m�s campos de una tabla a contener valores �nicos.

Las definiciones de campo de las columnas especificadas no tienen porqu� incluir una restricci�n NOT NULL constraint para ser inclu�dos en una restricci�n UNIQUE. Tener m�s de un valor nulo en un campo sin la restricci�n NOT NULL, no viola la restricci�n UNIQUE. (This deviates from the SQL92 definition, but is a more sensible convention. See the section on compatibility for more details.).

Cada restricci�n de campo UNIQUE debe nombrar un campo que es distitno del conjunto de campos nombrados por cualquier otra restricci�n UNIQUE o PRIMARY KEY definifas por la tabla.

Nota

Postgres crea autom�ticamente un �ndice �nico por cada restricci�n UNIQUE, para asegurar la integridad de los datos. Vea CREATE INDEX para m�s informaci�n.

Uso

Define una restricci�n de campo UNIQUE para la tabla distributors. Las restricciones de campo UNIQUE solo son definidas sobre un campo de la tabla:

CREATE TABLE distributors (
    did      DECIMAL(3),
    name     VARCHAR(40) UNIQUE
);
  
lo que equivale a la siguiente restricci�n de tabla:
CREATE TABLE distributors (
    did      DECIMAL(3),
    name     VARCHAR(40),
    UNIQUE(name)
);
     

La restricci�n CHECK

[ CONSTRAINT name ] CHECK
    ( condition [, ...] ) 
   

Entradas

name

Un nombre arbitrario dado a la restricci�n.

condition

Cualquier expresi�n condicional v�lida que se evalue a un resultado boolenano.

Outputs

status

ERROR: ExecAppend: rejected due to CHECK constraint "table_column".

Este error ocurre en tiempo de ejecuci�n si alguien intenta insertar un valor ilegal en un campo sujeto a una restricci�n CHECK.

Descripci�n

La restricci�n CHECK especifica una restricci�n sobre los valores permitidos en un campo. La restricci�n CHECK tambi�n se permite como restricci�n de tabla.

Las resticciones de campo CHECK de SQL92 s�lo pueden ser definidas sobre un campo de la tabla, y solamente pueden referirse a un campo. Postgres no tiene esta restricci�n.

Restricci�n PRIMARY KEY

[ CONSTRAINT name ] PRIMARY KEY 
   

Entradas

CONSTRAINT name

Un nombre arbitrario para la restricci�n.

Salidas

ERROR: No se puede insertar un valor duplicado en un �ndice �nico.

Esto ocurre en tiempo de ejecuci�n si alguien intenta insertar un valor duplicado en una columna sujeta a una restricci�n PRIMARY KEY.

Descripci�n

La restricci�n de campo PRIMARY KEY especifica que un campo de una tabla solamente puede contener valores �nicos (no duplicados) y no nulos . La definici�n de la columna especificada no tiene que incluir una restricci�n expl�cita NOT NULL para ser inclu�da en una restricci�n PRIMARY KEY.

S�lo se puede especificar una �nica clave primaria (PRIMARY KEY) por tabla.

Notas

Postgres crea autom�ticamente un �ndice �nico para asegurar la integridad de los datos. (Vea la sentencia CREATE INDEX)

La restricci�n de clave primaria (PRIMARY KEY) debe nombrar un conjunto de campos que no sean contenidos por ninguna otra restricci�n UNIQUE definidos por la misma tabla, ya que producir�a una duplicaci�n de �ndices equivalentes y una sobrecarga adicional en tiempo de ejecuci�n. Sin embargo, Postgres no lo deshabilita espec�ficamente.

Cl�usula CONSTRAINT para tablas

[ CONSTRAINT name ] { PRIMARY KEY |  UNIQUE } ( column [, ...] )
[ CONSTRAINT name ] CHECK ( constraint )
   

Entradas

CONSTRAINT name

Un nombre arbitrario dado a una restricci�n de integridad.

column [, ...]

El nombre de los campos para los que definimos un �ndice �nico y, para la PRIMARY KEY, una restricci�n NOT NULL.

CHECK ( constraint )

Una expresi�n booleana a ser evaluado como la restricci�n.

Salidas

Las posibles salidas para la cl�usula de restricci�n de tablas son las mismas que para las partes correspondientes de la cl�usula restricci�n de campo.

Descripci�n

Una restricci�n de tabla es una restricci�n de integridad definidad sobre uno o m�s campos de una tabla base. Las cuatro variaciones de restricciones de tabla son:

UNIQUE
CHECK
PRIMARY KEY
FOREIGN KEY

Nota

Postgres todav�a no soporta (en su versi�n 6.5) las restricciones de integridad FOREIGN KEY. El compilador entiende la sintaxis de FOREIGN KEY, pero solo imprime un aviso e ignora la cl�usula. Las claves ajenas pueden ser parcialmente emuladas por medio de triggers (Consulte la sentencia CREATE TRIGGER).

Restricci�n UNIQUE

[ CONSTRAINT name ] UNIQUE ( column [, ...] )
    

Entradas

CONSTRAINT name

Un nombre arbitrario dado a una restricci�n.

column

Un nombre de un campo en una tabla.

Salidas

status

ERROR: Cannot insert a duplicate key into a unique index.

Este error ocurre en tiempo de ejecuci�n si se intenta insertar un valor duplicado en un campo.

Descripci�n

La restricci�n UNIQUE especifica una regla en la que un grupo de uno The UNIQUE constraint specifies a rule that a group of one or o m�s campos diversos de una tabla puede contener solo valores �nicos. El comportamiento de la restricci�n de tabla UNIQUE es el mismo que para la restricci�n de campo, con la posibilidad adicional de aplicarlo a m�s de un campo.

Consulte la secci�n sobre la restricci�n de campo UNIQUE para m�s detalles.

Uso

Define una restricci�n de tabla UNIQUE en la tabla distributors:

CREATE TABLE distributors (
    did      DECIMAL(03),
    name     VARCHAR(40),
    UNIQUE(name)
);
     

Restricci�n PRIMARY KEY

[ CONSTRAINT name ] PRIMARY KEY ( column [, ...] ) 
    

Entradas

CONSTRAINT name

Un nombre arbitrario para la restricci�n.

column [, ...]

Los nombres de uno o m�s campos en la tabla.

Salidas

status

ERROR: Cannot insert a duplicate key into a unique index.

Esto ocurre en tiempo de ejecuci�n si alguien intenta insertar un valor duplicado en un campo sujeto a una restricci�n de clave primaria (PRIMARY KEY).

Descripci�n

La restricci�n PRIMARY KEY especifica una regla en la que un grupo de uno o m�s campos de una tabla puede contener s�lo valores �nicos (no duplicados) y no nulos. Las definiciones de campo de los campos especificados no necesita incluir una restricci�n NOT NULL para ser inclu�da en una restricci�n PRIMARY KEY.

La restricci�n de tabla PRIMARY KEY es similar a la respectiva restricci�n de campo, con la posibilidad de extenderla with the additional capability of encompassing multiple columns.

Consulte la secci�n sobre la restricci�n de campo PRIMARY KEY para m�s infomaci�n.

Uso

Crea las tablas films y distributors:

CREATE TABLE films (
     code      CHARACTER(5) CONSTRAINT firstkey PRIMARY KEY,
     title     CHARACTER VARYING(40) NOT NULL,
     did       DECIMAL(3) NOT NULL,
     date_prod DATE,
     kind      CHAR(10),
     len       INTERVAL HOUR TO MINUTE
);
   
CREATE TABLE distributors (
     did      DECIMAL(03) PRIMARY KEY DEFAULT NEXTVAL('serial'),
     name     VARCHAR(40) NOT NULL CHECK (name <> '')
);
   

Crea una tabla con un array de 2 dimensiones:

   CREATE TABLE array (
          vector INT[][]
          );
   

Define una restricci�n de tabla UNIQUE para la tabla films. Las restricciones de tabla UNIQUE pueden ser definidas sobre uno o m�s campos de la tabla:

	CREATE TABLE films (
    code      CHAR(5),
    title     VARCHAR(40),
    did       DECIMAL(03),
    date_prod DATE,
    kind      CHAR(10),
    len       INTERVAL HOUR TO MINUTE,
    CONSTRAINT production UNIQUE(date_prod)
);
   

Define una restricci�n de campo CHECK:

CREATE TABLE distributors (
    did      DECIMAL(3) CHECK (did > 100),
    name     VARCHAR(40)
);
   

Define una restricci�n de tabla CHECK:

CREATE TABLE distributors (
    did      DECIMAL(3),
    name     VARCHAR(40)
    CONSTRAINT con1 CHECK (did > 100 AND name > '')
);
   

Define una restricci�n de tabla PRIMARY KEY para la tabla films. Las restricciones de tabla PRIMARY KEY pueden ser definidas sobre uno o m�s campos de la tabla:

CREATE TABLE films (
    code      CHAR(05),
    title     VARCHAR(40),
    did       DECIMAL(03),
    date_prod DATE,
    kind      CHAR(10),
    len       INTERVAL HOUR TO MINUTE,
    CONSTRAINT code_title PRIMARY KEY(code,title)
);
   

Define una restricci�n de campo PRIMARY KEY para la tabla distributors. Las restricciones de campo PRIMARY KEY solamente se pueden definir para un campo de la tabla (los siguientes dos ejemplos ser�an equivalentes) :

	CREATE TABLE distributors (
    did      DECIMAL(03),
    name     CHAR VARYING(40),
    PRIMARY KEY(did)
); 
   
CREATE TABLE distributors (
    did      DECIMAL(03) PRIMARY KEY,
    name     VARCHAR(40)
);
   

Notas

CREATE TABLE/INHERITS es una extensi�n al lenguaje de Postgres.

Compatibilidad

SQL92

Adem�s de la tabla temporal visible localmente, SQL92 define una sentencia CREATE GLOBAL TEMPORARY TABLE , y opcionalmente una cl�usula ON COMMIT:

CREATE GLOBAL TEMPORARY TABLE table ( column type [
    DEFAULT value ] [ CONSTRAINT column_constraint ] [, ...] )
    [ CONSTRAINT table_constraint ] [ ON COMMIT { DELETE | PRESERVE } ROWS ] 
   

Para tablas temporales, la sentencia CREATE GLOBAL TEMPORARY TABLE nombra una nueva tabla visible a otros clientes y define los campos de la tabla y las restricciones.

La cl�usula opcional ON COMMIT de CREATE TEMPORARY TABLE especifica si la tabla temporal debe vaciarse de registros cada vez que se ejecuta un COMMIT o no. Si se omite la cl�usula ON COMMIT, se asume la opci�n por defecto, ON COMMIT DELETE ROWS.

Para crear una tabla temporal:

CREATE TEMPORARY TABLE actors (
    id         DECIMAL(03),
    name       VARCHAR(40),
    CONSTRAINT actor_id CHECK (id < 150)
) ON COMMIT DELETE ROWS;
    

Cl�usula UNIQUE

SQL92 especifica algunas posibilidades adicionales para UNIQUE:

Definici�n de restricci�n de tabla:

[ CONSTRAINT name ] UNIQUE ( column [, ...] )
    [ { INITIALLY DEFERRED | INITIALLY IMMEDIATE } ]
    [ [ NOT ] DEFERRABLE ]
     

Definici�n de restricci�n de campo:

[ CONSTRAINT name ] UNIQUE
      [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
      [ [ NOT ] DEFERRABLE ]
     

cl�usula NULL

La restricci�n NULL (realmente no es una restricci�n) es una extensi�n Postgres a SQL92 inclu�da por simetr�a con la cl�usula NOT NULL. Como es el valor por defecto para cualquier campo, su presencia es redundante.

[ CONSTRAINT name ] NULL 
     

cl�usula NOT NULL

SQL92 especifica alguna posibildad adicional para NOT NULL:

[ CONSTRAINT name ] NOT NULL 
    [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
    [ [ NOT ] DEFERRABLE ]
     

cl�usula CONSTRAINT

SQL92 especifica alguna posibilidad adicional para restricciones, y tambi�n define restricciones de assertions y de dominio.

Nota

Postgres todav�a no soporta ni dominios ni assertions.

Una assertion es un tipo especial de restricci�n de integridad y comparte el mismo espacio de nombres con otras restricciones. Sin embargo, una assertion no es necesariamente dependiente de una particular tabla base como son las restricciones, as� que SQL-92 proporciona la sentencia CREATE ASSERTION como un m�todo alternativo para definir una restricci�n:

CREATE ASSERTION name CHECK ( condition )
    

Las restricciones de dominio se definen con las sentencias CREATE DOMAIN o ALTER DOMAIN:

Restricci�n de dominio:

[ CONSTRAINT name ] CHECK constraint 
    [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
    [ [ NOT ] DEFERRABLE ]
     

Definici�n de restricciones de tabla:

[ CONSTRAINT name ] { PRIMARY KEY ( column, ... ) | FOREIGN KEY constraint | UNIQUE constraint | CHECK constraint }
    [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
    [ [ NOT ] DEFERRABLE ]
     

Definici�n de restricciones de campo:

[ CONSTRAINT name ] { NOT NULL | PRIMARY KEY | FOREIGN KEY constraint | UNIQUE | CHECK constraint }  
    [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
    [ [ NOT ] DEFERRABLE ]
     

Una definici�n de restricci�n de integridad (CONSTRAINT) puede contener un atributo o cl�usula DEFERRABLE y /o una cl�usula del modo inicial de restricci�n, en cualquier orden.

NOT DEFERRABLE

significa que la restricci�n debe ser comprobada despu�s de la ejecuci�n de cada sentencia SQL.

DEFERRABLE

significa que la verificaci�n del cumplimiento de la restricci�n puede ser aplazado hasta m�s tarde, pero no m�s tarde que el final de la actual transacci�n.

El modo de restricci�n para cada restricci�n tiene siempre un valor incial por defecto que se establece para la restricci�n al principio de la transacci�n.

INITIALLY IMMEDIATE

significa que, desde el principio de la transacci�n, la restricci�n debe ser comprobada despu�s de la ejecuci�n de cada sentencia SQL.

INITIALLY DEFERRED

significa que, como se est� al principio de la transacci�n, la comprobaci�n de la restricci�n puede ser aplazada hasta m�s tarde, pero no m�s tarde que en el final de la actual transacci�n. O sea, que la restricci�n puede ser incumplida por alguna sentencia SQL en un punto intermedio de la transacci�n, pero no al final de la misma.

Cl�usula CHECK

SQL92 especifica alguna capacidad adicional para CHECK tanto en la restricciones de tabla como en la de campo.

definici�n de restricci�n de tabla:

[ CONSTRAINT name ] CHECK ( VALUE condition ) 
      [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
      [ [ NOT ] DEFERRABLE ]
     

definici�n de restricci�n de campo:

[ CONSTRAINT name ] CHECK ( VALUE condition ) 
      [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
      [ [ NOT ] DEFERRABLE ]
    

cl�usula PRIMARY KEY

SQL92 especifica algunas posibilidades adicionales para la PRIMARY KEY:

Definici�n de restricciones de tabla:

[ CONSTRAINT name ] PRIMARY KEY ( column [, ...] ) 
    [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
    [ [ NOT ] DEFERRABLE ]
     

Definici�n de restricciones de campo:

[ CONSTRAINT name ] PRIMARY KEY 
    [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ]
    [ [ NOT ] DEFERRABLE ]