我有两个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子句的,我无法从在线手册或Google搜索中得到答案。

这是否意味着我可以从不privacy_level中删除一行?
或者,这是否意味着如果privacy_level中的一行的值与collections.privacy中的值相同,我不能privacy_level.level 中删除行吗?

也就是说,如果privacy_level具有level = 2name = 'top secret'但集合中没有条目。隐私具有privacy = 2,我可以删除level = 2name = 'top secret'条目吗?还是在列范围内被禁止?

感谢您的任何见解。

最佳答案

ON DELETE RESTRICT意味着如果存在一个子行引用了该父行的值,则不能删除给定的父行。如果父行没有引用子行,则可以删除该父行。
ON DELETE RESTRICT几乎是多余的语法,因为无论如何这是外键的默认行为。

关于mysql - MySQL外键 'on delete restrict'子句的确切含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8072876/

10-11 17:56