MySQL 基础教程

MySQL 高级教程

MySQL SQL 语句

MySQL 笔记

MySQL 删除数据语句(DELETE)用法详解


MySQL 删除数据操作使用 DELETE FROM 语句,它属于 DML(数据操作语言)范畴,DELETE 语句是一行一行地进行删除操作,同时它会将每行的操作记录到事务日志中,以便可以进行回滚操作,即表示 DELETE 语句操作是可以回滚的,这有别于 TRUNCATE 语句。

DELETE FROM

MySQL DELETE 语句主要两种形式,一个是单表删除数据,另一个是多表删除数据。

语法

单表删除数据语句:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

主要的可选项:

WHERE
WHERE 子句指定要删除的行,如果未指定,则删除所有的行,即所有的数据,后面的 where_condition 是一个表达式,返回 true 的每行即表示要删除的行。
ORDER BY
如果指定了该子句,表示按照指定的顺序进行一行一行地删除。
LIMIT
该子句限制可以删除的行数,它只适用于单表删除,但不适用于多表删除。此外,LIMIT 子句的还有一层最大意义是,如果删除的行数过多,会带来性能的损耗,这是可以通过该子句可以有效地控制删除的速度。

多表删除语句:

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

修饰符

DELETE 语句支持修饰符主要如下:

LOW_PRIORITY
如果指定 LOW_PRIORITY 修饰符,表示服务端直到没有其他客户端读取该表时,才执行删除操作,即它是延迟操作;它只作用于表级锁的存储引擎(如 MyISAM、MEMORY、MERGE)。
QUICK
对于 MyISAM 存储引擎,如果使用 QUICK 修饰符,则存储引擎在删除期间不会合并索引的叶子节点,这可能会加快某些类型的删除操作。
IGNORE
IGNORE 修饰符表示在删除期间若出现错误,它会进行忽略(如在解析阶段遇到的错误),会作为警告信息返回。

示例

删除表中所有的数据

这是最常用的操作情况,示例如下:

mysql> DELETE FROM knowledgedict_tbl;

删除 knowledgedict_tbl 表的所有数据。