數據庫基礎(一)

本文檔初步介紹了,建表、修改表、向表中插入數據、更新數據、檢索數據、刪除數據、序列以及索引,適合初學數據庫的人員。

本資料主要正對Oracle數據庫的SQL,其他數據庫可以參考,但在細節上存在差異。

 

一、創建表

1.      建表的簡化語法說明:

在數據庫中,可以使用createtable 語句創建表。create table 語句的簡化語法如下:

CREATE [GLOBALTEMPORARY] TABLE table_name

(

Column_name type [CONSTRAINT constraint_def DEFAULT default_exp]

  [,column_name type [CONSTRAINT constraint_def DEFAULT default_exp]…]

) [ON COMMIT {DELETE | PRESERVE} ROWS]  TABLESPACE tab_space;

 

2.      語法中關鍵字說明如下:

1)       GLOBAL TEMPORARY說明該表的行都是臨時的,這種表就稱爲臨時表。臨時表中的行是特定於某個用戶會話的,行的有效期由ONCOMMIT子句指定。

2)       table_name指定要分配給該表的名稱。

3)       column_name 指定要分配給某個列的名稱。

4)       type 指定某個列的類型。

5)       constraint_def 指定對某個列的約束。

6)       default_exp 指定一個表達式,用來爲某個列賦予默認值。

7)       ON COMMIT 控制臨時表中行的有效期。 DELETE說明這些行在事務的末尾要被刪除。

8)       PRESERVE 說明這些行在用戶會話的末尾要被刪除。如果對臨時表沒有指定ON COMMIT選項,那麼默認值是DELETE

9)       tab_space 爲該表指定表空間。如果沒有指定表空間,該表就被存儲在該用戶的默認表空間中。

 

3.      建立普通表舉例

如: create tablebasetab

(

  msisdn varchar2(21)  not null  primary key,

  imsi  varchar2(16) null,

  paytype number null default 0

)

 

4.      建立臨時表

所謂臨時表就是在一個事務中,要來保存數據的,退出事務,數據將被清空。

如: create globaltemporary table basetab_temp

(

   msisdnvarchar2(14)

) on commit preserve rows;

如果向表basetab_temp中插入一條數據,然後斷開連接,再連接後,查詢該表會發現該表爲空。

 

二、修改表

在我們將表建好後,發現表結構需要修改、後來需要增加新列或需要加約束等,這時我們可以使用ALTERTABLE語句對錶進行修改。ALTER TABLE語句可以執行以下任務:

添加、修改或刪除列。

添加或刪除約束。

啓動或禁用約束。

1.      添加列

如:

1)       basetab中增加一個20個變長字符列name

alter table basetab add name varchar2(20);

2)       basetab增加number型的low_numhigh_num列默認值都爲0

alter tablebasetab add low_num number(3)  default 0;

alter tablebasetab add high_num number(3) default 0;

2.      虛擬列

虛擬列在定義好後,不需要對該列插入數據,通過現有的列計算後的值填進去。

如:

basetab中增加一列mid_num,該列是通過low_numhigh_num的平均值得到。

alter table basetab add(mid_num as ((low_num + high_num)/2));

3.      修改列

1)       修改basetabmsisdn的長度爲15

alter table basetab modify msisdn varchar2(15);

說明:只有在表中沒有任何行或所有列都爲空值時纔可以減小列的長度。

2)       修改basetab中的數字列low_num的精度爲5

alter table basetab modify low_num number(5);

3)       修改basetabmsisdn列的數據類型爲字符型定長14

alter table basetab modify msisdn char(14);

4)       修改basetabhigh_num列的默認值爲100

alter table basetab modify high_num default 100;

5)       刪除basetabhigh_num

alter table basetab drop column high_num;

6)       限制basetabhigh_num列值必須大於等於0

alter table basetab add constraint basetab_hig_num_ck check(high_num>=0);

7)       限制basetabmsisdn列不爲空

alter table basetab modify msisdn constraint basetab_msisdn_nn notnull;

8)       添加foreign key約束

    foreign key是約束兩張表,如果在subscribeinfo建立msisdn關聯basetab的外鍵,則subscribeinfomsisdn必須在basetab中存在。

    subscribeinfo建立msisdn關聯basetab的外鍵語句如下:

