업데이트 : @ greenoldman에서 제안한 아이디어를 대신 아래 의견에 사용해야합니다. nullable 필드가 NULL인지 여부에 따라 값을 설정하고 고유 제한 조건의 부울 필드를 고유성을 정의하는 다른 필드와 결합하려면 트리거가있는 부울 필드를 만듭니다. 당신이 고유 제한 조건을 적용뿐만 아니라, 따라서 null로 그것을 필요로 열에 외래 키가 필요해야하는 경우
나는이 문제를 해결하는 방법을 발견했다. 내 솔루션은
this에서 파생되었으며 약간의 여유 공간이 필요합니다. 이것은 숫자 ID 필드가있는 예입니다.
기본 개념은 트리거를 사용하여 외부 키가 복제 된 nullable 필드의 값을 갖는 다른 nullableable 필드를 만들어야한다는 것입니다. 그런 다음 고유 제한 조건이 Null 허용 가능 복제 필드에 적용됩니다.
ALTER TABLE `my_table` ADD `uniq_foo` int(10) UNSIGNED NOT NULL DEFAULT '0';
그런 다음 당신은 그냥이 같은 몇 가지 트리거를 정의 할 수 있습니다 :이 유사 0
의 기본값 nullable이 아닌 필드를 정의 할 필요가 이렇게하려면
DROP TRIGGER IF EXISTS `my_table_before_insert`;
DELIMITER ;;
CREATE TRIGGER `my_table_before_insert` BEFORE INSERT ON `my_table`
FOR EACH ROW
BEGIN
SET NEW.uniq_foo = IFNULL(NEW.foo_id, 0);
END;;
DELIMITER ;
DROP TRIGGER IF EXISTS `my_table_before_update`;
DELIMITER ;;
CREATE TRIGGER `my_table_before_update` BEFORE UPDATE ON `my_table`
FOR EACH ROW
BEGIN
SET NEW.uniq_foo = IFNULL(NEW.foo_id, 0);
END;;
DELIMITER ;
은 주 그것을 확인 키, 두 필드에서 nulls 허용하지 않습니다. 또는 필드를 null이 아니게 만드십시오. mysql 문서 : http://dev.mysql.com/doc/refman/5.1/en/create-index.html "모든 엔진에 대해 UNIQUE 인덱스는 null을 포함 할 수있는 열에 대해 여러 개의 null 값을 허용합니다". –
'NULL'은 값이 아닙니다. @MarcB가 말했듯이, 당신은 이것을 위해'NULL'을 허용하지 않아야합니다. – JNK
버그 인 것 같습니다 : http://bugs.mysql.com/bug.php?id=8173. (적어도 버그 리포트의 일부 사람들은 그렇게 생각합니다.) –