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裏面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章