欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > MySQL——多表操作(二)操作关联表(3)删除数据

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

2024/10/23 19:24:04 来源:https://blog.csdn.net/W_Fe5/article/details/141518918  浏览:    关键词: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 字段有非空约束,所以只能将“小明”和“小红”的记录删除。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com