表是数据库中数据存储的基本单元,是对用户数据进行读和操纵的逻辑实体。表由列和行组成,每一行代表一个单独的记录。表中包含一组固定的列,表中的列描述该表所跟踪的实体的属性,每个列都有一个名字及各自的特性。
列的特性由两部分组成:数据类型(dataType)和长度(length)。对于 NUMERIC、DECIMAL 以及那些包含秒的时间间隔类型来说,可以指定列的小数位及精度特性。在 DM 系统中,CHAR、CHARACTER、VARCHAR 数据类型的最大长度由数据库页面大小决定,数据库页面大小在初始化数据库时指定。DM 系统具有 SQL-92 的绝大部分数据类型,以及部分SQL-99、Oracle 和 SQL Server 的数据类型。
为了确保数据库中数据的一致性和完整性,在创建表时可以定义表的实体完整性、域完整性和参考完整性。实体完整性定义表中的所有行能唯一地标识,一般用主键、唯一索引、UNIQUE 关键字及 IDENTITY 属性来定义;域完整性通常指数据的有效性,限制数据类型、缺省值、规则、约束、是否可以为空等条件,域完整性可以确保不会输入无效的值;参考完整性维护表间数据的有效性、完整性,通常通过建立外键联系另一表的主键来实现。
如果用户在创建表时没有定义表的完整性和一致性约束条件,那么用户可以利用 DM 所提供的基表修改语句来进行补充或修改。DM 系统提供基表修改语句,可对基表的结构进行全面的修改,包括修改基表名、列名、增加列、删除列、修改列类型、增加表级约束、删除表级约束、设置列缺省值、设置触发器状态等一系列修改功能。
表是数据库设计过程中的基本构件,基于来自应用开发者的有关应用如何运作和所期望的数据类型,数据库管理员应与应用开发者一起工作,并认真规划每个表,具体需要做到以下几点:
在创建表时指定 SPACE LIMIT 子句,可以对表的存储空间指定上限。DM 支持对表的存储空间指定大小,单位是 MB,即表的大小可由管理员指定,便于表的规模管理。当表的所有索引所占用的存储空间超过指定大小时,表将不能再新增数据。
创建表时,在 STORAGE 子句中,可对表指定存储的表空间。如果没有指定,则该表将创建在用户的默认表空间中。在创建表时,通过指定合适的表空间,有以下优点:
如果要在所属模式中创建新表,需要有 CREATE TABLE 数据库权限;而要在其他用户的模式中创建新表,则需要有 CREATE ANY TABLE 数据库权限。创建表时,应当为表指定一个表空间,否则,表将在 MAIN 创建。下面给出一个创建一个简单表的例子。
CREATE TABLE EMPLOYEE (
EMPNO INT PRIMARY KEY,
ENAME VARCHAR(15) NOT NULL,
JOB VARCHAR(10),
MGR INT
CONSTRAINT EMP_FKEY REFERENCES EMPLOYEE(EMPNO),
HIREDATE DATE DEFAULT (CURDATE),
SALARY FLOAT,
DEPTNO TINYINT NOT NULL
CONSTRAINT DEPT_FKEY REFERENCES DEPT(DEPTNO))
STORAGE (
INITIAL 50,
NEXT 50,
MINEXTENTS 10,
FILLFACTOR 80,
ON USERS);
在上述 CREATE TABLE 语句中,在 users 表空间上建立了 employee 表,并有几个完整性约束,其中包含定义在不同列上的一个主键和外键。
创建表之后,可以使用 INSERT 命令插入数据或使用达梦数据导入导出工具装载数据,还可以直接使用 CREATE TABLE AS SELECT 创建一个表。
想更改的表如果在所属的模式中,用户必须具有 ALTER TABLE 数据库权限;若在其他模式中,用户必须有 ALTER ANY TABLE 的数据库权限。通过更改表,用户可以对数据库中的表作如下修改:
当一个表不再使用时,可以将其删除。删除表时,将产生以下结果:
DROP TABLE employee;
如果要删除的表被其他表引用,即其他表的外键引用了表的任何主键或唯一键,则需要
在 DROP TABLE 语句中包含 CASCADE 选项,如:
DROP TABLE employee CASCADE;
有些情况下,当表的数据不再使用时,需要删除表的所有行,即清空该表。DM7 支持以下方式来删除表中的所有的行:
DELETE FROM employee;
DROP TABLE EMPLOYEE;
CREATE TABLE EMPLOYEE(…);
TRUNCATE TABLE EMPLOYEE;
创建表后,可以通过 SP_TABLEDEF 系统过程查看表的定义。
CALL SP_TABLEDEF('SYSDBA', 'EMPLOYEE');
DM 通过提供的 TABLEDEF 函数来显示当前表的定义。当表多次进行 ALTER TABLE 后,
显示的表定义将是最后一次修改后的建表语句。
DM 支持 INT 和 BIGINT 两种数据类型的自增列,并提供以下函数查看表上自增列的当
前值、种子和增量等信息:
CREATE TABLE IDENT_TABLE (
C1 INT IDENTITY(100, 100),
C2 INT
);
SELECT IDENT_CURRENT('SYSDBA.IDENT_TABLE');
SELECT IDENT_SEED('SYSDBA.IDENT_TABLE');
SELECT IDENT_INCR('SYSDBA.IDENT_TABLE');
DM 使用段、簇和页实现数据的物理组织。DM 支持查看表的空间使用情况,包括:
CREATE TABLE SPACE_TABLE ( C1 INT,
C2 INT
);
SELECT TABLE_USED_SPACE('SYSDBA','SPACE_TABLE');
SELECT TABLE_USED_PAGES('SYSDBA','SPACE_TABLE');