Don*_*ble 49 mysql foreign-keys
我有两个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;
Run Code Online (Sandbox Code Playgroud)
我的问题是关于该ON DELETE RESTRICT条款,我无法从在线手册或谷歌搜索中得出答案.
这是否意味着我永远不能从中删除一行privacy_level?
或者,是否意味着我不能删除一行,privacy_level 如果某行collections.privacy的值与值中的值相同privacy_level.level?
也就是说,如果privacy_level有level = 2,name = 'top secret'但在collections.Privacy没有条目都有privacy = 2,我可以删除level = 2,name = 'top secret'录入?或者是否在列宽范围内被禁止?
感谢您的任何见解.
Bil*_*win 99
ON DELETE RESTRICT意味着你不能删除一个给定的父行,如果一个孩子行存在引用,该父行的值.如果父行没有引用子行,则可以删除该父行.
ON DELETE RESTRICT是非常多余的语法,因为这是外键的默认行为.
您也可以使用ON DELETE CASCADE,这意味着当您删除父级时,所有子级将被自动删除,当您有一个与包含某些参数或设置的另一个表关联的表时,这非常有用。