Ajuda com SQL - Alteração de Chave Primaria

Olá pessoal tudo bem?
vim pedir ajuda novamente

possuo uma aplicação trabalhando com tabelas semelhantes a estas:

[code]CREATE TABLE FUNCIONARIO(
MATRICULA INTEGER PRIMARY KEY
,NOME VARCHAR
,EMAIL VARCHAR UNIQUE
);

CREATE TABLE SALA(
NOME VARCHAR PRIMARY KEY
,DESCRICAO VARCHAR
,FK_MATRICULA INTEGER
,FOREIGN KEY (FK_MATRICULA) REFERENCES FUNCIONARIO(MATRICULA)
);[/code]

no momento tudo ocorre bem.

mas, a aplicação trabalha diretamente com a tabela de cargo

se eu alterar a sala (mais especificamente a chave estrangeira, eu altero a pessoal responsavel por ela (desde que ela exista obviamente, na tabela de funcionarios).

mas, se por um acaso eu altero diretamente na tabela de funcionarios (a matricula) e há uma referencia dele na tabela sala ele me retorna um erro referente a esse problema.

como faço para que as alterações feitas na tabela de funcionario também modifique as referencias que são feitas a ela?

tem que alterar a foreign key da tabela sala:

primeira ‘dropa’ a constraint:

ALTER TABLE SALA
    DROP CONSTRAINT nomedafk

adiciona a fk alterada:

ALTER TABLE SALA
    ADD CONSTRAINT nomedafk FOREIGN KEY (coluna)
        REFERENCES FUNCIONARIO (coluna)
        ON UPDATE CASCADE

a opção ON UPDATE CASCADE faz que toda alteração na matrícula seja refletida aos registros relacionados

muito obrigado pela ajuda.

o resultado ficou assim:

[code]CREATE TABLE FUNCIONARIO(
MATRICULA INTEGER PRIMARY KEY
,NOME VARCHAR
,EMAIL VARCHAR UNIQUE
);

CREATE TABLE SALA(
NOME VARCHAR PRIMARY KEY
,DESCRICAO VARCHAR
,FK_MATRICULA INTEGER
,FOREIGN KEY (FK_MATRICULA)
REFERENCES FUNCIONARIO(MATRICULA)
ON DELETE NO ACTION
ON UPDATE CASCADE
);[/code]

só uma dica: é considerada boa prática nomear suas constrainsts (pk, fk, etc…)… torna o trabalho de adm/manutenção mais simples…

até mais…

edu…