GBase 8a学习总结

更新时间:2023-03-11 22:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

技术产品规范/项目名称

设计方案

朗新云商项目开发部

2017年10月

项目设计方案

目录

1

概述 .................................................................................................................... 1 1.1 项目介绍 .......................................................................... 错误!未定义书签。

1.1.1

三级..................................................................................... 错误!未定义书签。

I

项目设计方案

修改履历

版本号 修改编号 更改简要描述 更改人 批准人

1

项目设计方案

1 GBase数据类型及SQL语句 1.1 GBase 8a数据类型

GBase 8a MPP Cluster 支持SQL92 中定义的绝大多数数据类型,同时也支持SQL99 和SQL2000 中定义的数据类型。

GBase 8a MPP Cluster 支持的数据类型,如下表所示: GBase 8a MPP Cluster的数据类型 数值型 TINYINT INT BIGINT FLOAT DOUBLE DECIMAL 字符型 CHAR VARCHAR TEXT 二进制类型 日期和时间型 BLOB DATE DATETIME TIME TIMESTAMP 1.1.1

数值类型

占用字节 1 2 4 8 4 8 2

GBase 8a MPP Cluster 支持的数值类型,如下表所示: 类型名称 最小值 最大值 TINYINT SMALLINT INT(INTEGER) BIGINT FLOAT DOUBLE -127 -32767 -2147483647 -9223372036854775806 -3.40E+38 -1.7976931348623157E+308 127 32767 2147483647 9223372036854775806 3.40E+38 1.7976931348623157E+项目设计方案

DECIMAL[(M[,D])] 1.1.2

-(1E+M -1)/(1E+D) 308 (1E+M -1)/(1E+D) 动态计算 字符类型

GBase 8a MPP Cluster 目前支持三种字符类型,如下表所示: 类型名称 CHAR 最大长度(字符) 255 备注 不足指定长度,右边空格补充 VARCHAR 10922 不足指定长度,不会补充 TEXT 10922 不能为它指定DEFAULT 值 1.1.3

二进制数据类型

GBase 8a MPP Cluster 目前支持以下二进制数据类型,如下表所示: 类型名称 BLOB 最大长度(字节) 32767 使用BLOB 数据类型,有如下约束: ? BLOB 列支持32KB 的存储容量。

? 创建表时,BLOB 列不可以有DEFAULT 值。 ? 查询语句中,BLOB 列不支持过滤条件。 ? 查询语句中,BLOB 列不支持OLAP 函数。 1.1.4

日期和时间类型

最小值 0001-01-01 0001-01-01 最大值 9999-12-31 9999-12-31 格式 YYYY-MM-dd YYYY-MM-dd HH:MI:SS.ffffff HHH:MI:SS YYYY-MM-DD 3

类型名称 DATE DATETIME 00:00:00.000000 23:59:59 TIME TIMESTAMP -838:59:59 1970-01-01 838:59:59 2038-01-01

项目设计方案

08:00:01 TIMESTAMP 使用限制:

00:59:59 HH:MI:SS 以下限制说明,是针对TIMESTAMP 数据列自动更新时的场景:

1. 在一张表中,只能自动更新表中第一个出现的TIMESTAMP 列,并且必 须使用DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 来定义。

2. 在一张表中,使用DEFAULT CURRENT_TIMESTAMP ON UPDATE

CURRENT_TIMESTAMP 来指定TIMESTAMP 列自动更新时,只能使用一次, 且用于第一个TIMESTAMP 列。

3. 从不同节点发起的SQL 语句,TIMESTAMP 列更新的时间为发起节点的 本地时间;如果从不同的发起点发起SQL,而各个节点的本地时间又 不同步,则无法保证TIMESTAMP 列更新值一致。

1.2 SQL语言基础

本章对GBase 8a MPP Cluster 的SQL 语句的下列元素进行讨论: 数值,例如字符串和数字; 标识符,比如表和列名字; 用户和系统变量; 注释。 1.2.1

数值

这部分主要介绍在GBase 8a MPP Cluster 中使用的数值。包括字符串,数字,十六进制值,布尔值和NULL。 1.2.1.1 字符串

