私は2つのMySQLテーブル:collections
とprivacy_level
を持っています。
は私のような外部キー関係でそれらを定義します。MySQLの外部キーの正確な意味 'delete restrict'句
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
句についてです私はオンラインマニュアルやGoogle検索から答えを導き出すことができませんでした。
privacy_level
から行を削除できますか?
それとも、それは私ががcollections.privacy
から行がprivacy_level.level
の値と同じ値を持っている場合privacy_level
から行を削除できないことを意味するのでしょうか? privacy_level
はlevel = 2
、name = 'top secret'
を持っていますが、collections.Privacyにエントリがprivacy = 2
を持っていない、私はlevel = 2
、name = 'top secret'
エントリを削除することができれば、ある
?それとも列全体で禁止されていますか?
ありがとうございました。
「ON DELETE RESTRICT」は「ON DELETE NO ACTION」と同じですか? – Shafizadeh
@Shafizadeh、http://www.vertabelo.com/blog/technical-articles/on-delete-restrict-vs-on-delete-no-action –
@Billを参照してください。この記事では、NO ACTIONはRESTRICTと同じですMySQLでは、そして、それは[SOに戻る](https://stackoverflow.com/questions/5809954/mysql-restrict-and-no-action)を参照してください。 – Code4R7