Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

DELETE

从表中删除行。

注意

单个 SQL 语句的最大大小为 16MB。

语法

Copy
DELETE [ FROM ] table_name [ {USING } table_name, ... ] [ WHERE condition ]

参数

FROM

FROM 关键字是可选的,不过在指定 USING 子句时除外。语句 delete from event;delete event; 执行相同的操作,可从 EVENT 表中删除所有行。

注意

要从表中删除所有行,请对表执行 TRUNCATE。TRUNCATE 的效率要比 DELETE 高很多,不需要 VACUUM 和 ANALYZE。不过请注意,TRUNCATE 在其运行的事务中提交事务。

table_name

一个临时或永久表。只有表的所有者或对表具有 DELETE 权限的用户才能从表中删除行。

考虑对大型表使用 TRUNCATE 命令来快速执行非限定的删除操作;请参阅 TRUNCATE

注意

在从表中删除大量行之后:

  • 对表执行 Vacuum 操作,以回收存储空间并重新排序行。

  • 分析表以更新查询计划程序的统计数据。

USING table_name, ...

在 WHERE 子句条件中引用附加表时,使用 USING 关键字可以引入表列表。例如,以下语句从 EVENT 表中删除满足 EVENT 和 SALES 表上的联接条件的所有行。必须在 FROM 列表中明确指定 SALES 表:

Copy
delete from event using sales where event.eventid=sales.eventid;

如果您在 USING 子句中重复目标表名称,DELETE 操作将运行自联接。您可以在 WHERE 子句中使用子查询,以取代 USING 语法来编写相同的查询。

WHERE condition

一个限制只删除那些符合条件的行的可选子句。例如,条件可以是对列的限制,也可以是联接条件或基于查询结果的条件。查询可以引用 DELETE 命令的目标以外的其他表。例如:

Copy
delete from t1 where col1 in(select col2 from t2);

如果未指定条件,将删除表中的所有行。

示例

从 CATEGORY 表中删除所有行:

Copy
delete from category;

从 CATEGORY 表中删除 CATID 值在 0 与 9 之间的行:

Copy
delete from category where catid between 0 and 9;

从 LISTING 表中删除其 SELLERID 值在 SALES 表中不存在的行:

Copy
delete from listing where listing.sellerid not in(select sales.sellerid from sales);

以下两个查询均根据与 EVENT 表的联接以及 CATID 列的额外限制,从 CATEGORY 表中删除一行:

Copy
delete from category using event where event.catid=category.catid and category.catid=9;
Copy
delete from category where catid in (select category.catid from category, event where category.catid=event.catid and category.catid=9);

本页内容: