日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

db2 建库

發(fā)布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 db2 建库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

建庫

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

?

?

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

CREATE TABLE AA
(
?ID INT? GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1), --標(biāo)示
?NAME VARCHAR(50) WITH DEFAULT 'BOB',--默認(rèn)值
?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;


常規(guī)寫法:
主鍵
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)被定義為“數(shù)據(jù)庫的所有外鍵值都是有效的狀態(tài)”。那外鍵又是什么呢? 外鍵(foreign key)是指表中的一列或一組列,其值必須至少匹配其父表中一行的一個主鍵或惟一鍵值。這真正意味著什么呢?它實際上并非如聽起來那般復(fù)雜。簡單來說,它意味著如果表(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 語句可以打開或者關(guān)閉表檢查約束。
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建立關(guān)系,關(guān)聯(lián)字段為stuNo)

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

二進(jìn)制大對象--BLOB,
字符大對象--CLOB,
雙字節(jié)字符大對象--DBCLOB。


系統(tǒng)目錄表-----------------------------------------------------------------------------------
SYSCAT.TABLES --所有表
SYSCAT.INDEXES --索引
SYSCAT.FUNCTIONS --函數(shù)
SYSCAT.PROCEDURES --存儲過程
SYSCAT.BUFFERPOOLS --緩沖池

序列-----------------------------------------------------------------------------------
序列對象產(chǎn)生整個數(shù)據(jù)庫的一個唯一值。跟標(biāo)識列不一樣的是,序列獨立于數(shù)據(jù)表。
prevva提供序列的一個當(dāng)前值,而nextval提供下一個值。

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

INSERT INTO t1 VALUES (nextval for myseq)

自定義數(shù)據(jù)類型-----------------------------------------------------------------------------------
create distinct type 自定義類型名
as 類型名
with comparisons --為自定義類型名創(chuàng)建一個轉(zhuǎn)換函數(shù)

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

數(shù)值類型之間可以進(jìn)行運算
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子句用來限制結(jié)果集中的行數(shù)
Ex:select * from staff fetch first 10 rows only;

distinct 用來排除結(jié)果集中重復(fù)的行
Ex:select distinct name, job from staff;

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

?

集合運算符-----------------------------------------------------------------------------------
把兩個或兩個以上的結(jié)果集合并成一個結(jié)果集,并去除重復(fù)結(jié)果。
UNION運算符:會把兩個或兩個以上的結(jié)果集合并成一個結(jié)果集

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

?

排序-----------------------------------------------------------------------------------
select * from staff where salary > 100 order by salary
默認(rèn)升序,降序為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? --指定存數(shù)過程所使用的語言。LANGUAGE SQL 是其默認(rèn)值
result sets N --指定存儲過程將返回幾個結(jié)果集
specific name --指定存儲過程的唯一名稱
存儲過程可以被重載,也就是說許多個不同的存儲過程可以使用同一個名字,但這些存儲過程所包含的參數(shù)數(shù)量不同。
用 drop specific procedure name 來刪除重載過的過程


參數(shù):
in 輸入
out 輸出
inout 輸入輸出

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


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


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

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

?


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

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


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

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

?

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

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


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

?

?

?

?


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;

轉(zhuǎn)載于:https://www.cnblogs.com/137913828S2/archive/2012/03/12/2391606.html

總結(jié)

以上是生活随笔為你收集整理的db2 建库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。