我有两个 MySQL 表:collections
和 privacy_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'
但集合中没有条目。Privacy 有 privacy = 2
,我可以删除 level = 2
, name = 'top secret'
条目吗?还是在列范围内禁止?
感谢您的任何见解。
最佳答案
ON DELETE RESTRICT
表示如果存在子行,您不能删除给定的父行引用该父行的值。如果父行没有引用子行,则可以删除该父行。
ON DELETE RESTRICT
几乎是多余的语法,因为无论如何这是外键的默认行为。
关于mysql - MySQL 外键 'on delete restrict' 子句的确切含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072876/