1. 程式人生 > 實用技巧 >【Oracle】表、檢視、序列、索引

【Oracle】表、檢視、序列、索引

表(資料型別、約束)、修改表結構

表的建立:create table 表名(欄位名 資料型別 [約束]);
表的刪除:drop table 表名;

oracle表包括: 表名、欄位、資料型別、[約束] 
其中:
(1)資料型別
	①數字
		number						預設長度為38,小數長度為0
		number(n)					最大長度為n
		number(n,m)				最大長度為n,其中小數部分長度為m
		integer						相當於number(38)
	②字串		
		char(n)					字串長度固定為n,不足的用空白字元補充
		varchar2(n)				字串最大長度為n,長度為填入的字串長度
			注:char的資料管理效率高,但空白字元浪費空間,varchar2節省空間
			例:名字 varchar2
				手機號 char(11)  (因為不作運算和比較)
				郵箱 varchar2
	③日期
		date 						精確到秒
			例:insert into 表(日期屬性) values(to_date(‘1999-8-9’, ‘yyyy-mm-dd’));

(2)約束
	①主鍵約束	primary key 
		(非空、唯一)

	②唯一約束	unique
		(表明列值不重複,例如手機號)

	③非空約束	not null
		(表明列值不為空)

	④檢查約束	check(約束語法)
		例如:	--- phone_num char(11) check(length(phone_num) = 11)
				--- email varchar2(100) check(email like ‘%@%’)
				--- sex char(2) check(sex in(‘男’, ‘女’))
		
	⑥外來鍵約束(forienkey)		references 其他表名(欄位名)
		例如:  --- stu_class char(20) references classes(class_id),

(3)修改表結構:
①編輯表的欄位:
語法:ALTER TABLE 表名 MODIFY(列名,資料型別);
   	eg1a:alter table skate_test modify (author number(10,0) )
在修改列的長度時候,只能編輯比現有欄位實際存的長度還要大
eg2:alter table skate_test modify (author varchar2(10) )
在修改列的資料型別的時候,所修改的列必須為空
②增加一個列:
語法: ALTER TABLE 表名 ADD(列名,資料型別);
eg1:ALTER TABLE skate_test ADD(author NUMBER(38,0) not null);
③改列名:
語法:ALTER TABLE 表名 RENAME COLUMN 當前列名 TO 新列名;
eg1:ALTER TABLE skate_test RENAME COLUMN author TO authorer_new
④刪除一個列:
語法:ALTER TABLE 表名 DROP COLUMN 列名;
eg1:alter table skate_test drop column author
⑤改表名:
語法:ALTER TABLE 當前表名 RENAME TO 新表名;
eg1:alter table skate_test rename to test_sakte
⑥給表加註釋:
comment column on 表名.列名 is '註釋內容';   //修改表的列的註釋
COMMENT ON TABLE MOVO_NEW.TEST_SAKTE  IS '註釋內容';  //修改表的註釋

檢視、序列、索引

刪除:drop  view/sequence/index  檢視名/序列名/索引

① 檢視:將查詢結果作為檢視,供查詢使用,虛擬表
	建立檢視:create view 檢視名 as select語句;
	檢視檢視:select 列名 from 檢視名;
	優點:①簡化SQL語句 ②安全性,可以實現對開發人員遮蔽原表名和欄位名
	注意:檢視不會提高查詢效率,本質是儲存了select語句,基本不佔用硬碟空間

② 序列:oracle提供的工具,產生一系列連續且不重複的值;
	建立序列:create sequence 序列名 [start with 數字] // 不寫start,預設從1開始;
    獲取序列值:序列名.nextval
	
	例如:
		create sequence seq_keyValue start whith 100001;
		…
		insert into employee(id, name) values(seq_keyValue.nextval, ‘xyz’);

③ 索引:
	建立索引:create index 索引名 on 表名(欄位名);
	使用序列:不需要手動使用,預設會使用索引的欄位條件查詢,此時的資料會自動使用索引查詢資料
	特點:
		①本身會佔用磁碟空間
		②對於增、刪、改,會有維護,降低DML效率
		⑤主鍵(primary key)和唯一(unique) 資料庫會自動新增索引