db2 建庫


建庫

CREATE DATABASE TS1
AUTOMATIC STORAGE NO --是否自動存儲
ON 'D:\' --路徑
ALIAS test
USING CODESET GBK --設置編碼
TERRITORY CN COLLATE --設置地域
USING SYSTEM PAGESIZE 4096 --設置數據頁大小(4kb 8kb 16kb 32kb)
WITH 'aa' --注釋

 

 

建表-----------------------------------------------------------------------------------

CREATE TABLE AA
(
 ID INT  GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1), --標示
 NAME VARCHAR(50) WITH DEFAULT 'BOB',--默認值
 AGE INT NOT NULL CHECK(AGE > 0 AND AGE<200),--check約束
 YEARS INT NOT NULL UNIQUE, --唯一
 DAYS DECIMAL(8,1) NOT NULL,
 BIO CLOB(100K) LOGGED,--計入日志
 PIC BLOB(2M) NOT LOGGED COMPACT,--不計入日志
 PRIMARY KEY(ID)--主鍵
)
IN USERSPACE1--指定存儲表空間

CREATE TABLE AA
(
 ID INT  GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
 NAME VARCHAR(50) WITH DEFAULT 'BOB',
 AGE INT NOT NULL CHECK(AGE > 0 AND AGE<200),
 YEARS INT NOT NULL UNIQUE,
 DAYS DECIMAL(8,1) NOT NULL,
 BIO CLOB(100K) LOGGED,
 PIC BLOB(2M) NOT LOGGED COMPACT,
 PRIMARY KEY(ID)
)
IN USERSPACE1;


常規寫法:
主鍵
alter table AA
 add primary key(id);
刪除主鍵
ALTER TABLE AA
 DROP PRIMARY KEY
唯一
alter table AA
 add  CONSTRAINT SS UNIQUE(DAYS);

alter table AA
 DROP CONSTRAINT SS;
外鍵:
外鍵約束(foreign key constraint)有時候稱作參照約束。 參照完整性(referential integrity)被定義為“數據庫的所有外鍵值都是有效的狀態”。那外鍵又是什么呢? 外鍵(foreign key)是指表中的一列或一組列,其值必須至少匹配其父表中一行的一個主鍵或惟一鍵值。這真正意味着什么呢?它實際上並非如聽起來那般復雜。簡單來說,它意味着如果表(T2)中的一列(C2)存在值匹配另一個表(T1)中的一列(C1)的值, 並且 C1 是 T1 的主鍵,那么 C2 就是 T2 中的外鍵列。將包含了父鍵(主鍵或惟一鍵)的表稱為 父表(parent table),而將包含了外鍵的表稱為 子表(dependent table)
alter table AA
 ADD  CONSTRAINT FK_ID FOREIGN KEY(ID)
 references BB  on delete cascade;

check:
alter table AA
        add constraint name_length check (length(rtrim(name)) = 4)

使用 SET INTEGRITY/CONSTRAINTS 語句可以打開或者關閉表檢查約束。
SET CONSTRAINTS FOR EMP OFF
ALTER TABLE EMP ADD CONSTRAINT COMP CHECK (SALARY + COMM > 15000)
SET CONSTRAINTS FOR EMP IMMEDIATE CHECKED


ALTER TABLE stuMarks
CONSTRAINT FK_stuNo         
     FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo)
--添加外鍵約束(主表stuInfo和從表stuMarks建立關系,關聯字段為stuNo)

alter table AA
add sid int;
向AA表中添加一列

二進制大對象--BLOB,
字符大對象--CLOB,
雙字節字符大對象--DBCLOB。


系統目錄表-----------------------------------------------------------------------------------
SYSCAT.TABLES --所有表
SYSCAT.INDEXES --索引
SYSCAT.FUNCTIONS --函數
SYSCAT.PROCEDURES --存儲過程
SYSCAT.BUFFERPOOLS --緩沖池

序列-----------------------------------------------------------------------------------
序列對象產生整個數據庫的一個唯一值。跟標識列不一樣的是,序列獨立於數據表。
prevva提供序列的一個當前值,而nextval提供下一個值。

CREATE TABLE t1 (salary int)
CREATE SEQUENCE myseq
START WITH 10
INCREMENT BY 1
NO CYCLE

