DB2数据库对象基础知识.doc

上传人:scccc 文档编号:12599666 上传时间:2021-12-04 格式:DOC 页数:4 大小:28.50KB
返回 下载 相关 举报
DB2数据库对象基础知识.doc_第1页
第1页 / 共4页
DB2数据库对象基础知识.doc_第2页
第2页 / 共4页
DB2数据库对象基础知识.doc_第3页
第3页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《DB2数据库对象基础知识.doc》由会员分享,可在线阅读,更多相关《DB2数据库对象基础知识.doc(4页珍藏版)》请在三一文库上搜索。

1、DB2 数据库对象基本数据库对象数据库对象是一个数据库的构造块(building block )。DB2提供了不同类型的数据库对象来存储和表示不同信息。 通过使用数据定义语言 (DDL ),可以创建、 修改和删除数据库对象。 要操纵数据库对象, 可以使用数据操纵语言 (DML ),例如 SELECT 、UPDATE 、INSERT 和 SELECT 语句。常用的数据库对象有:表用户定义数据类型约束视图索引除了 Family Fundamentals 教程里介绍的一些数据库对象外,还有一些其他的对象,很多开 发人员在开发 DB2 应用程序时会发现这些对象比较有用。本节我们将介绍这些对象。在继续之

2、前,有一点要注意:在下面看到的一些例子中, 对象名称是以小写形式指定的。无 论 DB2 在哪个平台上运行, 它总是以大写形式存储名称, 除非标识符的名称以双引号 ( "" ) 括起来了。例如,下面的语句创建一个名为employee (小写)的表,该表的列定义与表EMPLOYEE(大写)是一样的。CREATE TABLE "employee" LIKE employee别名别名(alias)是指一个已有的表、视图的另一个名称,也叫昵称(nickname)。别名也可以作为另一个别名的昵称。 与这些对象一样, 别名也可以被创建或删除, 可以有与之相关的注 释。

3、下面是 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 行)。使用别名时无需专门的授权或权限。不过,需要获得

4、与别名所引用的底层对象相关的授权。关于数据库对象权限的完整清单,请参考DB2 DBA认证教程Server management (请参阅参考资料)。前面已提到, 我们也可以为 昵称 创建别名。 昵称是引用位于联邦系统上的数据表或视图的 数据库对象。联邦数据库支持超出了本教程的范围。在本教程系列的第2 部分, Datamanipulation ,我们将学习更多有关联邦系统的知识。要为别名添加注释,可以发出以下语句:COMMENT ON aliastab1 IS 'My first alias on tab1'要删除一个别名,使用 DROP 语句,这与所有其他数据库对象是一样的:D

5、ROP ALIAS aliastab1序列对象序列(sequenee)是一种数据库对象, 这种对象允许自动生成值。序列对象与标识列 (identitycolumn)不同,标识列是要与一个特定的表绑在一起的,而序列是一种全局的、 独立的对象,同一个数据库中的任何表都可以使用它。标识列是序列对象的一种特例。 因此, 标识列的特征也适用于序列对象。 下面就例释了一条CREATE SEQUENCE 语句:CREATE SEQUENCE myseq AS INTEGERSTART WITH 360INCREMENT BY 10NO MAXV ALUECYCLECACHE 20任何包括 0 在内的数字数据

6、类型都可用于序列值。 这些类型包括 SMALLINT 、 INTEGER 、 BIGINT 或DECIMAL。基于这些数据类型的任何用户定义独特类型( distinct type )也都可 以用于序列值。这进一步扩展了用户定义独特类型在应用程序中的使用。如上面的例子所示,您可以为序列对象指定起始值,从而自定义序列对象。在这个例子中, 序列的第一个值是 360。后续值的生成是由 INCREMENT BY 子句控制的。 这里还支持正、负常量,以产生升序和降序值。缺省情况下,一个序列所生成的最小值和最大值是由该序列数据类型的取值范围来界定的。 例如, INTEGER 类型的序列值必须处在 -2,14

