返回首页

gbase数据、南大通用产品文档:GBase8cDELETE

更新日期:2024年09月11日

功能描述
DELETE 从指定的表里删除满足WHERE 子句的行。如果WHERE 子句不存在,将删
除表中所有行,结果只保留表结构。
注意事项
表的所有者、被授予了表DELETE 权限的用户或被授予DELETE ANY TABLE 权限的
用户有权删除表中数据,系统管理员默认拥有此权限。同时也必须有USING 子句引用的表
以及condition 上读取的表的SELECT 权限。
对于列存表,暂时不支持RETURNING 子句。
语法格式
[ WITH [ RECURSIVE ] with_query [, ...] ]
DELETE [/*+ plan_hint */] FROM [ ONLY ] table_name [partition_clause] [ * ] [ [ AS ]
alias ]
[ USING using_list ]
[ WHERE condition | WHERE CURRENT OF cursor_name ] [ LIMIT row_count ]
[ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];
参数说明

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

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1099
如果声明了RECURSIVE,那么允许SELECT 子查询通过名称引用它自己。
其中with_query 的详细格式为:
with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED]
( {select | values | insert | update | delete} )
with_query_name 指定子查询生成的结果集名称,在查询中可使用该名称访问子查询的
结果集。
column_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

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1100
目标表的名称(可以有模式修饰)

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

partition_clause
指定分区删除操作
PARTITION { ( partition_name ) | FOR ( partition_value [, …] ) } |
SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, …] ) }
关键字详见SELECT 一节介绍
示例详见CREATE TABLE SUBPARTITION

alias
目标表的别名。
取值范围:字符串,符合标识符命名规范。

using_list
using 子句。

condition
一个返回Boolean 值的表达式,用于判断哪些行需要被删除。不建议使用int 等数值类
型作为condition,因为int 等数值类型可以隐式转换为bool 值(非0 值隐式转换为true,0
转换为false)
,可能导致非预期的结果。

WHERE CURRENT OF cursor_name
当前不支持,仅保留语法接口。

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

以使用*返回被删除行的所有字段。

output_name

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
1101
一个字段的输出名称。
取值范围:字符串,符合标识符命名规范。
示例
--创建表tpcds.customer_address_bak。
gbase=#CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address;
--删除tpcds.customer_address_bak 中ca_address_sk 小于14888 的职员。
gbase=#DELETE FROM tpcds.customer_address_bak WHERE ca_address_sk < 14888;
--删除tpcds.customer_address_bak 中所有数据。
gbase=#DELETE FROM tpcds.customer_address_bak;
--删除tpcds.customer_address_bak 表。
gbase=#DROP TABLE tpcds.customer_address_bak;
优化建议

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

函数说明
返回time 对应的分钟值,范围为0 到59。
示例
示例1
time 值对应的分钟值在0~59 之内。
gbase> SELECT MINUTE('01-02-03 10:08:03') FROM t;
+-----------------------------+
| MINUTE('01-02-03 10:08:03') |
+-----------------------------+
| 8 |
+-----------------------------+
1 row in set
示例2
time 值对应的分钟值大于59,返回NULL。
gbase> SELECT MINUTE('01-02-03 10:60:03') FROM t;
+-----------------------------+
| MINUTE('01-02-03 10:60:03') |
+-----------------------------+
| NULL |
+-----------------------------+
1 row in set, 2 warnings

gbase> SHOW WARNINGS;
+-------+------+
| Level | Code |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 880
+-------+------+
| Note | 1292 |
| Note | 1292 |
+-------+------+
+-------------------------------------------------------------------------+
| Message |
+-------------------------------------------------------------------------+
| 192.168.10.115:5050 - Truncated incorrect time value: '01-02-03 10:60:03' |
| 192.168.10.116:5050 - Truncated incorrect time value: '01-02-03 10:60:03' |
+-------------------------------------------------------------------------+
2 row in set

取值:[0|1]
默认值:0
说明:拉表评估时,当该值不为0 时,若小表拉表的数据行数大于该值,则进行
HASH 重分布JOIN。该参数的默认值是0,即不需要判断阈值。
修改方式:
可使用set 语句修改值也可在配置文件中修改值。
适用于session、
global
范围均可。

GBase 8a MPP Cluster 参数手册
文档版本2022-06-07
南大通用数据技术股份有限公司
65