返回首页

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

更新日期:2024年09月11日

删除EVENT。
语法格式
DROP EVENT [IF EXISTS] event_name;
参数说明
event_name:event 的名字,名称最大长度64 字节

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 671

GBase 8a MPP Cluster 的EXPLAIN 命令显示正确的查询计划,对于CBO(基于
成本的优化)的计划,显示每个步骤的评估结果,包括成本、记录条数、记录宽
度、选择率。用户可以在执行SQL 之前查看计划。
语法:

查看SELECT 的查询计划:
EXPLAIN/DESC [extended/partitions] SELECT……

查看CTE 的查询计划:
EXPLAIN/DESC [extended/partitions] WITH……SELECT

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1142
注意
EXPLAIN 与DESC 等价,因此可以互换,用来查看SELECT 的查询计划。

使用 CREATE TEMP TABLE 语句在当前数据库中创建临时表。
语法

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 437

元素
描述
限制
语法
table 声明表的名称
在会话中必须是唯一的。请参阅
命名临时表
标识符
用法
您必须具有数据库上的 Connect 特权才能创建临时表。该临时表只对创建它的用
户可见。
如果您包含了可选的 IF NOT EXISTS 关键字,则当指定名称的临时表已经在当
前数据库中注册过时,数据库服务器不采取任何操作(而不是向应用程序发送异
常)。
您还可以使用 CREATE TEMP TABLE 语句在临时表上定义索引和约束。
在 DB-Access 中,如果您设置了 DBANSIWARN 则在 CREATE SCHEMA 语
句外使用 CREATE TEMP TABLE 语句会生成警告。
在 ESQL/C 中,如果您使用 -ansi 标志或设置 DBANSIWARN 环境变量则
CREATE TEMP TABLE 语句生成警告。
命名临时表
临时表是与会话而不是数据库关联在一起。创建临时表时,直到删除第一个临时
表并结束会话之前都不能使用同样的名称创建另外一个临时表(即使是在另一个
数据库中)。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 438
临时表的名称必须遵循 SQL 标识符的要求,但是它不能是限定数据库对象的名
称。当您使用 CREATE TEMP TABLE 语句创建临时表时,您不能指定任意授权
标识符作为它的所有者。不像永久表,临时表不能在用 owner 名称,或 database
名称,或 database server 名称的限定其标识符的 SQL 语句中被引用。
临时表的名称必须与当前数据库中任何其它表、视图、序列对象或同义词的名称
都不相同。否则,此临时表会优先于会话中其它任何具有相同名称的永久表。但
是,您在此声明的临时表名称不必不同于同一数据库中其它用户声明的临时表名
称。
如果您翻出一个跨数据库的 DML 语句,它引用了一个远程的永久表,但您本地
的数据库中包含一个相同名称的临时表,DML 语句访问本地的临时表,而非远程
的临时表。
CREATE TEMP TABLE 语句的列定义规范
使用 CREATE TEMP TABLE 语句的 Column Definition 段声明临时表的单列的
数据类型和名称(以及缺省值和约束)。
列定义

元素
描述
限制
语法
column 表中列的名称
在它的表中必须唯一
标识符
CREATE TEMP TABLE 语句的这一部分与 CREATE TABLE 语句的相应部分几
乎相同。不同之处在于临时表只允许更少的约束类型:

不能在列上定义引用约束。

数据类型不能是 IDSSECURITYLABEL。

临时表不支持 SECURED WITH label 选项。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 439
与创建永久表一样,对于内置字符类型的列(如 CHAR 、LVARCHAR 、
NCHAR 、NVARCHAR 或 VARCHAR),任何显式或缺省存储大小规范都以字
节为单位进行解释,除非 SQL_LOGICAL_CHAR 配置参数设置为启用数据类型
声明的逻辑字符语义。有关支持多字节代码集的语言环境(如 UTF-8)中
SQL_LOGICAL_CHAR 设置的影响的详细信息,请参阅 GBase 8s 管理员参考手
册,其中单个逻辑字符肯需要多个字节的存储空间。
单列约束格式
使用单列约束格式为临时表中的单列创建一个或多个数据完整性约束。
单列约束格式
它是 CREATE TABLE 语句支持的单列约束格式语法的子集。
您可以在这些章节中找到特定约束的详细信息。
约束 有关更多信息,请参阅
CHECK CHECK 子句
DISTINCT 使用 UNIQUE 或 DISTINCT 约束
NOT NULL 使用 NOT NULL 约束
NULL 使用 NULL 约束
PRIMARY KEY 使用 PRIMARY KEY 约束
UNIQUE 使用 UNIQUE 或 DISTINCT 约束
您定义在临时表上的约束总是启用的。
多列约束格式
使用多列约束格式将一个或多个列用约束关联起来。它是单列约束格式的备选方
案,允许您用约束将多列关联起来 。
多列约束格式

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 440

