目录
DM 模式对象的基本操作
主要包括:表、 视图、 索引、 触发器、 序列、 同义词等
1 创建模式及表
create user schematest identified by schematest23;
SQL>
grant dba to schematest;
conn schematest/schematest23;
--创建模式
CREATE SCHEMA RESOURCESA AUTHORIZATION schematest;
/
CREATE SCHEMA PERSONA AUTHORIZATION schematest;
/
CREATE SCHEMA SALESA AUTHORIZATION schematest;
/
CREATE SCHEMA PRODUCTIONA AUTHORIZATION schematest;
/
CREATE SCHEMA PURCHASINGA AUTHORIZATION schematest;
/
CREATE SCHEMA OTHERS AUTHORIZATION schematest;
/
--创建表
--CREATE ADDRESS(存到默认表空间)
CREATE TABLE PERSONA.ADDRESS(ADDRESSID INT IDENTITY(1,1) PRIMARY KEY,
ADDRESS1 VARCHAR(60) NOT NULL,
ADDRESS2 VARCHAR(60),
CITY VARCHAR(30) NOT NULL,
POSTALCODE VARCHAR(15) NOT NULL);
--CREATE PERSON(存到指定表空间)
CREATE TABLE PERSONA.PERSON
(
PERSONID INT IDENTITY(1,1) CLUSTER PRIMARY KEY,
SEX CHAR(1) NOT NULL,
NAME VARCHAR(50) NOT NULL,
EMAIL VARCHAR(50),
PHONE VARCHAR(25)) STORAGE (ON DTSTEST);
2 视图
视图是从一个或几个基表(或视图)导出的表,它是一个虚表, 即数据字典中只存放视图的定义(由视图名和查询语句组成),而不存放对应的数据,这些数据仍存放在原来的基表中。
ps:
物化视图:
物化视图是从一个或几个基表导出的表,同视图相比,它存储了导出表的真实数据。当基表中的数据发生变化时,物化视图所存储的数据将变得陈旧,用户可以通过手动刷新或自动刷新来对数据进行同步。
创建:
删除:
编译:
一个视图依赖于其基表或视图,如果基表定义发生改变,如增删一列,或者视图的相关权限发生改变,可能导致视图无法使用。在这种情况下,可对视图重新编译,检查视图的合法性。
3 索引
为了提高系统的查询效率, DM 系统提供了索引。 但也需要注意,索引会降低那些影响索引列值的命令的执行效率,如 INSERT、 UPDATE、 DELETE 的性能,因为 DM 不但要维护基表数据还要维护索引数据。
语法格式。
索引创建,
语法格式:
索引修改,
主法格式:
删除索引,
语法格式
DROP INDEX [<模式名>.]<索引名>;
4 触发器
DM 是一个具有主动特征的数据库管理系统,其主动特征包括约束机制和触发器机制。
通过触发器机制,用户可以定义、删除和修改触发器。 DM 自动管理和运行这些触发器,从
而体现系统的主动性,方便用户使用。
触发器(TRIGGER)定义为当某些与数据库有关的事件发生时,数据库应该采取的操作。
这些事件包括全局对象、数据库下某个模式、模式下某个基表上的 INSERT、 DELETE 和
UPDATE 操作。
触发器与存储模块类似,都是在服务器上保存并执行的一段 DMSQL 程序语
句。不同的是:存储模块必须被显式地调用执行,而触发器是在相关的事件发生时由服务器
自动地隐式地激发。
触发器是激发它们的语句的一个组成部分,即直到一个语句激发的所有
触发器执行完成之后该语句才结束,而其中任何一个触发器执行的失败都将导致该语句的失
败,触发器所做的任何工作都属于激发该触发器的语句。
触发器分为表触发器、 事件触发器和时间触发器。表触发器是对表里数据操作引发的数
据库的触发; 事件触发器是对数据库对象操作引起的数据库的触发; 时间触发器是一种特殊
的事件触发器。
语法格式:
CREATE [OR REPLACE] TRIGGER [<模式名>.]<触发器名> [WITH ENCRYPTION]
< 触 发 限 制 描 述 > [REFERENCING <trig_referencing_list>][FOR EACH {ROW |
STATEMENT}][WHEN (<条件表达式>)]<触发器体>
<trig_referencing_list>::= <referencing_1>|<referencing_2>
<referencing_1>::=OLD [ROW] [AS] <引用变量名> [ NEW [ROW] [AS] <引用变量名>]
<referencing_2>::=NEW [ROW] [AS] <引用变量名> [ OLD [ROW] [AS] <引用变量名>]
<触发限制描述>::=<触发限制描述 1> | <触发限制描述 2>
<触发限制描述 1>::= <BEFORE|AFTER> <触发事件列表> [LOCAL] ON <触发表名>
<触发限制描述 2>::= INSTEAD OF <触发事件列表> [LOCAL] ON <触发视图名>
<触发表名>::=[<模式名>.]<基表名>
<触发事件>::=INSERT|DELETE|{UPDATE|{UPDATE OF<触发列清单>}}
<触发事件列表>::=<触发事件> | {<触发事件列表> OR <触发事件>}
5 序列
序列是一个数据库实体,通过它多个用户可以产生唯一整数值,可以用序列来自动地生成主关键字值。
序列在对编号的使用上具有很大用处,如果想对表建立一个列专门用来表示编号,如订单号,这样就可以使用序列,依次递增生成,用户不需进行特殊管理,这给用户带来了很大方便。如果用户需要间隔的编号,创建序列时指定 INCREMENT,就可以生成用户需要的编号。
语法格式:
序列修改语句:
序列删除语句:
6 同义词
同义词(Synonym)让用户能够为数据库的一个模式下的对象提供别名。同义词通过掩盖一个对象真实的名字和拥有者,并且对远程分布式的数据库对象给予了位置透明特性以此来提供了一定的安全性。同时使用同义词可以简化复杂的 SQL 语句。同义词可以替换模式下的表、视图、序列、函数、存储过程等对象。
语法格式:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [<模式名>.]<同义词名> FOR [<模式名>.]<对象名>
例 : 用户 B 对 A 模式下的表 T1 创建同义词。
在 A 模式下建立表 T1。
CREATE TABLE "A"."T1" ("ID" INTEGER, "NAME" VARCHAR(50), PRIMARY KEY("ID"));
INSERT INTO "A"."T1" ("ID", "NAME") VALUES (1, '张三');
INSERT INTO "A"."T1" ("ID", "NAME") VALUES (2, '李四');
对 A 模式下的表 T1 创建同义词。
CREATE SYNONYM A.S1 FOR A.T1;
如果用户 B 想查询 T1 表的行数,可以通过如下语句来获得结果:
SELECT COUNT(*) FROM A.S1;
删除同义词:
语法格式
DROP [PUBLIC] SYNONYM <同义词名>
------------------------------------------------------------------------------------------------------------------------------------
更多达梦数据库解决方案,可访问如下地址: