我有两个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
子句的,我无法从在线手册或Google搜索中得到答案。这是否意味着我可以从不从
privacy_level
中删除一行?或者,这是否意味着如果
privacy_level
中的一行的值与collections.privacy
中的值相同,我不能从privacy_level.level
中删除行吗?也就是说,如果
privacy_level
具有level = 2
,name = 'top secret'
但集合中没有条目。隐私具有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/