使用 DELETE 语句从表中删除一行或多行,或者在 SPL 或 GBase 8s ESQL/C 的集合变量中删除一个或多个元素。
您还可以使用此语句移除 GBase 8s ESQL/C 或 SPL 集合变量或 ROW 变量中的一个或多个元素的值。
要执行 DELETE 语句,您必须拥有数据库上的 DBA 访问权限,或者表的 Delete 存取权限。
在带有显式事务日志记录的数据库中,任何在事务之外执行的 DELETE 语句都将作为一个单独的事务来对待。
如果指定视图名称,则该视图必须是可更新的。有关对可更新视图的解释,请参阅通过视图更新。
DELETE 语句不能引用 CREATE EXTERNAL TABLE 语句定义的表对象。
如果您使用不带 WHERE 子句的 DELETE (指定一个条件或游标的活动集合),表中所有的行都会被删除。但是,若要移除表中所有的行,使用 TRUNCATE 语句会比 DELETE 语句更有效率。
在 DB-Access 中,如果您在 SQL 菜单工作时,省略 WHERE 子句,则 DB-Access 会提示您确认是否要删除表中所有的行。如果在命令文件中执行 DELETE 语句,则不会收到提示。
在兼容 ANSI 的数据库中,数据操作语言(DML)语句通常都在事务中。您无法在事务外执行 DELETE 语句。
FROM 关键字优先于目标表的名称是可选的。要删除名为 from 的表中的行,可以设置 DELIMIDENT 环境变量并使用引号(" )分隔 "from":
DELETE "from";
另一种方法是,可以使用表所有者的名称限定 from 表的名称:
DELETE zelaine.from;
但是,如果您避免将 SQL 关键字声明为表、视图或其它数据库对象的标识符,则 SQL代码会比较容易读取和维护。
如果使用不带 WHERE 子句(指定一个条件或游标的活动集合)的 DELETE ,则会删除表中所有的行。但是,若要移除表中所有的行,使用 TRUNCATE 语句会比 DELETE 语句更有效率。
在 DB-Access 中,如果您在 SQL 菜单工作时,省略 WHERE 子句,则 DB-Access 会提示您确认是否要删除表中所有的行。如果在命令文件中执行 DELETE 语句,则不会收到提示。
数据库服务器在事务期间锁定该事务内每个受 DELETE 语句影响的行。该表锁定粒度的可以是 PAGE 级或 ROW 级。
如果影响的行的数量很大,且锁定方式为 ROW ,则可能超过操作系统对同时发生的锁的最大数目所置的限制。如果发生这种情况,您可以在执行 DELETE 语句之前减小 DELETE 语句的范围或者以互斥方式用 LOCK TABLE 语句锁定表。