DB2 9 使用斥地(733 测验)认证指南,第 1 局部: 数据库对象与编程措施(2)

使用基来源根底理构建根蒂基本
developerWorks








DB2 数据库对象

基本数据库对象

数据库对象是构建数据库的资料。DB2 提供了不同模范的数据库对象,用于存储和默示差其他信息。可运用数据库定义措辞 (DDL) 竖立、删改和删除这些对象。要操纵这些对象,请运用数据库操纵措辞 (DML),该措辞包罗 SELECTUPDATEINSERTSELECT 语句。一些常用的数据库对象如下:

  • 自定义数据模范
  • 约束
  • 视图
  • 索引

要是您对这些基本的数据库对象不太认识,请查阅问题为 “运用 DB2 对象”(developerWorks,2006 年 7 月)的 Family Fundamentals 教程,明了明明配景信息。

除 Family Fundamentals 教程中引见的数据库对象以外,另有一些其他对象,在斥地 DB2 使用递次时比拟无效。本教程将在此局部引见这些对象。

在连气儿学习之前需求看重一点:在本文提供的示例中,对象称谓以小写字母默示。非论 DB2 在何种平台上运转,它老因此大大写形式存储称谓,除非标识符的称谓加了双引号 ("")。

歧,下列语句将竖立一个表 employee(小写),它与表 EMPLOYEE(大大写)具有相反的列定义。

	CREATE TABLE "employee" LIKE employee







回页首



别名

别名 是现有表、视图或昵称的备用名。别名还可作为其他别名的备用名。与对象类似,可竖立或删除别名,别名可拥有相干的疏解。以下是几个 CREATE ALIAS 语句示例:

	CREATE ALIAS aliastab1 FOR tab1;
	CREATE ALIAS bob.aliastab1 FOR tom.tab1;
	CREATE SYNONYM bob.aliastab2 FOR bob.aliastab1;
				


如您所见,CREATE ALIAS 语句十分俭朴。可运用与源对象相反的形式竖立别名(如第一行所示),也可完全限制别名称谓(如第二行所示)。用关键字 SYNONYM 替代 ALIAS(如第三行所示)也无效,这样做是为了与 DB2 for zSeries 兼容。

运用别名不需求具有非凡权限。可是,需求得到引用的底层对象相干的适合受权。要得到数据库对象权限的无缺列表,请查阅问题为 “效劳器办理”(developerWorks,2006 年 6月)的 DB2 DBA 认证教程。

后面提到可认为昵称 竖立别名。昵称是引用勾结系统上数据表或视图的数据库对象。可是,勾结数据库支持横跨了本教程的评论争吵范围。

要给别名添加疏解,可运用以下语句:

	COMMENT ON aliastab1 IS 'My first alias on tab1'


要删除别名,可以与删除任何其他数据库对象一样,运用 DROP 语句:

	DROP ALIAS aliastab1







回页首



序列对象

序列 是容许自动生成值的数据库对象。与绑定到特定表的标识列不同,序列是全局的、自力的对象,可被同一数据库中的任何表运用。

标识列是一种非凡模范的序列对象。因此,标识列的特性也合用于序列对象。下面是 CREATE SEQUENCE 语句示例:

清单 1. CREATE SEQUENCE 语句

                    	CREATE SEQUENCE myseq AS INTEGER
	    START WITH 360   
	    INCREMENT BY 10
	    NO MAXVALUE
	    CYCLE
	    CACHE 20 


任何数值范围包罗零值的整数数据模范都可用作序列值。这些模范包罗 SMALLINTINTEGERBIGINTDECIMAL。基于这些数据模范的自定义非凡模范也都可用作序列值。这进一步扩展了自定义非凡模范在使用递次中的使用。

如下面的清单 1 所示,可以经过过程指定序列的初始值来定制序列对象。在本例中,序列的初始值为 360。后续值的生成由 INCREMENT BY 子句节制。支持运用正、负常量生成升序、降序序列值。

默许状况下,序列生成的最小值和最大大值受序列数据模范限制的约束。歧,INTEGER 序列值必须介于 -2,147,483,647 到 2,147,483,647 的范围之内。可在 DB2 SQL 参考指南(拜见 参考资料)中找到所无数值数据模范的限制。要更改这种约束举动,可运用 MINVALUEMAXVALUE 选项为生成的值设定鸿沟。要是达到最小或最大大值,则可运用另一个称作 CYCLENO CYCLE 的选项来指定序列值能否可轮回。请看重:当 CYCLE 见效时,该序列也许生成重复的值。

