介绍 GBase 8a 支持的 SQL 语法(下篇)

七 GBase 8a 其他语句

7.1 DESCRIBE

语法格式: {DESCRIBE | DESC} [database_name.] [col_name | wild] DESCRIBE 提供一个表中的列信息。它是 SHOW COLUMNS FROM 的简便形式。该语句也可以显示视图信息。参见 SHOW COLUMNS 语法。 col_name 可以是一个列名称,或一个包含“%”和“_”的通配符的字符串, 用于获得对于带有与字符串相匹配的名称的各列的输出。没有必要在引号中包 含字符串,除非其中包含空格或其它特殊字符。

7.2 USE
 

语法格式: USE 使用 database_name 数据库作为以后查询的缺省数据库。数据库保持为当前 数据库,直到该会话结束或另一个 USE 语句发出。
 

7.3 KILL

语法格式: KILL [CONNECTION | QUERY] thread_id 用 SHOW PROCESSLIST 语句可以查看正在运行的线程,而用 KILL thread_id 语句可以终止一个线程。 参数说明如下: l KILL CONNECTION 和没选项修饰的 KILL相同,它用给定的 thread_id 终止相关的连接。 l KILL QUERY 中止连接当前执行的语句,但是不中止该连接本身。 如果有 PROCESS 权限,可以查看所有线程。 如果有 SUPER 权限,可以终止所有线程和语句。否则,用户只能查看并终 止自己的线程和语句。当用户执行一个 KILL 命令,对应线程的 thread-specific 标志被置位。在大 多数情况下,结束线程可能花费一些时间,因为只有在特定时期才检查该标志。 在 SELECT,ORDER BY 和 GROUP BY 循环中,在读取一部分行后被检查 kill 标志。如果 kill 标志被置位,该语句终止。 在 ALTER TABLE 期间,在从源表中读取表的每一个部分前检查 kill 标志。 如果被置位,该语句中止并且删除临时表。

7.4 SET

语法格式: SET [GLOBAL | SESSION] = value 参数说明如下: SESSION:省略掉 SESSION 关键字,也就是默认情况下,是会话(SESSION) 级别的,则变量值在会话结束之前或重赋值之前是保持不变的。 GLOBAL:设置为此关键字时,新的变量值被用于新的连接当中。

八  GBase 8a 事务和锁语句

8.1 START TRANSACTION,COMMIT 和 ROLLBACK 语法
 

START TRANSACTION | BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET AUTOCOMMIT = {0 | 1} START TRANSACTION 或 BEGIN 语句可以开始一项新的事务。 COMMIT 可以提交当前事务,是变更成为永久变更。 ROLLBACK 可以回滚当前事务,取消其变更。 SET AUTOCOMMIT 语句可禁用或启用默认的 AUTOCOMMIT 模式,用于 当前连接。 缺省情况下 GBase 8a 运行在 AUTOCOMMIT=1 的模式下。这就意味着,当 用户执行完一个更新时,GBase 8a 将立刻将更新存储到磁盘上。 通过下面的命令,用户可以设置 GBase 8a 为非 AUTOCOMMIT 模式: SET AUTOCOMMIT=0; 通过把 AUTOCOMMIT 变量设置为零,禁用 AUTOCOMMIT 模式之后,您 必须使用 COMMIT 把变更存储到磁盘中,或着如果您想要放弃从事务开始进行 以来做出的变更,使用 ROLLBACK。 如果您想要对于一个单一系列的语句禁用 AUTOCOMMIT 模式,则您可以 使用 START TRANSACTION 语句。 使用 START TRANSACTION,AUTOCOMMIT 仍然被禁用,直到您使用 COMMIT 或 ROLLBACK 结束事务为止。然后 AUTOCOMMIT 模式恢复到原来 的状态。注意:GBase 8a 只支持 INSERT 级别的事务。
 

8.1.1 INSERT 事务示例
 

8.1.2 UPDATE 事务示例

8.1.3 快速 UPDATE 模式事务示例  

