Applies ToAccess para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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

Utilize a cláusula CONSTRAINT nas instruções ALTER TABLE e CREATE TABLE para criar ou eliminar restrições. Existem dois tipos de cláusulas CONSTRAINT: uma para criar uma restrição num campo único e uma para criar uma restrição em mais do que um campo.

Nota: O motor de base de dados do Microsoft Access não suporta a utilização da cláusula CONSTRAINT, ou qualquer uma das instruções com linguagem de descrição de dados, com bases de dados que não sejam do Microsoft Access. Em alternativa, utilize o método Create de DAO.

Sintaxe

Restrição de campo único:

CONSTRAINT nome {PRIMARY KEY | UNIQUE | NOT NULL |REFERENCES tabelacomchaveexterna [(campoexterno1, campoexterno2)][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 (única1[, única2 [, ...]]) |NOT NULL (nãonulo1[, nãonulo2 [, ...]]) |FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES tabelacomchaveexterna [(campoexterno1 [, campoexterno2 [, ...]])][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 do campo ou campos a serem designados como chave primária.

única1, única2

O nome do campo ou campos a ser designado como uma chave única.

nãonulo1, nãonulo2

O nome do campo ou campos que estão restritos a valores não nulos.

Ref1, ref2

O nome de um campo ou campos de uma chave externa que fazem referência a campos noutra tabela.

tabelacomchaveexterna

O nome da tabela com chave externa que contém o campo ou campos especificado pelo campoexterno.

campoexterno1, campoexterno2

O nome do campo ou campos na tabelacomchaveexterna especificados pela ref1, ref2. Pode omitir esta cláusula se o campo de referência for a chave primária da tabelacomchaveexterna.

Observações

Utilize 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 a seguir à especificação do tipo de dados do campo.

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

Com a CONSTRAINT pode designar um campo como um dos seguintes tipos de restrição:

  • Pode utilizar a palavra reservada UNIQUE para designar um campo como chave única. Isto significa que não é possível ter dois registos na tabela com o mesmo valor neste campo. Pode restringir qualquer campo ou lista de campos como única. Se uma restrição de múltiplos campos estiver designada como uma chave única, os valores combinados de todos os campos no índice têm de ser únicos, mesmo que dois ou mais registos tenham o mesmo valor em apenas um dos campos.

  • Pode utilizar as palavras reservadas PRIMARY KEY para designar um campo ou conjunto de campos numa tabela como uma chave primária. Todos os valores na chave primária têm de ser únicos e não Nulos e só pode existir uma chave primária para uma tabela.

    Nota: Não defina uma restrição PRIMARY KEY numa tabela que já tenha uma chave primária. Se o fizer, irá ocorrer um erro.

  • Pode utilizar as palavras reservadas FOREIGN KEY para designar um campo como uma chave externa. Se a chave primária da tabela com chave externa for constituída por mais do que um campo, tem de utilizar uma definição de restrição de múltiplos campos a indicar todos os campos de referência, o nome da tabela com chave externa e os nomes dos campos referenciados na tabela com chave externa na mesma ordem que são apresentados os campos de referência. Se o campo ou campos referenciados forem a chave primária da tabela com chave externa, não tem de especificar os campos referenciados. Por predefinição, o motor de base de dados assume que os campos referenciados são a chave primária da tabela com chave externa.

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

  • Pode especificar ações a serem executadas na tabela com chave externa com base numa ação correspondente efetuada numa chave primária na tabela na qual a CONSTRAINT está definida. Por exemplo, considere a seguinte definição da tabela Clientes:

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

Considere a seguinte definição da tabela Encomendas, que define uma relação de chave externa a fazer referência à chave primária da tabela Clientes:

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 estão definidas na chave externa. A cláusula ON UPDATE CASCADE significa que, se o identificador de um cliente (IDDeCliente) for atualizado na tabela Clientes, a atualização será propagada na tabela Encomendas. Cada encomenda que contenha um valor de identificador de cliente correspondente será atualizada automaticamente com o novo valor. A cláusula ON DELETE CASCADE significa que, se um cliente for eliminado da tabela Clientes, todas as linhas na tabela Encomendas que contenham o mesmo valor de identificador de cliente também serão eliminadas.

Considere a seguinte definição diferente da tabela Encomendas, com a ação SET NULL em vez da ação 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 de um cliente (IDDeCliente) for atualizado na tabela Clientes, os valores de chave externa correspondentes na tabela Encomendas serão definidos automaticamente para NULL. Do mesmo modo, a cláusula ON DELETE SET NULL significa que, se um cliente for eliminado da tabela Clientes, todas as chaves externas correspondentes na tabela Encomendas serão definidas automaticamente para NULL.

Para impedir a criação automática de índices de chaves externas, pode utilizar o modificador NO INDEX. Esta forma de definição de chave externa deve ser utilizada apenas em casos onde os valores resultantes de um índice seriam frequentemente duplicados. Nos casos em que os valores num índice de chave externa são frequentemente duplicados, a utilização de um índice pode ser menos eficaz do que simplesmente executar uma análise de tabela. Manter este tipo de índice, com linhas inseridas e eliminadas da tabela, degrada o desempenho e não oferece vantagens.

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.