2017-04-23,週日整理

  SCM項目告一段落,這一週學習內容不少,oracle數據庫從基礎到高級都說起到了一些,加深了對數據庫的深層次理解。下面就是這一週的學習總結:sql

  1. 首先是oracle數據庫的安裝,因爲10G版本對於系統的兼容性要求很高,須要配置不少文件,很繁瑣,因此直接安裝11G 64Bit版本,安裝很順暢,按照安裝嚮導安裝成功,須要注意的是管理員口令須要記牢,scott用戶須要解鎖,由於學習的時候要用到scott用戶中的4個基本表格,emp,dept,salgrade,bonus.
  2. 數據庫基本概念
    1. 數據庫db和數據庫管理系統dbms,dbms用來對db進行統一的完整的管理和控制。
    2. 數據庫的發展經歷了層次模型,網狀模型和關係模型三個階段,如今廣泛使用關係型數據庫管理系統。
    3. 關係數據庫的邏輯模型叫作實體-關係模型(entity-relationship)圖,簡稱ER圖,實體,屬性,關係。實體有三種關係,一對一,一對多,多對多。
    4. 規範化:第一範式(1NF),表中的字段都是單一屬性的,不可再分的。第二範式(2NF),表中不存在非關鍵字段對任意一候選關鍵字段的部分函數依賴,即全部非關鍵字段都徹底依賴於任意一組候選關鍵字。第三範式(3NF),在第三範式的基礎上,表中不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴,
    5. SQL語言按功能可分爲DDL語言(數據庫定義語言,增刪改數據庫對象),DML語言(數據庫操做語言,增刪改查數據),DCL語言(數據庫控制語言,權限受權等)和數據庫事務處理語言四個類別。
    6. DML語句規則:
      1. 能夠進行+ - * / ,空值參與運算,結果變爲空值,||除外。
      2. order by , group by , and , or , not , between...and... , like , is null, is not null, any, all, exists, 
      3. to_char , to_date, to_number, nvl(), decode()
      4. 聯合查詢:內鏈接 inner join ... on ...      外鏈接 left join,  right join,  full join,  會將左表不符合聯合條件的也查詢出來。    相等鏈接,不等鏈接,自鏈接。
      5. 在分組查詢中,組函數的約束應該放在having 關鍵字後。
      6. rownum,虛列,只存在於結果表中,在oracle中用來實現分頁查詢。
      7. 兩條查詢語句獲得的結果表還能夠集合運算,相併--union all,相減minus,相交intersect。
    7. DDL語句規則:
      1. 能夠經過對錶格字段添加約束保證數據的完整性和惟一性。primary key, not null, unique, check(), foreign key.
      2. view 視圖,經過視圖來實現複雜查詢的簡單化,而且還能保護數據。視圖只容許查詢。
      3. alter table xxx add constraint fk_yyy foreign key references aaa(yyy);
  3. pl/sql
    1. 基本語法:
      declare
        --聲明部分
      begin
        --代碼部分
      end;
      --流程控制語句
      if ... then
      elsif ... then
      else
      end if;
      --循環語句
      loop
      exit when ...;
      end loop;

       

    2. 兩種特殊的數據類型:%type, %rowtype,根據表格來定義變量類型,用於接收select語句的結果。
    3. 在代碼塊中執行DML語句時,如果一條記錄的數據,則會自動產生一個隱式遊標,接收最近一條記錄的數據,該遊標名字爲sql,它有一些屬性能夠用來得到語句的執行信息。
    4. 本身定義的顯式遊標:1.cursor xxx  2.open xxx   3.用fetch...into...拿到遊標裏的數據  4.close xxx 關閉遊標,用for循環能夠簡化步驟。
    5. 存儲過程procedure。返回多條數據用:sys_refcursor
    6. 函數function。
    7. 包頭package,包體package body。
    8. 觸發器,用來生成日誌信息,create or replace trigger xxxtrig after delete or insert or update on xxx for each row declare begin end;
    9. 建立序列,create sequece idseq start with 1 increment by 1 nocycle nocache;   下一個:idseq.nextval    如今的:idseq.currval
    10. 異常處理,exception when xxx then  when others then ...     有時候異常處理會影響到return語句,能夠把須要異常處理的部分單獨放到一個代碼塊中,即代碼塊的嵌套。
    11. 集合數據:
      1. 自定義記錄,type 類型名稱 is record( ...  );
      2. 索引表,type 索引表名 is table of 存放數據的類型 index by 索引的類型; 
      3. 記錄表,存放記錄的索引表
    12. 批處理forall, bulk collect.
    13. 動態執行excute immediate str...
  4. 事務處理
    1. set transaction isolation level read commited...
    2. commit  rollback  ...
  5. 優化
    1. oracle在執行一個sql語句以前,首先要分析一下語句的執行計劃,而後再按照執行計劃去執行,分析語句的執行計劃是由優化器(Optimizer)來完成的。簡單來講,Optimizer就是Oracle在執行SQL以前分析語句的工具。
    2. Oracle索引:
      1. 索引是創建在表的一列或多個列上的輔助對象,目的是加快訪問表中的數據(加快查詢)。
      2. 索引在邏輯上能夠分爲單列索引,多列索引,惟一索引,非惟一索引。在物理上分爲:B*-Tree索引,反向索引,位圖索引。
      3. 單列索引create index name_index on emp(ename);  複合索引(多列)create index emp_ind on emp(ename,job);
  6. oracle體系結構和用戶權限
    1. TODO
相關文章
相關標籤/搜索