1. 程式人生 > >Oracle筆記整理

Oracle筆記整理

1.什麼是關係型資料庫?
基於關係模型所提出來的一種資料庫。什麼是關係模型?用一個二維錶行和列的方式來儲存資料。

2.NoSql Not Only Sql?
相當於java中的Map型別來儲存資料。

3.什麼是叢集?
1)負載均衡,減輕服務端的壓力。例如:tomcat的叢集,同時進來1000個請求,如果只有一個伺服器VS三個伺服器。
2)失敗遷移,事務操作,提高系統的可靠性。例如:Oracle的叢集,客戶端同時插入1000條資料,oracle1插入到200個時出問題,用oracle2,oracle3。

4.Oracle的體系檔案?
1)資料檔案(.dbf):儲存資料
多個數據檔案組成一個表空間,資料檔案只能屬於一個表空間。
2)控制檔案(.ctl):
3)日誌檔案(.log):

5.使用者如何通過java程式碼操作資料庫?
使用者通過jdbc操作”記憶體“中的”例項“

6.Oracle和MySql的區別?
1)Oracle中有使用者的概念,orcl資料庫中有很多個使用者,每個使用者下面有表。
2)oracle中select必須要有from,沒有表的時候就寫dual,dual僅僅滿足select的要求,偽表,偽列
3)對字串,Oracle區分大小,mysql不區分大小寫
4)MySql手動開啟事務,start transaction;Oracle自動開啟事務
5)MySql中日期型別有date(年月日)和datetime(年月日時分秒),Oracle中只有date
6)Oracle有閃回機制,執行delete再commit,Oracle可以恢復。
7)Oracle中delete的效率比truncate高,MySql中的delete效率比MySql低,Oracle中存在undo資料
8)Oracle事務的隔離級別和MySql中事務隔離級別不一樣

7.Sql優化原則:
1)儘量使用列名的方式代替*,oracle會解析*代表哪些列名
2)where的解析順序,右邊---->左邊
3)where語句優於having,where後不可以使用多行函式
4)多表查詢優於子查詢,每一次子查詢,訪問資料庫一次;子查詢執行時轉換成多表查詢來執行;通過sql語句的執行計劃可以看出
5)儘量不要使用集合運算,訪問資料庫的次數更多


8.Oracle中Sql的Null值問題,濾空函式nvl(a,b);nv12();
1)nvl(a,b);如果a為null,結果為b,否則,結果為a。
2)空值不等於空值,null!=null,使用null is null。
3)如果集合中含有空值,不可以使用not in,但是可以使用in。not in等價於<>all。
4)order by和null:nulls last,null值最大。

9.Oracle中的別名,有三種
1)as "別名"
2)"別名"
3)別名,不能用純數字和關鍵字

10.distinct作用於後面的所有列。

11.oracle中的連線符。
1)||
2)concat();

12.日期函式
months_between(date1,date2);#兩個日期相差的月數
add_month(date1,num);num個月後的日期
last_day(date);#date的下一個日期
next_day(sysdate,'星期?');#下一個星期?的日期,自動備份資料庫,異地容災
round(sysdate,'month');#日期四捨五入

13.group by語句的增強rollup(a,b);
group by rollup(a,b)
=
group by a,b
+
group by a
+
沒有
group by

14.多表連線查詢
左外連線寫法:where a.deptno=b.deptno(+)
右外連線寫法:where a.deptno(+)=b.deptno
自連線:給表起別名,不適合操作大表
層次查詢:level(層)
select
from emp
connect by 上一層的員工=老闆
start with 起始條件
=
select
from emp
connect by prior =老闆
start with mgr is null

15.子查詢注意的問題,單行子查詢(返回一條記錄),多行子查詢
1)可以在主查詢的where、select、having、from後面使用子查詢
select後只能是單行子查詢;
2)不可以在group by使用子查詢
3)一般不在子查詢中排序;但在top-n分析問題中,必須對子查詢排序
4)一般先執行子查詢,再執行主查詢;但在相關子查詢例外
5)單行子查詢只能使用單行操作符,多行子查詢只能使用多行操作符
in:子查詢中集合,等價於<>all
not in:等價於=any
any:和子查詢集合中的任意一個值比較
all:和子查詢集合中的所有值進行比較
6)子查詢中的null

16.sql的執行計劃

17.集合運算
1)並集union/union all(交集會有兩份)
2)交集intersert
3)差集minus只屬於一部分
要求:
1)列數相同,to_number(null),to_char(null)
2)order by在最後

18.SQL型別
DML:資料庫的增刪改查
DDL:(針對物件)表的增刪改查,檢視的建立刪除,序列的建立,索引的建立
DCL:grant,revoke授予撤銷許可權

