读书人

DB2第一步 创办表

发布时间: 2013-03-21 10:08:17 作者: rapoo

DB2第一步 — 创建表

为即将创建的表建立表空间,先建立一个缓冲池,名字:BUFPOL01

CREATEBUFFERPOOL BUFPOL01 IMMEDIATE 立即创建此缓冲池

SIZE250 --大小为250(个4K)

AUTOMATIC --自动管理

PAGESIZE4 K ; --页大小为4K

缓冲池是内存中的一段空间,用于存放数据库管理器从磁盘上读取的数据或修改即将写入磁盘的数据,一个临时的用于存放表或者索引缓存的内存段。

缓冲池能够提高数据库的性能,较少磁盘IO;如果应用程序需要的数据存放于内存中,而不是去读取磁盘,那么性能其性能将会得到很大的改观;

当然,缓冲池也会将最近很少使用的数据写回磁盘,腾出更多的空间。

在DB2 V9.7 for LUW中,创建一个库的时候,默认会创建一个IBMDEFAULTBP的缓冲池,大小为250个4KB。

查看数据库版本的方法:

1. 连接数据库的时候,显示:

db2 =>connect to sample

数据库连接信息

数据库服务器 = DB2/NT 9.7.5

SQL 授权标识 = ADMINIST...

本地数据库别名 = SAMPLE

2. 命令查看

db2 =>select * from sysibm.sysversions

VERSIONNUMBER VERSION_TIMESTAMP AUTHID VERSIONBUILDLEVEL

-------------------------- ------------------------------- --------------------- ------------------------------

9070500 2013-03-17-21.18.32.187000 SYSTEM special_27924

修改一下缓冲池的大小,改为2M,还是自动存储:

ALTERBUFFERPOOL BUFPOL01 IMMEDIATE SIZE 500 AUTOMATIC;

创建表空间TBSPC01:

CREATE REGULAR TABLESPACE TBSPC01 -常规表空间,名称为TBSPC01

PAGESIZE 4 K --页大小为4K

MANAGED BY AUTOMATIC STORAGE --自动存储管理

EXTENTSIZE 8 --扩展数据块为8(个4K)

OVERHEAD 10.5 --开销

PREFETCHSIZE 8 --预取大小为8(个4K)

TRANSFERRATE 0.14

BUFFERPOOL BUFPOL01 --指定缓冲池

DROPPED TABLE RECOVERY ON; --打开的话,可以恢复已经删除的表,常规表空间可以使用

COMMENT ON TABLESPACE TBSPC01 IS '表空间01'; -- 注释

表空间是一个逻辑的概念,逻辑上表是存放在表空间中,实质上,表是存放在物理磁盘上;一个表空间可以存放多个表,但是一个表只能位于一个表空间中。在安装创建SAMPLE数据库实例的时候,默认创建了4个表空间:

IBMDB2SAMPLEREL:常规表空间,

IBMDB2SAMPLEXML:用于存放XML数据类型的表空间

SYSCATSPACE:系统编目表空间,也就是数据字典存放的表空间

SYSTOOLSPACE:

接下来就创建表了:

CREATE TABLE ADMINISTRATOR.TEST1 (

CID CHARACTER (10) NOT NULL ,

CNAME VARCHAR (20) WITH DEFAULT 'unknow' ,

SEX CHARACTER (1) NOT NULL WITH DEFAULT 'M' ,

AGE INTEGER ,

CONSTRAINT IDX_TEST_CID PRIMARY KEY ( CID),

CONSTRAINT CHK_SEX CHECK (check sex in ('F','M'))

ENFORCED --强制执行此约束

ENABLE QUERY OPTIMIZATION --查询优化期间考虑此约束

) IN TBSPC01 ;

COMMENT ON TABLE ADMINISTRATOR.TEST1 IS '测试表1';

COMMENT ON ADMINISTRATOR.TEST1 ( SEX IS '性别', CNAME IS'客户姓名', CID IS '客户ID', AGE IS '年龄' ) ;

COMMENTON CONSTRAINT ADMINISTRATOR.TEST1.CHK_SEX IS '性别只能为F或者M';

查看创建的表结构及其他信息:

db2 => describe table test1

数据类型 列

列名 模式 数据类型名称 长 小数位 NULL

------------------------------- ------------- ------------------- ---------- ----- ------

CID SYSIBM CHARACTER 10 0 否

CNAME SYSIBM VARCHAR 20 0 是

SEX SYSIBM CHARACTER 1 0 否

AGE SYSIBM INTEGER 4 0 是

4 条记录已选择。

向表中添加数据:

1. 添加一行

db2 =>insert into test1(cid , cname , sex , age) values ('12082119','chenlb','M',24)

DB20000I SQL 命令成功完成。

db2 =>select * from test1

CID CNAME SEX AGE

------------------------------ --- -----------

12082119 chenlb M 24

1 条记录已选择。

2. 添加多行:在insert into tablename values之后指定多个值。

db2=> insert into test1(cid , cname , sex , age) values('12082111','albert','M',15),('12082011','ellen','F',10)

DB20000I SQL 命令成功完成。

db2 => select * from test1

CID CNAME SEX AGE

---------- -------------------- --------------

12082011 ellen F 10

12082111 albert M 15

12082119 chenlb M 24

3 条记录已选择。

3. 从其他表中获取数据

db2 =>insert into test1(cid , cname , sex , age) select empno,firstnme,sex,20 fromemployee where salary > 90000

DB20000I SQL 命令成功完成。

db2 =>select * from test1

CID CNAME SEX AGE

------------------------------ --- -----------

12082119 chenlb M 24

12082111 albert M 15

12082011 ellen F 10

000010 CHRISTINE F 20

000020 MICHAEL M 20

000030 SALLY F 20

000070 EVA F 20

7 条记录已选择。

4. 删除数据

4.1 删除符合条件的数据:db2 => delete from test1 where length(trim(cid))=6

4.2 清空表数据,我们常用的是delete from tablename,

还有另外一种方法,如下

Alter table tablename activate not logged initially withempty table:

db2 =>alter table test1 activate not logged initially with empty table

DB20000I SQL 命令成功完成。

db2 =>select count(*) from test1

1

-----------

0

1 条记录已选择。

5. 删除表

Drop table tablename

--the end--

读书人网 >其他数据库

热点推荐