同義詞是先用資料庫對象的別名;序列用於生成唯一、連續的序號; 視圖是基於一個或多個表的虛擬表;索引是與表相關的一個可選結構,用於提高SQL語句執行的性能 一、資料庫對象: 模式對象: 資料庫對象是邏輯結構的集合,最基本的資料庫對象是表; 其他對象包括:create增、drop刪、改alter 同義詞 ...
同義詞是先用資料庫對象的別名;序列用於生成唯一、連續的序號;
視圖是基於一個或多個表的虛擬表;索引是與表相關的一個可選結構,用於提高SQL語句執行的性能
一、資料庫對象:
模式對象:
資料庫對象是邏輯結構的集合,最基本的資料庫對象是表;
其他對象包括:create增、drop刪、改alter
同義詞、序列、視圖、索引
1、同義詞:
①、 現有對象的一個別名:
簡化SQL語句,隱藏對象的名稱和所有者,提供對對象的公共訪問;
②、類型:
私有同義詞:
只能在其模式下內訪問,且不能與當前模式的對象同名(當前用戶下使用);
公有同義詞:
可被所有的資料庫用戶訪問。只能是管理員用戶創建。
③、私有:synonym(system身份登錄創建)
---創建用戶 CREATE USER test IDENTIFIED BY 123456;--創建一個用戶名為 test 密碼為123456的用戶 GRANT CONNECT , CREATE SYNONYM TO test; ---授予許可權(連接資料庫,創建同義詞--起別名) GRANT SELECT ON SCOTT.EMP TO test;--查詢 GRANT DELETE ON SCOTT.EMP TO test;--刪除 GRANT UPDATE ON SCOTT.EMP TO test;--增 select * from scott.emp; create synonym staff for scott.emp;--起別名--提高安全性 select * from staff;---私有同義詞,只能誰創建誰訪問
④、公有:public
需要sys或者system用戶來創建
--一sys或system身份登錄,創建公有同義詞--誰都能查 create public synonym emps for scott.emp; select * from emps;
修改和刪除的原則是:誰創建誰修改、刪除
二、序列:
1、Oracle是不支持自增長的;
①、序列是用於生成唯一、連續序號的對象;
②、序列可以是升序,也可以是降序的;
③、創建:create sequence(前三個必須寫)
2、訪問序列:
nextval:返回序列的下一個值;
currval:返回序列的當前值
---創建序列(相當於計數器,與表無關) create sequence seq_student start with 1 increment by 1; create table stu( ssid int primary key, sname varchar(10) ) --給ssid賦值為序列的值 insert into stu values(seq_student.nextval,'李四');---nextval 下一個值 insert into stu values(seq_student.nextval,'張三'); select * from stu select seq_student.currval from dual;-- currval 當前值
註意:
序列與表無任何關係!!!
3、當出現異常需要修改和刪除的序列時,友情提示:刪除重新建!
三、視圖:
1、視圖以經過定製的方式顯示來自一個或多個表的數據;
可以視為“虛擬表”或“存儲的查詢”;
2、創建視圖所依據的表稱為“基表”;
3、優點:
提供了另外一種級別的表安全性;
隱藏的數據的複雜性;
簡化的用戶的SQL命令;
隔離基表結構的改變;
通過重命名列,從另一個角度提供數據。
4、
--創建視圖(scott下,將查詢的結果封裝到個視圖裡面) select * from emp select * from dept select * from emp join dept on emp.deptno=dept.deptno; --授權(system下給scott用戶授予創建視圖的權利) grant create view to scott; create view emp_dept as (select empno,ename,job,mgr,sal,comm,emp.deptno,dname,loc from emp join dept on emp.deptno=dept.deptno); --查詢視圖 select * from emp_dept
5、在視圖上可以使用修改數據的DML語句:
不過有如下限制:
只能修改一個底層的基表;
如果修改違反了基表的約束條件,則無法更新視圖;
如果視圖包含連接資料庫、去重關鍵字等,則將無法更新視圖;
如果視圖包含偽列或表達式,則將無法更新視圖
(總結:可以修改數據,但儘量不要在視圖上修改!!!在基表上改)
6、使用create or replace語句修改視圖定義(儘量不要如此麻煩)
CREATE OR REPLACE [FORCE] VIEW view_name [(alias[, alias]...)] AS select_statement [WITH CHECK OPTION] [WITH READ ONLY];
四、索引:
1、索引是與表相關的一個可選結構;
用以提高SQL語句執行的性能;
在邏輯上和物理上都獨立於表的數據;
Oracle自動維護索引
2、
--創建表 create table t_testseq ( id number, name varchar2(10) ); --創建序列 create sequence seq_value start with 1 increment by 1; -- oracle裡面事務需要手動提交事務 select * from t_testseq where id=50000 -- 0.023 --創建索引 CREATE INDEX 索引名 ON 表名 (索引欄位) create index t_testseq on t_testseq(id) -- 0.015