2010-05-13 2 views
0

테이블 외래 키 속성에 삽입 된 데이터가 실제로 참조 테이블에 있는지 확인하는 트리거를 지정하는 방법. 존재하는 경우 어떤 조치도 수행되어서는 안됩니다. 그렇지 않으면 트리거는 삽입 된 튜플을 삭제해야합니다.트리거를 사용하여 외래 키 제약 조건이있는 속성에서 유효하지 않은 데이터를 중지 하시겠습니까?

예 : 2 개의 테이블 R (A int Primary Key) 및 S (B int 기본 키, A 외부 키 참조 R (A))가 있다고 가정합니다. 나는이 같은 트리거를 작성했습니다

는 :

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

나는 트리거의 시작과 끝 블록 내에서 내부 하위 쿼리를 지정하는 동안 내가 실수를하고 확신합니다. 내 질문은 어떻게 그런 방아쇠를 당기는거야?

+1

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

답변

0

외래 키 제약 조건으로 원하는 것을 더 잘 달성하지 않았습니까?

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

외래 키 제약 조건이 수행하는 것입니다. 특히 외래 키 관계를 위반하는 레코드를 삽입 할 수 없습니다.

이 예제를보다 읽기 쉽게 만들기 위해 다른 열과 테이블 이름을 사용했습니다. S, A, R 및 B는 엉망으로 보였습니다.