字符串是多个字符组成的一个字符序列,由单引号?'?或双引号?\?字符包围。 例如:'a string'

在一个字符串中,确定的序列具有特殊的含义,每个序列以反斜线符号?\\?开头,称为转义字符。GBase 8a MPP Cluster 识别下列转义字符: 转义字符 \\0 描述 ASCII 0 (NUL)字符。 4

项目设计方案

\\’ \\” \\b \\n \\r \\t \\\\ ASCII 39 单引号?'?字符。 ASCII 34 双引号?\?字符。 ASCII 8 退格符。 ASCII 10 换行符。 ASCII 13 回车符。 ASCII 9 制表符(TAB)。 ASCII 92 反斜线?\\?字符。 如果用户想要把二进制数据插入到BLOB 字段中,下列字符必须由转义序列表

示: 字符 NUL 描述 NUL byte (ASCII 0)。需要用?\\0?(一个反斜线和一个ASCII?0?字符)表示。 \\ ’ ” 反斜线(ASCII 92)。需要用?\\\\?表示。 单引号(ASCII 39)。需要用?\\'?表示。 双引号(ASCII 34)。需要用?\\\?表示。 1.2.1.2 数字

整数被表示为一个数字序列。浮点数使用?.?作为一个十进制数的分隔符。这两个数字类型可以前置?-?以表示一个负值。

有效整数的示例: 1221、0、-32 有效浮点数的示例:

-32032.6809E+10、148.00E+13 1.2.1.3 十六进制值

GBase 8a MPP Cluster 支持十六进制数值。 在数字的上下文语境中,它们作为等价于整数使用。

在字符串的上下文语境中,它们作为一个字符串,每一对十六进制数字被解释为对应ASCII 码的字符。

十六进制转字符,表达式?x'hexstring'?是基于标准SQL 的,表达式0x 是基于ODBC 的。二者是等价的。使用HEX()函数可以将一个字符串或数值转换为一

5

项目设计方案

个十六进制格式的字符串。 1.2.1.4 布尔值

常量TURE 相当于1,而常量FALSE 相当于0。 常量的名字对大小写不敏感。

示例1:查询TRUE 和FALSE 对应的值。

gbase> SELECT TRUE, true, FALSE, false FROM t; +------+------+-------+-------+ | TRUE | TRUE | FALSE | FALSE | +------+------+-------+-------+ | 1 | 1 | 0 | 0 | +------+------+-------+-------+ 1 row in set 1.2.1.5 NULL值

NULL 不区分大小写。

注意:NULL 值不同于数字类型的0 或字符串类型的空串。 1.2.2

数据库、表、列和别名

数据库、表、列和别名等都是标识符,这部分描述GBase 8a MPP Cluster中标识符允许的语法规则。

下面的表描述了对于每一个类型标识符允许的最大长度和可使用的字符。 标识符 数据库 最大长度(字符) 允许的字符 52 a~z、A~Z、0~9、下划线,必须以字母或下划线开头。 表 52 a~z、A~Z、0~9、下划线,必须以字母或下划线开头。 视图 52 a~z、A~Z、0~9、下划线,必须以字母或下划线开头。 列 52 a~z、A~Z、0~9、下划线,必须以字母或下划线开头。 别名 52 a~z、A~Z、0~9、下划线,必须以字母或下6

项目设计方案

划线开头。 存储过程 52 a~z、A~Z、0~9、下划线,必须以字母或下划线开头。 实际应用系统中,标识符不得使用GBase 8a MPP Cluster 的保留字,也不能包含特殊字符。 1.2.3

标识符限定词

GBase 8a MPP Cluster 允许名称由一个或多个标识符组成。组合名称的各个组成成分应该用英文句号字符?.?分割开。组合名称的开始部分做为限定词来使用,它影响了上下文中后面的标识符的解释。

在GBase 8a MPP Cluster 中,用户可以使用下列表格中的任一种方式引用一个列: 列引用 col_name 含义 列col_name来自查询所用的任何一个表中对应字段。 table_name.col_name 列col_name来自当前数据库中的表table_name。 database_name.table_name.col_name 列col_name来自数据库database_name中的表table_name。 `column_name` 该字段是一个关键词或包含特殊字符。 组合标识符如果需要引用则标识符的各部分都要各自引用,而不是把组合标识符作为一个整体来引用。例如:`gs-table`.`gs-column`合法, whereas`gs-table.gs-column`不合法。

