2013-10-24 2 views
0

가정 해 보겠습니다 I가 (샘플 구조 및 데이터) 다음 :MySQL을 - 관련 삭제할 테이블 행

일어날 필요가 무엇
Table category 
====================== 

id (PK) name 
----------------- 
45  computers 
50  sports 


Table category_tag 
====================== 

id (PK) name   cat_id (FK) 
--------------------------------- 
100  keyboard  45 
120  football  50 


Table listing_category 
====================== 

list_id (PK) cat_id (PK/FK) 
------------------------------ 
10001   45 
10001   50 


Table listing_tag 
====================== 

list_id (PK) cat_tag_id (PK/FK) 
---------------------------------- 
10001   100 
10001   120 

위의 예에서,의 listing_category 테이블에서 행은, 삭제하는 경우 테이블 listing_tag에있는 관련 항목을 삭제해야합니다.

이제 '테이블'과 'category_tag'테이블을 결합 할 수 있지만 별도의 필드와 데이터가 포함 된 category_tag 테이블을 별도로 유지하는 것이 좋습니다.

또 다른 옵션은 테이블 listing_tagcat_id 열을 추가하는 것입니다. 가능한 한 데이터 중복을 피하고 싶습니다.

위의 테이블 구성을 사용하여 "계단식 삭제"외래 키 제약 조건을 만들 수 있습니까? 그렇지 않다면 테이블이 어떻게 작동하도록 변경해야합니까?

+0

'listing_category' 테이블의 삭제 트리거는 어때요? – mavroprovato

답변

1
SELECT * FROM ints; 
+---+ 
| i | 
+---+ 
| 0 | 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
+---+ 

SELECT * FROM my_a; 
+----+--------+--------+ 
| id | value1 | value2 | 
+----+--------+--------+ 
| 0 | 1.00 | 2.20 | 
| 1 | 2.10 | 3.50 | 
| 2 | 5.20 | 2.90 | 
+----+--------+--------+ 

DELETE x 
    , y 
    FROM ints x 
    JOIN my_a y 
    ON y.id = x.i 
WHERE y.value1 = 1.00 
    AND y.value2 = 2.2; 

SELECT * FROM my_a; 
+----+--------+--------+ 
| id | value1 | value2 | 
+----+--------+--------+ 
| 1 | 2.10 | 3.50 | 
| 2 | 5.20 | 2.90 | 
+----+--------+--------+ 

SELECT * FROM ints; 
+---+ 
| i | 
+---+ 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
+---+