Mysql 什么';外键中限制的含义是什么?
有4种情况:(例如,我说的是关于删除的Mysql 什么';外键中限制的含义是什么?,mysql,sql,foreign-keys,Mysql,Sql,Foreign Keys,有4种情况:(例如,我说的是关于删除的) [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,..
)
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
级联
:引用行将与引用行一起自动删除
SET NULL
:引用记录的值将与引用记录一起自动设置为NULL
无操作
:删除引用行时,引用行中不会有任何更改
限制
:{我无法理解它的概念}
我为此读了好几遍,但仍然不明白RESTRICT
的作用。请你举个例子解释一下好吗
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
我在某处读到,MySQL中的NO ACTION
和RESTRICT
是相同的。这是真的吗?限制:如果不删除从属记录(引用此文件外键的记录),它将不允许删除此(父)记录
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
母公司
ID NAME
1 AAAA
2 BBBBB
child
ID PARENT_ID
1 1
2 1
3 2
ON DELETE CASCADE
IF WE DELETE AAA FROM parent it will delete 1 and 2 entries from child
on delete null
IF WE DELETE AAA FROM parent it will set 1 nad 2 PARENT_ID to null from child
on delete no action
IF WE DELETE AAA FROM parent it will delete but no action on child
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
限制:拒绝父表的删除或更新操作。指定RESTRICT(或NO ACTION)与省略ON DELETE或ON UPDATE子句相同
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
无操作:标准SQL中的关键字。在MySQL中,相当于RESTRICT。如果引用的表中存在相关的外键值,MySQL服务器将拒绝父表的删除或更新操作。有些数据库系统有延迟检查,没有操作是延迟检查。在MySQL中,会立即检查外键约束,因此没有操作与限制相同。您可以这样测试
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
参考选项:
RESTRICT | CASCADE | SET NULL | NO ACTION如果引用的引用中的子表中存在记录,则RESTRICT将不允许删除或更新父记录:如果您定义了限制类型约束,并且有一个子行具有多个父行,InnoDB不允许删除任何父行。
您对此有何解释?@DanBracuk众所周知,MySQL手册不是最容易理解的语言形式……我猜所有情况下(CASCADE
,SET NULL
,NO ACTION
)也不允许在不删除从属记录的情况下删除父记录。在删除级联上的否当我们删除父记录中的记录时,它将删除子记录上的相关条目table@Stack添加了所有4个定义和示例,因为它也会帮助其他人。你有这个答案的参考资料吗,Amar?@Martin你可以这样测试,[CONSTRAINT[symbol]]外键[index_name](index_col_name,…)引用tbl_name(index_col_name,…)[在删除引用选项上][更新参考|选项时]参考|选项:限制|级联|设置为空|无操作
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]