3

회사의 연락처 정보, 담당자, 캠페인, 회사의 제안서 제출 및 기부를 기록하는 연락처 관리 시스템을 만들고 있습니다.SQL 삭제 대 계단식

하나의 회사는 많은 사람들에게 연락 할 수 있고 많은 캠페인에서 많은 제안을 제출할 수 있으며 많은 캠페인에 기부 할 수 있습니다. 회사가 연락 담당자를 가지거나 제안서를 제출하거나 기부금을 제공 할 필요는 없습니다. INSERT, UPDATE 및 SELECT를 사용하여 성공적으로 쿼리를 만들었지 만 DELETE는 수행하지 않았습니다. 나는이 쿼리에 오류가있는 경우는 회사를 삭제하지 않습니다 알고

DELETE organizations.*, contactdetails.*, proposalorg.*, donationorg.* 
FROM organizations, contactdetails, proposalorg, donationorg 
WHERE idOrg='$id' AND 
contactdetails.company_id=organizations.idOrg AND 
proposalorg.company_id=organizations.idOrg AND 
donationorg.company_id=organizations.idOrg 

: 지금은 회사와 관련된 모든 데이터를 삭제하려면이 쿼리를 사용하고 있습니다. 더 나은 옵션으로 CASCADE DELETE에 대해 읽었지만 어떻게해야할지 모르겠습니다. 누군가가 그것을하는 방법에 대한 아이디어가 있다면, 나는 정말로 감사 할 것입니다.

답변

2

http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html를 참조하십시오, 당신은 테이블 사이의 외래 키 제약 조건이 필요합니다. 이를 참조 contactdetails의 모든 행이 경우

ALTER TABLE contactdetails ADD 
CONSTRAINT FK_contactdetails_company_id FOREIGN KEY (company_id) 
REFERENCES organizations (idOrg) 
ON DELETE CASCADE 

이, 행이 조직 테이블에서 삭제되는 경우 DB를 말할 것 : 외부 키를 정의과 같이하면 계단식 규칙을 삭제를 설정합니다 , 삭제되어야합니다.

이것이 좋은 생각인지 아닌지는 의견의 문제입니다. 개인적으로는 삭제하지 않으려는 많은 데이터를 실수로 삭제하는 일이 너무 쉽기 때문에 사용하지 않으려합니다. 그러나 다른 사람들은 동의하지 않을 것입니다.

+0

고마워요, @ 에릭 페트레예요! 조언 해 주셔서 감사합니다. 다음 번에 다른 DELETE 쿼리에 대해 더 배우 겠지만 이번에는 DELETE CASCADE를 사용할 것입니다. 시스템은 '수출 엑셀'기능을 가지고 있기 때문에 데이터 삭제에 대한 큰 문제라고 생각하지 않습니다. 다시 한 번 감사드립니다! – mella

0

외래 키 제약 조건과 함께 "on delete delete cascade"를 사용합니다. 외래 키 제약 조건은 대개 외부 ID에 적용되며, 여러 테이블에 조인 할 때 사용하는 ID입니다.

캐스케이드와 함께 외래 키 제약 조건을 사용하는 경우 주 테이블에서만 삭제하고 예제 에서처럼 테이블 조인을 사용하지 마십시오.

테이블 구조 정의의 중요한 부분을 보여줄 수 있습니까?

가 계단식이 삭제 사용하려면

+0

예 @Adder, 저는 DELETE CASCADE를 사용하고 있으며 방금 해봤습니다. 나를 위해 시간을 내 주셔서 감사합니다. – mella