19.Oracle中的地址符,&,寫在SQL中,執行的時候彈出提示新增相應的內容

20.海量插入資料:
1)insert 語句可以巢狀子查詢
2)資料泵(PLSQL程式)
    dbms_datapump(程式包)
3)SQL*Loader
4)外部表

21.delete和truncate的區別
1)delete逐條刪除;truncate先摧毀表,再重建
2)delete是DML語句,truncate是DDL語句;DML語句可以回滾,DDL語句不能回滾。
3)delete不會釋放空間,truncate會釋放空間。
4)delete會產生碎片(影響查詢效率),truncate不會產生碎片。
5)delete可以閃回(flashback),truncate不可以。commit之後還能撤銷
6)

22.整理碎片
1)alter table<> move;
2)資料的匯出,匯入
         exp    imp
         expdp  impdp

23.Oracle中的事務
1)起始標誌:事務中的第一條DML語句
2)結束標誌:提交1)顯式commit
                 2)隱式退出DDL,DCL,執行完之後會預設commit
             回滾1)顯示rollback
                 2)隱式:非正常退出,系統出錯
                 3)儲存點,不用回滾到事務的開始
                    savepoint a
                    rollback savepoint a
                    
24.事務的隔離級別
set transaction read only;

25.Oracle中的偽列
1)level層次
2)rownum行號

26.rownum需要注意的問題
1)rownum永遠按照預設的順序生成
2)rownum只能使用<、<=、不能使用>、>=。oracle資料庫為行式資料庫,rownum永遠從1開始

27.Oracle中的表
1)標準表
2)索引表
3)臨時表:建立方式
            1)create global temporary table ();
            2)自動建立:排序會自動建立
            當事務或者會話結束時,表中的資料自動刪除。

28.相關子查詢,先執行主查詢,再執行子查詢。
定義:將主查詢中的值,作為引數傳遞給子查詢。

29.行轉列的函式
wm_concat(carchar2) 多行函式,沒有包含在這個函式中的列,必須在group by之後

30.表空間可以建立一張一張的表,create tablespace,預設的表空間為user
建立使用者的時候也可以將它歸為表空間

31.rowid:行地址

32.使用子查詢建立語句,更換table為view就是建立檢視
create table emp10 
as 
select * from emp where 1=2

33.drop table語句,將表放到oracle中的回收站裡面。
回收站(普通使用者才有)
show recyclebin;查看回收站
purge recyclebin;清空回收站
閃回刪除-->回收站
flashback table TestSavePoing to before drop;

34.密碼認證、主機認證(登入作業系統的使用者必須為管理員)

35.Oracle中約束級別,列級約束,表級約束(聯合主鍵)
主鍵約束(Primary key):
非空約束(Not Null):
外來鍵約束(Foreign Key):子表的外來鍵,必須是父表的主鍵。
        1)刪除時:刪除子表的記錄,再刪除父表的內容。將子表中相關依賴的外來鍵值記錄為null。
        2)級聯操作:級聯置空,on delete set null
唯一約束(Unique Key):
檢查性約束(Check):性別的列的值,只能是集合中的值。

36.檢視是一個虛表,檢視是一個封裝起來的sql語句,和表一樣。
優點:簡化複雜的查詢。
with check option:只能操作看得到的資料
with read only:只讀

37.序列,是一個數組,存在於記憶體當中,提高訪問效率。
產生序列的不連續:
1)回滾
2)系統異常
3)多個表共用一個序列

38.索引:用於加速資料存取的資料物件。
工作原理:類似於書的目錄。先查索引,再查表。
建立索引時,會建立一個索引表(類似於書的目錄),會將索引rowid存入(oracle中自己維護),索引裡面的rowid都是有規律的,
            oracle中查詢有規律的資料快於無規律的資料,sql執行計劃。一個索引一個索引表。
執行計劃:1)explain plan for select...
          2)select * from table(dbms_xplan.displary);
沒有索引:1)table access full;cpu的花費
有索引:1)index range scan;
索引型別:
1)B樹索引:一顆有規律的樹,一個父節點有多個子節點,內部演算法。
2)點陣圖:
索引不一定能提高查詢的速度,在資料量大的時候。
以下情況下適合建立索引:
1)表大的情況下。
2)列名不會拼接在where子句中。
3)查詢的資料大於2%到4%。
4)表經常被更新,索引的列的值易變化,目錄也一直的變化。

39.PL/SQL語言。
1)使用PL/SQL的效率高於使用Java來操作資料庫的效率高
2)不用將sql語句寫在程式碼裡面
3)將儲存過程寫在PL/SQL裡面