1. 程式人生 > >Oracle學習心得(乾貨)

Oracle學習心得(乾貨)

1、orcale不區分大小寫,標誌符(表名,列名,別名等)是區分大小寫的;標誌符沒有加雙引號,預設自動轉換為大寫執行 2、orcale中雙引號作用:轉義非法標誌符為合法,強制標誌符原始大小寫執行 3、oracle中日期型別沒有常量這一說,預設日期字串格式dd-mon-rr 4、oracle空值和任何值作比較運算結果一定為假,oracle資料庫沒有布林值true和false 5、in(值列表):如果表示式等於值列表中的任意一個值,就為真;not in(值列表):表示式不等於值列表中的任意一個值,才為真 6、like:模糊查詢 not like 邏輯非,萬用字元%代表0到多個任意字元 _代表1個任意字元 7、排序子句:order by 排序表示式 asc升序(不寫預設) desc降序,排序操作非常耗費資源,大量資料排序,必須提前做好資料庫的優化 8、單行函式,每次執行函式,傳入一行列值,返回一個結果;多行函式,每次執行函式,傳入多行列值,返回一個結果 9、RDBMS關係型資料庫管理系統:核心就是表和表之間的關係 主表:資料被從表引用 從表:從主表中引用資料 主鍵:主表中的唯一標識列,主鍵的值不能重複,不能為空 外來鍵:從主表中引用主鍵資料的那一列,外來鍵值可以重複,也可以為空,必須是引用的主鍵列中存在的值 表和表之間的三種關係: 一對多:主表的一條記錄對應從表的多條記錄 一對一:主表的一條記錄對應從表的一條記錄 多對多:一個表的多條記錄對應另一個的多條記錄(必須通過中間表來銜接,由兩個一對多關係間接形成) 10、資料庫設計三正規化: 第一正規化:列不可分割(列的資料必須明確,不能一個列表達兩個資料) 第二正規化:表必須有一個主鍵識別符號 第三正規化:從表中不能出現引用主表中的非主鍵列 11、SQL99連線查詢,效率比92語法高 內連線:inner join,僅查詢滿足連線條件的資料(預設) 外連線:查詢滿足連線條件的資料,不滿足連線條件的資料也返回 左外連線:left outer join 有外連線:right outer join 滿外連線:full outer join 連線條件:on 連線條件表示式 自連線:把一個表看成兩個表 12、分組函式 sum求和、avg求平均值、max求最大值、min求最小值、count計數 13、子查詢:查詢語句中包含的查詢,也稱為巢狀查詢,主查詢子查詢(外查詢內查詢),如果同時能使用子查詢和連線查詢實現,儘量使用連線查詢,效率高,子查詢必須寫在括號中,儘量寫在條件右側,提高效率 14、any:邏輯或,例如 >any;all:邏輯與,例如 >all 15、 標準子查詢 相關子查詢(內外互動式相關子查詢) 執行順序 子查詢先,主查詢後 主查詢先,子查詢後 使用資料 主查詢使用子查詢結果 主查詢和子查詢互相使用查詢結果 執行次數 執行一次 執行次數=主查詢的結果集的行數 16、exists(子查詢):如果查詢有結果,返回真,否則返回假;not exists(子查詢):如果子查詢有結果,返回假,否則返回真 17、DML語句:資料操縱語言,插入,刪除,修改表資料 插入單行資料:insert into 表名[(列1,列2,……)]values(值1,值2,……)所有值必須個數,順序,型別保持一致,省略列列表,預設就是所有列 多行插入:把一個子查詢的結果直接插入到另一個表,insert into 表名[(列1,列2,……)]子查詢 修改資料:主鍵值已經生成,後期不允許修改,update 表名 set 列1=值,列2=值,……[where子句] 刪除資料:delete from 表名 [where子句] 18、資料事務transaction:保證一個操作的完整性,要麼一起成功,要麼都不執行 事務的ACID四個特性: 原子性:提個實務操作必須是一個完整操作,要麼一起成功,要麼都不執行 一致性:必須從一個正確的狀態直接過度到下一個正確的狀態 隔離性:一個會話無法訪問另一個會話未提交的資料(髒資料) 永續性:事務一旦提交,資料改變會直接持久化到資料庫,其他會話可以訪問,不能回退 開始事務:任意一條DML都會開啟一個新事務 結束事務: 提交事務: commit語句 DDL,DCL語句自動提交事務 正常退出客戶端工具(例如命令列exit退出) 回退事務: rollback語句 異常退出客戶端工具 19、鎖機制:避免使用者併發訪問資料,鎖在事務結束後被釋放 鎖按照粒度劃分:行級鎖和表級鎖 鎖按照型別劃分: 共享鎖(s鎖):如果一個資源(行、表)加上了共享鎖,其他會話可以給這個資源也加上共享鎖,但是不能加獨佔鎖 獨佔鎖(x鎖,排他鎖):如果一個資源(行、表)加上了獨佔鎖,其他會話不能給這個資源加任何鎖 鎖按照加鎖方式劃分:自動鎖和手動鎖 自動加鎖的情況: 查詢語句:預設不加任何鎖 DML語句:行獨佔鎖,表共享鎖 DDL語句:表獨佔鎖 手動加鎖: 查詢加鎖:查詢語句 for update;(行獨佔鎖,表共享鎖,會像DML一樣開啟事務) 手動鎖表: 樂觀鎖定:lock table 表名 in share mode; 悲觀鎖定:lock table 表名 in exclusive mode; 死鎖:兩個會話的事務相互等待對方釋放鎖才能繼續向下進行 20、DDL(資料定義語言):建立(create table),修改(alert table),刪除(drop table)資料庫物件 資料表的分類:使用者表和系統表(資料字典) 使用者表 : 使用者自己建立的資料表 系統表(資料字典):資料庫本身建立維護的,儲存的是系統資訊 清空表 delete truncate 可以回退 不能回退 邏輯刪除 物理刪除 記錄日誌 不記錄日誌 21、約束:限制對錶的DML操作,約束既可以建立表同時新增,也可以表建立後追加 not null :非空約束 primary key:主鍵約束,限制主鍵列值不能為空且不能重複,一個表只能有一個主鍵,一個主鍵可以由多列組成 unique:唯一值約束,限制列值不能重複,不限制空值,一個表可以有多個唯一值約束 check:檢查約束, 限制列值符合自定義條件,忽略空值檢查,空值不做檢查 foreign key:外來鍵約束, 限制外來鍵列值必須是引用的主表中的主鍵列中存在的值 追加約束 alter table 表名 add constraints 約束具體設定: 外來鍵級聯刪除:刪除主表資料會自動刪除引用的從表資料 外來鍵級聯置空:刪除主表資料會自動級聯引用的從表外來鍵為空值 22、檢視:儲存的不是真實資料,而是查詢語句(除非是物理化檢視,儲存的是真實資料) 作用:控制使用者訪問許可權,簡化一些複雜的查詢 建立檢視物件:必須有create view許可權,如果檢視的查詢語句中有衍生列,必須起別名 create or replace view 檢視名稱 as 查詢語句 物理化檢視:儲存的是物理資料,需要通過程式手動重新整理同步資料 23、序列:自動生成的自增編號,主要用於生成主鍵值 24、索引:加快查詢速度:但是會降低DML速度,預設情況下,條件檢索做的是全表掃描,建立的索引預設都是B-TREE索引,適合列基數比較高的情況 RBO基於規則的優化:如果列有索引,查詢一定會走索引,即使走索引更慢,也會走索引 CBO基於代價的優化:資料庫只能判斷是否應該走索引,如果不走索引更快,那麼有索引也不會走索引,做全表掃描(oracle預設) 適合建立索引的清空: 1、列的基數比較高(重複值很少) 2、不以空值做條件,索引對查詢空值無效 3、列值經常作為條件查詢 4、表資料量很大 5、經常做查詢操作,很少做DML操作 6、滿足查詢條件的資料不超過總記錄的15% 7、模糊查詢不走索引,如果模糊查詢希望提高效率,必須使用全文檢索技術 25、同義詞:給物件起別名,簡化物件的名稱 26、DCL:使用者許可權管理 授權語句:grant 許可權1,許可權2,…… to 使用者; 收權語句:revoke 許可權1,許可權2,…… from 使用者; 27、set集合運算:把多個查詢結果進行並集,交集和補集運算,多個查詢結果必須是列的個數,順序,型別保持一致 並集union(自動消除重複行) 並集union all(不消除重複行) 交集intersect 補集minus