2011-10-05 4 views
0

"parent1"테이블에 외래 키를 가지고있는 "child1", "child2"및 "child3"테이블이 3 개 있다고 가정 해 보겠습니다. "parent"테이블은 "status"필드를 가지고 있으며, 요소에 대해 status가 "0"으로 설정되면 모든 자식이 삭제됩니다. (트리거를 사용하여 상태 변경을 감지합니다.) "캐스케이드 삭제"를 호출하는 것과 비슷하지만 개체를 ​​삭제하지 않아도됩니다 ...수동으로 계단식 삭제를 호출 하시겠습니까?

이렇게하는 좋은 방법이 있습니까?

+0

입니다. 이해한다면 실제로 부모 행을 삭제하지 않고도 모든 FK 관련 하위 항목을 삭제하려고 할 것입니까? –

+0

트리거를 사용하는 경우 이미 나쁜 습관을 구현하고 있으며 성능이 저하 될 가능성이 큽니다. – Romain

+1

@Romain 나는 트리거가 나쁜 행동이라는 것에 정중히 동의하지 않습니다. 사실,이 질문은 부모 상태가 변경 될 때 자식 행을 삭제하는 트리거에 대한 유효한 사용 사례처럼 들립니다. –

답변

0

트리거가 변경 사항을 감지하면이를 사용하여 저장 프로 시저를 발생시켜야합니다. 좋은 자습서는 다음과 같습니다. http://markalexanderbain.suite101.com/mysql-stored-procedures-and-triggers-a71091

또는 php, coldfusion 또는 다른 중간 계층을 사용하는 경우 해당 레코드를 변수로 읽을 수 있습니다. 행을 삭제 한 다음 레코드를 다시 삽입하십시오. 그러나 작업을 수행하는 저장 프로 시저가 더 좋습니다.

+0

질문은 트리거 또는 절차에 관한 것이 아니라 부모를 삭제하지 않고 계단식 삭제를 수행하는 방법입니다! –

+0

저장 프로 시저로 수행해야합니다. 이미 트리거가 있고 자식 테이블의 레코드를 삭제하는 저장 프로 시저를 작성한 다음 트리거를 통해 트리거합니다. 부모를 삭제하지 않고 폭포를 바로 잡을 수 있는지 묻는다면 대답은 할 수 없다는 것입니다. – invertedSpear

+0

옳은 대답은 : 아니오 :( 고마워요. –

0

부모 연관된 외부 키와 아이를 모두 삭제 ...

authorname = Bill, authorid = 5 

우리가

DELETE FROM books WHERE authorid=5 

수정 법안에 의해 모든 책을 삭제해야 : 죄송합니다, 다시 읽고 .. 당신이 구현할 수 이 논리가 UPDATE이고 상태가