学习笔记:DB2 V9 管理 - 6
申明:欢迎转载,但请先告知,谢谢。
----------------------------------------------------------------------
--学习笔记:DB2 V9 管理 - 6 --彭建军 --最新更新时间:7 ---------------------------------------------------------------------- DB2 9 管理 第 2 部分: 数据放置
五、创建和维护不同的 DB2 对象
下面的语句:
create bufferpool BP1 size 25000 创建一个名为 BP1 的缓冲池,其大小为 100 MB(25,000 个 4 KB 的页面)。由于没有指定页宽,缓冲池使用默认的 4 KB 页宽。由于 IMMEDIATE 选项是默认的,因此只要有足够的可用内存来满足请求,就可以立即为缓冲池分配空间并使之可用。 下面的语句: create bufferpool BP2 deferred size 25000 pagesize 8 K 创建一个名为 BP2 的缓冲池,其大小为 200 MB (25,000 个 8 KB 的页面)。该缓冲池使用 8 KB 的页宽。由于指定了 deferred 选项,因此直到数据库被停止并重新启动时才会为该缓冲池分配空间。 2、 表 (1)、为了在数据库中创建一个表,必须首先连接到该数据库。您还必须有实例中的 SYSADM 权限,或者数据库中的 DBADM 权限或 createtab 特权。 当创建一个表时,可以指定以下方面: ● 模式 ● 表名 ● 列定义 ● 主/外键 ● 用于数据、索引和大型对象的表空间 (2)、如果在创建一个表时没有使用 in 子句,那么将按以下顺序放置表数据(及其索引和 LOB 数据): ● 如果有 IBMDEFAULTGROUP 表空间,并且该表空间的页宽足够大,则放在这个表空间中。 ● 放在一个用户创建的表空间中,该表空间具有能满足表的最小页宽。 ● 如果有 USERSPACE1 表空间,并且该表空间的页宽足够大,则放在 USERSPACE1 中。 IN、INDEX IN 和 LONG IN 子句指定将在其中存储常规表数据、索引和大型对象的表空间。注意,这只适用于 DMS 表空间。 更详细的描述,请参考以前的笔记,这里就不再描述了。 (3)、 获取表信息 可以使用以下命令来获取表信息: 列出用于当前用户的表 list tables 列出数据库中定义的所有表 list tables for all 列出指定模式中的表 list tables for schema schemaname 显示指定的表的结构 describe table tablename 3、 索引 (1)、索引可以: ● 按升序或降序排列(默认情况下,如果没有指定,则按升序)。 ● 是惟一的(unique)或非惟一(non-unique)的(默认情况下,如果没有指定,则为非惟一的)。 ● 是复合的。 ● 用于实施聚合。 ● 是双向的 —— 这是由 allow 或 disallow reverse scans 控制的。 ● 包括附加的列 —— 这只适用于惟一索引。 (2)、下面有一些 create unique 语句演示了这些选项: create unique index itemno on albums (itemno) desc create index clx1 on stock (shipdate) cluster allow reverse scans create unique index incidx on stock (itemno) include (itemname) create index item on stock (itemno) disallow reverse scans collect detailed statistics (3)、关于标识列,标识列(identity column)是表中的一个数字列,它导致 DB2 为每个被插入表中的行生成一个惟一的数值。一个表最多只能有一个标识列。这个列的值可以通过 DB2 always 或 by default 两种方式生成: ● 如果这些值按 always 方式生成,则总是由 DB2 数据库生成这些值,应用程序不能提供显式的值。 ● 如果这些值按 by default 方式生成,那么可以由应用程序显式地提供这些值;只有在应用程序没有提供值的情况下,才由 DB2 生成一个值。 因此,DB2 不能保证这些值是惟一的。该选项用于数据传播,或者装载和卸载一个表。 一般地,定义一个标识列可以使用如下的语句: ……Column1 INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1)…… 5、 视图 (1)、视图是从一个或多个基本表、别名或视图中派生出来的,在检索数据时与基本表可以互换使用。当更改一个视图中的数据时,表本身中的数据也随之更改。通过创建视图,可以限制对敏感数据的访问,同时允许对其他数据的访问。 视图中的数据并不是存储在表之外的。换句话说,虽然视图的定义在系统编目中占用了空间,但是视图本身并不占用数据库中的空间。 视图的创建者至少需要拥有视图定义中引用的基本表上的 SELECT 特权。 关于所有已有视图的信息存储在: ● SYSCAT.VIEWS ● SYSCAT.VIEWDEP ● SYSCAT.TABLES (2)、 关于with check option with check option 指定以下约束,即通过一个视图插入或更新的每一行必须符合视图的定义。不符合视图定义的行就是不满足视图的搜索条件的行。 例如,下面的命令: create view emp_view2 (empno, empname, deptno) AS (SELECT id, name, dept FROM employee WHERE dept = 10)with check option 当该视图被用于插入或更新新的值时,with check option 限制 dept 列的输入值。 [示例]-[创建视图]: CREATE VIEW EMPSALARY AS SELECT EMPNO, EMPNAME, SALARY FROM PAYROLL, PERSONNEL WHERE EMPNO=EMPNUMB 6、 约束 (1)、DB2 中有很多类型的约束: ● 参照完整性约束 ● 惟一性约束 ● 检查约束 ● 信息约束 约束是不能直接修改的,必须先删除约束,然后用您想要的特征创建一个新的约束。 下面分别讨论每种约束。 (2)、 参照完整性约束 在创建数据库,或创建数据库后使用 alter table 语句时,将定义参照完整性约束。 建立参照完整性的子句有: ● primary key 子句 ● unique constraint 子句 ● foreign key 子句 ● references 子句 例如: create table artists (artno INT, ... primary key (artno) foreign key dept (workdept) references department on delete no action) 我们来看看各种不同的参照完整性规则。 插入规则 : ● 有一条隐含的规则,即当被插入行的父行不存在时,不能插入。 删除规则 : ● 限制:如果仍有从属的行,则父行不能删除。 ● 级联:删除父表中的一行同时也会删除从属表中所有相关的行。 ● 无动作(默认情况):在应用所有其他参照约束后,对于每个子行,都强制要求父行的存在。 ● 设置 Null:外键字段设为 null;其他列保持不变。 更新规则 : ● 限制: 如果从属表中的一行与键的初值相匹配,那么对父键的更新将被拒绝。 ● 无动作(默认情况):如果在从属表中没有匹配的行,那么对父键的更新将被拒绝。 (2)、 惟一性约束 惟一性约束可以用作一个外键约束的主键,就像显式声明的主键一样。这允许将 RI 约束(请参阅 参照完整性约束)放在同一个表中的不同列上。 惟一性约束迫使列中的值是惟一的;列不能包含 null 值。 (3)、 检查约束 检查约束用于强制实施表级的数据完整性。它迫使表中的值符合约束。随后所有的插入和更新都必须遵从表上定义的约束,否则该语句将失败。 如果表中已有的行不满足约束,则不能定义该约束。为了加快添加大量数据时的速度,可以关闭约束检查,但是表将处在 CHECK PENDING 状态。 (4)、 信息约束 信息约束是可以由优化器使用的规则,但不是在运行时实施。对于插入、更新或删除操作,其他约束可能导致额外的开销,因此,如果应用程序已经对数据进行了验证,那么使用信息约束也许是更好的方案。 信息约束可以是: ● ENFORCED:该约束由数据库管理器在常规操作(例如插入、更新或删除)期间实施。
● NOT ENFORCED:如果使用该约束,当表中任何数据违反该约束时,DB2 可能返回错误的结果。
● ENABLE QUERY OPTIMIZATION:在适当环境下,该约束可用于查询优化。
● DISABLE QUERY OPTIMIZATION:该约束不能用于查询优化。
7、 触发器 触发器(trigger)定义一组动作,这组动作由指定的基本表上的一个动作激活或触发。被触发的动作可能导致对数据库的其他更改,或产生一个异常。触发器可以在插入、更新或删除之前 或之后 触发。 触发器用于: ● 验证,这类似于约束,但是更为灵活。 ● 调节,允许将新的数据修改或调整为一个预定义的值。 ● 完整性,类似于参照完整性,但是更为灵活。
待续……
|