delete [ignore]
from 表名
[where 条件1,条件2,.....]
[order by ......]
[limit ....];
#删除10部门中,工龄超过20的员工记录
delete from t_emp where deptno=10 and datediff(now(),hiredate)/365 >=20;
#删除20部门中工资最高的员工记录
delete from t_emp where deptno=20 order by sal+ifnull(comm,0) desc limit 1;
因为相关子查询效率非常低,所以我们可以利用表连接的方式来改造delete语句
delete 表1,.... from 表1 join 表2 on 条件 [where 条件1,条件2,....] [order by .....] [limit.....];
#删除SALES部门和该部门的全部员工记录
delete e,d from t_emp e join t_dept d on e.deptno=d.deptno where d.dname='SALES';
#删除每个低于部门平均底薪的员工记录
delete e from t_emp e join (select deptno,avg(sal) as sal from t_emp group by deptno) t on e.deptno=t.deptno and e.sal
# 删除表中所有记录
快速删除数据表全部记录 delete语句是在事务机制下删除记录,删除记录之前,先把将要删除的记录保存到日志文件中,然后在删除记录。
truncate语句在事务机制之外删除记录,速度远超delete语句。
truncate table 表名;