MySQL 서버 버전 :대한 설명 - 기본 외래 키 제약 - 이노
vatbands : vatbands에서
`vatbands_id` INT(11) UNSIGNED NOT NULL,
`client_id` INT(11) UNSIGNED NOT NULL COMMENT 'Customer ID',
`code` ENUM('A', 'B', 'C', 'D', 'E', 'F') NOT NULL,
PRIMARY KEY (`vatbands_id`, `code`, `client_id`),
INDEX `vatcode_vatbands` (`code` ASC, `client_id` ASC)
ENGINE = InnoDB;
1 행 :
INSERT INTO `vatbands` (`client_id`, `code`) VALUES ('1', 'A');
5.6.17 나는 두 개의 테이블이
품목 :
`client_id` INT(11) UNSIGNED NOT NULL,
`vatcode` ENUM('A', 'B', 'C', 'D', 'E', 'F') NOT NULL DEFAULT 'A',
PRIMARY KEY (`item_id`, `client_id`),
INDEX `vatcode_item` (`vatcode` ASC, `client_id` ASC),
CONSTRAINT `vatcode_item`
FOREIGN KEY (`vatcode` , `client_id`)
ENGINE = InnoDB;
아이에 삽입 (항목) 테이블 :
INSERT INTO `item` (`client_id`, `code`) VALUES ('1', '');
나는 vatcode
내가 외래 키 제약 조건 실패 얻을 지정하지 않고 내 항목 테이블에 삽입하려고 :
Cannot add or update a child row: a foreign key constraint fails (`mydb`.`item`, CONSTRAINT `vatcode_item` FOREIGN KEY (`vatcode`, `client_id`) REFERENCES `vatbands` (`code`, `client_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)
을
이유는 무엇입니까? vatcode
의 기본값을 지정하면 행이 존재하는 한 계속 진행할 수 있습니다.
나는 InnoDB의 설명서를 확인했다 :
14.6.6 이노와 FOREIGN KEY 제약을
에 따라 InnoDB 테이블의 외래 키입니다 다음과 같은 조건참조 동작 :
MySQL 서버가 SET DEFAULT를 허용하는 동안 InnoDB에 의해 이 유효하지 않은 것으로 거부됩니다.
이것이 실패 이유입니까?
UPDATE :
값 직접 PHP 사용 내가 입력하면 예상대로
INSERT INTO `item` (`client_id`, `code`) VALUES ('1', 'A');
제약이 성공한다.
'SET DEFAULT'는 외래 키 제약 조건 동작을 의미한다 :'... DELETE SET의 DEFAULT' ON. – rcdmk
http://sqlfiddle.com/을 작성하여 여기에 링크를 게시하십시오. – rcdmk
@rcdmk 좋습니다. 감사합니다. – Edward