2012-09-06 2 views
0

MySQL 5.1을 사용합니다.MySQL 하나의 테이블에 여러 개의 캐스케이드 외래 키

CREATE TABLE `words` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `word` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `words_groups` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `words_in_group` (
    `group_id` int(10) unsigned DEFAULT NULL, 
    `word_id` int(10) unsigned DEFAULT NULL, 
    KEY `word_id` (`word_id`) USING BTREE, 
    KEY `group_id` (`group_id`) USING BTREE, 
    CONSTRAINT `group_id` FOREIGN KEY (`group_id`) REFERENCES `words_groups` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT `word_id_fk` FOREIGN KEY (`word_id`) REFERENCES `words` (`id`) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

을하지만 phpMyAdmin을 또는 Navicat를 사용하고이 테이블 구조를 검사 할 때 어떤 이유로 words_in_group 테이블에있는 키 중 하나에 대한 CASCADE 속성이 설정되지 : 2 개 개의 다른 테이블을 참조, 2 외래 키가있는 테이블이 있습니다.

무엇이 될 수 있습니까? 어떻게 해결할 수 있습니까? 트리거를 사용 하시겠습니까?

+0

질문 : 왜 자동 증가 키를 참조하는 외래 키에 대해 ON UPDATE CASCADE를 사용하고 싶습니까? 기본 키가 업데이트되어서는 안되는 것 같습니다. 왜 CASCADE입니까? –

+0

= 왜 당신은 ON CASCADE = '당신이 옳았습니까. 나는 ON DELETE CASCADE 만 필요합니다. ' – user4035

답변

1

일부 테스트 데이터를 삽입 한 다음 단어에서 행을 삭제하여 계단식을 테스트하십시오.

mysqldump를 사용하여 데이터베이스를 덤프하고 데이터베이스 서버가 수행한다고 생각되는 것을 읽을 수도 있습니다.

그래픽 인터페이스에 표시된 것과 같이 폭포가 서면으로 작동한다는 것을 알게 될 것입니다.

+0

ON UPDATE CASCADE를 제거하면 작업이 시작됩니다. – user4035

+0

이것은 MySQL의 버그입니다. 5.1에서 5.5로 업그레이드 한 후에 여러 CASCADE 키를 사용할 수있게되었습니다. – user4035

관련 문제