alter table subscribeinfo add constraint sub_fk msisdn referencesbasetab(msisdn);

foreign key 約束的 on delete cascade 意思就是當刪除主表中的數據是,關聯表中的數據一起被刪除。如:

alter table subscribeinfo add constraint sub_fk msisdn referencesbasetab(msisdn) on delete cascade;

foreign key 約束的 on delete null意思是刪除主表中的數據時,關聯表的外鍵列將爲空,如:

alter table subscribeinfo add constraint sub_fk msisdn referencesbasetab(msisdn) on delete null;

9)       basetabmsisdn設置爲唯一值

alter table basetab add constraint base_uq unique(msisdn);

10)    刪除basetab中的唯一約束

alter table basetab drop constraint base_uq;

11)    禁用basetab中對hig_num大於等於0的約束

alter table basetab disable constraint basetab_hig_num_ck;

12)    啓用basetab中對hig_num大於等於0的約束

alter table basetab enable constraint basetab_hig_num_ck;

1,  將表basetab_exp重命名爲basetab_nn

rename basetab_exp to basetab_nn;

2,  截斷表

截斷表即將表中數據清空,在截斷過程中不會undo日誌,所有截斷不會被會滾。如:

truncate table basetab;

3,  刪除basetab_nn

drop table basetab_nn;

 

三、插入數據

我們在將表建立好後,需要將我們的數據插入到表中,可以使用insert語句。Insert可以往表中插入單行數據,也可以通過子查詢將一張表的多行數據插入到另一張表中,還可以進行多表插入。下面就對單行插入、多行插入和多表插入進行說明。

 

1.      單行插入數據

1)       具體語法:

INSERT INTO TABLE [(column[,column,…])] VALUES(value[,value,…]);

TABLE用於指定表名;column用於指定列名,如果要指定多個列,那麼列之間要用逗號分開;value用於提供列數據。

說明:如果不提供列,則每個列都要有數據。

2)       basetab中中插入一條數據

  insert into basetab(msisdn,paytype) values(‘8613815427202’,0);

2.      多行插入數據

當我們想一次插入多行數據時可以使用子查詢插入數據。當使用子查詢插入數據時,可以將一張表的數據複製到另外一張表中。當處理行遷移、複製表數據或者裝載外部表數據到數據時,可以使用子查詢插入數據。

1)       具體語法:

INSERT INTO TABLE[(column[,column,…])] subQuery

TABLE用於指定表名;column用於指定列名,如果要指定多個列,那麼列之間要用逗號分開;subQuery用於指定爲目標表提供數據的子查詢。需要插入的列和子查詢的列的數據類型和個數要完全匹配。

2)       使用子查詢插入數據

insert into subscribeinfo(msisdn,serviceid) select msisdn,serviceidfrom subscribeinfo;

3)       使用子查詢執行直接裝載

insert /*+APPEND*/ intosubscribeinfo(msisdn,serviceid) select msisdn,serviceid from subscribeinfo;

注意,儘管以上兩條語句的執行結果一樣,但第二條語句使用/*+APPEND*/來表示直接裝載方式。當要裝載大批量數據時,採用第二種方法裝載數據的速度要遠遠優於第一種方法。Append在數據庫oracle常用操作培訓.ppt中有說明。

3.      多表插入數據

所謂多表插入即在通過一些限制條件,將子查詢中的數據分別插入到不同的表中。其中通過兩個操作符ALLFIRST來實現的。

1)       ALL操作符

如:insert all when type=0 then into waptab

when type=1 then into javatab

when type=2 then into smstab

when orderflag =8 then into ordertab

else into othertab

select * from serviceinfo;

2)       FIRST操作符

當使用FIRST操作符執行多表插入時,如果數據已經滿足了先前條件,並且已經被插入到某表中,那麼該行數據在後續插入中不會再次使用

如:insert first when type=0 then into waptab

when type=1then into javatab

when type=2then into smstab

when orderflag=8 then into ordertab

else intoothertab

select * fromserviceinfo;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章