这可能是一个微不足道的问题,但在涉及外键约束时我仍然有点笨拙,所以我想确定一下。
假设我有一个表 countries
,其中包含字段 country_id
(PK) 和 name
,还有一个表 cities
包含字段 city_id
(PK)、name
和 country_id
(FK)。
外键 cities.country_id
具有约束 ON DELETE SET NULL
。据我了解,这意味着如果删除来自 countries
的记录,则 cities
中引用该已删除记录的 country_id
的任何记录都将具有其country_id
字段设置为 NULL。
但是,如果 cities.country_id
具有属性 NOT NULL
怎么办?这会阻止外键约束正常工作吗?这样做是有道理的,但我只是想检查一下。
最佳答案
如果您将 ON DELETE SET NULL
设置为您的外键,那么它将不允许您将字段设置为 NOT NULL
。
因此您将无法创建或更改列为 NOT NULL
和 ON DELETE SET NULL
on CountryId 的表/p>
当我运行以下语句时:
CREATE TABLE `country` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ;
CREATE TABLE `city` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`countryId` int(10) unsigned DEFAULT NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_country` (`countryId`),
CONSTRAINT `FK_country` FOREIGN KEY (`countryId`) REFERENCES `country` (`id`) ON DELETE SET NULL ON UPDATE SET NULL
);
我在 MySQL 5.5
中得到的错误是:
Schema Creation Failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_country` (`countryId`),
CONSTRAINT `' at line 4:
关于MySQL - 删除时的外键在非空字段中设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20603449/