4

これはおそらく些細な質問ですが、外部キー制約に関してはまだ少し不器用なので、確認したかったのです。

countriesフィールドcountry_id(PK) とnameを含むテーブルcitiesと、フィールドcity_id(PK)namecountry_id(FK)を含むテーブルがあるとします。

外部キーcities.country_idには制約がありますON DELETE SET NULL。私が理解しているように、これは、レコードcountriesが削除された場合、citiesその削除されたレコードの参照内のすべてのレコードのフィールドcountry_idcountry_idNULL に設定されることを意味します。

しかし、cities.country_id属性が の場合はどうなるNOT NULLでしょうか? これにより、外部キー制約が適切に機能しなくなりますか? それは理にかなっていますが、確認したいだけです。

4

1 に答える 1

4

外部キーに設定ON DELETE SET NULLすると、フィールドを として設定することはできませんNOT NULL

NOT NULLそのため、CountryIdON DELETE SET NULLの列を使用してテーブルを作成または変更することはできません。

以下のステートメントを実行すると:

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 に答える