介绍GBase8a⽀持的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 不能回滚的语句sql连接不上服务器
九 数据库管理语句
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 | utine_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) O
N 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 级传递。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论