Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL外键约束混淆_Mysql_Foreign Keys_Constraints - Fatal编程技术网

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

大家好,我在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.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值。