快速 UPDATE 模式,其本质就是先删除数据,然后在表的末尾追加新的纪 录。在数据量大时,可以开启并行,以提高效率。 当设置 SET gbase_fast_update=1;时,表明开启了快速 UPDATE 模式。

8.1.4 DELETE 事务示例

8.2 不能回滚的语句

九  数据库管理语句   

9.1 帐号管理语句 

GBase 8a 有两种用户: l 本地用户(user@localhost),这个用户是 GBase 服务器上的用户,所 谓的 localhost 指的就是服务器本地。 可以通过这个用户在服务器上登录到 GBase 8a 系统,并执行权限下的操作, 一般该用户拥有 root 权限,也可以创建一个新的本地用户,分配较低的权限。 执行一些简单的操作。 l 远程用户(user@%),这个用户是客户机由于登录服务器而使用的用 户,所谓的“%”指的是远程任何机器。如果把“%”写为一个具体的 IP 地址,则是指定远程某台 IP 地址的用户。 可以通过这个用户在客户机上通过客户端工具登录到服务器执行操作。一 般这类用户权限较低,除非被分配高级权限。

9.1.1 CREATE USER

语法格式: CREATE USER user [IDENTIFIED BY [password]] 参数说明如下: user:帐号名称。 password:帐号密码。 CREATE USER 语句创建一个新的 GBase 8a 帐号。执行此操作,用户必须 有全局 CREATE USER 权限或 system 数据库的 INSERT 权限。对每一个帐号, CREATE USER 在 gbase.user 表中创建一条新的记录,这个帐号初始只有登录数 据库的权限。如果这个用户已经存在,就会发生错误。 CREATE USER 语句每次仅能添加一个用户帐号,不能同时增加多个用户 帐号。 通过可选择的 IDENTIFIED BY 语句可以给帐号赋予一个密码。特别注意的 是,密码设置为纯文本格式可以省略 PASSWORD 关键字。

9.1.2 DROP USER

语法格式: DROP USER user ; 功能: 删除 GBase 8a 帐号。 要使用该语句必须有全局 DROP USER 权限或 gbase 数据库 DELETE 权限。 DROP USER 不会自动关闭任何打开的用户会话。更确切地说,当存在使用 此用户打开的会话时,删除此用户并不会影响这些已打开会话的访问权限,直 到这些会话关闭。

9.1.3 RENAME USER

RENAME USER old_user TO new_user RENAME USER 语句用来重命名存在的 GBase 8a 帐号。要使用该语句,必 须有全局 CREATE USER 权限或对 gbase 数据库的 UPDATE 权限。如果旧的帐号不存在或是新的帐号已经存在,那么就会报错。可以按照和 GRANT 语句同 样的方法给 old_user 和 new_user 赋值。

9.1.4 SET PASSWORD

SET PASSWORD [FOR user] = PASSWORD('newpassword') FOR user:指定修改密码的帐户名称,如果省略,就是进行修改当前登录 GBase 8a 帐户的的密码。 PASSWORD('newpassword '):指定帐户的新密码;

9.2 权限管理

9.2.1 GRANT 和 REVOKE

语法格式: GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user [IDENTIFIED BY [PASSWORD] 'password'] [WITH with_option ...] object_type: TABLE | FUNCTION | PROCEDURpriv_level: * | *.* | database_name.* | database_name.table_name | table_name | database_name.routine_name REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level FROM user REVOKE ALL PRIVILEGES, GRANT OPTION FROM user

9.2.2 权限级别

GRANT 和 REVOKE 语句允许系统管理员创建 GBase 8a 用户帐号,并处理 用户权限的赋予与收回。