CACHE 选项容许 DB2 在内存中保管一些预分拨的值以革新服从。CACHE 20 是默许举动。关于此选项需求看重一点:要是 DB2 在截至时没无效完全部缓存的值,则全部未运用的缓存值将被扬弃。DB2 从新启动后,就会生成并缓存下一组值,招致产生值不同。要是您的使用递次不容许存在值不同,可思索改为运用 NOCACHE 选项。

要是未运用缓存,若序列的数字生成速率很快,服从就会十分糟糕。每生成一个新值时就会写一个日记记载。因此,在一个央求中获取值并将其缓存在内存中,服从更高。

可运用 ALTER SEQUENCE 语句更改序列对象的特性。可以更改下面评论争吵的全部设置,但序列值的数据模范除外。要得到无缺的语法图,请查阅 DB2 SQL 参考指南(拜见 参考资料)。

删除序列对象与删除任何其他数据库对象一样。语句着末的 RESTRICT 关键字用于停止在存在依靠项的状况下删除序列。这是默许举动。您可在语句中显式地指定 RESTRICT 关键字。

DROP SEQUENCE myseq RESTRICT







回页首



生成和检索序列值

序列 是数据库对象的一种模范;因此,其会晤也由权限节制。默许状况下,只要序列的竖立者、SYSADMDBADM 拥有对象的 USAGE 权限。要是企望其他用户能运用该序列,需运用以下语句:

GRANT USAGE ON SEQUENCE seq_object_name TO PUBLIC


要是要更改序列对象的属性,需求有对象的 ALTER 权限:

GRANT ALTER ON SEQUENCE seq_object_name TO GROUP group_name


请查阅问题为 “效劳器办理” 的 DB2 DBA 认证教程,明了明明关于 DB2 平静的更多信息。

系统提供了两个表达式用于生成和检索序列值。NEXT VALUE FOR seq-name 用于得到下一个序列值,而 PREVIOUS VALUE FOR seq-name 用于检索上一个生成的序列值。下面的清单 2 中的示例展示了这些表达式的用法。

清单 2. NEXT VALUE FOR 和 PREVIOUS VALUE FOR 表达式

                    INSERT INTO t1 VALUES (NEXT VALUE FOR myseq, 'BOB');
INSERT INTO t1 VALUES (NEXT VALUE FOR myseq, 'PAT');
COMMIT;
INSERT INTO t1 VALUES (NEXT VALUE FOR myseq, 'GENE');
ROLLBACK;
INSERT INTO t1 VALUES (NEXT VALUE FOR myseq, 'PAUL');
VALUES PREVIOUS VALUE FOR myseq INTO :hostvar


假定以一个空表 t1 入手下手操纵,而且 myseq 的下一个序列值为 1。禁用自动提交,实行下面的语句后,表 t1 将包罗下列行:

1	NAME
-------	-------	
1	BOB
2	PAT
4	PAUL
 3 record(s) selected.


固然生成的 GENE 值发作了回滚,但 DB2 不会重用该值。因此,下一个为 PAUL 生成的序列值为 4 而不是 3。

下面清单 2 中的最后一个语句展示了 PREVIOUS VALUE 表达式的用法。主机变量 :hostvar 存储以后会话中生成的最后一个值。要是企望保管早年生成的任何值,应在生成下一个值之前保管前一个值。





回页首



姑且表

望文生义,姑且表 不是永世数据库对象。姑且表的举动跟平凡表类似,但并不支持或需求全部特性和选项。它只在邻接时期存在。邻接封闭时,个中声明的全部姑且表将被自动删除。

只要声明姑且表的会话或使用递次可会晤该姑且表。要是两个使用递次竖立了同名的姑且表,则表的每个实例是专一的。因此,无需忧郁出现姑且数据抵触的状况;因为姑且表只容许单个邻接会晤,所以无需举办锁定。这是姑且表的主要服从长处之一。





回页首



声明姑且表

要声明姑且表,必须存在 USER 姑且表空间,以便存储姑且表的定义和内容。(USER 姑且表空间与 SYSTEM 姑且表空间不同;后者只在 DB2 内部用于实行排序等操纵。)下面这个俭朴语句竖立一个 USER 姑且表空间:

