DB2培训

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
临时表必须由模式名 SESSION 显式(否则将隐式)限 定,因为每个定义声明过的表的会话对该临时表都有 自己的(可能是唯一的)描述。
数据操作语言(DML)
SELECT 语句用于检索表或视图数据。要限制结果集中 的行数,请使用 FETCH FIRST 子句。使用 DISTINCT 子句来消除结果集中重复的行。
使用 DECLARE 语句生成新的数据库对象 DECLARE 语句与 CREATE 语句是类似的,只有一点例
外,用它所创建的是只能在数据库连接期间存在的临 时表。 当您要用到中间结果时,临时表挺有用的。
当您声明临时表时,不会更新LOBAL TEMPORARY TABLE
SMS 表空间需要的维护很少。然而,SMS 表空间提供 的优化选项较少,并且性能也许不及 DMS 表空间。
结构化查询语言(SQL)
大多数 SQL 语句包含一个或多个下列语言元素:
– 字符:单字节字符可以是一个字母)、一个数字或一个特殊
字符
– 标记:标记是一个或多个字符的序列。标记不能包含空格,
除非它是定界标识符或字符串常量。
1. 在 DYNAMIC RESULT SETS 子句中声明 SQL 过 程要返回的结果集的数量。
2. 对于将要返回的每个结果集,在过程主体中(使用 WITH RETURN FOR 子句)声明一个游标
(cursor)。游标是一个命名的控制结构,应用程
序用它来指向一个有序行集合中的某一特定行。游 标用于从集合中检索行。
CLIENT USERID
CURRENT QUERY PTIMIZATION
CLIENT WRKSTNNAME
CURRENT DATE
CURRENT REFRESH AGE CURRENT SCHEMA
专用寄存器
CURRENT
CURRENT SERVER
DBPARTITIONNUM
CURRENT DEFAULT CURRENT TIME TRANSFORM GROUP
数据定义语言(DDL)
CREATE 语句用于创建数据库对象,包括:
– 缓冲池(Buffer pool) – 事件监控程序(Event monitor) – 函数(Function) – 索引(Index) – 模式(Schema) – 存储过程(Stored procedure) – 表(Table) – 表空间(Table space) – 触发器(Trigger) – 视图(View)
表空间在数据库内创建,表则在表空间内创建。
DB2 支持两种表空间:
– 系统管理的空间(System-Managed Space,SMS): 这里,操作系统的文件系统管理器分配并管理空间,其中表 是缺省表空间类型。
– 数据库管理的空间(Database-Managed Space, DMS):这里,数据库管理器控制存储空间。这种表空间实 质上是特殊用途文件系统的实现,旨在最好地满足数据库管 理器的需要。
INSERT INTO sales (sales_date,
sales_person, region, sales) VALUES
(CURRENT DATE, 'SMITH', 'Manitoba', 100)
数据控制语言(DCL)
模式
模式是命名对象(如表、视图、触发器和函数)的集合。
模式提供了对象在数据库中的逻辑分类。对象名由两 部分组成,模式名用作第一部分。例如,考虑名称
条件表达式都可以用于根据对一个或多个条件的求值指定一 个特定结果。
– 断言:断言指定了一个条件,对于给定的行或组这个条件可
能是真(true)、假(false)或者未知(unknown)。断言 有一些子类型:
• 基本断言对两个值进行比较(例如,x > y)。 • BETWEEN 断言把一个值同某一范围内的值进行比较。 • EXISTS 断言测试某些行的存在性。 • IN 断言把一个或多个值同一个值的集合进行比较。 • LIKE 断言搜索具有某种模式的字符串。 • NULL 断言测试空值。
SMITH.STAFF。在这个示例中,STAFF 表的全限定
名称包括模式名 SMITH 以使其同其它任何在系统目 录中被命名为 STAFF 的表区分开来。 模式本身就是一个数据库对象。可以使用 CREATE SCHEMA 语句显式创建模式;也可以在创建另一个对 象时隐式创建模式。
模式有与之相关联的特权。这允许模式所有者可以控制 哪些用户有特权在模式中创建、修改和删除对象。
表、索引、长字段(有时称为二进制大对象或 BLOB) 是在 DB2 数据库内创建的对象这些对象被映射到表 空间,而表空间本身则被映射到物理磁盘存储器。
表是一个无序的数据记录集。它由列和行构成,通常称
之为记录。
索引是与单个表相关联的物理对象。索引用来在表中强
制实施唯一性(也就是说,确保没有重复值),以及 在检索信息时改进性能。
CURRENT DEGREE CURRENT TIMESTAMP
CURRENT EXPLAIN CURRENT TIMEZONE MODE
CURRENT EXPLAIN USER SNAPSHOT
专用寄存器
为了要说明专用寄存器多么有用,请考虑一下 SALES 表,其中有一列,列名是 Sales_Date。下面的语句 向 SALES 表中插入一个新行,把销售日期设置成 CURRENT DATE 专用寄存器的值:
CREATE PROCEDURE sales_status (IN quota INTEGER, OUT sql_state CHAR(5)) DYNAMIC RESULT SETS 1 LANGUAGE SQL BEGIN DECLARE SQLSTATE CHAR(5); DECLARE rs CURSOR WITH RETURN FOR SELECT sales_person, SUM(sales) AS total_sales FROM sales GROUP BY sales_person HAVING SUM(sales) > quota; OPEN rs; SET sql_state = SQLSTATE; END @
长字段(或 BLOB)是表内的一种数据类型。这种数据
类型通常由非结构化数据(图像、文档和音频文件) 构成,并且包含数量极大的信息。在表内存储这种数 据会导致删除、插入和操作这些对象时的过度开销。 所以并不直接将它们存储在表的行中。
DMS 和 SMS 表空间
表空间是数据库和存储在该数据库中的表之间的逻辑层。
session.temp1 LIKE employee ON COMMIT
PRESERVE ROWS NOT LOGGED IN mytempspace
在这个示例中,DECLARE GLOBAL TEMPORARY TABLE 语句被用来声明一个临时表,表名是 TEMP1, 位于用户现有的一个名叫 MYTEMPSPACE 的临时表 空间。每当处理 COMMIT 语句时,临时表中的行就会 被保留下来(不会被删除)。最后,对临时表所做的 更改不会记入日志。
– 标识符:SQL 标识符是用于构成名称的标记。 – 数据类型:值的数据类型决定了 DB2 如何解释该值。DB2
支持许多内置数据类型,也支持用户定义的数据类型
– 常量:常量指定一个值。
– 函数:函数是一组输入数据值和一组结果值之间的关系。数
据库函数可以是内置的,也可以是用户定义的。
– 表达式:表达式指定一个值。字符串表达式、算术表达式和
这个名为 SALES_STATUS 的过程接受名为 quota 的 输入参数并返回名为 sql_state 的输出参数。该过程 主体包含了一条 SELECT 语句,该语句返回每个销售 总量超过指定配额的销售人员的姓名和销售总量。
SQL 过程的参数列表可以不指定任何参数,也可以指定 多个参数,每个参数可以是以下三种可能的类型之一:
– IN 参数将一个输入值传递到 SQL 过程;在过程主体中不能修改这 个值。
– OUT 参数从 SQL 过程返回一个输出值。 – INOUT 参数将一个输入值传递到 SQL 过程,并从该过程返回一个
输出值。
SQL 过程可以不返回结果集,也可以返回多个结果集。 在我们的示例中,SALES_STATUS 过程返回一个结 果集。这是通过以下步骤完成的:
1. 连接到 SAMPLE 数据库。
2. 发出以下命令:
db2 -td@ -vf createSQLproc.db2
该 db2 命令指定 -td 选项标志(该标志告知命令行 处理器定义并使用 @ 作为语句终止符)、-v 选项 标志(该标志告知命令行处理器将命令文本回显到 标准输出)和 -f 选项标志(该标志告知命令行处理 器从指定的文件(而不是标准输入)读取命令输 入)。
使用 WHERE 子句指定若干选择条件或搜索条件来在表
或视图中选择某些特定行。搜索条件由一个或多个断
言组成。在构造搜索条件时,请务必要:
– 只对数值型数据类型应用算术运算 – 只在兼容的数据类型间进行比较 – 将字符值括在单引号之内 – 完全按字符在数据库内的值指定字符值
使用集合运算符把两个或两个以上的查询合并成一个查询
您可以使用集合运算符 UNION、EXCEPT 或 INTERSECT 把两个或两个以上的查询合并成一个查询。 集合运算符将处理查询结果、去掉重复结果并返回最终 结果集。
– UNION 集合运算符会把两个或两个以上其它结果表合并生成一 个结果表。
– EXCEPT 集合运算符生成一个结果表时,把第一个查询返回的 所有行包括在内,但不计第二个以及其后的所有查询。
专用寄存器
专用寄存器是数据库管理器为应用程序进程定义的存储
区,用于存储可以在 SQL 语句中引用的信息。目前, DB2 通用数据库支持以下专用寄存器:
CLIENT ACCTNG CLIENT APPLNAME
CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION CURRENT PATH
当成功调用 CREATE PROCEDURE (SQL) 语句(该语 句用应用程序服务器定义 SQL 过程)时,就创建了一 个 SQL 过程。SQL 过程是定义那些每当需要时就可 以调用的更复杂的查询或任务的一种便捷方式。以下 步骤将创建一个命令行处理器(command-line processor,CLP)脚本(名为 createSQLproc.db2), 该脚本将创建一个简单的 SQL 过程:
3. 打开要返回的每个结果集的游标。 4. 当 SQL 过程返回时,仍使游标保持打开。
每当您创建数据库对象时,都会更新系统目录。 请考虑一下 CREATE TABLE示例:
CREATE TABLE org ( deptnumb SMALLINT NOT NULL, deptname VARCHAR(14), manager SMALLINT, division VARCHAR(10), location VARCHAR(13) )
DB2 培训
DB2 逻辑组成图
DB2 数据库由一组对象组成
包含许多下面列出的物理和逻辑对象:
– 表、视图、索引和模式 – 锁、触发器、存储过程和包 – 缓冲池、日志文件和表空间
在以上对象中,有些(如表或视图)帮助确定数据是如何组 织的。
另一些对象(如表空间)引用数据库的物理实现。 剩下的一些对象(如缓冲池和其它内存对象)则仅处理如何
管理数据库性能。
DB2 存储模型
用户处理的实际数据位于表中 表本身位于表空间中。
表空间被用作数据库和包含实际表数据的容器对象之间 的一层。
表空间可包含多个表。
容器是物理存储设备。可以用目录名、设备名或文件名
来标识它。 一个容器分配给一个表空间。一个表空间可以跨越多个
容器。
DB2 存储模型
表、索引、长字段和表空间
– INTERSECT 集合运算符提供只包括由所有查询都返回的行来 生成一个结果表。
SQL存储过程
SQL 过程是一个存储过程,它的主体是用 SQL 编写的。
主体包含了 SQL 过程的逻辑。它可以包括变量声明、
条件处理、控制流语句和 DML。可以在一条复合语句
中指定多条 SQL 语句,该复合语句将这几条语句组合 成一个可执行块。
相关文档
最新文档