DELETE
用于删除表中的数据。
注意事项
执行
DELETE
命令时,表中必须存在主键。DELETE
暂不支持使用表的别名。不建议通过
DELETE
命令删除全表、全分区的数据,建议使用TRUNCATE TABLE
、TRUNCATE TABLE PARTITION
命令,详情请参见TRUNCATE TABLE。删除多表数据时,一条SQL语句只能删除一张表,不支持同时删除多张表。
语法
单表删除是指查询一个表,并删除满足WHERE子句指定条件的数据。多表删除是指单个SQL语句进行多表关联查询,并在一个表中删除满足WHERE子句指定条件的数据。
单表删除
DELETE FROM table_name
[ WHERE condition ]
多表删除
重要
仅3.2.0.0及以上内核版本的集群支持多表删除。
请在云原生数据仓库AnalyticDB MySQL控制台集群信息页面的配置信息区域,查看和升级内核版本。
DELETE table_name1
FROM table_name1 [INNER JOIN | LEFT JOIN | RIGHT JOIN] table_name2 ON table_name1.column1 = table_name2.column1
[WHERE where_condition]
示例
删除customer表中
name
为张三
的数据。DELETE FROM customer WHERE customer_name='张三';
删除customer表中的多行。
DELETE FROM customer WHERE age<18;
在customer表中,查询并删除
id
与orders表中id
相同,且age
为18的数据。DELETE customer FROM customer JOIN orders ON customer.id = orders.id WHERE customer.age = 18;
常见问题
为什么在删除表中数据后,存储空间占用没有减少?
原因:DELETE是异步操作,执行DELETE语句删除表数据后,存储空间占用不会立即减少。
解决方法:在执行DELETE语句后,触发BUILD任务。
AnalyticDB for MySQL集群会在满足一定条件后自动触发BUILD任务,您也可以手动触发BUILD任务。