Como posso especificar regras para chaves estrangeiras no Microsoft Access usando SQL?

0

Eu tenho que criar algumas tabelas no Microsoft Access usando frases SQL, e algumas das tabelas têm chaves estrangeiras.

Eu gostaria de especificar as restrições e regras para chaves estrangeiras usando SQL:

  1. Se o NULL é permitido ou não
  2. Excluir regra
  3. regra de atualização

Como posso especificar regras para chaves estrangeiras no Microsoft Access usando SQL?

    
por Genba 05.06.2010 / 14:17

1 resposta

1

Eu finalmente encontrei algo na documentação do Access .

A cláusula CONSTRAINT para definir as restrições de FOREIGN KEY aceita a seguinte sintaxe:

CONSTRAINT FOREIGN KEY (ref1[, ref2[, ...]]) REFERENCES table
    ON UPDATE [CASCADE | SET NULL]
    ON DELETE [CASCADE | SET NULL]

Suponho que, para especificar se NULL é permitido ou não para essa FOREIGN KEY, uma restrição diferente deve ser adicionada com

CONSTRAINT NOT NULL (ref)

ou diretamente especificando NOT NULL ao definir esse campo na cláusula CREATE TABLE.

No entanto, recebo um erro de sintaxe quando eu digito "ON UPDATE" e "ON DELETE" dizendo que não são aceitos, e esse erro não aparece quando eu removo essas regras.

Editado em 06-06-2010:

Esta sintaxe está correta e funciona corretamente, mas para que o Access a aceite, os seguintes requisitos devem ser atendidos:

  1. Você deve estar usando o Access 2003 e posterior.
  2. No menu "Ferramentas > Opções", na guia "Tabelas ou consultas", você deve especificar que deseja "Sintaxe compatível com o SQL Server (ANSI 92)" pelo menos para o banco de dados atual.

Depois dessa pequena configuração no meu Access 2003, agora funciona! O Access não mostra mais essa mensagem de erro, e agora permite essa sintaxe para especificar as regras de exclusão e atualização para chaves estrangeiras!

Quando uma dessas regras não é especificada, o Access supõe que seja restrito. Em outras palavras, se a regra de exclusão ou a regra de atualização não for especificada, o Access restringirá a exclusão ou a atualização, respectivamente.

    
por 05.06.2010 / 15:00