我有一個與我的用戶表作爲外鍵的定義關係,但它們不一定需要設置。即一定不能有相關記錄。不能使外鍵字段爲空可以用Sequel Pro
在我的MySQL編輯器(Sequel Pro)中,我無法讓addressId「allow null」。它忽略了輸入。我正在使用最新版本。
當我在用戶表中創建一個沒有addressId的新條目時,它會顯示「無法添加或更新子行:外鍵約束失敗......」。但我希望能夠添加一個沒有地址的用戶!那可能嗎?
或者我應該簡單地刪除外鍵?那有什麼缺點?
CREATE TABLE `User1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`password` char(32) DEFAULT NULL,
`addressId` int(11) NULL DEFAULT '0',
`created` datetime DEFAULT NULL,
`activated` datetime DEFAULT NULL,
`lastLogin` datetime DEFAULT NULL,
PRIMARY KEY (`id`,`addressId`),
KEY `FK_User_Locale` (`localeId`),
KEY `FK_User_Address` (`addressId`),
CONSTRAINT `FK_User_Address` FOREIGN KEY (`addressId`) REFERENCES `Address` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我會刪除外鍵約束。國際海事組織使用數據庫來強制執行參照完整性是浪費資源。另外,當你將列和表重命名爲惡夢時。編寫強大的服務器腳本是一種更好的方法。 – dano 2012-07-24 22:51:12
@dano不應該重命名列和表。更糟糕的噩夢是學習你認爲強大的腳本實際上很薄弱,並且你的數據失去了完整性。 – 2015-05-12 00:09:19