Cláusula CONSTRAINT (Microsoft Access SQL)
Se aplica a: Access 2013, Office 2013
Una restricción es similar a un índice, aunque se puede usar para establecer una relación con otra tabla.
La cláusula CONSTRAINT se usa en las instrucciones ALTER TABLE y CREATE TABLE para crear o eliminar restricciones. Hay dos tipos de cláusulas CONSTRAINT: uno para crear una restricción en un único campo y otro para crear una restricción en varios campos.
Nota:
El motor de base de datos de Microsoft Access no admite el uso de CONSTRAINT, ni las instrucciones de lenguaje de definición de datos (DDL), con bases de datos que no sean del motor de base de datos de Microsoft Access. En su lugar, use los métodos Create de DAO.
Sintaxis
Restricción de un único campo
Nombre DE RESTRICCIÓN {PRIMARY KEY | UNIQUE | NOT NULL | REFERENCES foreigntable [(foreignfield1, foreignfield2)] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]}
Restricción de varios campos
Nombre DE RESTRICCIÓN {PRIMARY KEY (primary1[, primary2 [, ...]]) | UNIQUE (unique1[, unique2 [, ...]]) | NOT NULL (notnull1[, notnull2 [, ...]]) | FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]}
La cláusula CONSTRAINT consta de los elementos siguientes:
Part |
Descripción |
---|---|
name |
Nombre de la restricción que se va a crear. |
primary1, primary2 |
Nombre del campo o campos que se designarán como clave principal. |
unique1, unique2 |
Nombre del campo o los campos que se van a designar como clave única. |
nonulo1, nonulo2 |
Nombre del campo o los campos que se restringen a valores no nulos. |
ref1, ref2 |
Nombre del campo o campos de clave externa que hacen referencia a campos de otra tabla. |
foreigntable |
Nombre de la tabla externa que contiene el campo o los campos especificados en campoExterno. |
foreignfield1, foreignfield2 |
Nombre del campo o los campos de tablaExterna especificados en referencia1, referencia2. Esta cláusula se puede omitir si el campo al que se hace referencia es la clave principal de tablaExterna. |
Comentarios
Use la sintaxis de una restricción de un solo campo en la cláusula de definición de campo de una instrucción ALTER TABLE o CREATE TABLE seguida inmediatamente de la especificación del tipo de datos del campo.
La sintaxis de una restricción de varios campos se usa cuando se utiliza la palabra reservada CONSTRAINT fuera de una cláusula de definición de campos en una instrucción ALTER TABLE o CREATE TABLE.
Mediante CONSTRAINT, puede designar un campo como uno de los siguientes tipos de restricciones:
Puede usar la palabra reservada UNIQUE para designar un campo como una clave única. Esto significa que no puede haber dos registros en la tabla que tengan el mismo valor en este campo. Puede restringir cualquier campo o lista de campos como único. Si se designa una restricción de varios campos como una clave única, los valores combinados de todos los campos del índice deben ser únicos, incluso si dos o más registros tienen el mismo valor en uno solo de los campos.
Puede usar las palabras reservadas PRIMARY KEY para designar un campo o conjunto de campos de una tabla como clave principal. Todos los valores de la clave principal deben ser únicos y distintos de Null, y sólo puede haber una clave principal para una tabla.
Nota:
No establezca una restricción PRIMARY KEY en una tabla que ya tenga una clave principal; si lo hace, se produce un error.
Puede usar las palabras reservadas FOREIGN KEY para designar un campo como una clave externa. Si la clave principal de la tabla externa consta de varios campos, debe usar una definición de restricción de varios campos en la que se enumeren todos los campos de referencia, el nombre de la tabla externa y los nombres de los campos a los que se hace referencia en la tabla externa en el mismo orden en que se enumeran los campos que tienen la referencia. Si el campo o los campos a los que se hace referencia son la clave principal de la tabla externa, no es necesario especificar los campos a los que se hace referencia. De forma predeterminada, el motor de base de datos se comporta como si la clave principal de la tabla externa fueran los campos a los que se hace referencia. Las restricciones de clave externa definen acciones específicas que se deben realizar cuando se cambia un valor de clave principal correspondiente:
Puede especificar acciones que se deben llevar a cabo en la tabla externa en función de una acción correspondiente realizada en una clave principal de la tabla en la que se define CONSTRAINT. Por ejemplo, considere la siguiente definición para la tabla Customers:
CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))
Considere la siguiente definición de la tabla Orders, que define una relación de clave externa que hace referencia a la clave principal de la tabla Customers:
CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE
Las cláusulas ON UPDATE CASCADE y ON DELETE CASCADE están definidas en la clave externa. La cláusula ON UPDATE CASCADE significa que si se actualiza el identificador de un cliente (CustId) en la tabla Customers, la actualización se propagará en cascada en la tabla Orders. Cada pedido que contenga un valor de identificador de cliente correspondiente se actualizará automáticamente con el nuevo valor. La cláusula ON DELETE CASCADE significa que si se elimina un cliente de la tabla Customers, todas las filas de la tabla Orders que contengan el mismo valor de identificador de cliente también se eliminarán. Considere la siguiente definición diferente de la tabla Orders, en la que se usa la acción SET NULL en lugar de la acción CASCADE:
CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL
La cláusula ON UPDATE SET NULL significa que si se actualiza el identificador de un cliente (CustId) en la tabla Customers, los valores de clave externa correspondientes en la tabla Orders se establecerán automáticamente en NULL. Igualmente, la cláusula ON DELETE SET NULL significa que si se elimina un cliente de la tabla Customers, todas las claves externas correspondientes en la tabla Orders se establecerán automáticamente en NULL.
Para impedir la creación automática de índices para claves externas, se puede usar el modificador NO INDEX. Esta forma de definición de clave externa sólo debe usarse en casos en que los valores de índice resultantes se duplicarían con frecuencia. Si los valores de un índice de clave externa se duplican con frecuencia, el uso de un índice puede ser menos eficaz que simplemente realizar un recorrido de la tabla. El mantenimiento de este tipo de índice, con inserción y eliminación de filas en la tabla, disminuye el rendimiento y no aporta ninguna ventaja.
Ejemplo
Este ejemplo crea una nueva tabla llamada ThisTable con dos campos de texto.
Sub CreateTableX1()
Dim dbs As Database
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Create a table with two text fields.
dbs.Execute "CREATE TABLE ThisTable " _
& "(FirstName CHAR, LastName CHAR);"
dbs.Close
End Sub
Este ejemplo crea una nueva tabla llamada MyTable con dos campos de texto, un campo Date/Time y un índice único formado por todos los tres campos.
Sub CreateTableX2()
Dim dbs As Database
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Create a table with three fields and a unique
' index made up of all three fields.
dbs.Execute "CREATE TABLE MyTable " _
& "(FirstName CHAR, LastName CHAR, " _
& "DateOfBirth DATETIME, " _
& "CONSTRAINT MyTableConstraint UNIQUE " _
& "(FirstName, LastName, DateOfBirth));"
dbs.Close
End Sub
Este ejemplo crea una nueva tabla con dos campos de texto y un campo Integer. El campo SSN es la clave primaria.
Sub CreateTableX3()
Dim dbs As Database
' Modify this line to include the path to Northwind
' on your computer.
Set dbs = OpenDatabase("Northwind.mdb")
' Create a table with three fields and a primary
' key.
dbs.Execute "CREATE TABLE NewTable " _
& "(FirstName CHAR, LastName CHAR, " _
& "SSN INTEGER CONSTRAINT MyFieldConstraint " _
& "PRIMARY KEY);"
dbs.Close
End Sub