[英]mysql “Default” column value NULL is getting erased, on executing alter table for 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.