本文主要是介绍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)删除数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!