restrict 外键约束_外键约束

restrict 外键约束_外键约束CONSTRAINT symbol FOREIGNKEY index name col name REFERENCEStb name col name ONDELETErefe option ONUPDATErefe option reference option RESTRICT CASCADE SETNULL

[CONSTRAINT [symbol]] FOREIGN KEY

[index_name] (col_name, …)

REFERENCES tbl_name (col_name,…)

[ON DELETE reference_option]

[ON UPDATE reference_option]

reference_option:

RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

[CONSTRAINT [symbol]] 外键约束命名 InnoDB表未定义时将自动生成约束名称。

可以在create和alter语句中对列进行处理

当UPDATE或DELETE操作影响子表中具有匹配父表中的行的键值时,结果取决于ON UPDATE、ON DELETE子句指定的引用动作。引用动作包括

CASCADE:从父表中删除或更新该行,并自动删除或更新子表中的匹配行。支持ON DELETE CASCADE和ON UPDATE CASCADE。在两个表之间,不要定义ON UPDATE CASCADE作用于父表或子表中同一列上的多个子句。

SET NULL:从父表中删除或更新该行,并将子表中的一个或多个外键列设置为NULL。支持ON DELETE SET NULL和ON UPDATE SET NULL。如果指定SET NULL操作,请确保未将子表中的列声明为NOT NULL。

RESTRICT:拒绝父表的删除或更新操作。指定 RESTRIC(或NO ACTION)与省略ON DELETE or ON UPDATE子句相同。

NO ACTION:标准SQL中的关键字。在MySQL中,等效于RESTRICT。如果引用表中有相关​​的外键值,则MySQL服务器会拒绝父表的删除或更新操作。一些数据库系统具有延迟检查,并且NO ACTION是延迟检查。在MySQL中,外键约束会立即检查,因此NO ACTION与RESTRICT相同。

SET DEFAULT:这个动作由MySQL解析器认可,但是InnoDB和NDB都拒绝包含DELETE SET DEFAULT或UPDATE SET DEFAULT子句的表定义。

对于支持外键的存储引擎,如果父表没有对应的值,创建子表的值时:MySQL将拒绝任何INSERT或UPDATE操作

对于未指定的ON DELETE或ON UPDATE,默认操作始终为RESTRICT

限制

不能引用自身

不支持前缀索引

不支持分区的表的外键

外键约束不能引用虚拟生成的列

BLOB并且 TEXT列不能包含在外键中

父表和子表必须使用相同的存储引擎,并且不能将它们定义为临时表

具有外键关系的表不能更改为其他存储引擎。要更改存储引擎,必须首先删除任何外键约束

外键和引用键中的对应列必须具有相似的数据类型。固定精度类型的大小和符号必须相同。字符串类型的长度不必相同。对于非二进制(字符)字符串列,字符集和排序规则必须相同。

在外键和引用的键上的索引;在引用表中必须有一个索引,其中外键列按照相同的顺序作为第一列列出。如果索引不存在,则在引用表上自动创建索引。如果您创建了另一个可用于强制外键约束的索引,则此索引可能会在稍后以静默方式删除

示例

添加外键约束

ALTER TABLE tbl_name

ADD [CONSTRAINT [symbol]] FOREIGN KEY

[index_name] (col_name, …)

REFERENCES tbl_name (col_name,…)

[ON DELETE reference_option]

[ON UPDATE reference_option]

放弃外键约束

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;

确定外键约束名称

SHOW CREATE TABLE:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176490.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:48
下一篇 2026年3月26日 下午9:48


相关推荐

  • idea快捷键和vscode快捷键对比

    idea快捷键和vscode快捷键对比之前一直写后端,最近用vscode写vue,两边的快捷键差异还挺大的,怎么感觉webstorm也挺香呢【手动狗头】快捷键名称IntelliJIDEAVisualStudioCode复制一行Ctrl+CCtrl+C剪切一行Ctrl+XCtrl+X删除一行Ctrl+YCtrl+Shift+K向下复制行Ctrl+DAlt+Shift+⬇上下移动行Alt+Shift+⬆⬇Alt+⬆⬇向

    2022年5月31日
    139
  • java switch基础介绍及具体使用方法

    java switch基础介绍及具体使用方法switch的case语句可以处理int,short,byte,char类型的值,但是不能处理long,String等类型。javaswitch基础语法witch(表达式){case表达式常量1:语句1;break;case表达式常量2:语句2;break;……case表达式常量n:语句n;break;[default:语句n+1;]…

    2022年7月8日
    21
  • 【事务】<查询不到同一调用方法其它事务提交的更新>解决方案

    【事务】<查询不到同一调用方法其它事务提交的更新>解决方案

    2020年11月12日
    188
  • 游戏协议测试理论(游戏测试是什么)

    转载:https://blog.csdn.net/SR0ad/article/details/8253126协议测试:针对通信协议进行的测试,是对常规测试的一种补充。重要性:实现一些常规测试中无法实现的流程,修改通信数据包检测服务器异常处理,修改数据包的先后次序检查服务器处理流程。协议测试的主要测试点:1.数据类型溢出:通信双方对协议数据类型的解析不一致,导致内存操作错误。2.数据包…

    2022年4月15日
    88
  • Redis删除策略和淘汰策略[通俗易懂]

    Redis删除策略和淘汰策略[通俗易懂]来的问题,Redis引入了定期删除策略(是他们的一个比较折中的方案)周期性轮询Redis库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除频度。实际上,在前面所说的删除策略,它针对的是expire命令进行的操作,也就是说那些具有时效性的数据(已经过期,并且还在占用内存的数据),我们在这里说的是针对那些并没有过期,或者是内存中的数据没有一个带有有效期,全是永久性数据,这时候删除策略就不起作用了,所以这个时候内存满了我们再去插入数据到内存是怎么做?删除这批key中已过期的。……

    2022年8月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号