尚硅谷之MySQL基础

9.3 删除数据

1、语法

delete from 表名 【where 条件】;

delete 表1,表2,.......   from 表1,表2,......  【where 条件】;

2、说明

1、如果不加where条件,表示删除整张表的数据,表结构保留。

delete from 表名;

删除整张表的数据还可以使用truncate 表名;

区别:

truncate相当于删除表再重建一张同名结构的表,操作后得到一张全新表,而delete是在原有表中删除数据。如果决定清空一张表的数据,truncate速度更快一些。

TRUNCATE语句不能回滚

2、如果删除主表的记录,要注意查看从表的外键是否有依赖该行的值,如果有

(1)如果外键是on delete RESTRICT或on delete NO ACTION,那么要先处理从表的数据,才能删除

(2)如果外键是on delete SET NULL 或 on delete CASCADE,那么删除时从表的对应记录也会被置空或跟着删除

3、可以一次删除多个表的数据

例如:两个表没有建立外键,但逻辑上有外键关系,也可以通过删除多个表的数据来实现级联删除

 

3、示例

#删除学号为9的学生信息

DELETE FROM t_stu WHERE sid = 9;

#注意:前提是没有外键或外键是on delete cascade

#删除所有“教学部”的员工信息和薪资信息和“教学部”部门信息

DELETE t_employee,t_department,t_salary

FROM t_employee,t_department,t_salary

WHERE t_department.`dname` ='教学部'

 AND t_employee.`dept_id`=t_department.`did`

 AND t_employee.`eid` = t_salary.eid;