Criando uma Foreign Key
     Existem várias sintaxes para isso, veja:

  • Criar PK da tabela Mestre:
    CREATE TABLE UF
    (
     UF_SIGLA VARCHAR(2) NOT NULL PRIMARY KEY,
     UF_NOME VARCHAR(20)
    )


  • Criar FK na tabela Detalhe sem nome:
    CREATE TABLE VENDEDOR
    (
     VEN_CODIGO INTEGER NOT NULL PRIMARY KEY,
     VEN_CPF VARCHAR(11),
     VEN_NOME VARCHAR(20),
     UF_SIGLA VARCHAR(2) REFERENCES UF(UF_SIGLA)
    )


  • Criar FK na tabela Detalhe com nome:
    CREATE TABLE VENDEDOR
    (
     VEN_CODIGO INTEGER NOT NULL PRIMARY KEY,
     VEN_CPF VARCHAR(11),
     VEN_NOME VARCHAR(20),
     UF_SIGLA VARCHAR(2) CONSTRAINT FK_VENDEDOR_1 REFERENCES UF(UF_SIGLA)
    )


  • Criar FK na tabela Detalhe no final do create table:
    CREATE TABLE VENDEDOR
    (
     VEN_CODIGO INTEGER NOT NULL PRIMARY KEY,
     VEN_CPF VARCHAR(11),
     VEN_NOME VARCHAR(20),
     UF_SIGLA VARCHAR(2),
     CONSTRAINT FK_VENDEDOR_1 FOREIGN KEY(UF_SIGLA) REFERENCES UF(UF_SIGLA)
    )


  • Criar FK na tabela Detalhe pelo alter table:
    ALTER TABLE VENDEDOR
    ADD CONSTRAINT FK_VENDEDOR_1 FOREIGN KEY(UF_SIGLA) REFERENCES UF(UF_SIGLA)

  • Mostrar nomes de constraints da <TABELA>:
    SELECT *
      FROM RDB$RELATION_CONSTRAINTS
    WHERE RDB$RELATION_NAME = '<TABELA>'

  • Excluir PK:
    ALTER TABLE VENDEDOR
    DROP CONSTRAINT FK_VENDEDOR_1

  • Tentar inserir registro com valor ‘CE’ na FK, que não existe na PK:
    INSERT INTO VENDEDOR VALUES(1, '12345678901', 'GILSON', 'CE')

  • Deve-se inserir o valor ‘CE’ na PK e depois voltar a inserir o valor na FK:
    INSERT INTO UF VALUES('CE', 'CEARA');
    INSERT INTO VENDEDOR VALUES(1, '12345678901', 'GILSON', 'CE');


  • Tentar inserir registro com valor duplicado na FK:
    INSERT INTO VENDEDOR VALUES(2, '22222222222', 'VILSON', 'CE');

  • Tentar inserir registro com valor nulo na FK:
    INSERT INTO VENDEDOR VALUES(3, '22222222222', 'NILSON', NULL);

  • Tentar alterar o valor da PK já usado por uma FK:
    UPDATE UF SET UF_SIGLA = 'PR' WHERE UF_SIGLA = 'CE'

  • Tentar excluir um registro cujo valor da PK já foi usado por uma FK:
    DELETE FROM UF WHERE UF_SIGLA = 'CE'



  • Hosted by www.Geocities.ws

    1