INSERT INTO t1 VALUES (nextval for myseq)

自定義數據類型-----------------------------------------------------------------------------------
create distinct type 自定義類型名
as 類型名
with comparisons --為自定義類型名創建一個轉換函數

Ex:create distinct type myint as integer with comparisons


建臨時表-----------------------------------------------------------------------------------
declare global temporary table  表名(模式名.表名)
 like 模版表 --定義表的列和模版表的列一樣
 on commit preserne rows  --在處理COMMIT時,臨時表的行會被保留下來
 not logged  --不計入日志
 in 臨時表空間

Ex:
declare global temporary table  xabc."Man"
 like staff
 on commit preserne rows
 not logged
 in TEMPSPACE1;

 

插入-----------------------------------------------------------------------------------
insert into 表名(列名) values(值);
Ex:
insert into staff
(id,name,dept,job,years,salary,comm)
values(11,'dddddd',22,'aaa',1,200,300),
(11,'dddddd',22,'aaa',1,200,300);

 

刪除-----------------------------------------------------------------------------------
delete from staff where id in(1,3);

 

更新-----------------------------------------------------------------------------------
update staff set (dept,job)=(10,'aa');


查詢-----------------------------------------------------------------------------------
select * from staff

數值類型之間可以進行運算
Ex:select salary + comm as aa from staff;
as 用來指定列名

模糊查詢:
select name from staff where name like 'a%';

子查詢:
select * from staff where id in(select aid from AA);

fetch first子句用來限制結果集中的行數
Ex:select * from staff fetch first 10 rows only;

distinct 用來排除結果集中重復的行
Ex:select distinct name, job from staff;

連接查詢-----------------------------------------------------------------------------------

 

集合運算符-----------------------------------------------------------------------------------
把兩個或兩個以上的結果集合並成一個結果集,並去除重復結果。
UNION運算符:會把兩個或兩個以上的結果集合並成一個結果集

select * from staff where id > 200
union
select * from AA where id <100
后面跟上ALL,不去除重復結果

 

排序-----------------------------------------------------------------------------------
select * from staff where salary > 100 order by salary
默認升序,降序為DESC

視圖-----------------------------------------------------------------------------------
create view view_AA
as select s.id,a.name
from AA a,staff s
where a.id=s.id
with check option
通過 with check option可以將約束作用在視圖的列上,可以拒絕不合法的更新或插入


存儲過程-----------------------------------------------------------------------------------
CREATE PROCEDURE 存儲過程名稱 [( {可選變量} )]
[可選存儲過程屬性] <語句>

屬性:
language  --指定存數過程所使用的語言。LANGUAGE SQL 是其默認值
result sets N --指定存儲過程將返回幾個結果集
specific name --指定存儲過程的唯一名稱
存儲過程可以被重載,也就是說許多個不同的存儲過程可以使用同一個名字,但這些存儲過程所包含的參數數量不同。
用 drop specific procedure name 來刪除重載過的過程


參數:
in 輸入
out 輸出
inout 輸入輸出

用call來調用過程 ?代表輸出參數
Ex: call(1,?);


當BEGIN 關鍵字后緊隨ATOMIC 關鍵字時,其封裝的復合語句就被當作一個處理單元,也就是說,復合語句中的所有程序指令和語句都必須成功運行,以保證整個復合語句的成功運行。如果其中的一個語句發生錯誤,那么這整個存儲過程所執行的結果都將回滾。


聲明變量:
declare 變量名 數據類型 default 值
Ex:declare name varchar(20) default 'bob';

賦值:
SET name = 'ss';
上面的語句等同於下面的:
VALUES('ss') into name;
除此之外,所有的變量都可以賦NULL 值:
SET name = NULL;
選擇表中的數據給變量賦值時,可能會將一個多行的集合賦予變量,如果只想取選擇結果的第一行數據時,可以使用
SET name = (select sum(c1) from T1)+"";

 


游標---------------------------------------------------------------------------------------
游標是保持SELECT 語句執行結果的集合
DECLARE <游標名稱> CURSOR [WITH RETURN <返回目標>]
<SELECT 語句>;
OPEN <游標名稱>;
FETCH <游標名稱> INTO <變量>;
CLOSE <游標名稱>;