元素
描述
限制
语法
column 列或放置约束的列的名

在表中必须是唯一的,但是在同
一数据库中的不同表可以具有相
同的名称
标识符
它是 CREATE TABLE 语句所支持的多列约束格式语法的子集。
它是 CREATE TEMP TABLE 的单列约束格式的备选方案,可用约束将多个列关
联起来。您定义在临时表上的约束总是启用的。
您可以在这些章节中找到特定约束的详细信息。
约束
有关更多信息,请参阅
有关示例,请参阅
CHECK
CHECK 子句
在多个列上定义检查约束
DISTINCT
使用 UNIQUE 或 DISTINCT
约束
多列约束格式的示例
PRIMARY KEY
使用 PRIMARY KEY 约束
定义组合的主键和外键
UNIQUE
使用 UNIQUE 或 DISTINCT
约束
多列约束格式的示例
另见唯一约束和唯一索引的区别章节。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 441
使用 WITH NO LOG 选项
使用 WITH NO LOG 选项减少临时表的事务日志记录的开销。如果您指定 WITH
NO LOG,在临时表上的数据操纵语言(DML)操作将不包含在事务日志记录
中。
您在临时数据库中创建的所有的临时表都需要 WITH NO LOG 关键字。在一个集
群环境中,当您在辅助服务器上创建临时表时需要 WITH NO LOG 关键字。
如果 ONCONFIG 参数 TEMPTAB_NOLOG 设置成 1 ,则临时表的日志记录被
禁用,且所有的临时表都缺省为非日志记录的。 该项设置可以提高使用临时表的
操作(例如,HDR 操作)的性能。当 TEMPTAB_NOLOG 设置禁用临时表的日
志记录时,不需要 WITH NO LOG 选项。有关如何设置 TEMPTAB_NOLOG 参
数的更多信息,请参阅 GBase 8s 管理员参考手册。
如果在不使用日志记录的数据库中使用 WITH NO LOG 选项,则 CREATE
TEMP TABLE 语句的 WITH NO LOG 关键字不会生效。如果您的数据库不支持
事务日志记录,所有的表的行为都将表现为已经指定了 WITH NO LOG 选项。
ALTER TABLE 语句不能更改临时表的日志记录的状态。一旦您关闭了临时表上
的日志记录,则将无法再打开它;因此,临时表是始终记录日志的或从不记录日
志的。
以下临时表在使用日志记录的数据库中不记录日志:
CREATE TEMP TABLE tab2 (fname CHAR(15), lname CHAR(15))
WITH NO LOG;
类似于所有的数据定义语句(DDL)以上 CREATE TEMP TABLE 语句创建 tab2
是日志记录的。但是,WITH NO LOG 关键字将阻止任何 tab2 上的 DELETE 、
INSERT 、LOAD 、MERGE 、SELECT 、UNLOAD 或 UPDATE 操作的事务
日志记录。
临时表的存储选项
使用 CREATE TEMP TABLE 语句的存储选项指定表的存储位置和分布方案。它
是 SQL ANSI/ISO 标准的扩展。
存储选项

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 442

元素
描述
限制
语法
dbspace
存储临时表的 Dbspace 或临时
dbspace
必须已经存

标识符
extspace onspaces 被指定给数据库服务器以
外的存储区域的名称
必须已经存

请参阅文档
以了解您使
用的存取方
法。
只有包含 BLOB 或 CLOB 列的临时表可以包含 PUT 子句作为存储选项。
如果您在 IN 关键字之后指定一个临时 dbspace ,则数据库服务器不会执行任何
该临时表的逻辑日志记录或物理日志记录。您无法镜像一个临时 dbspace。
如果您没有指定 extent 大小选项,则缺省的 extent 大小是 8 页面。
要在临时表上创建一个分片的、唯一的索引,您必须在 CREATE TEMP TABLE
语句中为此临时表指定一个显式的基于表达式的分布方案。(不支持通过
ROUND ROBIN 分片索引,对使用 LIST 或 INTERVAL 存储分区策略的表上的
唯一索引,自动通过 LIST 或 INTERVAL 分片。)
临时表的存储位置
通过 CREATE TEMP TABLE 语句指定的分布方案(可以使用 IN 子句或
FRAGMENT BY 子句)优先于 DBSPACETEMP 环境变量或 DBSPACETEMP
配置参数指定的信息。
对于您没有指定显式分布方案的临时表,它的存储位置取决于 DBSPACETEMP
环境变量(或 DBSPACETEMP 配置参数)的设置。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 443

