DB2 基础

您所在的位置:网站首页 db2重复数据取一条 DB2 基础

DB2 基础

2023-04-05 03:02| 来源: 网络整理| 查看: 265

 Short Name:Configuration Assistant,CA

需要连接到 DB2 数据库的用户应该在本地工作站上对数据库编目。为了做到这一点,用户可使用 CATALOG 命令或 DB2 配置助手(Configuration Assistant,CA)

EXTENTSIZE:数据块(extent)是表空间的容器内的空间单位。数据库对象(LOB 和 long varchar 除外)存储在 DB2 的页中。这些页组成数据块。数据块大小是在表空间级别定义的。表空间的数据块大小一旦建立,就不能改变。数据库配置参数 DFT_EXTENT_SZ 指定数据库中所有表空间的缺省数据块大小。该值可以从 2 到 256 页;因此 4 KB 页的绝对大小可以从 8 KB 到 1024 KB,8 KB 页的绝对大小可以从 16 KB 到 2048 KB。可通过在 CREATE TABLESPACE 语句中使用 EXTENTSIZE 参数覆盖这一数字。

PREFETCHSIZE:顺序预取是数据库管理器预先使用查询的能力,即在实际引用那些页之前读取它们。这种异步检索可以极大地缩短执行时间。您可以通过改变 CREATE TABLESPACE 语句上的 PREFETCHSIZE 参数来控制预取执行的强度。缺省情况下,该值被设置为 DFT_PREFETCH_SZ 数据库配置参数。该值表示当 DB2 触发预取请求时,一次要读取多少页。通过将该值设置为数据块大小的倍数,就可以并行读取多个数据块。当表空间的容器在单独的硬盘上时,这一功能甚至更有效。

DECLARE 语句与 CREATE 语句是类似的,只有一点例外,用它所创建的是只能在数据库连接期间存在的临时表。

ALTER 语句可以用来更改现有数据库对象的一些特征,包括:

    * 缓冲池    * 表    * 表空间    * 视图

您不可以改变索引。如果您想要更改索引,那么就必须删除它然后用不同的定义创建一个新的。

您可以删除任何 SQL CREATE 或 DECLARE 语句所创建的对象 -- Drop,包括:

    * 缓冲池    * 事件监控程序    * 函数    * 索引    * 模式    * 存储过程    * 表    * 表空间    * 触发器    * 视图

DB2中  '%' -- 表示任意多个字符       '-' -- 表示任意一个字符

DML --> Data Manager Language DDL --> Data Defined LanguageDCL --> Data Control Language

左外连接包括内连接加上在左表中但内连接不会返回的那些行。这类连接在 FROM 子句中使用 LEFT OUTER JOIN(或 LEFT JOIN)运算符。右外连接包括内连接加上在右表中但内连接不会返回的那些行。这类连接在 FROM 子句中使用 RIGHT OUTER JOIN(或 RIGHT JOIN)运算符。全外连接包括内连接加上在左表和右表中但内连接不会返回的那些行。这类连接在 FROM 子句中使用 FULL OUTER JOIN(或 FULL JOIN)运算符。

UNION 集合运算符会把两个或两个以上其它结果表合并生成一个结果表。EXCEPT 集合运算符生成一个结果表时,把第一个查询返回的所有行包括在内,但不计第二个以及其后的所有查询。INTERSECT 集合运算符提供只包括由所有查询都返回的行来生成一个结果表。

SELECT sales_date, MAX(sales) AS max_sales FROM sales GROUP BY sales_date这条语句将从 SALES 表中返回销售日期的列表。SAMPLE 数据库中的 SALES 表包含销售数据,包括哪个推销员在哪天做成了多少笔交易。通常每天都有一条以上的记录。GROUP BY 子句根据销售日期把数据分组,在本示例中 MAX 函数(请参阅使用函数来转换数据)将返回所记录的每个销售日的最大销售量。

通常 HAVING 子句和 GROUP BY 子句一起使用可以检索出只满足某个特定条件的组作为结果。HAVING 子句可以包含一个或多个断言,把组的某个特性同该组的另一个特性或常量相比较。例如:"SELECT sales_person, SUM(sales) AS total_sales FROM sales   GROUP BY sales_person   HAVING SUM(sales) > 25"

#指定一个全选择(fullselect)来标明要从其它表或视图复制过来的数据。全选择是生成结果表的语句。例如:CREATE TABLE pers LIKE staffINSERT INTO pers  SELECT id, name, dept, job, years, salary, comm    FROM staff    WHERE dept = 38

可以使用 SQL CALL 语句从 DB2 命令行调用 SQL 过程

用于创建用户定义的数据类型(UDT)的工具

