SQL基础语法—delete语句
1 delete语句介绍
delete
语句用于删除表中已经存在的整行数据。基本语法如下:
Single-Table Syntax
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[PARTITION (partition_name [, partition_name] ...)]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Multiple-Table Syntax
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name[.*] [, tbl_name[.*]] ...
USING table_references
[WHERE where_condition]
-
tbl_name
关键词代表删除数据的目标表 -
where
子句代表被删除数据的满足条件,如果没有where
子句则代表所有表数据都删除 -
order by
子句代表删除数据的顺序 -
limit
子句代表被删除数据的行数限制 -
low_priority
关键词表示删除语句需要等待其他链接的读此表操作结束后再执行,只作用在MylSAM
,MEMORY
,MERGE
存储引擎 -
quick
关键词是在使用myisam
存储引擎时,删除操作不会合并删除表的索引叶节点,这样会在一定程度上加快删除的速度 -
ignore
关键词代表会忽略删除过程中的一些错误
2 delete语句使用示例
2.1 单表删除
单表删除的一些案例如下:
## 删除students中的所有数据
mysql> delete from students;
## 使用order by配合limit子句删除sid最大的两条数据
mysql> delete from students order by sid desc limit 2;
2.2 多表删除
多表删除是指从一个或多个表中删除满足条件的数据,其中的table_reference
代表了多个表的join
操作。多表删除示例如下:
## 删除students2表和students3表中sid相同的行
mysql> delete students2,student3 from students2 inner join students3 where students2.sid=students3.sid;
## 使用关联两张表进行查询,但在删除时只删除单表中的行
mysql> delete students2 from students2 inner join students3 where students2.sid=students3.sid;
## 表的别名,只能在table_references子句中使用,否则会报错
mysql> delete a from students2 as a inner join students3 as b where a.sid=b.sid
3 使用delete语句注意事项
- 在使用
delete
语句之前先使用查询语句验证过滤条件是否正确 - 添加事务
set autocommit=off
,开启手动回滚操作
4 练习
删除所有学号大于200的学生信息
mysql> delete from students where sid>200;
删除系名为accounting的所有老师信息
mysql> selete id from dept where dept_name='accounting';
mysql> delete from teacher where dept_id=4;
## 当条件中的值不止一个时,此时不能使用'=',应该使用'in'关键字
mysql> delete from teacher where dept_id in (selete id from dept where dept_name in ('accounting'));
## 使用多表删除
mysql> delete teacher from teacher inner join dept where teacher.dept_id=dept.id and dept.dept_name='accounting';