Cláusula CONSTRAINT

Um restrição é semelhante a um índice, embora também possa ser usado para estabelecer uma relação com outra tabela.

Você pode usar a cláusula CONSTRAINT nas instruções ALTER TABLE e CREATE TABLE para criar ou excluir restrições. Há dois tipos de cláusulas CONSTRAINT: uma para a criação de uma restrição em um único campo e outra para a criação de uma restrição em mais de um campo.

Observação : O mecanismo de banco de dados do Microsoft Access não oferece suporte ao uso de CONSTRAINT ou qualquer uma das instruções de idioma de definição de dados com os bancos de dados que não são do Microsoft Access. Use os métodos DAO Create.

Sintaxe

Restrição de campo único:

CONSTRAINT nome {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES tabelaestrangeira [(campoestrangeiro1, campoestrangeiro2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Restrição de múltiplos campos:

CONSTRAINT nome
{PRIMARY KEY (primária1[, primária2 [, ...]]) |
UNIQUE (exclusiva1[, exclusiva2 [, ...]]) |
NOT NULL (nãonulo1[, nãonulo2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES tabelaestrangeira [(campoestrangeiro1 [, campoestrangeiro2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

A cláusula CONSTRAINT tem as seguintes partes:

Parte

Descrição

nome

O nome da restrição a ser criada.

primária1, primária2

O nome dos campos que serão designados como chave primária.

exculsiva1, exclusiva2

O nome dos campos que serão designados como uma chave exclusiva.

nãonulo1, nãonulo2

O nome dos campos restritos a valores não nulos.

ref1, ref2

O nome de campos de chave estrangeira que fazem referência a campos de outra tabela.

tabelaestrangeira

O nome da tabela estrangeira que contém os campos especificados por campoestrangeiro.

campoestrangeiro1, campoestrangeiro2

O nome dos campos em tabelaestrangeira especificados por ref1, ref2. Você poderá omitir essa cláusula se o campo de referência for a chave primária de tabelaestrangeira.

Comentários

Use a sintaxe para uma restrição de campo único na cláusula de definição de campo de uma instrução ALTER TABLE ou CREATE TABLE imediatamente após a especificação do tipo de dado do campo.

Use a sintaxe para uma restrição de campos múltiplos sempre que usar a palavra reservada CONSTRAINT fora de uma cláusula de definição de campo em uma instrução ALTER TABLE ou CREATE TABLE.

Com CONSTRAINT, você pode designar um campo como um dos seguintes tipos de restrições:

  • Você pode usar a palavra reservada UNIQUE para designar um campo como uma chave exclusiva. Isso significa que nenhum registro da tabela terá o mesmo valor nesse campo. Você pode restringir qualquer campo ou lista de campos como exclusivo. Se uma restrição de campos múltiplos for designada como uma chave exclusiva, os valores combinados de todos os campos no índice deverão ser exclusivos, mesmo que dois ou mais registros tenham o mesmo valor em apenas um dos campos.

  • Você pode usar as palavras reservadas PRIMARY KEY para designar um campo ou um conjunto de campos em uma tabela como chave primária. Todos os valores de chave primária devem ser exclusivos e não nulos, e pode haver apenas uma chave primária em uma tabela.

    Observação : Não defina uma restrição PRIMARY KEY em uma tabela que já tem uma chave primária; se você fizer isso, ocorrerá um erro.

  • Você pode usar as palavras reservadas FOREIGN KEY para designar um campo como uma chave estrangeira. Se a chave primária da tabela estrangeira consistir em mais de um campo, use uma definição de restrição de campos múltiplos, listando todos os campos de referência, o nome da tabela estrangeira e os nomes dos campos referenciados na tabela estrangeira na mesma ordem em que os campos de referência são listados. Se os campos referenciados forem chave primária da tabela estrangeira, não será preciso especificá-los. Por padrão, o mecanismo de banco de dados se comporta como se os campos referenciados fossem chave primária da tabela estrangeira.

    As restrições de chave estrangeira definem ações específicas a serem executadas quando um valor correspondente de chave primária for alterado:

  • É possível especificar as ações a serem executadas na tabela estrangeira com base em uma ação correspondente realizada em uma chave primária na tabela em que CONSTRAINT é definida. Por exemplo, considere a seguinte definição da tabela Customers (Clientes):

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Considere a seguinte definição da tabela Orders (Pedidos), que define uma relação de chave estrangeira que faz referência à chave primária da tabela 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

As cláusulas ON UPDATE CASCADE e ON DELETE CASCADE são definidas na chave estrangeira. A cláusula ON UPDATE CASCADE significa que, se o identificador do cliente (CustId) for atualizado na tabela Customer, a atualização será propagada pela tabela Orders. Cada pedido que contém um valor de identificador do cliente correspondente será atualizado automaticamente com o novo valor. A cláusula ON DELETE CASCADE significa que, se um usuário for excluído da tabela Customer, todas as linhas na tabela Orders que contêm o mesmo valor de identificador do cliente também serão excluídas.

Considere a seguinte definição diferente da tabela Orders, usando a ação SET NULL em vez de 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

A cláusula ON UPDATE SET NULL significa que, se o identificador do cliente (CustId) for atualizado na tabela Customer, os valores de chave estrangeira correspondentes na tabela Orders serão definidos automaticamente como NULL. Da mesma forma, a cláusula ON DELETE SET NULL significa que, se um cliente for excluído na tabela Customer, todas as chaves estrangeiras correspondentes na tabela Orders serão definidas automaticamente como NULL.

Para impedir a criação automática de índices para chaves estrangeiras, é possível usar o modificador NO INDEX. Essa forma de definição de chave estrangeira deve ser usada somente em casos em que os valores de índice resultantes seriam duplicados com frequência. Nos casos em que os valores de um índice de chave estrangeira são duplicados com frequência, o uso de um índice pode ser menos eficaz do que simplesmente executar uma verificação de tabela. Manter esse tipo de índice, com linhas inseridas e excluídas da tabela, reduz o desempenho e não oferece benefícios.



Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Office Insider

Essas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×