DM模式对象的常规管理

  用户的模式指的是用户账号拥有的对象集,在概念上可将其看作是包含表、视图、索引和权限定义的对象。在 DM 中,一个用户可以创建多个模式,一个模式中的对象(表、视图等)可以被多个用户使用。模式不是严格分离的,一个用户可以访问他所连接的数据库中有权限访问的任意模式中的对象。

  系统为每一个用户自动建立了一个与用户名同名的模式作为其默认模式,用户还可以用模式定义语句建立其它模式。

采用模式的原因有几点:

  1. 允许多个用户使用一个数据库而不会干扰其它用户;
  2. 把数据库对象组织成逻辑组,让它们更便于管理;
  3. 第三方的应用可以放在不同的模式中,这样可以避免和其它对象的名字冲突。模式类似于操作系统层次的目录,只不过模式不能嵌套。

在单个操作中创建多个模式对象

在 DM 数据库中,使用 CREATE SCHEMA 语句就可以创建一个空的模式对象,也可以在创建模式时,同时创建多个模式对象。

下面的语句在创建模式 test 的同时,创建了属于模式 test 的一个序列和两张表。

CREATE SCHEMA TEST

CREATE SEQUENCE ADDRESS_SEQ INCREMENT BY 1

CREATE TABLE ADDRESS(

ADDRESSID INT,

ADDRESS1 VARCHAR(60) NOT NULL,

ADDRESS2 VARCHAR(60),

CITY VARCHAR(30) NOT NULL,

POSTALCODE VARCHAR(15) NOT NULL)

CREATE TABLE ADDRESS_TYPE(

ADDRESS_TYPEID INT PRIMARY KEY,

NAME VARCHAR(50) NOT NULL);

可以用下面的格式来引用 TEST 模式中的 ADDRESS 表:TEST.ADDRESS,如向 ADDRESS 表中插入一条数据。

INSERT INTO TEST.ADDRESS VALUES(1,'沈阳市和平区宁波路1号','沈阳市浑南区国际软件园','沈阳市','200436')

重命名模式对象

要重命名一个模式对象,那么这个模式对象必须在指定的模式里面。用户可以采用下面几种方式来重命名模式对象:

  1. 删除原有的模式对象,重新创建;
  2. 使用 ALTER … RENAME 语句。

如果采用的是删除并重建模式对象的方式来重命名模式对象,那么所有的基于这个模式对象的授权都将失效。在模式对象重建之后,基于原对象的权限和角色必须重新授予。

如果使用的是 ALTER …RENAME 语句来重命名模式对象,那么所有基于原模式对象的权限将转移到重命名后的模式对象上,不需要重新授权。如重命名 TEST 上的 ADDRESS 表:

ALTER TABLE TEST.ADDRESS RENAME TO ADDRESS1;

如果一个用户 USER1 在 ADDRESS 上拥有查询、插入的权限,那么重命名之后,USER1 在 ADDRESS1 上同样拥有查询、插入权限。

在重命名一个模式对象之前,需要考虑以下影响:

  1. 所有基于重命名模式对象的视图和 DMSQL 语句块都将失效,在使用之前,必须重新编译;
  2. 所有基于重命名模式对象的同义词在使用的时候都会报错。

启用和停用触发器

触发器(TRIGGER)定义当某些与数据库有关的事件发生时,数据库应该采取的操作。触发器是在相关的事件发生时由服务器自动地隐式激发的。触发器是激发它们的语句的一个组成部分,即直到一个语句激发的所有触发器执行完成之后该语句才结束,而其中任何一个触发器执行的失败都将导致该语句的失败,触发器所做的任何工作都属于激发该触发器的语句。

一个触发器有两种不同的状态:

  1. 启用(ENABLED):处于开启状态的触发器在触发条件满足时,执行触发体。缺省状态下,新创建的触发器都处于开启状态;
  2. 禁止(DISABLED):处于禁止状态的触发器在触发条件满足时,也不会执行触发体。

要设置触发器的状态,可以通过 ALTER TRIGGER 语句来完成。用户必须满足以下条件

1) 拥有该触发器;

2) 有ALTER ANY TRIGGER权限。

用户可以通过使用带有 ENABLED/DISABLED 选项的 ALTER TRIGGER 语句来启用/禁止触发器。如启用 addr_trig 触发器:

ALTER TRIGGER addr_trig ENABLED;

显示有关模式对象的信息

在 DM 数据库系统中,模式对象的信息主要记录在 SYSOBJECTS 系统表中。可以通过下面的语句来查询模式对象的相关信息。

SELECT * FROM SYSOBJECTS WHERE TYPE$ = 'SCHOBJ' OR TYPE$ = 'TABOBJ';

但是,SYSOBJECTS 系统表并不能将模式对象的所有信息存储起来。用户应该和其它系统表一起获得更加详细的信息。

如果用户想获得索引更详细的信息,可以查询 SYSINDEXES 表;如果用户想了解存储过程、函数等的定义信息,可以查询 SYSTEXTS 表;如果用户想了解更详细的约束的相关信息,可以查询 SYSCONS 表。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值