視圖:
/*
視圖:經過以制定的方式顯示來自一個或多個表的數據
可以視爲"虛擬表"或"存儲的查詢"
創建視圖所依據的表爲基表
優點:1.提供了另外一種級別的安全性;
2.隱藏數據的複雜性;
3.簡化用戶的sql語句;
4.隔離基表的變化
5.通過重命名列,從另外一個角度提供對數據的訪問。
*/
-- 視圖,關鍵字 view as
create or replace view emp_view -- 要有創建view的權限
as
select ename,sal,dname from emp,dept where emp.deptno = dept.deptno;
-- 從視圖中查詢
select * from emp_view;
-- 刪除視圖
drop view emp_view;
/*
連接視圖查詢與多表連接查詢相似,因爲可以將視圖當做虛擬表,只是有一些限制:
1.只能修改一個底層的基表
2.如果修改違反了基表的約束條件,則無法更新視圖
3.如果視圖包含連接操作符、DISTINCT 關鍵字、集合操作符、聚合函數或 GROUP BY 子句,則將無法更新視圖
4.如果視圖包含僞列或表達式,則將無法更新視圖
*/
索引:
/*
索引:索引是與表相關的一個可選結構
創建索引的優點:1.減少磁盤的I/O
2.能提高查詢語句的執行能力
注意:建立不必要的索引會造成寫入數據的性能開銷以及磁盤空間的浪費
*/
-- 1.創建標準索引
create index emp_index on emp(ename); -- 注意不能用or replace
alter index emp_index rebuild; -- 重構索引
drop index emp_index; -- 刪除索引
-- 創建唯一索引
create unique index dept_uniqueIndex on dept(dname);
drop index dept_uniqueIndex;
同義詞
/*
同義詞:現有對象的一個別名;
優點:1.簡化sql;2.隱藏了對象的名稱和所有者;3.提供對對象的公共訪問
*/
-- 創建私有同義詞,只能在模式內訪問,且不能與當前對象同名
create or replace synonym em for emp;
select * from em;
drop synonym em;
--創建公有的同義詞,可以被所有的數據庫用戶訪問,當然別的用戶要有訪問權限
create or replace public synonym pub_emp for emp; --需要授權
drop public synonym pub_emp; -- 需要授權
/*
序列:用於生成唯一,連續序號的對象,可以使升序,也可以使降序
*/
create sequence my_seq -- 此處與索引一樣不能用 or replace
start with 1
increment by 1
maxvalue 1000
minvalue 1
cycle
cache 20
-- 查詢序列
select my_seq.nextval from dual; -- 序列下一個值
select my_seq.currval from dual; -- 序列當前值
create table person(
pid number primary key,
pname varchar2(20)
)
-- 人工創建自增
insert into person(pid,pname) values(my_seq.nextval,'ysjian');
insert into person values(my_seq.nextval,'ysjian');
select * from person;