在一条语句的列引用中,不需要明确指定一个table_name 或database_name.table_name 前缀,除非这个引用存在二义性。例如,假设表t1和t2 均包含一个字段c,当用一个使用了t1 和t2 的SELECT 检索c 时,在这种情况下,字段c 存在二义性,因为它在这个语句所使用的表中不是唯一的,因而必须通过写出t1.c 或t2.c 来指明用户所需的是哪个表。同样的,如果从数据库db1 的表t 和数据库db2 的表t 中检索,用户必须用db1.t.col_name和db2.t.col_name 来指定引用哪个库表的列。

7

项目设计方案

1.2.4 注释语法

GBase 8a MPP Cluster 支持三种注释风格。 # 到该行结束。

-- 到该行结束。注意?--?(引导号)注释风格要求第二个引导号后至少跟着一个空格(或者一个控制字符例如换行)。这个语法和标准的SQL 注释风格有点不同。

/*行中间或多个行*/。这个封闭的序列不一定在同一行表示,因此该语法允许多行注释。 1.2.5

用户变量

GBase 8a MPP Cluster 支持用户变量。用户变量的生命周期是会话级的,对其它会话不可见。当用户退出时,此用户的所有用户变量会自动释放。

用户变量的写法是:@var_name。一个变量名可以由a~z、A~Z、0~9、下划线组成,必须以字母或下划线开头。

用户变量名大小写不敏感。

通过SET 语法来定义并为变量赋值。

SET @var_name = expr [, @var_name = expr] ...

?=?是赋值操作符。赋给每一个变量的expr 值可以是整数、实数、字符串、或NULL。

通过SELECT 语法查看用户变量的值。 SELECT @var_name [, @var_name] ... 示例1:使用SET 语句为变量赋值。 gbase> SET @t1='abc',@t2=null,@t3=4; Query OK, 0 rows affected gbase> SELECT @t1,@t2,@t3; +------+------+------+ | @t1 | @t2 | @t3 | +------+------+------+ | abc | NULL | 4 | +------+------+------+

8

项目设计方案

1 row in set

用户变量可以用于表达式所允许的任何地方。注意,必须明确指定常量的上下文中不能使用变量,例如,在SELECT 的LIMIT 子句中。

如果用户使用的变量没有初始化,那么它的值就为NULL。

1.3 操作符和函数

在SQL 语句中可以使用表达式,表达式可以包含常量,字段,NULL,操作符和函数。本章描述GBase 8a MPP Cluster 中用于写在表达式中的操作符和函数。

包含NULL 的表达式总是得出NULL 值结果,除非表达式中的操作和函数在文档中有另外的说明。 1.3.1

操作符

1.3.1.1 操作符优先级

操作符优先级在下面列出,从最高到最低。同一行的操作符具有同样的优先级。

BINARY,COLLATE !

-(unary minus),~(unary bit inversion) ^

*,/,DIV,%,MOD -,+ <<,>> & |

=,<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN BETWEEN,CASE,WHEN,THEN,ELSE NOT &&,AND OR,XOR :=

9

项目设计方案

1.3.1.2 圆括号

(...)

括号,使用它来规定一个表达式的运算顺序,放在括号里的操作符优先执行。 示例1:不使用括号,表达式先执行乘法操作,再执行加法操作。 gbase> SELECT 1+2*3 FROM t; +-------+ | 1+2*3 | +-------+ | 7 | +-------+ 1 row in set

示例2:使用括号,表达式先执行括号中的加法操作,再执行括号外的乘法操作。

gbase> SELECT (1+2)*3 FROM t; +---------+ | (1+2)*3 | +---------+ | 9 | +---------+ 1 row in set 1.3.1.3 比较函数和操作符

