1. 选择一个有效的表名称
-
最长字符长度为 128 个字符
-
可以包含字母数字字符和“_”,不能包含其他特殊字符
-
SinoDB支持 ANSI 分隔标识符,分隔标识符是一个封闭在双引号内的对象名称,它可以是:
保留词
包含空格和特殊字符
大小写敏感
以非字母字符开始,比如“1table” -
必须设定 DELIMIDENT,才能使用分隔标识符
export DELIMIDENT=ON
2. 指定表的extent大小
表磁盘空间按extent为单元进行分配。一个extent是磁盘上一定数量的连续页,连续页的数量在表创建时被指定。每个表都含有两个extent大小:
-
EXTENT SIZE——预估数据行和extent的大小。分配给表的首个extent的大小。表创建时首个extent就会被分配,缺省值是 8 页。
-
NEXT SIZE——之后添加到表中每个extent的大小,缺省值是 8 页。
extent最小为4页 ,extent的大小必须是系统中页大小的偶数倍数。
如果分配给表的extent数量过多,意外增长达到上限,就会出现问题。我们可以通过计算每行数据的大小以及预估表的总数据行数,来计算分配给表的的extent 大小。
如果一张表的初始extent大小不够且系统必须分配大量的extent来满足需求时,可以通过使用ALTER TABLE 命令来调整后续增加的extent的大小,不过这不会改变已有的extent。
alter table customer next size 32; —将customer表下一个extent设置为32K
3. 表的锁定模式
创建表时可以为表指定行级锁或页级锁。一般情况下,需要设置为行级锁。通常我们会把onconfig配置文件中的参数DEF_TABLE_LOCKMODE设置为ROW,这样建表默认的锁级别就是行级锁。
4. 为要创建的表指定 dbspace
- 管理和平衡表和数据库的 I/O 要求。
- 限定表可用的空间数。
- 将表进行逻辑分组,以增加备份和恢复的粒度。
5. 建表示例
5.1 创建普通表
- 创建名为orders的表
create table orders(
customer_num integer,
order_date date
)
in dbspace1 —表的存放位置
extent size 64 —表创建时分配的extent大小
next size 32 —extent空间使用完后下一个分配的extent大小
lock mode row; —锁级别
5.2 创建简单大对象表
- 创建名为evaluation含有简单大对象字段表,并将简单大对象字段部分存放于独立blobspace上
create table evaluation(
employee_num serial,
manager_num integer,
emp_eval_form text in blobspace1, —列字段类型与存放位置
emp_picture byte in blobspace2 —列字段类型与存放位置
)
in dbspace2;
5.3 创建智能大对象表
- 创建表名为movie的含有只能大对象字段表, 并将只能大对象字段部分存放于独立smartblobspace上
create table movie(
movie_num integer,
movie_title char(50),
video blob,
audio blob,
description clob —指定列字段类型为clob
)
put video in (sbdbs1), —指定字段video的存放位置
audio in (sbdbs2), —指定audio的存放位置
description in (sbdbs3); —指定description的存放位置
5.4 创建临时表
- 创建名为temp_order的临时表,不记日志
create temp table temp_order(
order_num integer
)
with no log; —指定无日志模式
- 将customer中两个字段插入临时表cust_temp,不记日志
select customer_num, company from customer
into temp cust_temp
with no log; —指定无日志模式
6. 系统目录表systables
systables系统目录表会为每张表、视图和 synonym 保留一行信息。需要关注的字段有:
- tabname——表名
- tabid——唯一的数字表标识符(用在其他系统目录表去引用表)
- rowsize——以字节为单位的数据行的大小
表名只存储在systables 表里。 systables 表的一个重要作用是提供表名和 tabid 之间的连接。tabid是按顺序指派的 ,且是唯一的。系统目录表在 1 和 99 之间编号;用户自定义的表的 tabid 值大于或等于 100。
systables中的partnum 字段等同于在 onstat 输出里的 tblspace 编号 (tblsnum)。 tblsnum 是十六进制格式的 partnum 值。可通过以下语句进行查询:
select tabname, hex(partnum) from systables;