CREATE PROCEDURE set()
DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
 DECLARE cur CURSOR WITH RETURN TO CLIENT
 FOR SELECT name, dept, job
 FROM staff
 WHERE salary > 20000;
 OPEN cur;
END


Ex:
CREATE PROCEDURE MEDIAN_RESULT_SET (OUT medianSalary DOUBLE)
  RESULT SETS 1
  LANGUAGE SQL
  BEGIN
  DECLARE v_numRecords INT DEFAULT 1;
  DECLARE v_counter INT DEFAULT 0;
  DECLARE c1 CURSOR FOR
  SELECT CAST(salary AS DOUBLE)
  FROM staff
  ORDER BY salary;
  DECLARE c2 CURSOR WITH RETURN FOR
  SELECT name, job, CAST(salary AS INTEGER)
  FROM staff
  WHERE salary > medianSalary
  ORDER BY salary;
  DECLARE EXIT HANDLER FOR NOT FOUND
  SET medianSalary = 6666;
  SET medianSalary = 0;
  SELECT COUNT(*) INTO v_numRecords
  FROM STAFF;
  OPEN c1;
  WHILE v_counter < (v_numRecords / 2 + 1)
  DO
  FETCH c1 INTO medianSalary;
  SET v_counter = v_counter + 1;
  END WHILE;
  CLOSE c1;
  OPEN c2;
  END


索引-----------------------------------------------------------------------------------
索引是有序鍵值的集合,每一個鍵值指向表的一行。索引的值可以唯一,它改善了數據庫的性
能。在索引上可以定義如下的一些特性:
索引順序可以遞增也可以遞減速
索引鍵可以是獨值的也可以不是獨值
一些列可以一起用作索引 (這被稱作混合索引)
如果索引和物理數據串在聚集在一個相似的索引序列中,它們就成為簇索引。
CREATE UNIQUE INDEX artno_ix ON artists (artno)

刪除對象-----------------------------------------------------------------------------------
drop 對象類型 對象名

 

導出DB2 DDL-----------------------------------------------------------------------------------
db2look -d <dbname> -e -o db2look.ddl

運行PL腳本------------------------------------------------------------------------------------
db2 -td! –vf myScript.txt


備份-----------------------------------------------------------------------------------------
$ db2 backup db 數據庫名
系統會自動備份生成一個時間戳的數據備份文件,
如:xxxx.0.db2inst1.NODE0000.CATN0000.20070814031212.001
 
恢復數據庫
$ db2 restore db 數據庫名 taken at 20070814031212(直接取數據備份生成的時間戳即可)

 

 

 

 


CONNECT TO SAMPLE

CREATE TABLE AA
(
 ID INT  GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
 NAME VARCHAR(50) WITH DEFAULT 'BOB',
 AGE INT NOT NULL CHECK(AGE > 0 AND AGE<200),
 YEARS INT NOT NULL UNIQUE,
 DAYS DECIMAL(8,1) NOT NULL,
 BIO CLOB(100K)  LOGGED,
 PIC BLOB(2M) NOT  LOGGED COMPACT,
 PRIMARY KEY(ID)
)
IN USERSPACE1;

CREATE TABLE BB
(
 ID INT  GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
 NAME VARCHAR(50) WITH DEFAULT 'BOB',
 AGE INT NOT NULL CHECK(AGE > 0 AND AGE<200),
 PRIMARY KEY(ID)
)
IN USERSPACE1;

 

ALTER TABLE AA
 DROP PRIMARY KEY;
alter table BB
 add primary key(id);

SELECT * FROM AA;

alter table AA
 add  UNIQUE(DAYS);

alter table AA
 DROP CONSTRAINT SS;

alter table BB
        add constraint name_length check (length(rtrim(name)) = 4);

ALTER TABLE  BB
 ADD BID INT;

alter table AA
 ADD  CONSTRAINT FK_ID FOREIGN KEY(ID)
 references BB on delete cascade;

alter table AA
 DROP  CONSTRAINT FK_ID ;


INSERT INTO AA (NAME,AGE,YEARS,DAYS) VALUES('DDD',2,11,13);

INSERT INTO BB  (NAME,AGE) VALUES('DDDS',2);

CREATE  INDEX AA ON BB (BID)

SELECT * FROM SYSCAT.REFERENCES

DROP TABLE AA;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM