繁体   English   中英

是否有可能使mysql表接受引用其他表的primary_key列的空值?

[英]Is it possible to have a mysql table accept a null value for a primary_key column referencing a different table?

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

我的问题是,是否可以让mysql阻止输入无效值,但可以将其设为NULL? 还是外键需要有效的相关值?

所以...我正在寻找的(用伪代码)是:

Table "person" id | name

Table "people" id | group_name | person_id (foreign key id from table person)

insert into person (1, 'joe'); 

insert into people (1, 'foo', 1)//kosher
insert into people (1, 'foo', NULL)//also kosher
insert into people(1, 'foo', 7)// should fail since there is no id 7 in the person table.

我之所以需要这样做,是因为我遇到了一个鸡和鸡蛋的问题,这对于在人员表中手动创建行非常有意义(在此示例中,我正在创建组,并希望他们预先创建-存在加入他们的人)。 我意识到这个例子很愚蠢,我只是将组ID放在人员表中,而不是相反,但是在我的现实世界中这是行不通的。

只是好奇,如果我需要允许任何和所有值才能完成此工作,或者是否有某种方式允许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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM