1. ホーム
  2. mysql

[解決済み] MySQLの外部キー 'on delete restrict' 句の正確な意味

2022-03-10 01:17:31

質問

MySQLのテーブルを2つ持っています。 collectionsprivacy_level .
で定義しています。 外部キー というようなリレーションがあります。

CREATE TABLE collections (
  coll_id smallint NOT NULL AUTO_INCREMENT UNSIGNED,
  name varchar(30) NOT NULL,
  privacy tinyint NOT NULL UNSIGNED DEFAULT '0',
  PRIMARY KEY(coll_id),
  INDEX(privacy),
  FOREIGN KEY fk_priv (privacy) REFERENCES privacy_level (level) ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE=InnoDB;  

 CREATE TABLE privacy_level (
   level tinyint NOT NULL UNSIGNED,
   name varchar(20) NOT NULL,
   PRIMARY KEY (level)
 ) ENGINE InnoDB;  

について質問です。 ON DELETE RESTRICT 節があり、オンラインマニュアルやグーグル検索で答えを導き出すことができませんでした。

ということなのでしょうか? 決して から行を削除します。 privacy_level ?
それとも、私が できない から行を削除します。 privacy_level もし からの行 collections.privacy の値と同じ値を持っている。 privacy_level.level ?

つまり、もし privacy_level があります。 level = 2 , name = 'top secret' が、collections.Privacyのどのエントリも privacy = 2 を削除することはできますか? level = 2 , name = 'top secret' のエントリーが必要ですか?それとも列単位で禁止されているのでしょうか?

どんな洞察でもありがとうございます。

解決方法は?

ON DELETE RESTRICT というのは できない を削除します。 親行 もし 子行が存在する その親行の値を参照する。 親行に参照する子行がない場合、その親行を削除することができます。

ON DELETE RESTRICT は、かなり 余分なもの 構文は、外部キーのデフォルトの動作だからです。