7、7,483,647 到 2,147,483,647 之间的范围内。 在 DB2 SQL Reference Guide 中可以找到所有数字数据类型的取值范围。 为了改变这种缺省 行为, 可以使用 MINV ALUE 和 MAXV ALUE 选项来为生成的值设置一个边界。 如果达到 了最小值或最大值,那么可以使用另一个选项,即 CYCLE 或 NO CYCLE 来规定序列值 是否应该循环。注意,如果 CYCLE 生效,则序列就可以生成重复的值。CACHE 选项允许 DB2 将一些预先分配好空间的值保留在内存中, 以提高性能。 CACHE 20 是缺省的行为。关于这个选项有一点要谨记:如果在所有缓

8、存的值被使用之前关闭DB2 ,那么任何缓存的值和未使用的值都将被丢弃。 当 DB2 重新启动时, 又会生成和缓存下一块 的值,从而造成值之间的不连续,即值之间存在间隔。如果应用程序不允许值之间有间隔, 可以考虑使用 NOCACHE 选项。如果没有使用缓存, 则性能就会下降, 因为要频繁地生成序列数字。 每当生成一个新值的时 候,都会写下一条日志记录。因此, 更高效的做法是根据请求来获取值,并将这些值缓存在 内存中。通过 ALTER SEQUENCE 语句,可以更改序列对象的特征。除了序列值的数据类型以外, 上面所讨论的所有的设置都可以修改。 要获得完整的语法, 请参考 DB2 SQL Refe

9、rence Guide (请参阅 参考资料) 。删除一个序列对象与删除任何其他的数据库对象是一样的, 不同之处是这里还要使用到一个 RESTRICT 关键字。这样可以防止在有依赖的情况下删除序列。DROP SEQUENCE myseq RESTRICT生成和获取序列值序列是一种数据库对象, 因此对序列的访问也是由权限来控制的。 缺省情况下, 只有序列的 创建者,即 SYSADM 和 DBADM 拥有该对象的 USAGE 权限。如果希望其他用户也能 够使用序列,则需要使用下面的语句:GRANT USAGE ON SEQUENCE seq_object_name TO PUBLIC有两种表达式可用

10、于生成和获取序列值。 NEXTV AL FOR seq-name 用于获取下一个序列值, 而 PREVV AL FOR seq-name 则用于获取上一个生成的序列值。 下面的例子例释了这些表达 式的使用。INSERT INTO t1 V ALUES (NEXTV AL FOR myseq, 'BOB');INSERT INTO t1 V ALUES (NEXTV AL FOR myseq, 'PAT'); COMMIT;INSERT INTO t1 V ALUES (NEXTV AL FOR myseq, 'GENE');ROLLBACK;IN

11、SERT INTO t1 V ALUES (NEXTV AL FOR myseq, 'PAUL');VALUES PREVVAL FOR myseq INTO :hostvar假设我们以一个空表 t1 开始, myseq 的下一个序列值是 1。如果禁用了 autocommit ,则 在执行上述语句之后, t1 将包含下面几行:1 NAME 1 BOB2 PAT4 PAUL3 record(s) selected.虽然为 GENE 生成的值被回滚了, 但是 DB2 并没有再次使用它。 因而,下一个为 PAUL 生 成的序列值就是 4,而不是 3。这个例子中的最后一条语句展示了如何

12、使用 PREVVAL 表达式。宿主变量 :hostvar 存储当 前会话中生成的最后一个值。 如果想保存前面生成的值, 那么应该在生成下一个值之前保存 PREVV AL 值。临时表顾名思义,临时表(temporary table)不是永久性的数据库对象。临时表与普通的表在行为 上是一样的,不同之处是,并非所有的功能和选项都是受支持的和/或是必需的。临时表只能维持在一次连接期间。当连接关闭时,在此连接内声明的所有临时表都将自动删除掉。只有声明临时表的会话或应用程序才能访问临时表。 如果两个应用程序用相同的名字创建了 一个临时表, 该临时表的每个实例仍然是惟一的。 因而, 完全不必担心出现临时数据冲突的 情况。由于临时表只允许单连接( single-connection )访问,因此这里无需使用锁。这正是 临时表的一个主要的性能优势。声明临时表要声明一个临时表, 必须存在一个 USER 临时表空间 (不同于 SYSTEM 临时表空间) ,用 以存储临时表的定义和内容。 SYSTEM 临时表空间只是 DB2 在内部用来执行诸如排序之

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1