比较运算的结果是1(TRUE)、0((FALSE)或NULL。这些运算可用于数字和字符串上。根据需要,字符串将会自动地被转换到数字,而数字也可自动转换为字符串。

说明:本章中的一些函数(如GREATEST()和LEAST())的所得值虽然不包括1(TRUE)、0(FALSE)或NULL,但对参数值进行比较时,也会基于下述规则。

GBase 8a MPP Cluster 使用下列规则进行数值比较:

? 如果一个或两个参数是NULL,比较的结果是NULL,除了<=>比较符(含有

NULL 参数时,比较结果不是NULL)。

10

项目设计方案

? 如果在一个比较操作中两个参数均是字符串,它们作为字符串被比较。 ? 如果两个参数均是整数,它们作为整数被比较。

? 如果比较操作中,一个参数为字符串,另一个为整数,则以操作符左侧参

数的数据类型为准。

? 十六进制值如果不与一个数字进行比较,那么它将当作一个二进制字符串。

? 如果参数之一是DATETIME 列,而另一参数是一个常量,在比较执行之前,这个常量被转换为一个时间戳。需要注意的是IN()中的参数不是这样的。为了安全起见,建议用户在比较时使用完整的DATETIME/DATE/TIME 字符串。

? 在所有其它情况下,参数作为浮点(REAL)数字被比较。 ? 要转换一个值成为一个特殊的类型,用户可以使用CAST()函数。 GBase 8a MPP Cluster主要的比较函数和操作符包括: 1.3.1.3.1

= 等于

a=b

如果两个操作数相等,则返回1。

1.3.1.3.2

<=> NULL值安全等于

NULL 值安全等于。这个操作符像?=?操作符一样执行相等比较。 如果所有的操作数是NULL,那么返回的是1 而不是NULL。 如果有且只有一个操作数是NULL,那么返回的是0 而不是NULL。

1.3.1.3.3

<> , != 不等于

a<>b 或a!=b

如果两个操作数不相等,则返回1。

1.3.1.3.4

<= 小于或者等于

a<=b

如果a 小于或等于b,则返回1。

1.3.1.3.5

<小于

a

如果a 小于b,则返回1。

1.3.1.3.6

>= 大于或者等于

11

项目设计方案

a>=b

如果a 大于或等于b,则返回1。

1.3.1.3.7

>大于

a>b

如果a 大于b,则返回1。

1.3.1.3.8

is boolean_value ,is not boolean_value

根据一个布尔值来检验一个值,此处的布尔值可以是TRUE、FALSE 或 UNKNOWN。

1.3.1.3.9

expr BETWEEN min AND max

如果expr 的值在min 和max 之间(包括min 和max),返回1,否则返回0。

若所有参数都是同一类型,则上述关系相当于表达式(min <= expr AND expr<= max)。其它类型的转换根据本章开篇所述规律进行,且适用于三种参数中任意一种。

1.3.1.3.10 expr NOT BETWEEN min AND max

等同于NOT(expr BETWEEN min AND max)。

1.3.1.3.11 COALESCE(value,...)

返回值为列表当中的第一个非NULL 值,在全部为NULL 值的情况下返回值为NULL。

1.3.1.3.12 GREATEST(value1,value2,...)

当有两个或多个参数时,返回值为最大的参数值。 当参数中有一个为NULL 时,直接返回NULL。

当参数都是字符串时,默认是不区分大小写的,如果希望字符串值的参数进行大小写敏感,则在需要敏感的字符串参数前加上BINARY。

这些参数比较使用下列规则:

? 如果返回值在INTEGER 上下文中或者所有的参数是整型值,那么它们

使用整数比较;

? 如果返回值在REAL 上下文中或者所有的参数是实数值,那么它们使

用实数比较;

12

项目设计方案

? 如果所有的参数是大小写敏感的字符串,那么参数比较也是大小写敏

感的;

? 其它情况下,参数比较大小写不敏感。

1.3.1.3.13 expr IN (value,...)

如果expr 是IN 列表中的任一值,它将返回1,否则返回0。

如果所有的值均是常量,那么所有的值被按照expr 的类型进行计算和排序。

1.3.1.3.14 expr NOT IN (value,...)

等价于NOT(expr IN (value,...))。

1.3.1.3.15 ISNULL(expr)

如果expr 为NULL,ISNULL()的返回值为1,否则返回值为0。

1.3.1.3.16 LEAST(value1,value2,...)

有两个或者更多的参数,返回最小的参数值。假如任意一个变量为NULL,则LEAST()的返回值为NULL。

LEAST()对参数进行比较所依据的规则同GREATEST()相同。

1.3.1.4 逻辑操作符

在SQL 中,所有的逻辑操作符返回的值均为TRUE、FALSE 或NULL(UNKNOWN),它们是由1(TRUE)、0(FALSE)和NULL 来实现的。 1.3.1.4.1

NOT,!逻辑非

如果操作数为0,返回1;如果操作数为非零,返回0;如果操作数为NULL,返回NULL。 1.3.1.4.2

XOR逻辑异或

当任意一个操作数为NULL 时,返回值为NULL。 对于非NULL 的操作数:

真(1)异或假(0)的结果是真,假(0)异或真(1)的结果也是真。 真(1)异或真(1)的结果是假,假(0)异或假(0)的结果是假。 就是说两个值不相同,则异或结果为真,反之,为假。 1.3.1.5 转换操作符和函数 1.3.1.5.1

BINARY

13

项目设计方案

在字符串前使用BINARY 操作符,可以使得参数值的比较区分大小写。 1.3.1.5.2

CAST和CONVERT函数

AS

type)