也可以使用 CREATE TABLE SQL 语句创建与数据库中另一个表或视图相似的表:CREATE TABLE MYBOOKS LIKE BOOKS

在 BOOKS 表中,BOOKID 是为每本书指派的唯一号码。可以用 GENERATED ALWAYS AS IDENTITY 指定 DB2 生成 BOOKID,而不必让应用程序生成标识符:CREATE TABLE BOOKS ( BOOKID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY                                             (START WITH 1, INCREMENT BY 1),                      BOOKNAME VARCHAR(100) WITH DEFAULT 'TBD',                      ISBN CHAR(10) )

CREATE TABLE AUTHORS (AUTHORID INTEGER NOT NULL PRIMARY KEY,                      LNAME VARCHAR(100),                      FNAME VARCHAR(100),                      FICTIONBOOKS INTEGER,                      NONFICTIONBOOKS INTEGER,                      TOTALBOOKS INTEGER GENERATED ALWAYS                                  AS (FICTIONBOOKS + NONFICTIONBOOKS) )

DB2 提供三种约束:

    * 唯一性约束,用于确保列中的值是唯一的。    * 参照完整性约束,用于定义表之间的关系,并确保这些关系持续有效。    * 表检查约束,用于验证列数据没有违反为列定义的规则。

可将唯一性约束定义成 PRIMARY KEY 或 UNIQUE 约束。可在创建表时将这些约束作为 CREATE TABLE SQL 语句的一部分来定义,或者在创建表之后用 ALTER TABLE 语句添加这些约束。

BOOKS 表与 AUTHORS 表之间就有这样一个关系 ― 每本书有一个作者,而且那个作者必须存在于 AUTHORS 表中。每个作者都有一个唯一标识符存储在 AUTHORID 列中。AUTHORID 在 BOOKS 表中用于标识每本书的作者。要定义这种关系,可将 AUTHORS 表的 AUTHORID 列定义为主键,然后为 BOOKS 表定义一个外键以便和 AUTHORS 表中的 AUTHORID 列建立关系

CREATE TABLE AUTHORS (AUTHORID INTEGER NOT NULL PRIMARY KEY,                      LNAME VARCHAR(100),                      FNAME VARCHAR(100))CREATE TABLE BOOKS (BOOKID INTEGER NOT NULL PRIMARY KEY,                    BOOKNAME VARCHAR(100),                    ISBN CHAR(10),                    AUTHORID INTEGER REFERENCES AUTHORS)

    *

      DB2 会确保只向定义了参照完整性约束的列插入有效数据。这意味着在父表中必须始终有这样的一行,其键值等于您正插入从属表的行中的外键值。例如,如果将一本新书插入(AUTHORID 为 437 的)BOOKS 表中,那么在 AUTHORS 表中必须已经有 AUTHORID 为 437 的一行。    *

      当从父表中删除在从属表中有从属行的行时,DB2 也会强制遵守规则。DB2 采取的行动取决于为表定义的删除规则。可指定的规则有四种:RESTRICT、NO ACTION、CASCADE 和 SET NULL。

          o 如果指定 RESTRICT 或 NO ACTION,则 DB2 不允许删除父行。必须先删除从属表中的行才能删除父表中的行。这条规则是缺省值,所以在我们定义 AUTHORS 和 BOOKS 表时,对这些表应用了这一规则。          o 如果指定 CASCADE,则从父表中删除行时也会自动删除所有从属表中的从属行。          o 如果指定 SET NULL,则从父表中删除父行时,从属行中的外键值被设置为空(如果可为空的话)。

    *当更新父表中的键值时,可指定两种规则:RESTRICT 和 NO ACTION。如果从属表中有从属行,RESTRICT 将不允许更新键值。如果更新结束时,从属表中有的从属行在父表中没有父键,则 NO ACTION 会使对父键值的更新操作被拒绝。

表检查约束

    假定我们给 BOOKS 表添加一个表示书籍类型的列,并且我们希望允许的值是 F(小说)和 N(非小说)。我们可以如下添加带检查约束的 BOOKTYPE 列:    ALTER TABLE BOOKS ADD BOOKTYPE CHAR(1) CHECK (BOOKTYPE IN ('F','N') )

视图:    视图允许不同的用户或应用程序以不同的方式查看同一数据。它不仅使数据更易于访问,而且可以利用它限制某些用户能够查看或更新的行和列。    CREATE VIEW NONFICTIONBOOKS AS            SELECT * FROM BOOKS WHERE BOOKTYPE = 'N'        DROP VIEW NONFICTIONBOOKS    当您创建视图时,可以把它定义成只读视图或可更新视图。        如果视图的行可映射至基表的行,则视图是可更新的

