我有兩個表:父和子。其中一個子列引用帶有FOREIGN KEY約束的父PRIMARY KEY - child.parent_id引用parent.parent_id。如何將空值從HTML表單傳遞到MySQL數據庫外鍵字段
子表中的外鍵列允許NULL值,因爲當孩子被創建時父可能還不知道。但是當關於父母的信息將被分配/更新時,我想要具有參照完整性。
現在的問題:
如何將空值從HTML表單傳遞給MySQL?引號''或'「不工作」外鍵約束失敗「可能是因爲它傳遞空字符串而不是空值。或者也許我需要在PHP中做一些額外的檢查並將其轉換爲空?
CREATE TABLE IF NOT EXISTS `parent` (
`parent_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`surname` varchar(20) NOT NULL,
PRIMARY KEY (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `child` (
`child_id` int(11) NOT NULL AUTO_INCREMENT,
`child_name` varchar(20) NOT NULL,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`child_id`),
KEY `fk_parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `child`
ADD CONSTRAINT `fk_parent_id` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`parent_id`);
我想允許在子表中使用空值,因爲在創建子進程時父進程可能仍然是未知的,並且稍後會創建關係。爲了簡單起見,我省略了驗證,驗證不會將其轉換。 – czomberzdaniela
@czomberzdaniela - 你不能那樣做。您有一個外鍵約束,指出子表中的parent_id必須引用父表中的ID。如果您創建的子記錄沒有有效的父ID,則該約束將被違反。 –
是的你可以。 INSERT INTO'foreign_test'.'child'('child_id','child_name','parent_id')VALUES(NULL,'Jack',NULL);工作正常。你也可以從phpMyAdmin中做到這一點。 – czomberzdaniela