2012-10-02 3 views
0

누군가 내 연결된 행을 삭제하는 방법을 보여줄 수 있습니까?MySQL 데이터베이스에서 두 개의 연결된 행을 삭제하는 방법은 무엇입니까?

저는 Delphi 2007과 MySQL을 사용합니다.

내가 두 개의 테이블이있는 데이터베이스가 내 델파이 응용 프로그램에서

CREATE TABLE `Picture`.`Picture` (
    `ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 
    `IMG` LONGBLOB, 
    PRIMARY KEY (`ID`) 
) 
ENGINE = InnoDB; 

CREATE TABLE `contacts` (
    `ID` int(10) unsigned NOT NULL auto_increment, 
    `FirstName` varchar(45) NOT NULL, 
    `LastName` varchar(45) NOT NULL, 
    `Phone` varchar(45) default NULL, 
    `PICID` int(10) unsigned default NULL, 
    PRIMARY KEY (`ID`), 
    KEY `FK_contacts_1` (`PICID`), 
    CONSTRAINT `FK_contacts_1` FOREIGN KEY (`PICID`) REFERENCES `picture` (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

은 내가 삭제 버튼을 가지고있다. DBGrid에서 연락처를 찾은 다음 버튼을 삭제하면 contacts 테이블의 연락처 만 삭제할 수 있으며 연락처 사진도 삭제하고 싶습니다.

테이블 contacts의 행과 테이블 Picture의 행을 삭제하고 싶습니다. 표 Picture은 표 contactsforeign key으로 연결됩니다. ON DELETE CASCADE

+1

외래 키 제약 조건 뒤에'ON DELETE CASCADE'를 덧붙입니다. 이렇게하면 Delphi를 사용하든 사용하지 않든이 문제가 해결됩니다. – nalply

답변

2

사용 FK -

당신이 세부 사항 테이블에 마스터 테이블 Picture SQL 엔진 폭포에서 행을 삭제하고 너무가 삭제 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html.

+0

@nalply 확실히 캐스케이드가 확실합니까? 테이블 백엔드가있는 모든 버전의 mySQL? 나는 의도와 함께 "캐스케이드해야"한다고 썼다. –

+0

엔진이 InnoDB 인 것이 중요합니다. 나는 이것을 정확히 사용하는 프로젝트를 가지고있다. Op에는'ENGINE = InnoDB'가 있으므로 걱정하지 마십시오. – nalply

관련 문제