MySQL外键约束混淆
大家好,我在MySQL中有以下“用户”表:MySQL外键约束混淆,mysql,foreign-keys,constraints,Mysql,Foreign Keys,Constraints,大家好,我在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
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.region'
请注意,users.region被声明为NULL。我的印象是,在MySQL中,只有当密钥设置为NOTNULL时,才会强制执行外键CONSTRAINT
但是,当我尝试在PHP应用程序中插入一个具有空区域的用户时,会出现以下错误:
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
值放入区域
启用并查看您的PHP
试图插入到表中的内容。您的应用程序将非NULL
值放入区域
启用并查看您的PHP
试图插入到表中的内容。您确定应用程序正在向区域字段中插入null而不是类似于零的内容吗?要进行调试,我将关闭外键,插入记录,然后查看其中的内容。它是空的还是被设置为一个值。好提示。我关闭了外键,并意识到我的应用程序正在数据库中输入一个0,即使在我的应用程序中,如果没有设置变量,那么我会为它赋值NULL。然后我意识到,DB中的区域字段是一个整数,所以NULL将被解释为0。谢谢您确定应用程序正在区域字段中插入null,而不是类似于零的内容吗?要进行调试,我将关闭外键,插入记录,然后查看其中的内容。它是空的还是被设置为一个值。好提示。我关闭了外键,并意识到我的应用程序正在数据库中输入一个0,即使在我的应用程序中,如果没有设置变量,那么我会为它赋值NULL。然后我意识到,DB中的区域字段是一个整数,所以NULL将被解释为0。谢谢问题是my DB中的字段设置为int,因此它会将NULL解释为0…谢谢。对于可能遇到此问题的其他人,解决此问题的方法是在SQL查询中不插入NULL值。问题是my DB中的字段设置为int,因此,它会将NULL解释为0…谢谢。对于可能遇到此问题的任何其他人,解决此问题的方法是,在SQL查询中,不要插入NULL值。