Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 什么';外键中限制的含义是什么?_Mysql_Sql_Foreign Keys - Fatal编程技术网

Mysql 什么';外键中限制的含义是什么?

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,..

有4种情况:(例如,我说的是关于删除的

                                                                                                                          [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]