oracle 對象管理 04_視圖約束序列同義詞

1、視圖
    視圖是從表中抽出來的邏輯上相關的數據集合,自己不存儲數據,經過它能夠對基表裏面
的數據進行查詢和修改。是存儲在數據字典裏的一條select語句,將查詢的結果做爲一個表來
使用。
1.建立視圖
    CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] 
    AS subquery 
    [WITH CHECK OPTION [CONSTRAINT constraint]] 
    [WITH READ ONLY] 
    其中: 
    FORCE:無論基表是否存在ORACLE都會自動建立該視圖; 
    NOFORCE:只有基表都存在ORACLE纔會建立該視圖: 
    alias:爲視圖產生的列定義的別名; 
    subquery:一條完整的SELECT語句,能夠在該語句中定義別名; 
    WITH CHECK OPTION : 插入或修改的數據行必須知足視圖定義的約束; 
    WITH READ ONLY : 該視圖上不能進行任何DML操做。
        WITH CHECK OPTION 和 READ ONLY 的時候,子查詢中不能使用 ORDER BY 子句;
    建立視圖時,表達式列必須指定別名
    子查詢中使用 GROUP BY、ORDER BY、DISTINCT、ROWNUM、表達式列時,不能對視圖進行增刪改
對視圖的修改即對基表的改變,須要知足基表的完整性約束。
    基表刪除後,視圖也會自動被刪除。
給B用戶授予了DBA權限,B用戶能夠查詢任意用戶的表,但要經過A用戶的表創建視圖還要專門屬於權限
2.刪除視圖,刪除基表後,視圖也被刪除了
    DROP VIEW info_view;
3.視圖信息視圖
    SELECT * from user_views;   --用戶定義視圖,包括視圖對應的查詢語句
    select * from dba_views;    --系統視圖信息字典
4.使用視圖的好處:
    a.簡化SQL,可把複雜的SQL語句簡單化
    b.安全性,可保證數據的安全性,限制對數據的訪問,由於它對錶中的一些字段是隱藏的
    c.靈活性,可以使相同的數據以不一樣形式出如今不一樣的視圖中
    d.不佔存儲空間:視圖只須要佔用數據字典中保存其定義的空間,而無需額外的存儲空間。
    e.視圖數據會隨着表中數據的改變而改變    
    
2、約束    
    表、列級的強制規定,強加在表上的規則或條件,定義業務規則,防止垃圾數據進入數據庫
1.NOT NULL約束,NOT NULL約束只能定義爲列級約束,而不能爲表級約束;
    alter table emp modify ename not null;
2.UNIQUE約束
    alter table emp add constraint emp_un UNIQUE(emp_no,emp_name);
    非空約束的列中插入''和null時都提示錯誤,10g的bug
3.主鍵約束
    alter table emp add constraint emp_pk primary key (emp_no,emp_name);
4.foreign key約束,用來維護從表和主表的引用完整性,父表被依賴的列必須是主鍵。注意外鍵約束的增刪改操做。
主外鍵的一對一和一對多狀況,注意外鍵爲空的狀況。
    ON DELETE SET NULL子句:當主表中的一行數據被刪除時,Oracle系統會自動地將全部從表中依賴於它的數據記錄的外鍵改爲空值;
    ON DELETE CASCADE:當主表中的一行數據被刪除時,Oracle系統會自動地將全部從表中依賴於它的數據記錄刪除;
    alter table emp add constraint emp_no_fk foreign key (emp_no)  references dept(emp_no) on delete cascade; 
    alter table emp add constraint emp_no_fk foreign key (emp_no,emp_name)  references dept(emp_no,emp_name) on delete cascade;
5.CKECK 約束
    alter table salary add constraint salary_min_chk check(salary>0);
6.約束的禁用和激活
    alter tabel emp modify constraint cons_name disable/enable;
7.刪除約束
    alter table salary drop constraint salary_min_chk;
8.查詢約束信息
    select * from dba_constraints where owner='SCOTT';
    select * from dba_cons_columns where owner='SCOTT';
    SELECT * FROM USER_CONSTRAINTS;
    SELECT * FROM USER_CONS_COLUMNS;
    
3、序列
    是一個計數器,用來填充主鍵和計數
1.建立序列
    CREATE SEQUENCE 序列名
        [INCREMENT BY n]
        [START WITH n]
        [{MAXVALUE/ MINVALUE n|NOMAXVALUE}]
        [{CYCLE|NOCYCLE}]
        [{CACHE n|NOCACHE}];
    CREATE SEQUENCE emp_sequence INCREMENT BY 1 START WITH 1 [NOMAXVALUE NOCYCLE CACHE 10];  
2.使用序列
    emp_sequence.NEXTVAL 爲序列的下一個編號;
    emp_sequence.CURRVAL 爲當前編號
   你不能使用序列的CURRVAL和NEXTVAL,在下面狀況下(具體參見官方文檔):
        a:子查詢中
        b:在視圖或物化事物的查詢中????
        c:SELECT查詢中使用了DISTINCT操做符
        d:SELECT查詢中有GROUP BY或ORDER BY
3.刪除序列
    DROP SEQUENCE emp_sequence;
4.序列相關視圖,不能修改序列的初始值
    SELECT * FROM USER_SEQUENCES;
    SELECT * FROM DBA_SEQUENCES;
    
4、同義詞
1.Oracle的同義詞(synonyms)就是別名,是一種映射關係。用於簡化對象訪問和提升對象訪問的安全性。不佔用實際存儲空
    間,只有在數據字典中保存了同義詞的定義。公有同義詞由DBA建立,數據庫中全部的用戶均可以使用公用同義詞,普通
    用戶建立的同義詞爲私有同義詞,須要CREATE PUBLIC SYNONYM權限,能夠將同義詞操做權限授予其餘用戶。能夠爲表、視
    圖、存儲過程、函數或另外一同義詞等對象建立同義詞,方便訪問其它用戶的對象,隱藏了對象的身份,縮短對象名字的長度
2.建立同義詞
    CREATE [OR REPLACE] [PUBLIC] SYNONYM [ schema.] 同義詞名稱 FOR [ schema.] object [ @dblink ];    
3.刪除同義詞,當同義詞的原對象被刪除是,同義詞並不會被刪除
    DROP [ PUBLIC ] SYNONYM [ schema. ] 同義詞名稱 [ FORCE ];
4.同義詞在數據庫鏈接中的應用
    DBlink:用於跨本地數據庫,訪問另一個數據庫表中的數據時
    grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;
    配置本地鏈接遠程數據庫的tnsnames.ora文件;    
    Create [public]database link DB_Link_name connect to username identified by passwd using 'connectstaring';
    訪問對象要經過 objectname@DB_Link_name
    create synonym synonym_name for table_name@DB_Link;
5.同義詞系統視圖
    SELECT * from  User_Synonyms;
    SELECT * from  dba_synonyms;
    
    數據庫

相關文章
相關標籤/搜索