oracle資料庫物件
阿新 • • 發佈:2019-02-15
一、同義詞
1.概念:可以直接輸入其他使用者所擁有的表名,而不是通過使用者名稱、表名
2.優點:隱藏物件的名稱和所有者;對於分散式資料庫系統起到了透明位置的作用
3.型別:
私有:普通使用者建立,並且由建立該同義詞的使用者使用
公有:公用的同義詞必須由dba建立,供任何的資料庫使用者都可以使用,本地物件與公用物件同義詞同名時,優先順序本地物件優先。
3.語法:
建立:create [public] synonym 同義詞名 for object (使用者名稱.資料庫物件)
例:select * from emp
create public sysnonym emp for sctto.emp
刪除:drop synonym 同義詞名
二、序列
1.概念:實現欄位的取值能夠按一定的規律自增
2.特點:生成唯一、連續的整數;用於生成主鍵值,可以正常升序也可以降序。
3.建立:
1.create sequence 序列名(seq_對應的表名)
minvalue 1 -------序列的最小值
maxvalue 100--------序列的最大值,最大可達10的27次方
start with 1--------起始值
increment by 1------每次自增的幅度
cache 10------------快取,orecal每次生成序列數的時候,一次性生成多少個放在記憶體裡面,便於應對頻繁的序列數獲取
cycle;--------------在指定範圍裡面的數是否要迴圈使用
4.訪問
nextval:第一次使用序列時,一定要先執行nextval命令,這樣可以返回序列的初始值
currval:返回序列的當前值,即最後一次引用nextval的值
5.使用方式:用於資料新增的時候,一般用於資料插入時生成主鍵
insert into 表名(主鍵欄位名,其他欄位)values (序列名.nextval,...);將來可以通過觸發器,實現類似自增的效果
例:-----可以先為表t_table建立一個同義詞
create public sysnonym t_table for scott.t_table
-----為t_table表新增資料
insert into t_table values(seq_dep.nextval,seq_dep.currval||'a')
-----通過序列可以生成使用者希望的主鍵值,比如id必須滿足三位。不足的左邊 用0補齊
insert into t_table1 values(lpad(seq_dep.nextval,3,'0'),seq_dep.currval||'a')
三、檢視
1.概念:檢視是虛表,沒有具體物理資料,是通過實體表的一種計算對映邏輯。主要就是為了方便和資料安全。
可以實現對複雜的sql語句的儲存;檢視是儲存在資料字典裡面的一條sql語句
2.優點:
進行服務端程式開發的時候,傳輸的資料量較少。
可以有針對性的選取使用者需要的資料。
維護資料的獨立性,可以實現從多個表檢索資料
3.分類:
簡單檢視:簡單檢視只從單標獲取資料,不包含函式,可以實現dml(增刪改操作)
複雜檢視:
4.語法:
標配語法:create [or replace] view v_檢視名稱 as 查詢語句
查詢:select*from v_emp1; select*from v_emp1 where ename like'%M%';
修改:update v_emp1 set job='銷售'wheree name='sb';
新增:insert into v_emp2 values('2222','sb2','技術');
刪除:delete from v_emp2 whereempno=2222
例1:create view v_dep_emp as
select e.*,d.name,d.loc from emp e join dept d on e.deptno=d.deptno
建立檢視後下次需要查詢時只需select * from v_dep_emp 就可以
例2:create view v_emp as
select e.empno,e.name,e.job from emp e
--檢視的查詢:select * from v_emp
--檢視的DML操作:update v_emp set ename='SCOYY' where empno=8801
--強建立檢視的許可權給scott
grant create any view to scott
高配語法:create [or replace] view v_檢視名稱
-----給select 語句裡面的欄位取別名
------as select 語句,一條完整的sql語句,可以在語句裡面定義別名
------[with check option] 指定插入或者修改的資料行必須滿足的條件
------[with read only] 可以確保檢視不被修改
例1:建立一個檢視,裡面顯示,部門名稱,該部門的最高最低薪水,平均薪水
create or replace view v_depemp_sal
(name,minsal,maxsal,avgsal)
as select d.name,min(e.sal),max(e.sal),trunc(avg(e.sal)) from emp e join dept d on
e.deptno=d.deptno group by d.name
--建立結束後可通過語句:select * from v_depemp_sal 進行查詢
例2:建立一個簡單的檢視,裡面只包含depNo=10的員工資料,姓名,編號
create or replace view v_emp2
as select e.empno,e.ename,e.job,e.deptno from emp e where e.deptno=10
with check option constraint v_dep10_ck
----通過如下語句進行驗證
select * from v_emp2
update v_emp2 set deptno =20 where empno=7728執行該語句時將會出現“識別符號無效”錯誤
四、索引
1.什麼是索引:
可選的結構、加快sql語句的執行、在邏輯和物理上獨立於表裡面的資料、orecal會自動進行索引的維護
2.索引的型別:
唯一索引:確保列裡面沒有重複的值,oracle會自動為主鍵和唯一鍵建立唯一索引,
唯一鍵:建立了唯一約束的列,就是唯一鍵,
create unique index 索引名 on 表名(欄位名)
索引加快速度的原理:
如果沒有索引,資料庫系統會按照順序查詢的原則進行資料查詢。
如果建立了索引,那麼首先會開闢一個空間,存放跟索引有關的資料內容,比如如果是主鍵,
會有一個空間專門儲存某張表的主鍵值。有了索引資料以後,系統會利用類似折半查詢的方式
來查詢資料,這個時間複雜度是log2N
組合索引:
一般將多個欄位組合在一起進行索引
組合索引的使用情況:1、比如表裡面有姓名這樣的欄位,需要經常被查詢,
可以考慮對姓名建立一個索引,可以提升效率
create index 索引名 on 表名(欄位1,欄位2,欄位3)
3.如何建立索引:
a .在需要經常檢索的列上面建立索引,可以提高查詢效率;
b.關於使用符號對於索引的影響,<>,!=會導致索引使用失敗,系統照樣用全表查詢;
c.在查詢裡面使用函式的時候,要提升檢索速度,就要建立對應函式的索引;
d .需要注意型別的匹配,有時候根據內容可以查詢到,但如果型別不匹配,就無法利用索引,
資料庫會自動變成全表查詢
4.索引的優點:大大加快資料檢索的速度
5.索引的缺點:
a. 建立索引和維護索引要耗費時間,隨著資料量的增加而增加
b.索引是需要佔據物理空間
c.對資料進行增刪改的時候,索引也要動態的維護,降低了資料維護的速度
6.不適合建立索引的列:
a.很少進行檢索查詢的列
b.對於內容差異程度低的列,不要建立索引,索引無效
c.blob列,資料量太大的
d.增刪改操作比查詢操作頻繁的列
7.內容特徵方面進行索引型別劃分
a.平衡樹,內容差異程度高,比如,id,每一條記錄都不同
b.點陣圖,內容差異長度低,比如性別,比如民族