达梦模式对象中的表,视图,索引对象的管理
一、表
1.1 创建表
1.1.1创建普通表
如果要在所属模式中建表,用户需要有 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);
1.1.2 查询建表
将已存在表的表中的数据在查询时直接把查询出来的数据建成一张表来存储
例:
CREATE TABLE NEW_EMP
AS
SELECT * FROM EMPLOYEE;
1.1.3 创建临时表
当处理复杂的查询或事务时,由于在数据写入永久表之前需要暂时存储一些行信息或需要保存查询的中间结果,可能需要一些表来临时存储这些数据。在会话或事务结束时,这些表上的数据将会被自动清除。
例:
CREATE GLOBAL TEMPORARY TABLE TMP_EMP(
EMPNO INT PRIMARY KEY,
ENAME VARCHAR(15) NOT NULL,
JOB VARCHAR(10))
ON COMMIT DELETE ROWS;
1.2 更新表
前提条件:想更改的表如果在所属的模式中,用户必须具有 ALTER TABLE权限;若在其他模式中,用户必须有 ALTER ANY TABLE 权限。
1)可以添加或删除列,或修改现有的列的定义(列名、数据类型、长度、默认值);
2)可以添加、修改或删除与表相关的完整性约束;
3)可以重命名一个表;
4)可以启动或停用与表相关的完整性约束;
5)可以启动或停用与表相关的触发器;
6)可以修改表的 SPACE LIMIT;
7)可以增删自增列。
例:
ALTER TABLE PERSON.PERSON ADD CONSTRAINT unq UNIQUE(PHONE);
1.3 删除表
当一个表不再使用时,可以将其删除。
DROP TABLE IF EXISTS employee;
如果要删除的表被其他表引用,即其他表的外键引用了表的任何主键或唯一键,则需要
在 DROP TABLE 语句中包含 CASCADE 选项,
例:
DROP TABLE employee CASCADE;
1.4 清空表
有些情况下,当表的数据不再使用时,需要清空表中的数据
1)使用 DELETE 语句;
DELETE FROM employee;
2)使用 DROP 和 CREATE 语句;
DROP TABLE EMPLOYEE;
CREATE TABLE EMPLOYEE(…);
3)使用 TRUNCATE 语句
TRUNCATE TABLE EMPLOYEE;
1.5 查看表信息
1)查看表定义
CALL SP_TABLEDEF(‘SYSDBA’, ‘EMPLOYEE’);
2)查看自增列信息
SELECT IDENT_CURRENT(‘SYSDBA.IDENT_TABLE’);
SELECT IDENT_SEED(‘SYSDBA.IDENT_TABLE’);
SELECT IDENT_INCR(‘SYSDBA.IDENT_TABLE’);
3)查看表空间使用情况
SELECT TABLE_USED_SPACE(‘SYSDBA’,‘SPACE_TABLE’);
SELECT TABLE_USED_PAGES(‘SYSDBA’,‘SPACE_TABLE’);
二、视图
当用户所需的数据是一张表的部分列、或部分行,或者数据是分散在多个表中,那么就可以创建视图来将这些满足条件的行和列组织到一个表,而不需要修改表的属性、甚至创建新的表。
2.1 创建视图
例:
CREATE VIEW SALES.SALESPERSON_INFO AS
SELECT T1.SALESPERSONID, T2.TITLE, T3.NAME, T1.SALESLASTYEAR
FROM SALES.SALESPERSON T1, RESOURCES.EMPLOYEE T2, PERSON.PERSON T3
WHERE T1.EMPLOYEEID = T2.EMPLOYEEID AND T2.PERSONID = T3.PERSONID;
2.2 查询视图
例:
SELECT * FROM SALES.SALESPERSON_INFO;
2.3 删除视图
例:
DROP VIEW SALES.SALESPERSON_INFO;
2.4 编译视图
如果基表定义发生改变,如增删一列,或者视图的相关权限发生改变,可对视图重新进行编译。
例:
ALTER VIEW PURCHASING.VENDOR_EXCELLENT COMPILE;
三、索引
3.1 创建索引
1)创建普通索引
CREATE INDEX emp_ename ON emp(ename);
2)创建聚集索引
CREATE CLUSTER INDEX clu_emp_name ON emp(ename);
3)创建唯一索引
CREATE UNIQUE INDEX dept_unique_index ON dept (dname)
STORAGE (ON users);
4)创建基于函数的索引
CREATE INDEX IDX ON EXAMPLE_TAB(COLUMN_A + COLUMN_B);
SELECT * FROM EXAMPLE_TAB WHERE COLUMN_A + COLUMN_B < 10;
5)创建位图索引
CREATE BITMAP INDEX S1 ON PURCHASING.VENDOR (VENDORID);
6)创建位图连接索引
create bitmap index SALES_CUSTOMER_NAME_IDX
on SALES.SALESORDER_HEADER(SALES.CUSTOMER.PERSONID)
from SALES.CUSTOMER, SALES.SALESORDER_HEADER
where SALES.CUSTOMER.CUSTOMERID = SALES.SALESORDER_HEADER.CUSTOMERID;
3.2 重建索引
注意:
1)水平分区子表,临时表和系统表上建的索引不支持重建
2)虚索引和聚集索引不支持重建
例:
SP_REBUILD_INDEX(SCHEMA_NAME varchar(256), INDEX_ID int);
3.3 删除索引
要想删除索引,则该索引必须包含在用户的模式中或用户必须具有 DROP ANY INDEX 权限。
例:
DROP INDEX IF EXISTS emp_ename;
3.4 查看索引信息
创建索引后,可以通过 INDEXDEF 系统函数查看索引的定义。
例:
INDEXDEF(INDEX_ID int, PREFLAG int);