CREATE USER TEMPORARY TABLESPACE usertempspace
 MANAGED BY SYSTEM USING ('usertempspace')


声明全局姑且表时,支持许多可选子句。 清单 3 中的例子阐释了它们的举动:

清单 3. 全局姑且表支持的可选子句

                    DECLARE GLOBAL TEMPORARY TABLE t_dept 
( deptid CHAR(6), deptname CHAR(20) )
ON COMMIT PRESERVE ROWS 
NOT LOGGED ON ROLLBACK DELETE ROWS
IN usertempspace


在清单 3 中的例子中,姑且表 t_dept 的声明用了两列。ON COMMIT PRESERVE ROWS 子句分析');实行 COMMIT 操纵时,将保管姑且表中的行。

该例子指定对表的更改是 NOT LOGGED。就是说在表上举办的任何拔出、更新或删除操纵都不会留下日记记载。但记载表的竖立和删除。要是竖立表时实行了一组操纵,而且在此之后发作了回滚,则该姑且表将被删除。另一方面,要是删除表时实行了一组操纵,则该表将恢复为没有任何行的空表。

无需运用 IN 子句指定姑且表将要运用的用户姑且表空间。要是不指定此信息,则 DB2 将搜索最适合的表空间。要是无法找到用户姑且表空间,DB2 将激起一个错误。

请看下面的另一个示例:

清单 4. 声明全局姑且表

                    DECLARE GLOBAL TEMPORARY TABLE t_proj 
    LIKE project
    ON COMMIT PRESERVE ROWS
    WITH REPLACE
    IN usertempspace


运用关键字 LIKE 声明姑且表 t_proj,因此它拥有与名为 project 的永世表或视图相反的列定义。ON COMMIT PRESERVE ROWS 子句注解在 COMMIT 时将保管姑且表中的全部行。因此,它们可以在后面的事务中进一步举办处置。

在同一会话中运用同一称谓声明另一个姑且表之前,必须先删除原姑且表。可显式地完成此操纵,也可使用 WITH REPLACE 选项,如清单 4 所示。经过过程 WITH REPLACE 选项,DB2 隐式地删除所无数据和姑且表并运用新定义从新竖立该表。

WITH REPLACE 选项与邻接入池 一同运用时十分便捷。邻接入池是重用数据库邻接的一种机制,停止凭据需求分拨和释放资源。这些操纵很花费资源,尤其是存在少量实行绝对较短事务的邻接时更是如斯。因为没有释放邻接,因此也许没有清理早年运用的姑且表。运用该邻接的下一个使用递次也许得到后面实行所遗留的数据。因此,运用 WITH REPLACE 选项来保证经过过程新定义改革姑且表。





回页首



形式和数据库对象

大大多对折据库对象经过过程形式对象名 来识别。数据库形式提供数据库对象的逻辑分类。下面是这类由两局部组成的对象称谓示例:

DB2ADMIN.EMPLOYEE
HRPROD.AUDIT_VIEW
HRPROD.AUDIT_TRIG


要是会晤数据库对象时未指定形式,则竖立数据库邻接时运用的用户 ID 将被设置为默许形式。歧,要是用户 db2admin 邻接到数据库并竖立表 T1,则 DB2 将竖扬名为 db2admin.T1 的表。全部引用时未限制表 T1 的后续 SQL 语句都将被剖析为 db2admin.T1。





回页首



DB2 特有的注册项:CURRENT SCHEMA

您也许已经看重到:在数据库操纵中,要是用户的用户名就是要操尴尬刁难象的形式名时,运用用户 ID 无意无法邻接到数据库。对使用递次举办硬编码从而完全限制对象也并非最佳料理方案。幸运的是,DB2 容许运用 SET CURRENT SCHEMA 饬令更改以后形式。默许状况下,DB2 特有的注册项 CURRENT SCHEMA 被设置为邻接数据库的 USER。当更改 CURRENT SCHEMA 时,全部未限制的数据库对象都会加上该新值作为前缀。

可运用以下饬令获恰以后形式:

VALUES CURRENT SCHEMA


要更改以后形式,可俭朴地运用下列随意一条饬令:

SET SCHEMA=db2admin
SET CURRENT SCHEMA=db2admin





版权声明: 原创作品,容许转载,转载时请务必以超链接形式标明文章 原始来由 、作者信息和本声明。不然将穷究司法责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1972879.html