2010-05-13 4 views
0

Comment spécifier un déclencheur qui vérifie si les données insérées dans un attribut de clé étrangère de table existent réellement dans la table de références. S'il existe, aucune action ne devrait être effectuée, sinon le déclencheur devrait supprimer le tuple inséré. Par exemple: Envisager d'avoir 2 tables R (clé primaire A) et S (clé primaire B, A, clé étrangère, références R (A)).Arrêter des données invalides dans un attribut avec une contrainte de clé étrangère en utilisant des déclencheurs?

J'ai écrit un déclencheur comme celui-ci:

Create Trigger DelS 
BEFORE INSERT ON S 
FOR EACH ROW 
BEGIN 
Delete FROM S where New.A <> (Select * from R;)); 
End; 

Je suis sûr que je fais une erreur en spécifiant la sous requête interne dans les blocs Begin et fin de la détente. Ma question est comment puis-je faire un tel déclenchement?

+1

http://dev.mysql.com/tech-resources/articles/mysql-enforcing-foreign-keys.html –

Répondre

0

Une contrainte de clé étrangère n'atteindrait-elle pas mieux ce que vous voulez?

ALTER TABLE [dbo].[TABLE2] WITH CHECK 
ADD CONSTRAINT [FK_TABLE2_TABLE1] FOREIGN KEY([FK_COLUMN]) 
REFERENCES [dbo].[TABLE1] ([PK_COLUMN]) 
GO 

C'est ce que les clés étrangères sont destinées à faire - en particulier, permettent pas un enregistrement à insérer qui ne respectent pas la relation clé étrangère.

Notez que pour rendre cet exemple plus lisible, j'ai utilisé différents noms de colonnes et de tables - S, A, R et B ressemblaient à un désordre.

Questions connexes