说明: 1、 数据库权限分为数据库对象操作权限等以下 5 类: l 数据库对象操作类权限; l 数据操作类权限; l 存储过程、自定义函数执行权限; l 数据查看类权限; l 数据库权限(包含用户管理)管理权限。 表格中的“ALL”是个特殊权限不在上述分类中,它是把 GRANT OPTION 之外的所有权限赋予指定用户。 2、 要使用 GRANT 或 REVOKE,必须拥有 GRANT OPTION 权限,并且 拥有授予或收回权限。 对于 GRANT 和 REVOKE 语句,priv_level 可以授予不同级别的权限: 1、 全局级(Global level) 全局权限应用到给定服务器的所有数据库上。这些权限存储在 gbase.user 表中。GRANT ALL ON *.*和 REVOKE ALL ON *.*只可以授予和收回全局权限。 2、 数据库级(Database level)数据库权限应用于给定数据库的所有对象上。这些权限存储在 gbase.db 和 gbase.host 表中。GRANT ALL ON db_name.*和 REVOKE ALL ON db_name.*只 可以授予和收回数据库权限。 3、 表级(Table level) 表权限应用于给定表的所有列。这些权限存储在 gbase.tables_priv 表中。 GRANT ALL ON db_name.tbl_name 和 REVOKE ALL ON db_name.tbl_name 只可 以授予和收回表权限。 4、 列级(column level) 列权限应用于表中的指定列。这些权限存储在 gbase.tables_priv 表中。 GRANT SELECT,INSERT,UPDATE(column) ON db_name.tb1_name 和 REVOKE SELECT(column) ON db_name.tb1_name 只可以授予和收回列权限。

9.3 SHOW 管理语句

SHOW 以多种形式提供有关服务器的数据库,表,列或状态方面的信息。 这些形式描述如下:SHOW [FULL] COLUMNS FROM table_name [FROM database_name] [LIKE 'pattern'] SHOW CREATE DATABASE database_name SHOW CREATE FUNCTION [database_name.]fun_name SHOW CREATE PROCEDURE [database_name.]proc_name SHOW CREATE TABLE [database_name.]table_name SHOW CREATE VIEW [database_name.]view_name SHOW DATABASES [LIKE 'pattern'] SHOW ERRORS [LIMIT [offset,] row_count] SHOW FUNCTION STATUS SHOW GRANTS FOR user_name SHOW INDEX FROM table_name [FROM database_name] SHOW OPEN TABLES FROM database_name] [LIKE 'pattern'] SHOW PRIVILEGES SHOW PROCEDURE STATUS SHOW [FULL] PROCESSLIST SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern'] SHOW TABLE STATUS SHOW [OPEN] TABLES [FROM database_name] [LIKE 'pattern'] SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern'] SHOW WARNINGS [LIMIT [offset,] row_count] 如果一个给定的 SHOW 语句的语法包括一个 LIKE 'pattern'部分,则'pattern' 是一个可以包含 SQL “%”和“_”通配符的字符串。对于把语句输出值限定为匹配值,本样式是有用的。

9.3.1 SHOW COLUMNS

SHOW [FULL] COLUMNS FROM table_name [FROM database_name] [LIKE 'pattern'] SHOW COLUMNS 显示一个给定表中列的信息。该语句在视图中也适用。 列类型有可能与用户在 CREATE TABLE 语句中所期望的类型不同,GBase 8a 有时会在创建或更改表时改变列的类型。这种情况发生的条件在列规范的隐 式变更中介绍。 关键字 FULL 产生的输出包括用户对每个列所拥有的权限。FULL 也显示所 有列注释信息。 可以在 table_name FROM database_name 语法中使用 database_name.table_name,下面的两个语句是等价的: SHOW COLUMNS FROM t FROM test; SHOW COLUMNS FROM test.t; SHOW FIELDS 和 SHOW COLUMNS 的作用相同。

9.3.2 SHOW CREATE DATABASE

SHOW CREATE {DATABASE | SCHEMA} database_name 显示创建了给定数据库的 CREATE DATABASE 语句。可以用 SHOW CREATE SCHEMA 语句实现相同的功能。

9.3.3 SHOW CREATE FUNCTION

SHOW CREATE FUNCTION [database_name.]fun_name 显示创建了给定函数的 CREATE FUNCTION 语句。

