2009-10-16 3 views
0

웹 응용 프로그램에서 InnoDB를 사용하여 실험하기 시작했습니다. 외장 키로 일부 테이블을 설치했지만 예상대로 작동하지 않습니다. 여기 내 테이블을 생성하는 문 : 나는의 해당 행에 효과가 나는 섹션 테이블에 대한 변경을 기다리고 있었다, 그러나MySQL InnoDB CASCADE?

CREATE TABLE sections ( 
    section_id INT NOT NULL AUTO_INCREMENT, 
    title  VARCHAR(30), 
    created_at int(10) NOT NULL, 
    updated_at int(10) NOT NULL, 

    PRIMARY KEY(section_id) 
) ENGINE=InnoDB; 

CREATE TABLE pages ( 
    page_id  INT NOT NULL AUTO_INCREMENT, 
    section_idfk INT NOT NULL, 

    PRIMARY KEY(page_id), 
    FOREIGN KEY(section_idfk) REFERENCES sections(section_id) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 
) ENGINE=InnoDB; 

표는 확인을 만들고 나는 데이터로 채울 수 있습니다 페이지 테이블. 섹션의 ID를 변경하고 섹션을 완전히 삭제하려고했습니다. 두 경우 모두 페이지 테이블은 영향을받지 않았습니다.

어디서 잘못 볼 수 있습니까?

감사의 말.
감사합니다.

+0

뭔가 잘못하고 있어야합니다. 올바르게 작동합니다. –

답변

2

나는 빨리 다음의 정의와 MySQL의 쿼리 브라우저에서 함께 두 개의 유사한 테이블을 넣어 : 당신이 게시 된 것과 정확히 같은,하지만 충분히 가까이하지

DROP TABLE IF EXISTS `test`.`sections`; 
CREATE TABLE `test`.`sections` (
    `section_id` int(10) unsigned NOT NULL auto_increment, 
    `title` varchar(30) NOT NULL, 
    `created_at` int(10) unsigned NOT NULL, 
    `updated_at` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`section_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 

DROP TABLE IF EXISTS `test`.`pages`; 
CREATE TABLE `test`.`pages` (
    `page_id` int(10) unsigned NOT NULL auto_increment, 
    `section_idfk` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`page_id`), 
    KEY `section_idfk` (`section_idfk`), 
    CONSTRAINT `section_idfk` FOREIGN KEY (`section_idfk`) REFERENCES `sections` (`section_id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 

합니다.

섹션에 행을 삽입합니다. section_id와 일치하는 행을 pages 테이블에 추가합니다. 그런 다음 섹션에서 DELETE FROM을 수행합니다. 페이지에서 삭제됩니다.

잘 작동합니다.

편집 - 내가 만든 내용을 입력해도 잘 작동합니다.

+0

감사합니다. PHP 스크립트에서 실제로이 작업을 수행하려고하므로 출력중인 SQL에 오류가 발생했다고 생각합니다. 그것은 여전히 ​​모든 테이블을 만드는 이상한 것 같습니다. 나는 출력물을 반향했으며 위에서 볼 수있는 것과 동일하다. – Dan