Restricao para delecao

Firebird

18/11/2004

E ai, pessoal !!!

Quero fazer restricao quando vou deletar um registro numa tabela, este vai ver que tem referencia com outra bloqueado a delecao e emitindo msg tipo ´voce tem registros agregados em outras tabelas, delecao bloqueada´

Quando tentar deletar um COD_UF e este estiver cadastrado na tabela MUNICIPIO, que este esta delecao seja bloqueada


1) SITUACAO
CREATE TABLE UF(
COD_UF INT NOT NULL PRIMARY KEY,
NOME_UF CHAR(2) NOT NULL
);

CREATE TABLE MUNICIPIO(
COD_MUN INT NOT NULL PRIMARY KEY,
NOME_MUN VARCHAR(20) NOT NULL,
UF_MUN INT NOT NULL,
FOREIGN KEY (UF_MUN) REFERENCES UF(COD_UF));


2) SITUACAO - peguei um exemplo, mas neste faz delecao em cascata, justamente o que nao quero

CREATE TABLE UF(
COD_UF INT NOT NULL PRIMARY KEY,
NOME_UF CHAR(2) NOT NULL
);

CREATE TABLE MUNICIPIO(
COD_MUN INT NOT NULL PRIMARY KEY,
NOME_MUN VARCHAR(20) NOT NULL,
UF_MUN INT NOT NULL,
FOREIGN KEY (UF_MUN) REFERENCES UF(COD_UF) ON DELETE CASCADE);



- Alguns comentaram que usam Constraint no MySQL, eu nunca usei isso, qual a melhor maneira de bloquear tal delecao ?


Bibi

Bibi

Curtidas 0

Respostas

Fsflorencio

Fsflorencio

18/11/2004

Uma constraint (restrição) aparece automaticamente quando vc cria uma chave primária ou uma chave estrangeira. Particularmente uso o firebird manager para visualizar as constraints e outros objetos.

Vejamos a situação: Peguei um exemplo, mas neste faz delecao em cascata, justamente o que nao quero

É só remover do script a parte ´ON DELETE CASCADE´.

Neste caso quando vc deletar algum registro da tabela uf ele vai dar um erro e não vai permitir que o registro seja deletado.

Para o erro ficar mais ´bonito´, vc pode colocar um componente TApplicationEvents e no evento onexception tratar o retorno da variável E que é do tipo exception.

Além do ON DELETE, temos o ON UPDATE que atualiza em Cascata. Se vc muda o código da uf, ele muda em todas as tabelas dependentes, sendo que vc pode usar os dois juntos ON DELETE CASCADE ON UPDATE CASCADE.


GOSTEI 0
POSTAR