带检查选项的视图:        前面定义的 NONFICTIONBOOKS 视图只包括 BOOKTYPE 为 N 的行。如果您将 BOOKTYPE 为 F 的行插入该视图,DB2 将把该行插入到基表 BOOKS。但是,如果随后从视图进行选择操作        ,您无法通过该视图看到新插入的行。如果您不希望用户插入视图范围以外的行,可以用 check option 定义该视图。用 WITH CHECK OPTION 定义视图就是告诉 DB2 检查使用该视图的语句        是否满足视图的条件。

    以下语句用 WITH CHECK OPTION 定义了一个视图:    CREATE VIEW NONFICTIONBOOKS AS                SELECT * FROM BOOKS WHERE BOOKTYPE = 'N'               WITH CHECK OPTION

带检查选项的嵌套视图:

索引:    索引是表中一列或多列的键值的有序列表。创建索引的原因有两个:

        * 确保一列或多列中值的唯一性。        * 提高对表进行查询的性能。为了在执行查询时提高性能,或以索引的顺序显示查询结果,DB2 优化器会使用索引。        可将索引定义为唯一的或非唯一的。非唯一索引允许有重复键值;唯一索引只允许一个键值在列表中出现一次。唯一索引确实允许出现一次空值。但第二个空值会造成重复,因此是不允许的。

    CREATE INDEX IBOOKNAME ON BOOKS (BOOKNAME)

    CREATE INDEX I2BOOKNAME ON BOOKS (AUTHOID DESC, BOOKNAME ASC)    

双向索引:    如果应用程序需要数据同时以相反的顺序排序,DB2 允许创建双向索引。    双向索引消除了创建逆向索引的需要,而且消除了用优化器按逆向排列数据的需要。它还允许高效地检索 MIN 和 MAX 函数值        CREATE INDEX BIBOOKNAME ON BOOKS (BOOKNAME) ALLOW REVERSE SCANS        DB2 将不允许您用同一定义创建多个索引。这一点甚至适用于为支持主键或唯一性约束而隐式创建的索引。(不能在唯一递增的主键上建立索引(已经类似于索引了,同一定义))    因此,既然 BOOKS 表已经有了对 BOOKID 列定义的主键,那么试图对 BOOKID 列创建索引的操作将会失败。

    创建索引需要较长的时间。DB2 必须读每一行来抽取键,将那些键排序,然后将列表写到数据库。如果表很大,则用临时表空间对键进行排序。

    DB2 也提供了 DROP INDEX SQL 语句用于从数据库中除去索引。索引是无法修改的。如果需要更改索引(例如,给键添加另一个列),必须删除而后重新创建它。

群集索引--clustering index:    在插入期间,DB2 会试图将新的行放置得靠近有相似键的行。然后,在查询请求以群集索引序列排序的数据期间,可以更快地检索数据。    CREATE INDEX IAUTHBKNAME ON BOOKS (AUTHORID,BOOKNAME) CLUSTER   如果编写的查询要列出作者及其所写的所有书籍,这种索引会提高查询的性能

在索引中使用包括的列:    在创建索引时,您可以选择包括额外的列数据,该数据与键存储在一起,但实际上并不属于键本身,而且不会被排序。    在索引中包括额外的列主要是为了提高某些查询的性能:如果数据可在索引页中获得,DB2 就不需要访问数据页来获取它了。只能对唯一索引定义包括的列。        SELECT BOOKID,BOOKNAME FROM BOOK ORDER BY BOOKID    对应索引如下:    CREATE UNIQUE INDEX IBOOKID ON BOOKS (BOOKID) INCLUDE(BOOKNAME)

    结果是,查询结果所需的全部数据都在索引中,不需要检索任何数据页。    那为什么不干脆在索引中包括所有数据呢?首先,这需要更多的数据库物理空间,因为必然要在索引复制表数据。其次,每当更新数据值时,数据的所有副本都需要得到更新,在有许多更新发生的数据库中,这将是极大的开销。 创建索引时的一些考虑事项:    因为索引是持久的键值列表,它们在数据库中需要空间。因此创建许多索引将在数据库中需要较多的存储空间。所需的存储空间量由键列的长度决定    索引是值的额外副本,所以如果表中的数据被更新,索引也必须被更新。如果表数据经常被更新,请考虑额外的索引对更新性能有什么样的影响。    当对适当的列定义了索引时,索引将极大地提高查询的性能。        Index Advisor 工具来帮助您确定要定义哪些索引。Index Advisor 允许您指定对某个表要执行的工作量,而且它将推荐要为该表创建的索引。

DB2 Extender 是用户定义的类型的应用程序。可以从 IBM 和其它软件供应商那里获得各种 DB2 Extender。一些可用的扩展器可用于文本、音频、视频、图像和 XML。

connect to the remote server

           Using Configuration Assistant tool to configure the remote server address, port, database, alias.

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3