1
嘿大家,我在MySQL以下「用戶」表:MySQL的外鍵約束混亂
CREATE TABLE `users` (
`uid` int(11) NOT NULL auto_increment,
`fname` varchar(50) NOT NULL,
`lname` varchar(50) NOT NULL,
`role` varchar(75) NOT NULL,
`region` tinyint(4) unsigned default NULL,
`username` varchar(25) NOT NULL,
`password` varchar(75) NOT NULL,
`new_pass` varchar(5) default NULL,
PRIMARY KEY (`uid`),
UNIQUE KEY `username` (`username`),
KEY `role` (`role`),
KEY `region` (`region`),
CONSTRAINT `users_ibfk_3` FOREIGN KEY (`role`) REFERENCES `role` (`role`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `users_ibfk_4` FOREIGN KEY (`region`) REFERENCES `region` (`region`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8
我設置爲外鍵區表「區域」 - region.region」
請注意,users.region聲明爲NULL。我的印象是,在MySQL中,僅當密鑰設置爲NOT NULL時纔會強制執行外鍵約束。
然而,當我嘗試插入一個用戶在我的PHP應用程序中的NULL區,我得到以下錯誤:
ERROR: Cannot add or update a child row: a foreign key constraint fails (`reslife4/users`, CONSTRAINT `users_ibfk_4` FOREIGN KEY (`region`) REFERENCES `region` (`region`) ON DELETE CASCADE ON UPDATE CASCADE)
,但如果我要添加這個用戶我的PHP應用程序之外,例如在phpMyAdmin中,它會允許我。
有誰知道發生了什麼事?
您確定您的應用程序將空字段插入區域字段而不是零字符? 要調試,我會關閉外鍵,插入記錄,並看看有什麼。它是否爲空或它是否設置爲一個值。 – 2009-07-31 13:28:27
好的提示。我關閉了外鍵,並意識到我的應用程序正在向數據庫輸入0,即使在我的應用程序中,如果未設置該變量,那麼我也會爲其分配NULL。然後我意識到,DB中的區域字段是一個整數,所以NULL將被解釋爲0.謝謝! – littleK 2009-07-31 13:40:40