MySQL——多表操作(二)操作关联表(3)删除数据

2024-08-25 10:20

本文主要是介绍MySQL——多表操作(二)操作关联表(3)删除数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在某些情况下还需要删除关联表中的数,如学校的软件一班取消了,就需要在数掘库中将该班级以及该班级的学生一起删除。由于grade 表和 sudent 表之间具有关联关系。参照列被参照的值是不能被删除的,因此,在删除软件一班时,一定要先删除该班级的所有学生,然后再删除班级,具体步骤如下。

(1)将软件一班的所有学生全部删除,具体语句如下:

mysql> delete from student where sname='小明';
Query OK, 1 row affected (0.03 sec)mysql> delete from student where sname='小红';
Query OK, 1 row affected (0.00 sec)

        上述语句执行成功后,可以使用 SELECT 语句查询,查询结果如下:

mysql> select * from student where gid=1;
Empty set (0.01 sec)

        从上述语句可以看出,student 表中已经没有任何学生的记录了

(2)在 grade表中,将软件一班删除,具体语句如下:

mysql> delete from grade where id=1;
Query OK, 1 row affected (0.00 sec)

        上述语句执行成功后,可以使用 SELECT 语句查询,查询结果如下:

mysql> select * from grade;
+----+--------------+
| id | name         |
+----+--------------+
|  2 | 软件二班     |
+----+--------------+
1 row in set (0.01 sec)

        从查询结果可以看出,软件一班被成功地删除了。这样就删除了关联表中的数据。如果直接删除表 grade 中的“软件二班”,看看会出现什么情况,具体语句如下:

delete from grade where id=2;

        执行结果如下:

mysql> delete from grade where id=2;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`chapter05`.`student`, CONSTRAINT `Fk_ID` FOREIGN KEY (`gid`) REFERENCES `grade` (`id`))

        由此运行结果可以看出,在两个具有关联关系的表中删除数据时,一定要先删除从表中的数据,然后再删除主表中的数据,否则会报错。

        需要注意的是,在实际情况中,想要删除“软件一班”,并不需要删除“软件一班”的学生,可以将表 student 中“王红”和“李强”的 gid 改成 NULL,只要主表中该列没有被从表参照就可以删除。但是在建表时,gid 字段有非空约束,所以只能将“小明”和“小红”的记录删除。

这篇关于MySQL——多表操作(二)操作关联表(3)删除数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1105285

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

JavaScript DOM操作与事件处理方法

《JavaScriptDOM操作与事件处理方法》本文通过一系列代码片段,详细介绍了如何使用JavaScript进行DOM操作、事件处理、属性操作、内容操作、尺寸和位置获取,以及实现简单的动画效果,涵... 目录前言1. 类名操作代码片段代码解析2. 属性操作代码片段代码解析3. 内容操作代码片段代码解析4.