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关键词表示删除语句需要等待其他链接的读此表操作结束后再执行,只作用在MylSAMMEMORYMERGE存储引擎

  • 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';
原文地址:https://www.cnblogs.com/dabric/p/12354798.html