9.3.4 SHOW CREATE PROCEDURE

SHOW CREATE PROCEDURE [database_name.]proc_name 显示创建了给定存储过程的 CREATE PROCEDURE 语句。在显示信息中包含 6 列,每列的具体信息如下。 l Function:fn_count l sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_AUTO_VALUE_ON_ZERO,STRIC T_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_AUTO_CREATE_USER,NO_ENG INE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH l Create Function:CREATE DEFINER="root"@"%" FUNCTION "fn_count"(param varchar(10)) RETURNS int BEGIN SELECT COUNT(*)/5 INTO @count FROM ssbm.customer WHERE c_nation= param; RETURN @count; END l character_set_client:utf8 l collation_connection:utf8_general_ci l Database Collation:utf8_general_ci

9.3.5 SHOW CREATE TABLE

SHOW CREATE TABLE [database_name.]table_name 显示创建了给定表的 CREATE TABLE 语句。该语句在视图中也使用。SHOW CREATE TABLE 根据 SQL_QUOTE_SHOW_CREATE 选项的值显 示表和列的名字。 通过参数 gbase_show_ident_case_sensitive 可以控制显示的列名大小写,默 认与源表结构中列名大小写一致。具体参考《GBase 8a 配置手册》中该参数说 明。

9.3.6 SHOW CREATE VIEW

SHOW CREATE VIEW [database_name.]view_name 这个语句显示地使用 CREATE VIEW 创建视图。

9.3.7 SHOW DATABASES

SHOW {DATABASES | SCHEMAS} [LIKE 'pattern']  SHOW DATABASES 列出在 GBase 8a 服务器主机上的数据库。除非拥有全 局的 SHOW DATABASES 权限,用户只能看到自己拥有权限的数据库。

9.3.8 SHOW ERRORS

SHOW ERRORS [LIMIT [offset,] row_count] SHOW COUNT(*) ERRORS 语句和 SHOW WARNINGS 相似,只是显示的 内容不是警告和注意,而是仅仅显示错误。 LIMIT 子句与在 SELECT 语句中语法相同。参考 SELECT 语法。 SHOW COUNT(*) ERRORS 语句显示错误的数目,也可以从 error_count 变 量中获得错误数: SHOW COUNT(*) ERRORS; SELECT @@error_count;

9.3.9 SHOW FUNCTION STATUS

SHOW FUNCTION STATUS 显示已经创建成功的函数的状态。

9.3.10 SHOW GRANTS

SHOW GRANTS FOR user_name 该语句列出允许一个 GBase 8a 用户帐号复制权限的 GRANT 语句。

9.3.11 SHOW INDEX

SHOW INDEX FROM table_name [FROM database_name] 该语句列出选定数据库中指定表的索引。

9.3.12 SHOW PROCEDURE STATUS

SHOW PROCEDURE STATUS SHOW ROCEDURE STATUS 显示已经创建成功的存储过程的状态。

9.3.13 SHOW PROCESSLIST

SHOW [FULL] PROCESSLIST SHOW PROCESSLIST 显示正在运行的线程。如果有 SUPER 权限,可以看 到所有线程。否则,用户只能看到自己的线程(就是与用户使用的 GBase 8a 帐 号相关的线程)。如果不使用 FULL 关键字,只显示每个查询的前 100 个字符。 该语句报告TCP/IP连接的主机名,可以更容易看出每个客户端的运行状态, 形式为 host_name:client_port。 如果用户得到“too many connections”错误消息,并且想要了解正在发生的 情况,本语句是非常有用的。GBase 8a 为拥有 SUPER 权限的帐号保留一个额外 的连接,以确保管理员总是能够连接并检验系统(假设用户不给所有用户SUPER 权限)。 SHOW PROCESSLIST 输出通常显示如下一些内容。
 

9.3.14 SHOW STATUS

SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern'] SHOW STATUS 提供状态信息。 下面显示了部分输出。变量名称列表和变量的值可能和用户的服务器上的不同。

