17xie首页 > 综合频道 > 科学技术 > 《PostgreSQL 8.2.3 中文手册》参考手册篇 > DELETE -- 删除一个表中的行 DROP AGGREGATE -- 删除一个聚集函数

DELETE -- 删除一个表中的行 DROP AGGREGATE -- 删除一个聚集函数

[更新时间]2008-03-27 10:37:59 [字数]3098

DELETE

名称

DELETE -- 删除一个表中的行

语法

DELETE FROM [ ONLY ] table [ [ AS ] alias ]
    [ USING usinglist ]
    [ WHERE condition ]
    [ RETURNING * | output_expression [ AS output_name ] [, ...] ]

描述

DELETE 从指定的表里删除满足 WHERE 子句的行。如果 WHERE 子句不存在,将删除表中所有行。结果是一个有效的空表。

【提示】 TRUNCATE 是一个 PostgreSQL 扩展,它提供一个更快的从表中删除所有行的机制。

缺省时 DELETE 将删除所声明的表及其所有子表的记录。如果你希望只删除指定的表,你应该使用 ONLY 子句。

使用数据库中其它表的信息删除某个表中的数据行有两个办法:使用子查询,或者在 USING 子句中声明额外的表。哪种技巧更合适取决于特定的环境。

可选的 RETURNING 子句将使得 DELETE 计算并返回实际被删除了的行。任何使用表字段的表达式和/或 USING 中提到的其他表的字段,都可以用于计算。RETURNING 列表的语法和 SELECT 输出列表的语法相同。

要对表进行删除,你必须对它有 DELETE 权限,同样也必须有 USING 子句的表以及 condition 上读取的表的 SELECT 权限。

参数

ONLY

如果声明了这个选项,则只从指定的表中删除数据行。否则从指定的表及其所有子表中的删除。

table

一个现存表的名字(可以有模式修饰)

alias

目标表的别名。如果提供了别名,那么它将完全掩盖实际的表名。例如给定 DELETE FROM foo AS f 之后,DELETE 语句的剩余部分必须使用 f 而不是 foo 来引用该表。

usinglist

表表达式列表,允许来自其他表的列出现在 WHERE 条件中。这与可以在 SELECT 命令的 FROM 子句 中指定的表列表相似。例如,可以为该表的名字声明一个别名。不要在 usinglist 里重复目标表,除非你希望产生一个自连接。

condition

一个返回 boolean 值的表达式,用于判断哪些行需要被删除。

output_expression

An expression to be computed and returned by the DELETE command after each row is deleted. The expression may use any column names of the table or table(s) listed in USING. Write * to return all columns

output_name

A name to use for a returned column

输出

成功时,DELETE 命令返回形如

DELETE count

的标签。count 是被删除的行数。如果为 0 则表示没有行匹配 condition ,这个不认为是错误。

如果 DELETE 命令包含一个 RETURNING 子句,那么其结果非常类似于 SELECT 语句基于 RETURNING 子句中包含的字段和值列表的结果,只是基于被删除的行进行计算而已。

注意

PostgreSQL 允许你在 WHERE 条件里引用其它表的字段,方法是在 USING 子句里声明其它表。比如,要删除给出制片商制作的所有电影,可以

DELETE FROM films USING producers
  WHERE producer_id = producers.id AND producers.name = 'foo';

这里实际发生的事情是在 filmsproducers 之间的一个连接,然后所有成功连接的 films 行都标记为删除。这个语法不是标准的,更标准的语法是这么做:

DELETE FROM films
  WHERE producer_id IN (SELECT id FROM producers WHERE name = 'foo');

有时候连接风格比子查询风格更容易写或者执行更快。

例子

删除所有电影(films)但不删除音乐(musicals):

DELETE FROM films WHERE kind <> 'Musical';

清空 films 表:

DELETE FROM films;

从 tasks 表及其子表中删除,并返回所有被删除的行:

DELETE FROM tasks WHERE status = 'DONE' RETURNING *;

兼容性

这条命令遵循 SQL 标准,但是 USINGRETURNING 子句是 PostgreSQL 的扩展。

DROP AGGREGATE

名称

DROP AGGREGATE -- 删除一个聚集函数

语法

DROP AGGREGATE [ IF EXISTS ] name ( type [ , ... ] ) [ CASCADE | RESTRICT ]

描述

DROP AGGREGATE 删除一个现存的聚集函数。执行这条命令的用户必须是该聚集函数的所有者。

参数

IF EXISTS

如果指定的聚集不存在,那么发出一个 notice 而不是抛出一个错误。

name

现存的聚集函数名(可以有模式修饰)

type

聚集函数操作的输入数据类型,要引用一个零参数聚集函数,请用 * 代替输入数据类型列表。

CASCADE

级联删除依赖于这个聚集函数的对象

RESTRICT

如果有任何依赖对象,则拒绝删除这个聚集函数。这是缺省。

例子

integer 类型的聚集函数 myavg 删除:

DROP AGGREGATE myavg(integer);

兼容性

SQL 标准里没有 DROP AGGREGATE 语句。

又见

ALTER AGGREGATE, CREATE AGGREGATE

DROP CAST

名称

DROP CAST -- 删除一个类型转换

语法

DROP CAST [ IF EXISTS ] (sourcetype AS targettype) [ CASCADE | RESTRICT ]

描述

DROP CAST 删除一个先前定义过的类型转换。

要能删除一个类型转换,你必须拥有源或者目的数据类型。这是和创建一个类型转换相同的权限。

参数

IF EXISTS

如果指定的转换不存在,那么发出一个 notice 而不是抛出一个错误。

sourcetype

类型转换里的源数据类型

targettype

类型转换里的目标数据类型

CASCADE
RESTRICT

这些键字没有任何效果,因为在类型转换上没有依赖关系。

例子

删除从 textint 的转换:

DROP CAST (text AS int);

兼容性

DROP CAST 遵循 SQL 标准。

又见

CREATE CAST
举报不良信息 本页地址:http://zonghe.17xie.com/book/10454336/44681.html
   

← →键盘左右键前后翻页,回车[enter]返回本书首页
  • 支持本书:
Copyright©2007 17xie.com 互动写作和阅读平台 京ICP备08002671号