云数据库 GAUSSDB-DELETE:参数说明
参数说明
- WITH [ RECURSIVE ] with_query [, ...]
用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。
如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。
- with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问子查询的结果集。
- 每个子查询可以是SELECT、VALUES、INSERT、UPDATE或DELETE语句。
- 用户可以使用MATERIALIZED或NOT MATERIALIZED对CTE进行修饰。
- 如果声明为MATERIALIZED,则WITH查询将被物化,生成一个子查询结果集的复制,在引用处直接查询该复制,因此WITH子查询无法和主干SELECT语句进行联合优化(如谓词下推、等价类传递等),对于此类场景可以使用NOT MATERIALIZED进行修饰,如果WITH查询语义上可以作为子查询内联执行,则可以进行上述优化。
- 如果用户没有显示声明物化属性则遵守此规则:如果CTE只在所属主干语句中被引用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan的方式物化执行。
- plan_hint
以/*+ */的形式在DELETE关键字后,用于对DELETE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。
- ONLY
如果指定ONLY则只有该表被删除,如果没有声明,则该表和它的所有子表将都被删除。
- table_name
目标表的名称(可以有模式修饰)。
取值范围:已存在的表名。
支持使用DATABASE LINK方式对远端表进行操作,使用方式详情请见DATABASE LINK。
- subquery
删除目标对象可以是子查询,在对子查询中的数据进行删除时,会将子查询当成一个临时视图,支持在子查询后面加CHECK OPTION选项。
[ WITH [ RECURSIVE ] with_query [, ...] ] SELECT [/*+ plan_hint */] [ ALL ] { * | {expression [ [ AS ] output_name ]} [, ...] } [ into_option ] [ FROM from_item [, ...] ] [ WHERE condition ] [ [ START WITH condition ] CONNECT BY [NOCYCLE] condition [ ORDER SIBLINGS BY expression ] ] [ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] [ into_option ];
其中指定子查询源from_item为:{[ ONLY ] {table_name | view_name} [ * ] [ partition_clause ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ] |( select ) [ AS ] alias [ ( column_alias [, ...] ) ] |with_query_name [ [ AS ] alias [ ( column_alias [, ...] ) ] ] |from_item [ NATURAL ] join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]}
如果子查询中只有一张表,则对该表做删除;如果子查询中有多张表或有嵌套关系,则通过判断是否有保留键表确定是否可以进行删除操作。关于保留键表和WITH CHECK OPTION请参见CREATE VIEW。
- view_name
目标视图的名称。
对视图和子查询的删除,有如下约束:
- 只有直接引用基表用户列的列可进行DELETE操作。
- 子查询或视图必须至少包含一个可更新列,关于可更新列请参见CREATE VIEW。
- 不支持在顶层包含DISTINCT、GROUP BY、HAVING、LIMIT、OFFSET子句的视图和子查询。
- 不支持在顶层包含集合运算(UNION、INTERSECT、EXCEPT、MINUS)的视图和子查询。
- 不支持目标列表中包含聚集函数、窗口函数、返回集合函数(array_agg、json_agg、generate_series等)的视图和子查询。
- 不支持仅带有BEFORE/AFTER触发器,没有INSTEAD OF触发器或INSTEAD规则的视图。
- 视图和子查询中支持的表类型包括普通表、临时表、全局临时表、分区表、二级分区表、ustore表、astore表。
- 连接视图或子查询只能对视图或子查询中的保留键表做删除操作,如果只存在一张保留键表,则删除该表数据,如果存在多张保留键表,仅删除from后的第一张保留键表的数据。
- 如果连接视图或子查询中指定了CHECK OPTION选项,且基表重复,重复的基表在视图或子查询中保留键表属性不一致,则无法从连接视图或子查询中删除行。关于保留键表请参见CREATE VIEW。
- 不支持对系统视图进行DELETE操作。
- 不支持多表删除功能。
- partition_clause
指定分区删除操作。
PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } |
SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) }
关键字详见SELECT章节介绍。
- partitions_clause
指定多个分区删除操作。
PARTITION { ( { partition_name | subpartition_name } [, ...] ) }
此语法仅在参数sql_compatibility='B'时生效。
关键字详见SELECT章节介绍。
- alias
目标表的别名。
取值范围:字符串,符合标识符命名规范。
- using_list
using子句。
当参数sql_compatibility='B'或删除多张目标表时,using_list指定关联表的集合时可以同时出现目标表,并且可以定义表的别名并在目标表中使用。其他情况下则目标表不可重复出现在using_list中。
- condition
一个返回Boolean值的表达式,用于判断哪些行需要被删除。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。
- WHERE CURRENT OF cursor_name
当cursor指向表的某一行时,可以使用此语法删除cursor当前指向的行。使用限制及约束请参考UPDATE章节对此语法介绍。
- ORDER BY
关键字详见SELECT章节介绍。
- LIMIT
关键字详见SELECT章节介绍。
- output_expr
DELETE命令删除行之后计算输出结果的表达式,该表达式可以使用表的任意字段,可以使用*返回被删除行的所有字段。
- output_name
一个字段的输出名称。
取值范围:字符串,符合标识符命名规范。