4

这可能是一个微不足道的问题,但是在涉及外键约束时我仍然有点笨拙,所以我想确定一下。

假设我有一个countries包含字段country_id(PK) 和name的表,以及一个cities包含字段city_id(PK)namecountry_id(FK) 的表。

外键cities.country_id有约束ON DELETE SET NULL。据我了解,这意味着如果删除了一条记录,则该引用中删除记录的countries任何记录都将其字段设置为 NULL。citiescountry_idcountry_id

但是,如果cities.country_id有 属性NOT NULL怎么办?这会阻止外键约束正常工作吗?这样做是有道理的,但我只是想检查一下。

4

1 回答 1

4

如果您设置ON DELETE SET NULL为外键,则不允许您将该字段设置为NOT NULL.

因此,您将无法创建或更改具有列 asNOT NULLON DELETE SET NULLCountryId的

当我运行以下语句时:

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: 
于 2013-12-16T05:19:38.640 回答