1:創建數據庫
CREATE DATABASE sam_1 AUTOMATIC STORAGE YES ON '/home/db2inst1/db2data' USING CODESET UTF-8 TERRITORY CN;
2:啓動數據庫
db2start
3:關閉數據庫
db2stop
4:連接數據庫
CONNECT TO sam_1 USER db2inst1 USING pwd;
5:斷開數據庫
DISCONNECT sam_1
6:查詢某個實例下的所有數據庫
list db directory
7:創建表空間
create tablespace <tablespace_name> pagesize <4k或8k或16k或32k>
8:查看數據庫中存在的表空間
list tablespaces
9:查看錶空間詳細信息
list tablespaces show detail
10:查看錶空間對應的容器信息
list tablespace containers for <tablespace_id>
11:在表空間中創建表
create table <table_name>(字段1 類型 狀態,字段2類型 狀態。。。) in <tablespace_name>
12:DB2支持的數據類型
» Data Types
» Numeric
» Integer
» SMALLINT -32768~32767(精度爲5的兩字節的整型)
» INTEGER -2147483648~2147483647(精度爲10的4字節的整型)
» BIGINT -9223372036854775808~9223372036854775807(精度爲19的8字節整型)
» DECIMAL
» DECIMAL (小數點的位置是由該DECIMAL數的精度和規模決定,規模是該數的小數部分個數,其不能爲負數和大於精度;最大精度爲31)
» FloatingPoint
» REAL -3.402E+38~-1.175E-37或10175E-37~3.402E+38(單精度浮點數是一個實數的32位近似值)
» DOUBLE/FLOAT (雙精度浮點數是一個實數的64位近似值)
» String
» CharacterString
» SingleByte
» CHAR (字符串的長度是有序字節數;長度已分配好就固定了,其長度從1~254)
» VARCHAR (32672字節長)
» LONGVARCHAR (32700字節長)
» CLOB 2G字節長(2147483647字節長)
» DoubleByte
» GRAPHIC
» VARGRAPHIC
» LONGVARGRAPHIC
» DBCLOB
» BinaryString
» BLOB
» Datetime
» DATE
» TIME
» TIMESTAMP
» XML
13:在DB2數據庫中如何將整型轉換爲字符型
在DB2中可以用函數char()來轉換。
14:修改表結構,刪除表
增加一列
alter table <table_name> add <字段><類型> <狀態>
修改一列
alter table <table_name>alter COLUMN <字段> set data type <類型> <狀態>
刪除一列
alter table <table_name>drop COLUMN <字段>
刪除表
drop table <table_name>
注:對錶進行任何操作都不被允許,提示SQLSTATE=57016 SQLCODE=-668 ,原因碼 "7"的錯誤:SQL0668N Operation not allowed for reason code "7" on table XXX.
解決方法爲:執行命令:reorg table XXX;即可。
15:向表中添加數據
根據字段插入數據
insert into <table_name>(字段1,字段2,字段3…) values(value1,value2,value3…)
插入整張表的數據
insert into <table_name> values(value1,value2,value3…)
16:查詢表中數據
查詢表中所有數據
select * from <table_name>
根據條件查詢
select * from <table_name>where 字段名=‘條件‘
例:select * from test_table where name=’zhangsan’
注:條件要是某一字段所包含的完整信息。
模糊查詢
select * from <table_name>where 字段名=‘%%’
例:select * from test_table where name=’zhang’
注:模糊查詢的條件,只要寫明某一字段所包含內容的部分信息。
查詢表中前10條記錄
select * from <table_name>fetch friest 10 rows only
查詢表中的某一字段
select 字段名 from <table_name>
對查詢結果排序(asc升序,desc降序)
select * from class order by<asc或desc>
整型,日期類型的字段可以制定範圍,用between
select * from <table_name>where born between ‘2009-05-04’and ‘2010-0608’
17:更新表中數據
update <table_name> set 字段名=‘新內容‘ where字段名=’條件‘
18:刪除表中數據
刪除表中所有數據
delete from <table_name>
根據條件刪除表中的信息
delete from <table_name> where 字段名=‘條件‘
19:顯示當前用戶所有表
list tables
20:顯示系統中所有表
list tables for system
21:查詢表的結構信息
describe table <table_name>
22:查看錶的詳細信息
select * from syscat.tables where tabname=’<table_name>’
23:查看錶的約束
select * from syscat.checkd wheretabname=<table_name>
24:查看錶的引用完整約束
select * from syscat.referenecs where tabname=<tb_name>
25:索引(用於在查詢數據時,加快查詢速度)
創建唯一索引
create UNIQUE index <index_name> on <table_name>(字段)
注:在某個字段上創建唯一索引,即插入時,該字段不能重複。
刪除索引
drop index <index_name>
26:索引使用技巧與數據庫性能調優
查詢語句中,對於字符串型的字段,一定要用單引號括起來,對於整型不要用引號,對於日期型的字段,目前暫無定論,是否會對性能有影響.可進一步跟蹤。
儘量不要用in子句,那樣的話無法使用索引,導致查詢效率低下,可以改用UNION來連接多個查詢.這樣可以提高效率。
多個查詢條件,應該將過濾多的帶索引的字段的條件放在前面。
查詢條件中儘量用等號,不要用大於,小於等,那樣可能會用不上索引。
在全部查詢出所有結果時,要求帶上條件1=1,可以避免使用索引,提高效率。
27:創建視圖,刪除與使用
» 創建
» create view <view_name> as select <字段> from <table_name>
» 使用
» select * from <view_name>
» 刪除
» drop view <view_name>
28:創建存儲過程,刪除與使用
» 創建存儲過程
» CREATE PROCEDURE get_avage_age
--在存儲過程中設置變量
@class_namechar(10),
@CheckDate[datetime]
AS
BEGIN
--在存儲過程中添加方法
Select age fromstudent where class=@class_name and born<@CheckDate
END
» 執行存儲過程
» DECLARE@return_value int
EXEC @return_value=get_avage_age
@class_name =’gaosan’
@CheckDate = ‘2009-01-01’
SELECT ‘Return Value’= @return_value
GO
» 刪除存儲過程
» Drop procedure get_avage_age
29:創建觸發器,使用觸發器,修改觸發器,刪除觸發器
» CREATE TRIGGER trigger_1
ON class
AFTER DELETE
AS
BEGIN
--在觸發器中創建方法
Delete from student where student.class not in (selectclass from class)
END
» 注:此觸發器的功能是:當class表有刪除操作時,同步student表中的記錄,將不存在的班級的記錄全部刪除。
» 使用觸發器
» 先要去掉class表中的約束
»alter table student drop CONSTRAINT FK_CLASS
» 根據條件查詢student和class表。
»select * from student where class=’chuyi’
» select * from class where class=’chuyi’
» 根據條件刪除class表中的信息。
»delete from class where class=’chuyi’
» 執行觸發器之後,再次根據條件查詢student和class表中的信息。
»select * from student where class=’chuyi’
»select * from class where class=’chuyi’
» 現在可以看到student表中的記錄也被更新了。
» 修改觸發器
» ALTER TRIGGER trigger_1
ON class
AS
BEGIN
Delect from student where student.class not in (selectclass from class)
END
» 刪除觸發器
» Drop trigger trigger_1
30:約束
» 約束是在修改一個表,或增加一個表記錄時,規定表的各個字段之間必須滿足的關係。
» ALTER TABLE student ADD CONSTRAINT age_negativeCHECK (student.age >= 0)
» 約束是表結構的一部分內容,此例的約束是檢查年齡字段不要爲負值。
» update student set age=-1 //將會報錯
» 刪除一個約束:
» alter table student dropconstraint age_negative
31:主鍵,外鍵
» 主鍵
» 表通常具有包含唯一標識表中每一行的值的一列或一組列。這樣的一列或多列稱爲表的主鍵 (PK),用於強制表的實體完整性。在創建或修改表時,您可以通過定義 PRIMARYKEY 約束來創建主鍵。
» 一個表只能有一個 PRIMARY KEY 約束,並且 PRIMARY KEY 約束中的列不能接受空值。由於 PRIMARY KEY 約束可保證數據的唯一性,因此經常對標識列定義這種約束。
» create table test_table(number int DEFAULT 23PRIMARY KEY),name varchar(25) not null DEFAILT ‘abc’
» 先將原來主鍵刪除,再建聯合主鍵
» alter table test_table ADD CONSTRAINTconstraint_1 PRIMARY KEY(number,name) 在兩個字段上建立聯合主鍵
» 外鍵
» 外鍵 (FK) 是用於建立和加強兩個表數據之間的鏈接的一列或多列。當創建或修改表時可通過定義FOREIGN KEY 約束來創建外鍵。
» 在外鍵引用中,當一個表的列被引用作爲另一個表的主鍵值的列時,就在兩表之間創建了鏈接。這個列就成爲第二個表的外鍵。
» ALTER TABLE student ADD CONSTRAINT FK_classFOREIGN KEY(class) REFERENCES class(class)
» 刪除外鍵
»alter table student dropCONSTRAINT FK_CLASS
» 建立外鍵時,要注意幾點:外鍵在外表中要是主鍵或索引. 兩個表的此字段名稱最好一樣.其他注意事項,項目參考相關數據庫的聯機幫助文檔.例如:外鍵在外表中重新生成,或重新組織後,或外鍵的索引被刪除後,引起的後果.需要仔細調試
32:事務
» 一個完整的事務就是其中的每個操作要麼都完成,要麼都不做.回到事務開始前的狀態。
» begin TRANSACTION
» ALTER INDEX idx_class on class REBUILD
» select * from class
» dbcommit TRANSACTION
» 需要注意的是,不同的數據庫,事務的開始,結束語法可能不一樣.例如:在informix中是:begin work和commit。
33:鎖
» 常見的情況是:分爲表鎖和行鎖
» 加鎖與解鎖
» 排它鎖(獨佔鎖)與共享鎖
» 鎖加在一個事務中讀取或修改的行,以防止各種事務併發使用資源。例,如果一個排它鎖被一個事務加在某一表的某一行上,在這個鎖被釋放前,其他事務都不可修改這一行。
» 在事務內加鎖。
»SET TRANSACTION ISOLATION LEVELREPEATABLE REAO
» BEGIN TRANSACTION
» select * from student with (rowlock) where id=1waitfor delay ’00:00:10’
» COMMIT TRANSACTION
» select * from student with (rowlock)where id=1
» update student set name=’efgh’ whereid=1
» 運行結果顯示:兩次查詢的內容將會不同。而更新語句會等到事務結束時,纔會得到提交。
» update student set name=’efgh’where id=4:此條更新語句會立即得到執行,因爲被鎖的行不是id=4的記錄。
» 如果rowlock換成TABLOCK或HOLDLOCK,則第二條語句也會等待。TABLOCKX:是排它鎖。
34:導出數據
» export to <文件名.類型> of <文件類型> select * from <table_name>
35:導入數據
» import from <文件名.類型> of <文件類型> insert into <table_name>
36:執行sql腳本
db2 -tvf <路徑/文件名>