删除表的所有行
DELETE 语句指定表并通常包含 WHERE 子句,该子句指定要从表中移除的一行或多行。 如果省略 WHERE 子句,则删除所有行。
重要: 请不要执行下列语句。
DELETE FROM customer;
您可编写带有或不带 FROM 关键字的 DELETE 语句。
DELETE customer;
由于这些 DELETE 语句不包含 WHERE 子句,因此从 customer 表删除所有行。如果您尝 试使用 DB-Access 菜单选项来进行无条件的删除,则程序会警告您并要求确认。然而,从 程序之内执行无条件的 DELETE 可在不发出警告的情况下发生。
如果想要从名为 from 的表中删除行,则您必须首先设置 DELIMIDENT 环境变量,或使用 其所有者的名称来限定该表的名称:
DELETE legree.from;
要获取关于定界的标识符以及 DELIMIDENT 环境变量的更多信息,请参阅《GBase 8s SQL指南:语法》 中对“带引号的字符串”表达式以及“标识符”段的描述。
使用 TRUNCATE 来删除所有行
您可使用 TRUNCATE 语句来快速地从表中移除所有行,同时还移除所有对应的索引数 据。在提交该事务之后,您不可恢复删除了的行。您可对包含任何列类型(包括智能大对 象)的表上使用 TRUNCATE 语句。
使用 TRUNCATE 语句来移除行的速度比使用 DELETE 语句来移除它们快。在 TRUNCATE 语句之后,不必立即运行 UPDATE STATISTICS 语句。成功地执行 TRUNCATE 之后,GBase 8s 自动地更新该表及其系统目录中的索引的统计信息和分布情 况,以展示在该表中或在它的 dbspace 分区中没有任何行。
要了解日志记录的描述,请参阅 事务日志记录。 TRUNCATE 是数据定义语言语句,如果在该表上定义任何触发器,则该语句不激活 DELETE 触发器。要了解关于使用触发器的说明,请参阅 创建和使用触发器。
如果 TRUNCATE 语句指定的表是 typed 表,则成功的 TRUNCATE 操作从那个表中以 及从该表层级结构内的所有子表中移除所有行和 B-tree 结构。TRUNCATE 不等同于 DELETE 语句的 ONLY 关键字,DELETE 语句将操作限制在 typed 表层级结构内的单个 表。 GBase 8s 始终对 TRUNCATE 操作进行日志记录,即使对非日志记录的表也是如此。在支 持事务日志记录的数据库中,在同一事务之内的 TRUNCATE 之后,仅 SQL 的 COMMIT WORK 或 ROLLBACK WORK 语句是有效的。要获取关于使用 TRUNCATE 语句对性能 的影响的信息,请参阅《GBase 8s 性能指南》 。要了解完整的语法,请参阅《GBase 8s SQL
指南:语法》。
删除指定的行
DELETE 语句中的 WHERE 子句与 SELECT 语句中的 WHERE 子句的形式相同。您可 使用它来准确地指定应删除哪一行或哪些行。您可删除带有特定客户编号的客户,如下例 所示:
DELETE FROM customer WHERE customer_num = 175;
在此示例中,由于 customer_num 列有唯一约束,因此您可确保只删除一行。




