创建表¶
- 创建一个表
要想在自己所属的模式中创建新表,需要有CREATE TABLE系统权限。要想在其它用户的模式中创建新表,需要模式属主把这个模式的CREATE TABLE权限授予给你。
同一模式下,表、索引、序列、视图不能同名。
每个表最多可以有 2500 列。单列最大长度受列类型的最大长度限制。单行数据最大长度受上述两个因素限制。
如果在CREATE TABLE语句中声明了参数[LOCAL | GLOBAL] { TEMPORARY | TEMP },则该表创建为临时表。可以创建本地和全局临时表。本地临时表仅在当前会话中可见;全局临时表在所有会话中都可见。
下面以实例说明神通数据库表的创建,具体的语法规则请参考《神通数据库 SQL语言参考手册》。
下例显示 pubs 数据库中所创建的三个表(PROJ、WORKS 和 STAFF)的完整表定义,其中包含所有的约束定义:
/* ************************** PROJ TABLE ************************** */
CREATE TABLE PROJ
(PNUM CHAR(3) NOT NULL UNIQUE,
PNAME CHAR(20),
PTYPE CHAR(6),
BUDGET DECIMAL(9),
CITY CHAR(15));
/* ************************** WORKS TABLE ************************** */
CREATE TABLE WORKS
(EMPNUM CHAR(3) NOT NULL,
PNUM CHAR(3) NOT NULL REFERENCES PROJ(PNUM),
HOURS DECIMAL(5),
PRIMARY KEY (EMPNUM,PNUM));
/* ************************** STAFF TABLE ************************** */
CREATE TABLE STAFF
(EMPNUM CHAR(3) NOT NULL UNIQUE,
EMPNAME CHAR(20) DEFAULT 'Bill',
GRADE DECIMAL(4) CHECK(GRADE > 3),
CITY CHAR(15));
- 自动收集表的统计信息
统计信息对于查询优化是至关重要的,统计信息若是不准确,优化器就很难保证生成最优的甚至是较优的查询计划。在神通数据库中,系统管理员可以使用CREATE STATISTICS/UPDATE STATISTICS命令来手动更新统计数据,但手动统计需要系统管理员的干预,为此,神通数据库还提供了自动统计功能,减轻的系统管理员的负担。
自动统计的原理是监控对数据库的修改,当对某一个表的修改积累到一定程度后,数据库就会自动对该表进行统计,并更新表大小、表中元组数等关键信息。自动统计采用估计与采样相结合的方式,既保证了自动统计的效率(进行一次自动统计用时<0.1毫秒,且与要统计的表大小无关),又提供了很好的准确度(通常>90%)。
此外,当用户成功的对一个表进行了一次线性扫描时,系统也会根据需要自动更新统计数据。由于此时元组数为线性扫描过程中统计所得,因此还能够做到统计数据100%准确。