创建表

  • 创建一个表

要想在自己所属的模式中创建新表,需要有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%准确。