Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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 - Fatal编程技术网

mysql表是否可以为引用不同表的主键列接受空值?

mysql表是否可以为引用不同表的主键列接受空值?,mysql,Mysql,我有一个表,它有一个列,该列保存另一个表中一行的id。但是,在填充表A时,表B可能有一行准备好了,也可能没有 我的问题是,有没有可能让mysql阻止输入无效值,但允许空值?或者外键是否需要有效的相关值 所以。。。我要寻找的(在伪代码中)是: 我之所以需要这样做,是因为我有一个鸡和蛋的问题,在这个问题上,提前创建people表中的行是非常有意义的(在本例中,我创建了组,并希望它们预先存在加入它们的人)。我意识到这个例子很愚蠢,我只想把组id放在person表中,而不是相反,但在我的实际问题中,这是

我有一个表,它有一个列,该列保存另一个表中一行的id。但是,在填充表A时,表B可能有一行准备好了,也可能没有

我的问题是,有没有可能让mysql阻止输入无效值,但允许空值?或者外键是否需要有效的相关值

所以。。。我要寻找的(在伪代码中)是:

我之所以需要这样做,是因为我有一个鸡和蛋的问题,在这个问题上,提前创建people表中的行是非常有意义的(在本例中,我创建了组,并希望它们预先存在加入它们的人)。我意识到这个例子很愚蠢,我只想把组id放在person表中,而不是相反,但在我的实际问题中,这是行不通的


我只是好奇,如果我需要允许任何和所有的价值观,以使这项工作,或者,如果有允许null的方法。

如果将列设置为可空,则即使它是引用另一个表中的列的外键,也可以包含null。

如果将列设置为可空,则即使它是引用另一个表中的列的外键,也可以包含null。

外键可以为空


输入引用表中的行时,必须更新该行以指向该行。

外键可以为空


输入引用表中的行时,必须更新该行以指向该行。

通过将列的可选性设置为NULL,将外键列设置为接受NULL:

DROP TABLE IF EXISTS `example`.`tableb`;
CREATE TABLE  `example`.`tableb` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `person_id` int(10) unsigned default NULL, -- notice, !say "NOT NULL" like id
  PRIMARY KEY  (`id`),
  CONSTRAINT `FK_tableb_1` FOREIGN KEY (`person_id`) REFERENCES `tablea` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

也就是说,在尝试将空值插入tableb引用列之前,tablea中必须至少有一条记录。否则,MySQL将抛出一个错误(对我来说,无论如何,在4.1上)。

通过将列的可选性设置为NULL,将外键列设置为接受NULL:

DROP TABLE IF EXISTS `example`.`tableb`;
CREATE TABLE  `example`.`tableb` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `person_id` int(10) unsigned default NULL, -- notice, !say "NOT NULL" like id
  PRIMARY KEY  (`id`),
  CONSTRAINT `FK_tableb_1` FOREIGN KEY (`person_id`) REFERENCES `tablea` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

也就是说,在尝试将空值插入tableb引用列之前,tablea中必须至少有一条记录。否则,MySQL将抛出一个错误(对我来说,无论如何,在4.1上)。

应该是
外键(person\u id)
?另外,
--注意
行在MySQL查询浏览器中运行时给了我一个错误。由于某种原因,
--
@Mark Byers:Corrected,thx后面必须有一个空格,用于注释与物品的拧紧。这应该是
外键(person\u id)
?另外,
--注意
行在MySQL查询浏览器中运行时给了我一个错误。由于某种原因,
--
@Mark Byers:Corrected后面必须有一个空格,以获取有关注释拧东西的注释。