MySQL如何实现主表删除后自动删除外键表数据

 更新时间:2026年10月15日 16:07:35   作者:会飞的种花家  
还在为删除主表数据时外键约束报错而烦恼吗?本文用学生选课案例手把手教你SQL级联删除和级联更新,通过ON DELETE CASCADE和ON UPDATE CASCADE轻松实现自动维护外键表数据,附Navicat可视化设置步骤

SQL级联删除和级联更新的概念

(1)为什么要用级联?

当没有对目标键设置级联删除和更新,删除或更新主键表中的数据(外键表中有该目标键的数据)时,会报错,不允许删除或更新,必须先把外键表中关联的数据删除之后才能删除主键表中的数据。

(2)简单思路

多设置几条sql语句,在删除主键表中的数据时,先把外键表中与之关联的数据删除。

(3)级联概念

其实在sql中就有这个功能,只需要把命令写好就可以了。

概念:当对主键表中的数据进行删除和更新时,数据库会对关联的数据会自动删除和更新。

结合例子的具体使用方法

就初学的学生选课这一关系的案例来进行简要说明。配合例子食用,更为有效!

这里要注意:创建时,不加外键

(1)创建三个表,分别为t_student、t_course、t_choose

sql语句为:

create table t_student
(
student_id		integer not null comment '学生学号',
student_name	varchar(20) not null comment '学生姓名',
primary key (student_id)
);
create table t_course
(
course_id		integer not null comment '课程编号',
course_name	varchar(20) not null comment '课程名称',
primary key (course_id)
);
create table t_choose
(
id		integer not null comment '选课编号' auto_increment,
student_id	integer not null comment '学生学号',
course_id integer not null  comment '课程编号',
primary key (id)
);

(2)添加级联

1–>查询方式添加

on delete cascade on update cascade是关键语句

alter table t_choose add constraint fk_t_student1 foreign key (student_id) references t_student (student_id) on delete cascade on update cascade;

alter table t_choose add constraint fk_t_course1 foreign key (course_id) references t_course (course_id) on delete cascade on update cascade;

2–>在可视化环境,Navicat for MySQL中添加

实际效果

(1)表中数据

student表

course表

choose表

(2)删除和更新实验

—>更新

course表中的course_id为2的改为1002

保存后的choose表数据

—>删除

删除掉student表中student_id为2的学生

保存后choose表数据

发现student_id为2的数据全都被删除了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • win10下mysql 8.0.11 压缩版安装教程

    win10下mysql 8.0.11 压缩版安装教程

    这篇文章主要为大家详细介绍了win10下mysql 8.0.11 压缩版安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • MySQL索引事务详细解析

    MySQL索引事务详细解析

    这篇文章主要介绍了MySQL数据库索引事务,索引是为了加速对表中数据行的检索而创建的一种分散的存储结;事物是属于计算机中一个很广泛的概念,一般是指要做的或所做的事情,下面我们就一起进入文章了解具体内容吧
    2022-01-01
  • mysql 编码设置命令

    mysql 编码设置命令

    mysql 编码设置命令,需要的朋友可以参考下。
    2009-10-10
  • mysql数据表规模九千万条记录 如何优化查询?

    mysql数据表规模九千万条记录 如何优化查询?

    这里的优化维度有四个:硬件配置、参数配置、表结构设计和SQL语句及索引,需要的朋友可以参考下
    2023-12-12
  • Mysql错误1366 - Incorrect integer value解决方法

    Mysql错误1366 - Incorrect integer value解决方法

    这篇文章主要介绍了Mysql错误1366 - Incorrect integer value解决方法,本文通过修改字段默认值解决,需要的朋友可以参考下
    2014-09-09
  • MySQL 8.0新特性 — 管理端口的使用简介

    MySQL 8.0新特性 — 管理端口的使用简介

    这篇文章主要介绍了MySQL 8.0新特性 — 管理端口的使用简介,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • MySQL中my.ini文件的基础配置和优化配置方式

    MySQL中my.ini文件的基础配置和优化配置方式

    文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持
    2025-01-01
  • MySQL正则表达式进行模糊查询的完全指南

    MySQL正则表达式进行模糊查询的完全指南

    本文详细介绍了正则表达式在数据库中的应用,包括基础入门、高级匹配技巧、实战应用场景、性能优化与最佳实践,以及REGEXP和LIKE的全面对比,通过正则表达式,可以更高效地解决复杂的字符串匹配问题,提高数据处理效率,需要的朋友可以参考下
    2026-02-02
  • Windows下简单的Mysql备份BAT脚本分享

    Windows下简单的Mysql备份BAT脚本分享

    朋友说在windows下面用bat命令备份失败,他一时找不到问题所在,于是找我帮忙查看下。查找后解决了该问题,想着总结下来,所以这篇文章主要跟大家分享了一个在Windows下简单的Mysql备份BAT脚本,需要的朋友可以参考下。
    2017-03-03
  • MySQL自增id用完的解决方案

    MySQL自增id用完的解决方案

    MySQL 的自增 ID(Auto Increment ID)是数据库表中最常用的主键类型之一,然而,在一些特定的场景下,自增 ID 可能会达到其最大值,可能会遇到 ID 用尽的问题,所以本文介绍了MySQL自增id用完的解决方案,需要的朋友可以参考下
    2024-12-12

最新评论