MySQL——多表操作(一)外键(3)添加外键约束的参数说明

我们知道建立外键是为了保证数据的完整和统一性,但如果主表中的数据被删除或修改,从表中对应的数据该怎么办?很明显,从表中对应的数据也应该被删除,否则数据库中会存在很多无意义的垃圾数据。MySQL 可以在建立外键时添加 ON DELETE 或 ON UPDATE子句来告诉数据库,怎样避免垃圾数据的产生。具体语法格式如下:

sql 复制代码
alter table 表名 add constraint FK_ID foreign key(外键字段名) REFERENCES 主表表名(主键宇段名);
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

语句中各参数的具体说明如下表所示:

|-----------|-----------------------------------------------------------------|
| 参数名称 | 功能描述 |
| CASCADE | 删除包含与已删除键值有参照关系的所有记录 |
| SET NULL | 修改包含与已删除键值有参照关系的所有记录,使用 NULL 值替换(不能用于已标记为 NOT NULL 的字段) |
| NO ACTION | 不进行任何操作 |
| RESTRICT | 拒绝主表删除或修改外键关联列。(在不定义 ON DELETE 和 ON UPDATE 子句时,这是默认设置,也是最安全的设置) |

相关推荐
n***63278 分钟前
MySQL数据库的数据文件保存在哪?MySQL数据存在哪里
数据库·mysql
SelectDB18 分钟前
从 Flink 到 Doris 的实时数据写入实践——基于 Flink CDC 构建更实时高效的数据集成链路
数据库
普通网友23 分钟前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
月上柳青27 分钟前
OpenWrt系统上配置batman-adv快速开始与配置详解
开发语言·mysql·php
t***265936 分钟前
【大数据】MySQL与Elasticsearch的对比分析:如何选择适合的查询解决方案
大数据·mysql·elasticsearch
k***921637 分钟前
redis连接服务
数据库·redis·bootstrap
T-BARBARIANS38 分钟前
mariadb galera集群在Openstack中的应用
数据库·负载均衡
攻心的子乐38 分钟前
redis分布式锁 多节点部署项目 Redisson 来做分布式锁
数据库·redis·分布式
java1234_小锋1 小时前
Redis线上操作最佳实践有哪些?
java·数据库·redis
普通网友1 小时前
Python函数定义与调用:编写可重用代码的基石
jvm·数据库·python