ねえみんな、私は、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で、それは私を許可します。
何が起こっているのか知っていますか?
アプリケーションがゼロのような領域フィールドにnullを挿入していますか? デバッグするには、外部キーをオフにしてレコードを挿入し、そこにあるものを確認します。それはnullか、値に設定されましたか? –
良いチップ。私は外部キーをオフにし、私のアプリケーションが0にDBに入っていることを認識しました。私のアプリケーションでは、変数が設定されていない場合でもNULLを割り当てます。その後、DBの領域フィールドは整数なので、NULLは0と解釈されます。ありがとう! – littleK