중첩 된 범주를 포함하는 테이블이 있습니다. 동일한 수준의 항목 (즉, 동일한 상위 항목이있는 카테고리)에 중복 된 이름이 표시되지 않도록하고 싶습니다. 나는이 함께했습니다null이 허용되는 열의 고유 제한
CREATE TABLE `category` (
`category_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`category_name` varchar(100) NOT NULL,
`parent_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`category_id`),
UNIQUE KEY `category_name_UNIQUE` (`category_name`,`parent_id`),
KEY `fk_category_category1` (`parent_id`,`category_id`),
CONSTRAINT `fk_category_category1` FOREIGN KEY (`parent_id`) REFERENCES `category` (`category_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
은 불행하게도, category_name_UNIQUE
루트 수준의 범주 내 규칙 (parent_id
이 NULL이고 그)를 적용하지 않습니다. 적절한 해결 방법이 있습니까?
아니요 MySQL에서'ON DELETE SET DEFAULT'가 없습니다. ( –
아, 참으로 ... 파서에 의해 인식되었지만 거부되었습니다 : "SET DEFAULT :이 동작은 파서에 의해 인식되지만 InnoDB는 테이블을 거부합니다 – Unreason
MySQL의 트리거는 영향을받는 테이블의 다른 행을 변경할 수 없습니다. –