1. 程式人生 > >Oracle 其他數據庫對象

Oracle 其他數據庫對象

所有 有序 source 用戶 執行 地址 不能 特殊 唯一性約束

  其他數據庫對象:
    序列(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 其他數據庫對象