CONVERT(expr,type)

CONVERT(expr

CAST(expr

USINGtranscoding_name)

CAST()和CONVERT()函数可以用于将一个类型的数值转换到另一个类型。 type 可以是下列值之一:

CHAR、DATE、DATETIME、DECIMAL、TIME

CAST()和CONVERT(...USING...)是标准的SQL 语法。 CAST(str AS BINARY)等价于BINARY str。

CAST(expr AS CHAR)把表达式看作是默认字符集中的字符串。

注意:一个CAST()到DATE,DATETIME,或TIME 只是标识此列,使其变为一个指定的数据类型,而不是改变列的值。

CAST()的最终执行结果将会转化为正确的列类型。 1.3.2

控制流函数

1.3.2.1 CASE

CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END

逐一匹配,当满足value=compare-value 时,返回对应的result,如果未找到匹配项,则返回ELSE 后的result。如果没有ELSE 子句,默认返回NULL。

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

逐一判断,当condition 为TRUE 时,返回对应的result,如果condition全为FALSE,则返回ELSE 后的result。如果没有ELSE 子句,默认返回NULL。

一个CASE 表达式的默认返回值类型是所有返回值的相容集合类型,具体情况视其所在语境而定:

? 如用在字符串语境中,则返回结果为字符串;

? 如用在数字语境中,则返回结果为十进制值的实数值或整数值。 1.3.2.2 DECODE

DECODE(value,value1,result1, value2,result2, value3,result3,... ,

14

项目设计方案

result)

类似于CASE value WHER value1 THEN value1,唯一区别是如果value 为null 值,可以和后面的null 值匹配。 1.3.2.3 IF(expr1,expr2,expr3)

如果expr1 为TRUE (expr1 <> 0 and expr1 <> NULL),则IF()的返回值为expr2;否则返回值为expr3。

IF()的返回值规则同CASE 表达式返回值的规则。 1.3.2.4 IFNULL(expr1,expr2)

如果expr1 不为NULL,则IFNULL()的返回值为expr1,否则其返回值为expr2。 IFNULL()的返回值是数字或是字符串,具体情况取决于使用它的上下文环境。等价于IF(expre1,expre1,expre2)。 1.3.2.5 NULLIF(expr1,expr2)

如果expr1 = expr2 成立,返回值为NULL,否则返回值为expr1。 等价于CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END。 1.3.3

字符串函数

在此列举几个应用比较多的字符串函数,如下: 1、CHAR_LENGTH(str)

返回字符串str 的字符长度,以字符进行计算。 2、CONCAT(str1,str2,...)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL,则返回值为NULL。

3、FIELD(str,str1,str2,str3,...)

如果str 等于str1 则返回1,如果str 等于str2 则返回2,依次向后进行比较。都不相等时,返回值为0。

如果所有对于FIELD()的参数均为字符串,则所有参数均按照字符串进行比较。 如果所有的参数均为数字,则按照数字进行比较。

如果str 为NULL,则返回值为0,原因是NULL 不能同任何值进行同等比较。FIELD()是ELT()的补数。

4、FIND_IN_SET(str,strlist)

15

项目设计方案

参数strlist 由字符?,?分隔的多个子串组成。

如果字符串str 在strlist 中,则返回匹配的位置,从1 开始。 如果字符串str 不在strlist 中或者strlist 是一个空串,返回值为0。 如果任何一个参数为NULL,返回值为NULL。 5、INSTR(str,substr)

返回子串substr 在字符串str 中第一次出现的位置。 注意,subtr 在sub 中的位置,以1 开始计数。 6、LOWER(str)

依照当前字符集设置映射,将字符串str 中的所有字符改变为小写形式。 7、UPPER(str)

依照当前字符集设置映射,将字符串str 中的所有字符改变为大写,然后返回该值。

UPPER()等价于UCASE()。 1.3.4

数值函数

1.3.4.1 算术操作符

常用的算术操作符均是可用的。

注意,如果两个参数均是整型,“-”,“+”和?“*”以BIGINT(64 位)精度运算并返回结果。

如果一个参数是无符号的整数,其他参数是整数,结果为无符号整数。 其中+、-、*、/算法和其他sql一样,整除%变为DIV。 DIV 整数除法

示例1:两个操作数都是整型。 gbase> SELECT 5 DIV 2 FROM t; +---------+ | 5 DIV 2 | +---------+ | 2 | +---------+ 1 row in set

16

项目设计方案

1.3.4.2 数学函数

在此列举几个应用比较多的数学函数,如下: 1、FLOOR(X)

返回不大于X 的最大整数值。

如果参数X 是NULL,则返回结果为NULL。 2、CEILING(X),CEIL(X) 返回不小于X 的最小整数。 3、MOD(N,M),N % M,N MOD M 取模。返回N 除以M 后的余数。 4、PI()

返回PI 值(圆周率)。默认显示6 位小数,但是在GBase 8a MPP Cluster内部,为PI 使用全部的双精度。

5、SIGN(X)

根据X 值是正数、0 还是负数,分别返回-1、0 或1。 6、TRUNCATE(X,D)

返回数值X 截取到D 位小数后的数字。 如果D 为0,结果将不包含小数点和小数部分。

如果D 为负数,表示截去(归零)X 值小数点左边第D 位开始后面所有低位的值。 1.3.5

日期和时间函数

本节描述可以用来操纵时间值的函数。参考日期和时间类型来获取每种日期和时间类型在有效格式下可以表达的值的范围。

在此列举几个应用比较多的日期和时间函数,如下: 1、CURDATE()

以?YYYY-MM-DD?或?YYYYMMDD?格式返回当前的日期值,返回的格式取决于该函数是用于字符串还是数字上下文中。

2、CURTIME()

以?HH:MI:SS?或?HHMISS?格式返回当前的时间值,返回的格式取决于该函数是用于字符串还是数字的上下文中。

17

项目设计方案

3、DATEDIFF(expr,expr2)

DATEDIFF()返回开始日期expr 和结束日期expr2 之间的天数。

expr 和expr2 是date 或者datetime 表达式。只有日期部分用于计算。如果用于计算日期间隔的参数不是一个date 或者datetime 类型,例如,TIME 型数据,计算结果是不可信的。

4、DAY(date)

返回date 是一个月中的第几天,范围为0 到31。 5、LAST_DAY(date)

返回date 中当前月对应的最后一天的值。 其中,date 为日期或日期时间类型。 如果参数date 无效,则返回NULL。 1.3.6

其他函数

其他的一些函数,包括位函数、加密函数、信息函数、辅助函数等等。 此处列举一些常用函数做一些介绍。 1.3.6.1 位函数

例如:|按位或、&按位与、^按位异或、<<左移操作(BIGINT)、>>右移操作(BIGINT)、BIT_COUNT(N) 1.3.6.2 加密函数

例如: 1、MD5(str)

为字符串计算一个128 位的MD5 校验和,结果作为32 位16 进制字符串返回,返回值可以用作哈希密钥。

如果参数NULL 则返回NULL。

2、SHA1(str),SHA(str)

按照RFC3174(安全哈希算法)中介绍的那样,为字符串计算一个160 位

的SHA1 校验和,结果作为40 位16 进制字符串返回。

若str 的值为NULL,则返回NULL。

常用的就是作为哈希密钥。用户还可以用它作为一个加密安全函数来存储

密码。

18

项目设计方案

1.3.6.3 信息函数

例如: 1、USER()

返回当前的GBase 8a MPP Cluster 用户和主机名。 2、DATABASE()

返回当前使用的数据库名。 1.3.6.4 辅助函数

例如:

1、FORMAT(X,D)

将数字X 格式化为?#,###,###.##?的形式,四舍五入到D 位小数。 如果D 为0,返回的结果将没有小数点和小数部分。

1.4 SQL语法

1.4.1

DDL语法

此处讲解DDl语法的部分内容,包括DATABASE、TABLE、VIEW、INDEX。 1.4.1.1 DATABASE 1.4.1.1.1

CREATE DATABASE

CREATE DATABASE [IF NOT EXISTS] database_name

CREATE DATABASE 是以给定的名称创建一个数据库。用户需要获得创建数 据库的权限,才可以使用CREATE DATABASE。 1.4.1.1.2

DROP DATABASE

DROP DATABASE [IF EXISTS] database_name

DROP DATABASE 删除指定的数据库以及它所包含的表。请小心使用此语句! 用户需要获得对数据库的DROP 权限,才可以使用DROP DATABASE。 使用关键字IF EXISTS,以防止由于数据库不存在而报告错误。 1.4.1.2 TABLE 1.4.1.2.1

CREATE TABLE

CREATE TABLE 以用户给定的名字在当前数据库创建一个表。用户必须有创建表的权限。

19

项目设计方案

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [database_name.]table_name (column_definition [,column_definition], ... [, key_options]) [table_options] [NOCOPIES];

column_definition:

column_name data_type [NOT NULL | NULL] [DEFAULT default_value] [COMMETN comment_value]

table_options:

[REPLICATED | DISTRIBUTED BY ('column_name') ] [COMMETN 'comment_value']

参数说明如下:

? TEMPORARY:该参数为可选参数,创建临时表需要使用此关键字。临时表

的创建请参见?4.1.2.1.3 CREATE TEMPORARY TABLE?的内容。

? IF NOT EXISTS:该参数为可选参数,用户可以使用关键字IF NOTEXISTS

创建表,如果表已经存在,系统将报告WARNING 信息。

? database_name:该参数为可选参数,指定数据库后,在此数据库下创建

表。如果没有显示指定database_name 参数,创建的表隶属于USEdatabase_name 后的数据中的表。

? table_name:表命名规则请参见?2.2 数据库、表、列和别名?。默认情况

下,在当前数据库中创建表。如果没有指定当前数据库或表已经存在,则报告错误信息。

? column_name:指定表中的数据列。

? data_type:指定数据列的数据类型。数据类型参见?1 数据类型?中的内

容。

? NOT NULL | NULL:指定数据列的值,是否允许为NULL。如果既没有指定

NULL 也没有指定NOT NULL,列被视为指定了NULL。

20

项目设计方案

? default_value:指定数据列的默认值。默认值必须是一个常数,而不能

是一个函数或者一个表达式。举例来说,用户不能将一个数据列的默认值设置为NOW()或者CURRENT_DATE()之类的函数。对于给定的一个表,可以使用SHOW CREATE TABLE 语句来查看哪些列有显式DEFAULT子句。 ? comment_value:指定数据列的备注说明。例如:stu_no id COMMENT '

学号'。

table_options:

默认为随机分布表。创建后的分布表将数据分布存储在每个SafeGroup 中的各个节点中。在每个SafeGroup 中通过副本冗余进行高可用性数据管理。

? REPLICATED:指定是否是复制表。

在创建一个表时,用户可以使用关键词REPLICATED 来指定是否创建复制表。如果指定了关键词REPLICATED,那么创建的复制表在GBase 8a MPP Cluster的各个节点上存放的是完整数据。

注意:复制表表名尾部不允许是_n{number}编号,例如,mytable_n1,mytable_n12 是不允许使用的。

? DISTRIBUTED BY column_name:指定创建表中的物理列column_name是哈

希列,这样创建的表,称为哈希分布表。哈希列必须是INT 或者VARCHAR 类型。

? COMMENT:指定表的备注说明。可以用SHOW CREATE TABLE table_name和

SHOW FULL COLUMNS FROM table_name 语句来显示备注信息。

1.4.1.2.1.1 CREAET TABLE...AS SELECT...

语法格式: CREATE [REPLICATED]

[DISTRIBUTED BY] [AS] SELECT ... 功能:

根据列定义以及投影列创建表结构,并且将SELECT 中查询的数据复制到所创建的表中。

21

TABLE table_name_[(column_definition,...)]

项目设计方案

参数说明如下:

REPLICATED:指定创建复制表选项。

DISTRIBUTED BY:指定创建表中的物理列column_name 是哈希列。 AS:指定SELECT 语句,可选关键字。

1.4.1.2.1.2 CREAET TABLE...LIKE...

语法格式:

CREATE TABLE table_name1 LIKE table_name2; 功能:

复制table_name2 的表结构来创建表table_name1。

1.4.1.2.1.3 CREATE TEMPORARY TABLE...

功能:

在创建一个表时,用户可以使用关键词TEMPORARY。临时表被限制在当前连接中,当连接关闭时,临时表会自动地删除。这就意味着,两个不同的连接可以使用同一个临时表名而不会发生冲突,也不会与同名现有的表冲突(现有表将被隐藏,直到临时表被删除)。使用此种方法,一旦客户端与GBase 8a MPPCluster 断开连接,临时表将自动删除。

注意事项:

? 临时表支持除ALTER 之外的所有DDL 及DML 操作。 ? 临时表不能被备份。

? 临时表不支持使用gcdump 工具导出表结构。

? 临时表支持在当前连接中使用查询结果导出语句导出表中数

据。

? 在进行集群数据重分布、备份恢复前需要清除当前连接中的临

时表。

1.4.1.2.1.4 CREATE TABLE...NOCOPIES

语法格式:

CREATE TABLE [IF NOT EXISTS] table_name (col_name type,...) NOCOPIES;

22

项目设计方案

参数说明如下:

NOCOPIES:在创建表时,使用关键词NOCOPIES 可以创建一张不带副本的表。 功能:

? nocopies 表和分布表(随机分布表和哈希分布表)一样,数据

分布存储,支持表的DDL 语法和DML 语法;与分布表的区别是,不产生副本,所以无法提供数据的高可用性。 ? nocopies 表支持使用gcdump 工具导出表结构。

? nocopies 表支持使用SELECT INTO OUTFILE 和rmt: SELECT

INTOOUTFILE 语句导出数据。

GBase 8a MPP Cluster 支持nocopies 表到非nocopies 表的转换。 使用约束:

? nocopies 表不支持使用数据加载工具进行数据加载。 ? nocopies 表不支持数据同步、重分布、备份与恢复。

1.4.1.2.2

ALTER TABLE

ALTER TABLE [database_name.]table_name

alter_specification [, alter_specification] ... alter_specification:

ADD [COLUMN] column_definition [FIRST | AFTER col_name ] | ADD [COLUMN] (column_definition,...)

| CHANGE [COLUMN] old_col_name new_col_name column_definition | MODIFY [COLUMN] col_name column_definition FIRST | AFTER col_name | RENAME [TO] new_table_name | DROP [COLUMN] col_name | DROP NOCOPIES

| ADD PARTITION partition_definition

| DROP PARTITION partition_name[,partition_name?] | EXCHANGE PARTITION partition_name WITH TABLE table_name

23

项目设计方案

2.2 配置policeaudit.hbm.xml文件

配置映射文件

2.3 配置applicationcontext.xml文件

因为本测试用例使用了blob,clob字段,spring框架针对这两个字段操作必须使用事物,事务设置方式根据需要设置 (1)首先配置事务管理器

34

项目设计方案

(2)然后定义事务通知

(3)然后定义事务切面,并应用事务通知

(4)配置LobHandler和SessionFactory

2.4 配置pagination.hbm.xml文件

这里引用到Pagination的映射文件pagination.hbm.xml

35

项目设计方案

36

本文来源:https://www.bwwdw.com/article/h5bw.html

Top