Share via


Cláusula de RESTRIÇÃO (Microsoft Access SQL)

Aplica-se ao: Access 2013, Office 2013

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

Use a cláusula CONSTRAINT em instruções ALTER TABLE e CREATE TABLE para criar ou excluir restrições. Existem dois tipos de cláusula CONSTRAINT: uma para criação de uma restrição em um campo único e outra para criação de mais de um campo.

Observação

O mecanismo de banco de dados do Microsoft Access não suporta o uso de CONSTRAINT ou de nenhuma das instruções DDL (Data Definition Language) com bancos de dados do mecanismo de bancos de dados de terceiros. Em vez disso, utilize os métodos DAO Criar.

Sintaxe

Restrição de campo único:

Nome DA RESTRIÇÃO {CHAVE PRIMÁRIA | EXCLUSIVO | NÃO NULL | REFERENCES foreigntable [(foreignfield1, foreignfield2)] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]}

Restrição de vários campos:

Nome DA RESTRIÇÃO {CHAVE PRIMÁRIA (primary1[, primary2 [, ...]]) | UNIQUE (unique1[, unique2 [, ...]]) | NOT NULL (notnull1[, notnull2 [, ...]]) | FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERÊNCIAS foreigntable [(foreignfield1 [, foreignfield2 [, ...]])] [ON UPDATE CASCADE | SET NULL] [ON DELETE CASCADE | SET NULL]}

A cláusula CONSTRAINT tem as seguintes partes:

Sair

Descrição

name

O nome da restrição a ser criada.

primária1, primária2

O nome do campo ou dos campos que será designado como a chave primária.

exclusiva1, 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 um campo ou campos de chave estrangeira que se refere a campos em outra tabela.

tabelaestrangeira

O nome da tabela externa que contém o campo ou os campos especificado por foreignfield.

campoestrangeiro1, campoestrangeiro2

O nome do campo ou dos campos em foreigntable especificados por ref1, ref2. Omita essa cláusula se o campo referido for a chave primária de foreigntable.

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 de restrição de vários campos sempre que usar a palavra reservada CONSTRAINT fora da cláusula de definição de campo em uma instrução de ALTER TABLE ou CREATE TABLE.

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

  • Use a palavra reservada UNIQUE para designar um campo como uma chave exclusiva. Isso significa que nenhum dos dois registros na tabela pode ter o mesmo valor nesse campo. Você pode restringir qualquer campo ou lista de campos como exclusivo. Se uma restrição de vários campos for designada como uma chave exclusiva, os valores combinados de todos os campos no índice devem ser exclusivos, mesmo se dois ou mais registros tiverem o mesmo valor em apenas um dos campos.

  • Use as palavras reservadas PRIMARY KEY para designar um campo ou conjunto de campos em uma tabela como uma chave primária. Todos os valores na chave primária devem ser exclusivos e não Nulos e pode existir somente uma chave primária para 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.

  • Use as palavras reservadas FOREIGN KEY para designar um campo como uma chave estrangeira. Se a chave primária da tabela externa for composta de mais de um campo, use uma definição de restrição de campo múltiplo, listando todos os campos de referência, o nome da tabela externa e os nomes dos campos referenciados na tabela externa, na mesma ordem em que estão listados os campos de referência. Se o campo ou os campos de referência forem a chave primária da tabela externa, não será necessário especificar os campos referenciados. Por padrão, o mecanismo de banco de dados se comporta como se a chave primária da tabela externa fosse os campos referenciados. As restrições da chave estrangeira definem ações específicas que serão executadas quando for alterado um valor de chave primária correspondente:

  • Você pode especificar as ações que serão executadas na tabela externa baseada em uma ação correspondente executada em uma chave primária na tabela em que CONSTRAINT está definida. Por exemplo, considere a seguinte definição da tabela Customers:

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

    Considere a seguinte definição da tabela Orders, que define a relação da chave estrangeira ao fazer 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
    

    Ambas as cláusulas ON UPDATE CASCADE e ON DELETE CASCADE estão definidas na chave estrangeira. A cláusula ON UPDATE CASCADE significa que, se um identificador de cliente (CustId) for atualizado na tabela Customer, a atualização será feita em cascata na tabela Orders. Cada pedido que tiver um valor identificador de cliente correspondente será atualizado automaticamente com o novo valor. A cláusula ON DELETE CASCADE significa que, se um cliente for excluído da tabela Customer, todas as linhas da tabela Orders que contenham o mesmo valor identificador de cliente também serão excluídas. Considere as seguintes definições diferentes da tabela Orders, usando 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 um identificador de cliente (CustId) for atualizado na tabela Customer, os valores da chave estrangeira correspondentes na tabela Orders serão automaticamente definidos como NULL. De forma semelhante, a cláusula ON DELETE SET NULL significa que, se um cliente for excluído da 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 das chaves estrangeiras, use o modificador NO INDEX. Essa forma de definição da chave estrangeira deve ser usada somente nos casos em que os valores de índice resultantes forem duplicados com frequência. Quando os valores de um índice de chave estrangeira forem duplicados com frequência, o uso de um índice pode ser menos eficiente do que simplesmente examinar a tabela. A manutenção desse tipo de índice com linhas inseridas e excluídas da tabela, prejudica o desempenho e não traz nenhum benefício.

Exemplo

Este exemplo cria uma nova tabela chamada ThisTable com dois 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 exemplo cria uma nova tabela chamada Mytable com dois campos de texto, um campo Data/Hora e um índice exclusivo composto por todos os três 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 exemplo cria uma nova tabela com dois campos de texto e um campo Integer. O campo SSN é uma chave primária.

    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