Oracle 其他數據庫對象
其他數據庫對象:
序列(SEQUENCE)
索引(INDEX)
視圖(VIEW)
1.序列(SEQUENCE)
對應的數據庫字典:user_sequences
作用:用來產生唯一性值的數據庫特殊對象
創建序列語法:
create sequence 序列名
start with n 表示從幾開始,默認值是1
ncrement by n 每計數一次增加多少,默認是1
maxvalue n 序列最高峰值n
minvalue n 序列最低峰值n
cache n 提供n個預分配的序列,保存在內存中
cycle | nocycle 是否循環
oredr | noorder 有序還是無序序列
例如:
給員工創建一個序列
create sequence tbl_emp_id start with 4;
如何使用序列?
nextval:取序列的下一個值(tbl_emp_id.nextval)
currval:取序列的當的前值(tbl_emp_id.currval)
在插入數據時使用:
insert into tbl_emp values(tbl_emp_id.nextval,....)
刪除序列:
drop sequence 序列名;
索引(INDEX)
對應的數據詞典user_indexes
它是一個比較重要的數據庫對象,作用是可以有效的提高數據庫的查詢效率(數據庫性能優化)
創建索引的兩種方式:
1自動創建
當表中的列添加了主鍵約束或者唯一性約束時,則系統會自動為此列創建唯一性的索引,索引名就是約束名
2手動創建
語法:
create index 索引名 on 表名(列名...);
create index 索引名 on emp(name)
select salary from emp where name = ‘mark‘;
select salary from emp wehre rowid = (select rowid from emp where name= ‘mark‘);
註意:
1.索引有自己獨立的儲存空間和命名空間
2.創建索引也會相對犧牲一些數據庫性能
索引的原理:
1.默認情況下,索引是采用BTree(二叉樹)的數據結構
2.偽列(rowid),存放的數據行記錄的正真“物理地址”。
--根據某物理地址查詢某一行記錄
//先獲取記錄的rowid
select rowid from s_emp where first_name="Carmen";
//根據行記錄rowid查找相應的記錄
select* from s_emp where rowid=(select rowid from s_emp where first_name="Carmen");
3.索引建立的原理:
把創建索引的列值與rowid合成一個鍵值樹,這個鍵值對就是索引,然後把它們存放到指定的數據結構中(二叉樹,位圖)中,並且是獨立的索引空間
4.索引查詢的原理:
當我們的查詢語句中where 條件的列建立了索引,則查詢分為一下2步:
a.先查索引,在句列中的值直接找到rowid
b.根據第一步得到的rowid直接定位到相應的行記錄結束查詢
5.建立索引的策略:
a.主鍵和唯一性列 合適
b.不經常發生改變的列 合適
c.滿足以上兩個條件,經常做查詢的列 合適
d.重復值太多的列 不合適
e.null值太多的列 不合適
6.刪除索引
drop index 索引名;
-----------------------------------------------------
視圖(VIEW)
對應的數據字典:user_view
他是一個數據庫對象,它是表格的一個“窗口”,用來保存查詢語句的對象,視圖是依附於表的,並且與表格共享儲存空間。
定義:本質就是一條合法的查詢語句
作用:
1.配合權限,根據業務來做分級管理
2.減少復雜性,增加數據的安全性
創建視圖的語法:
create view 視圖名 as 子句;
with read only ;視圖只讀
例如:
--以只讀方式創建s_emp表中id,salary兩列的視圖
create view view_name as select id,salary from s_emp with read only;
註意:操作視圖必須擁有一定的權限,對只讀視圖不能進行DML操作
刪除視圖
drop view 視圖名;
視圖分類:
關系視圖,內嵌視圖,對象視圖,物化視圖
-----------------------------
補充:查詢當前用戶可執行什麽操作
select * from session privs;
--查詢某個權限可執行的所有操作
select* from DBA_SYS_PRIVS where grantee=‘DBA‘;(需要DBA)
--查詢當前用戶被賦予的系統角色
select *from SESSIONS_ROLES order by role;
--授予權限的兩種方式:
1.grant createany view to 用戶名
2.grant connect,resource,dba to 用戶名
Oracle 其他數據庫對象