【精编_推荐】DB数据库对象基础知识

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DB2数据库对象

基本数据库对象

数据库对象是一个数据库的构造块(building block)。DB2 提供了不同类型的数据库对象来存储和表示不同信息。通过使用数据定义语言(DDL),可以创建、修改和删除数据库对象。要操纵数据库对象,可以使用数据操纵语言(DML),例如SELECT、UPDATE、INSERT 和SELECT 语句。常用的数据库对象有:

用户定义数据类型

约束

视图

索引

除了Family Fundamentals 教程里介绍的一些数据库对象外,还有一些其他的对象,很多开发人员在开发DB2 应用程序时会发现这些对象比较有用。本节我们将介绍这些对象。

在继续之前,有一点要注意:在下面看到的一些例子中,对象名称是以小写形式指定的。无论DB2 在哪个平台上运行,它总是以大写形式存储名称,除非标识符的名称以双引号("")括起来了。

例如,下面的语句创建一个名为employee(小写)的表,该表的列定义与表EMPLOYEE (大写)是一样的。

CREATE TABLE "employee" LIKE employee

别名

别名(alias)是指一个已有的表、视图的另一个名称,也叫昵称(nickname)。别名也可以作为另一个别名的昵称。与这些对象一样,别名也可以被创建或删除,可以有与之相关的注释。下面是CREATE ALIAS 语句的一些例子:

CREATE ALIAS aliastab1 FOR tab1;

CREATE ALIAS bob.aliastab1 FOR tom.tab1;

CREATE SYNONYM bob.aliastab2 FOR bob.aliastab1;

可以看到,CREATE ALIAS 语句比较简单。可以在源对象所在的同一模式中创建别名(如第1 行),或者也可以全限定别名(如第2 行)。为了与DB2 for zSeries 兼容,使用关键字SYNONYM 代替ALIAS 也是合法的(如第3 行)。

使用别名时无需专门的授权或权限。不过,需要获得与别名所引用的底层对象相关的授权。关于数据库对象权限的完整清单,请参考DB2 DBA 认证教程Server management(请参阅参考资料)。

前面已提到,我们也可以为昵称创建别名。昵称是引用位于联邦系统上的数据表或视图的数据库对象。联邦数据库支持超出了本教程的范围。在本教程系列的第 2 部分,Data manipulation ,我们将学习更多有关联邦系统的知识。

要为别名添加注释,可以发出以下语句:

COMMENT ON aliastab1 IS 'My first alias on tab1'

要删除一个别名,使用DROP 语句,这与所有其他数据库对象是一样的:DROP ALIAS aliastab1

序列对象

序列(sequence)是一种数据库对象,这种对象允许自动生成值。序列对象与标识列(identity column)不同,标识列是要与一个特定的表绑在一起的,而序列是一种全局的、独立的对象,同一个数据库中的任何表都可以使用它。

标识列是序列对象的一种特例。因此,标识列的特征也适用于序列对象。下面就例释了一条CREATE SEQUENCE 语句:

CREATE SEQUENCE myseq AS INTEGER

START WITH 360

INCREMENT BY 10

NO MAXV ALUE

CYCLE

CACHE 20

任何包括0 在内的数字数据类型都可用于序列值。这些类型包括SMALLINT、INTEGER、BIGINT 或DECIMAL。基于这些数据类型的任何用户定义独特类型(distinct type)也都可以用于序列值。这进一步扩展了用户定义独特类型在应用程序中的使用。

如上面的例子所示,您可以为序列对象指定起始值,从而自定义序列对象。在这个例子中,序列的第一个值是360。后续值的生成是由INCREMENT BY 子句控制的。这里还支持正、

负常量,以产生升序和降序值。

缺省情况下,一个序列所生成的最小值和最大值是由该序列数据类型的取值范围来界定的。例如,INTEGER 类型的序列值必须处在-2,147,483,647 到2,147,483,647 之间的范围内。在DB2 SQL Reference Guide 中可以找到所有数字数据类型的取值范围。为了改变这种缺省行为,可以使用MINV ALUE 和MAXV ALUE 选项来为生成的值设置一个边界。如果达到了最小值或最大值,那么可以使用另一个选项,即CYCLE 或NO CYCLE 来规定序列值是否应该循环。注意,如果CYCLE 生效,则序列就可以生成重复的值。

CACHE 选项允许DB2 将一些预先分配好空间的值保留在内存中,以提高性能。CACHE 20 是缺省的行为。关于这个选项有一点要谨记:如果在所有缓存的值被使用之前关闭DB2,那么任何缓存的值和未使用的值都将被丢弃。当DB2 重新启动时,又会生成和缓存下一块的值,从而造成值之间的不连续,即值之间存在间隔。如果应用程序不允许值之间有间隔,可以考虑使用NOCACHE 选项。

如果没有使用缓存,则性能就会下降,因为要频繁地生成序列数字。每当生成一个新值的时候,都会写下一条日志记录。因此,更高效的做法是根据请求来获取值,并将这些值缓存在内存中。

通过ALTER SEQUENCE 语句,可以更改序列对象的特征。除了序列值的数据类型以外,上面所讨论的所有的设置都可以修改。要获得完整的语法,请参考DB2 SQL Reference Guide (请参阅参考资料)。

删除一个序列对象与删除任何其他的数据库对象是一样的,不同之处是这里还要使用到一个RESTRICT 关键字。这样可以防止在有依赖的情况下删除序列。

DROP SEQUENCE myseq RESTRICT

生成和获取序列值

序列是一种数据库对象,因此对序列的访问也是由权限来控制的。缺省情况下,只有序列的创建者,即SYSADM 和DBADM 拥有该对象的USAGE 权限。如果希望其他用户也能够使用序列,则需要使用下面的语句:

GRANT USAGE ON SEQUENCE seq_object_name TO PUBLIC

有两种表达式可用于生成和获取序列值。NEXTV AL FOR seq-name 用于获取下一个序列值,而PREVV AL FOR seq-name 则用于获取上一个生成的序列值。下面的例子例释了这些表达式的使用。

相关文档
最新文档