MySQL的外键“删除限制”条款的确切含义

我有两个MySQL表: 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子句,我无法从在线手册或谷歌search中得出答案。

这是否意味着我永远不能privacy_level删除一行?
或者,这是否意味着如果来自collections.privacy的行的值与privacy_level.level的值相同,我无法privacy_level删除一行?

也就是说,如果privacy_level level = 2name = 'top secret'但没有collections中的条目。 privacy = 2 ,我可以删除level = 2name = 'top secret'条目? 还是禁止在列的基础上?

感谢您的任何见解。

ON DELETE RESTRICT表示如果存在引用该父行的值的子行则不能删除给定的父行。 如果父行没有引用子行,则可以删除该父行。

ON DELETE RESTRICT是非常多余的语法,因为这是外键的默认行为。

你也可以使用ON DELETE CASCADE ,这意味着当你删除父母时,所有的孩子都会被自动删除,当你有一个与另一个包含一些参数或设置的表相关的表时,这是很有用的。