9.3.15 SHOW TABLES

SHOW [FULL | DISTRIBUTION] TABLES [FROM database_name] [LIKE 'pattern'] SHOW TABLES 列出一个给定数据库的非临时表。

9.3.16 SHOW TABLE STATUS

SHOW TABLE STATUS [FROM database_name] [WHERE name = 'talbe_name'] SHOW TABLE STATUS 列出所有表或者指定数据库中表的当前状态的信息。

9.3.17 SHOW VARIABLES
 

SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern'] SHOW VARIABLES 显示一些 GBase 8a 系统变量的值。 用 GLOBAL 选项,能得到连接到 GBase 8a 的新连接的变量值。用 SESSION 选项,能得到当前连接的变量值。如果不使用选项,缺省值为 SESSION。LOCAL 和 SESSION 意义相同。 下面是部分输出结果,变量和它们的值可能和用户的服务器不同。

9.3.18 SHOW WARNINGS

SHOW WARNINGS [LIMIT [offset,] row_count] SHOW COUNT(*) WARNINGS SHOW WARNINGS 显示由最后一个语句产生的错误,警告和注意信息。 当最后一个使用表的语句没有产生消息时,SHOW WARNINGS 不显示任何消 息。相关的 SHOW ERRORS 语句只显示错误信息。参考 SHOW ERRORS 语法。每个使用了表的新语句重置消息列表。 SHOW COUNT(*) WARNINGS 语句显示错误,警告和注意信息的数量,从 变量 warning_count 也可以得到相同的值: SHOW COUNT(*) WARNINGS; SELECT @@warning_count; warning_count 的值可能比用 SHOW WARNINGS 显示的值大,如果 max_error_count 系统变量被设定过小,以至于无法存储全部信息。 LIMIT 子句同 SELECT 语句中使用方法相同。 GBase 8a 服务器发回最后一个语句产生的错误,警告和注意信息的数目。

十 HINT 机制

在 SQL 执行过程中,有时系统自动优化的方式并不是最优的,需要 手工添加 hint 来提高查询效率。具体语法如下: { select|… } /*+ [local] var_name1(value1),var_name2(value2) */ from ... OR { select|… } /*+ [local] var_name1(value1) */ /*+ var_name2(value2) */ from ... 语法说明: 1) select 等是标识一个语句块开始的关键字,包含提示的注释只能出 现在这些关键字的后面,否则提示无效。 目前 GBase 8a 中支持 hint 的关键字如下:select、replace、 initnodedatamap、refreshnodedatamap、rebalance、create table、 create consumer group 组名(组的注释)、create resource pool 资 源池名、create resource plan 计划名、create resource directive 指 令名、create database、alter table、alter database、rename table、 drop table、drop database、insert、merge(into)、update、delete、 truncate(table)、show、flush、refresh、load、set、release。hint 要添加在这些关键字后面,括号中的关键字是可以省略的。其中 set、show 不支持 hint 统一机制,只支持以关键字方式使用的 hint。 create table as select 和 insert select 由 于 使 用 一 个 select_lex 结构,因此 hint 写在 create table 后面或 insert 后面和 写在 select 后面是等价的。 2) “+”号表示该注释是一个 hint,该加号必须立即跟在”/*”的后面, 中间不能有空格。 3) 如果包含多个提示,则每个提示之间需要用一个逗号隔开或者使用多 个 hint 结构。4) var_name 只能是可修改的 session 变量,global 变量或只读变量在 hint 中不生效。 5) value 值只能是常量,不支持表达式。 注: 1) 进入客户端的命令要添加–c 参数,否则 hint 不起作用。GBase client 默认是跳过提示,对提示不解析,加上-c 参数,client 将提 示发送给 GBase server 进行解析。 2) local 关键字是可选参数,表示 hint 只属于当前的 select 级,不会 往后面的 select 级传递。

Guess you like

Origin blog.csdn.net/weixin_62941622/article/details/121628870