GBase 8a
运维管理
文章

03_GBase 8a MPP Cluster 数据库开发推荐

发表于2026-01-13 22:15:09287次浏览7个评论

引用:GBase 8a MPP Cluster SQL基础,DDL-数据库和表管理

一、标识符命名规则

数据库、表、列和别名等对象的名称都称为标识符。

标识符最大长度(字符)允许的字符
数据库48a~z、A~Z、0~9、下划线、必须以字母或下划线开头
表、视图56a~z、A~Z、0~9、下划线、必须以字母或下划线开头
64a~z、A~Z、0~9、下划线、“-”、必须以字母或下划线开头
别名255a~z、A~Z、0~9、下划线、中文、必须以字母或下划线开头
存储过程64a~z、A~Z、0~9、下划线、必须以字母或下划线开头
变量 a~z、A~Z、0~9、下划线、必须以字母或下划线开头

限制

1、数据库、表和列名不应以空格结尾。

2、如果标识符是一个限制词或包含特殊字符,必须用反引号引用它,如:SELECT * FROM 'select'.id >100。

3、如果标识符超过最大长度限制,数据库、表、列、视图、存储过程的命令将报错,而别名将会截断至256个字符进行显示。

4、当库名、表名、列名为中文时,最大支持的汉字个数:库名48个汉字;表名21个汉字;参数gcluster_extend_ident设置为1,即开启创建中文库名,表名、列名的功能,默认为0,不开启。

二、列的引用

允许名称由一个或多个标识符组成。各个组成部分应该用因为句号"."隔开,列的引用不能产生二义性。

列引用含义
col_name列col_name 来自查询所用的任何一个表中对应字段。
Table_name.col_name列col_name 来自当前数据库中的表table_name。
DB_name.table_name.col_name列col_name 来自数据库DB_name中的表table_name。
VC_name.db_name.table_name.col_name列col_name 来自虚拟集群VC_name数据库db_name中的表table_name。
‘col_name’反引号包围,该字段是一个关键词或包含特殊字符。

限制

1、含有关键词和特殊字符的标识符,不能直接组合一个整体来引用。‘gs_table‘.’gs_column’合法,'gs_table.gs_column'不合法。

三、SQL注释语法

支持单行注释和多行注释

3.1 单行注释

“#” 如:SELECT * FROM BK_TRAN; #This comment continues to the END of line;

“--” 如: SELECT * FROM BK_TRAN; --This comment continues to the END of line;

3.2 多行注释

注释多行 如:‘“/注释内容/”

注释行中间的内容 如:SELECT 1+/*this is a multiple-line comment*/1 FROM DUAL;

四、用户变量

用户变量的生命周期是会话级的,即对其他会话不可见。当用户退出时,此用户的所有用户变量会自动释放。

1、用户变量以@开头,不区分大小写:@var_name

2、通过SET 语法来定义并为变量赋值:SET @var_name = expr[,@var_name = expr]...

3、通过SELECT语法查看用户变量的值:SELECT @var_name[,@var_name]...

五、数据类型

数据分类数据类型
数值型INTEGER、TINYINT、SMALLINT、BIGINT、DECIMAL、NUMERIC、FLOAT、DOUBLE
字符型CHAR、VARCHAR、TEXT
日期和时间类型DATE、TIME、DATETIME、TIMESTAMP
二进制类型BLOB、LONGBLOB

5.1 数值类型

类型名称最小值最大值占用字节
TINYINT-1271271
SMALLINT-32767327672
INT(INTEGER)-214748364721474836474
BIGINT-922337203685477580692233720368547758068
DECIMAL((M[,D]))-(1E+M-1)/(1E+D)(1E+M-1)/(1E+D)动态计算
FLOAT-3.40E+383.40E+384
DOUBLE-1.7976931348623157E+3081.7976931348623157E+3088

近似数据类型:FLOAT、DOUBLE

DECIMAL(M,D)类型,M是总位数(最大65位),D是小数点后的位数,默认是DECIMAL(10,0)

5.2 字符类型

类型名称最大长度(字符)说明
CHAR255定长
VARCHAR10922(utf8)、16383(gbk)变长
TEXT10922变长

限制

1、生产中不建议使用CHAR和TEXT类型,CHAR类型长度255,定长。

2、TEXT类型不能指定DEFAULT值,仅兼容使用。

5.3 日期时间类型

类型名称最小值最大值格式
DATE0001-01-019999-12-31YYYY-MM-DD
DATETIME0001-01-01 00:00:00.0000009999-12-31 23:59:59YYYY-MM-DD HH:MI:SS.ffffff
TIME-838:59:59838:59:59HHH:MI:SS
TIMESTAMP1970-01-01 08:00:012038-01-01 00:59:59YYYY-MM-DD HH:MI:SS

限制

DATETIME精确到微秒,TIMESTAMP仅兼容使用,区间有限制,生产不建议使用,务必注意。

5.4 二进制类型

类型名称最大长度(字符)
BLOB32k
LONGBLOB64M

限制

1、创建表时,二进制类型列不能有DEFAULT值。

2、查询语句中,二进制类型列不建议用在过滤条件、group by、join条件中。

3、查询语句中,二进制类型不支持OLAP函数。

4、二进制类型列不能创建HASH索引和HASH分布列。

六、数据模型设计原则

6.1 HASH分布表

大表建成分布表,推荐建成hash分布表。选取分布列(distributed by)字段的原则:

1、在多表join查询时,表中某列经常用于JOIN等值关联。

2、表中该列通常是等值查询的列,并且使用的频率很高。

3、做group by 操作时,分组字段。

4、表中重复值较小的列,尽量让数据均匀分布。

限制

1、当前只支持INT、BIGINT、VARCHAR、DECIMAL数据类型。

2、distributed by 列的值,不允许进行update操作。#重点注意

6.2 复制表

复制表会存在各个节点上,即表的名字和数据完全一致。在OceanBase中,复制表要求强一致性读取(强同步),在任意一个健康节点的副本上读取到数据的最新修改。

个人推荐是类似参数表,表规模小但高并发读、低频写的表。

6.3 修改表的限制

1、不支持该表的字符集。

2、不支持改变列的属性(NOT NULL、默认值)。

3、不支持改变列的数据类型。

4、VARCHAR类型可改变列的长度,只能变大,不能变小。

 

修改字段类型的方法:

增加新的列 -> update新列的值 -> 移动新列至指定位置 -> 老列重命名 -> 新列重命名 -> 删除老列

示例:修改表中old列类型由float(18,6)修改为decimal(26,6)

1、alter table tablename add column new decimal(26,6);
2、update tablename set new = old;
3、alter table tablename modify new decimal(26,6) after old;
4、alter table tablename change old bbb float(18,6);
5、alter table tablename change new old decimal(26,6);
6、alter table tablename drop column bbb;
 

评论

登录后才可以发表评论
枫溪发表于 6个月前
1
枫溪发表于 6个月前
2
枫溪发表于 6个月前
3
枫溪发表于 6个月前
4
枫溪发表于 6个月前
5
用户头像
GBase用户28017发表于 6个月前
学习。
AIhua发表于 6个月前
1