MySQL - 删除时的外键在非空字段中设置为空

标签 mysql sql foreign-key-relationship create-table notnull

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

假设我有一个表 countries,其中包含字段 country_id (PK) 和 name,还有一个表 cities 包含字段 city_id (PK)、namecountry_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 NULLON 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/

相关文章:

php - 排行榜中显示的数据缓慢

php - 如何从两个表中获取结果? (MySQLi)

PHP 不将变量传递给其他页面

SQL MAX 函数奇怪的行为

sql - 唯一索引的分区列必须是索引键错误的子集

java - 如何级联插入

sql-server - MSSQL : Unable to create relationships for two foreign keys to the same table?

mysql - 通过 Wix 嵌入式 MySql 运行 Liquibase

php - 在一个查询中检查两个表

performance - FK 上的联接是否比没有 FK 的联接更快?