如果没有设置 DBSPACETEMP 和 DBSPACETEMP ,则所有在建立的
数据库(或者 rootdbs ,如果数据库服务器不在另一个 dbspace 中建
立)的同一 dbspace 中创建的临时表都不会有分片。

如果临时表只有一个 dbspace 是通过 DBSPACETEMP 指定(或通过
DBSPACETEMP ,如果没有设置 DBSPACETEMP ),则将在指定的
dbspace 中创建所有的临时表而不分片。

如果 DBSPACETEMP (或者 DBSPACETEMP ,如果
DBSPACETEMP 没有设置)为临时表指定了两个或多个dbspace ,则每
个临时表将在指定的其中一个 dbspace 中创建。
在不日志记录的数据库中,每个临时表都创建于一个临时的 dbspace 中;
在支持事务日志记录的数据库中,临时表创建于标准 dbspace 中。数据库
服务器跟踪哪个 dbspace 最近被使用,并且当它接收到下一个要分配临时
存储的请求时,数据库服务器使用下一个可用的 dbspace (以循环的方
式)在 dbspace 之间平均分配 I/O 操作。
例如,如果您在日志记录的数据库中创建了三个临时表,DBSPACETEMP 指定
tempspc1 、tempspc2 和 tempspc3 作为该临时表的缺省 dbspace ,第一个在名为
tempspc1 的dbspace 中,第二个在 tempspc2 中,第三个在 tempspc3 中(如果
这些是临时存储的唯一请求)。
使用 SELECT INTO TEMP 和 WITH NO LOG 创建的临时分片将
DBSPACETEMP 配置参数或 DBSPACETEMP 环境变量列出的 dbspace 之间传
播。因此,指定多个 dbspace 的 DBSPACETEMP (或者 DBSPACETEMP)设
置可生成跨临时 dbspace 中所有 dbspace 循环分片。
如您创建了临时表并指定 WITH NO LOG ,则临时表上的操作将不会包含在事务
日志记录中。如果 DBSPACETEMP 列表中有一个日志记录的空间,则使用
SELECT .. INTO TEMP WITH NO LOG 选项创建的临时表将在非日志记录的临时
dbspace 中通过循环分布方案分片。例如,如果来自 10 个 dbspace 的列表,只
有一个 dbspace 是日志记录,则该表在其它 9 个非日志记录的临时 dbspace 中
按照循环分布方案分片。
以下示例显示如果将数据插入到名为 result_tmp 的临时表中,并将用户定义的
能返回多行的函数(f_one)的结构输出到文件中:

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 444
CREATE TEMP TABLE result_tmp( ... );
INSERT INTO result_tmp EXECUTE FUNCTION f_one();
UNLOAD TO 'file' SELECT * FROM result_tmp;
临时表和永久表之间的差异
与永久表相比,临时表在以下方面不同:

可用的约束类型更少。

您可以指定的选项更少。

它们对于其它用户或会话不可见。

不出现在系统目录中。

不能保存它们,如临时表的持续时间中所述。
DB-Access 的 INFO 语句和 Info Menu 选项无法引用临时表。
临时表的持续时间
临时表的持续时间取决于它是否进行日志记录。
进行日志记录的临时表将一直存在,直到以下情况发生:

应用程序断开连接。

对临时表发出 DROP TABLE 语句。

数据库已关闭。
当这些事件中的任意一件发生时,将删除临时表。
非日志记录的临时表包含那些用 CREATE TEMP TABLE 的 WITH NO LOG 选
项创建的表。
非日志记录的临时表将一直存在,直到以下情况发生:

应用程序断开连接。

对临时表发出 DROP TABLE 语句。

数据库已关闭,且非日志记录的临时表包含至少一个用户定义类型的列,
或者一个内置的透明数据类型( GBase 8s 内置的透明数据类型包括
BLOB, BOOLEAN 、CLOB 、LVARCHAR 和
IDSSECURITYLABEL。)

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 445
如果非日志记录的临时表不包含任何 UDT 或内置的透明数据类型的列,则当应
用程序仍保留连接时,您可以使用此表将数据从一个数据库传输到另一个数据
库,因为当数据库已关闭时该表并未销毁。如果要传输的数据包含 UDT 或内置
透明数据类型,则您必须使用永久表(或者一些其它策略)。