mysql - MySQL 外键 'on delete restrict' 子句的确切含义

标签 mysql foreign-keys

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

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

也就是说,如果 privacy_levellevel = 2name = '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/

相关文章:

php - 如何对三个表运行两个查询并输出一个表中某一列的结果

mysql - 更新父键应该更改子键(外键)

python - 如何使用 SQLAlchemy 在插入时解析相关的外键?

mysql - 在将某些内容插入到外键引用的子表之前查找主键的值

c# - ASP.NET - 使用字符串 ID 和 2 个键查询表

mysql - 在关系数据库中存储和引用不可变的有序列表

mysql - Sphinx 可扩展性

php - 我的数据库中没有写日期

php - 如何在插入数据前检查错误

ruby-on-rails - 在像 ruby​​-on-rails 这样的事件记录框架中工作时,使用外键约束是否有优势?