MySQL服務器版本:5.6.17 我有兩個表:澄清 - 默認外鍵約束 - InnoDB的
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行中vatbands:
INSERT INTO `vatbands` (`client_id`, `code`) VALUES ('1', 'A');
項目:
`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 InnoDB和外鍵約束
InnoDB表的外鍵受到 以下條件引用操作:
雖然MySQL服務器允許SET DEFAULT,但由於InnoDB無效,因此 無效。
這是它失敗的原因嗎?
UPDATE:
如果我輸入的值直接使用PHP:
INSERT INTO `item` (`client_id`, `code`) VALUES ('1', 'A');
約束成功按預期方式。
'SET DEFAULT'指的是一個外鍵約束作用:'... ON DELETE SET DEFAULT'。 – rcdmk 2014-09-20 01:15:10
請打開http://sqlfiddle.com/並在此處張貼鏈接。 – rcdmk 2014-09-20 01:16:33
@rcdmk好的,這很有道理,謝謝。 – Edward 2014-09-20 01:16:58