VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

DELETE

功能描述

DELETE从指定的表里删除满足WHERE子句的行。如果WHERE子句不存在,将删除表中所有行,结果只保留表结构。

注意事项

  • 要删除表中的数据,用户必须对它有DELETE权限。同样也必须有USING子句引用的表以及condition上读取的表的SELECT权限。

  • 对于行存复制表,仅支持有主键约束场景下的delete操作。

  • 对于列存表,暂时不支持RETURNING子句。

语法格式

[ WITH [ RECURSIVE ] with_query [, ...] ] 
DELETE FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ] 
    [ USING using_list ] 
    [ WHERE condition | WHERE CURRENT OF cursor_name ] 
    [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];

参数说明

  • WITH [ RECURSIVE ] with_query [, …]

    用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。

    如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。

    其中with_query的详细格式为:

    with_query_name [ ( column_name [, …] ) ] AS

    ( {select | values | insert | update | delete} )

    – with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问

    子查询的结果集。

    – column_name指定子查询结果集中显示的列名。

    – 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。

  • ONLY

    如果指定ONLY则只有该表被删除;如果没有声明,则该表和它的所有子表将都被删除。

  • table_name

    目标表的名称(可以有模式修饰)。

    取值范围:已存在的表名。

  • alias

    目标表的别名。

    取值范围:字符串,符合标识符命名规范。

  • using_list

    using子句。

  • condition

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

  • WHERE CURRENT OF cursor_name

    当前不支持,仅保留语法接口。

  • output_expr

    DELETE命令删除行之后计算输出结果的表达式。该表达式可以使用表的任意字段。可以使用*返回被删除行的所有字段。

  • output_name

    一个字段的输出名称。

    取值范围:字符串,符合标识符命名规范。

示例

--创建表 tpcds.customer_address。
vastbase=# CREATE TABLE tpcds.customer_address 
( 
    ca_address_sk       integer                  NOT NULL   , 
    ca_address_id       character(16)            NOT NULL   
);

--在 tpcds.customer_address表插入数据
vastbase=# INSERT INTO tpcds.customer_address VALUES (3769, 'hello');
vastbase=# INSERT INTO tpcds.customer_address VALUES (14889, 'hi');

--创建表tpcds.customer_address_bak。 
vastbase=# CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address; 
 
--删除tpcds.customer_address_bak中ca_address_sk小于14888的职员。 
vastbase=# DELETE FROM tpcds.customer_address_bak WHERE ca_address_sk < 14888; 
 
--删除tpcds.customer_address_bak中所有数据。 
vastbase=# DELETE FROM tpcds.customer_address_bak; 

--删除tpcds.customer_address_bak表。 
vastbase=# DROP TABLE tpcds.customer_address_bak;

--删除tpcds.customer_address表。 
vastbase=# DROP TABLE tpcds.customer_address;

优化建议

  • delete

    如果要删除表中的所有记录,建议使用truncate语法。