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