MySQL 基础教程

MySQL 高级教程

MySQL SQL 语句

MySQL 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/mysql-delete-query.html

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 表的所有数据。

删除符合条件的多行记录

假设表中存在 status 字段,将 status = -1 的记录都删除,示例如下:

mysql> DELETE FROM knowledgedict_tbl WHERE status = -1;

删除顺序的记录

如果 DELETE 语句包含 ORDER BY 子句,则按子句指定的排序删除行。其主要与 LIMIT 一起使用。例如,以下语句查找与 WHERE 子句匹配的行,并按 create_time 字段升序排序,并删除第一个(最旧的)行:

mysql> DELETE FROM knowledgedict_tbl WHERE status = -1 ORDER BY create_time LIMIT 1;

 

MySQL 插入数据操作使用 INSERT INTO 语句,它属于 DML(数据操作语言)范畴,该语句插入方式支持从简单的添加操作到唯一键( ...
Neo4j 删除节点(node)或关系等 DELETE 操作,都需要搭配 MATCH 命令,也就是先要匹配查询要删除的节点,然后再 DELE ...
MySQL 中删除表的 SQL 为 DROP TABLE,该语句不但删除数据内容,连带表结构、索引等一并删掉,如果只删除指定数据或所有数据, ...
MySQL IF 语句可以用作表达式用,也可以作为流程控制语句;作为表达式时,它类似三目运算符,而作为流程控制语句时,它其实是条件表达式。 ...
Elasticsearch删除数据的实现方式Elasticsearch提供了多种方式来删除数据,以满足不同的需求和场景。delete()`方 ...