1. 程式人生 > >Oracle資料庫中資料操作和事務控制以及鎖

Oracle資料庫中資料操作和事務控制以及鎖


表資料的操作(DML):
    插入:
    修改:
    刪除:
    合併:大資料操作的時候,資料倉庫
    
插入:使用values只能插入一行資料
    插入空值:
        1)不寫
        2)插入空串
        3)null
    
    插入日期:
        1)按照Oracle標準日期格式插入,'dd-mm月-yyyy'
        2)to_date('','yyyy-mm-dd')
        3)to_char同to_date
        
    特殊字元&:
        在SQL Plus或者cmd中設定
        1)show escape;            --檢視escape狀態
        2)escape off            --返回escape狀態為off
        3)set escape on;        --設定escape狀態為on
        4)show escape            --檢視escape狀態
        5)escape "\" (hex 5c)    返回escape符號為"\"
        6)在insert語句中使用'\'對特殊符號進行轉義
        
    插入多行:
        子查詢:巢狀子查詢,相關子查詢
        INSERT INTO  mydept(deptno,dname,loc)  SELECT *  FROM dept ;--插入中的子查詢不需要加()
        
建立表:
    CREATE TABLE 表名 AS SELECT * FROM emp WHERE 1=0;--where條件恆不成立表示只要表結構不要資料;若where條件成立表示要滿足where條件的資料;不加where條件表示既要表結構又要資料

合併:如果匹配則修改,如果不匹配則插入
    語法:
    MERGE INTO mydept  m  --目標表
      USING dept d  --原表
      ON ( m.deptno=d.deptno )   --條件
      WHEN MATCHED THEN
      UPDATE SET
        dname='zzz',loc='zzz' WHERE deptno=11
      WHEN NOT MATCHED THEN
      INSERT(m.deptno,m.dname,m.loc)
       VALUES(d.deptno,d.dname,d.loc);

    
rowid:偽列,是表中的虛擬的列,是系統自動產生的,效率最快
    表示一行的實體地址,可以唯一標識該行
    前6位:資料物件編號,接下3位:相關檔案編號,接下6位:塊編號,末3位:行號


事務:
    概念:
        事務也稱工作單元,是由一個或者多個SQL語句所組成的操作序列的集合,這些SQL語句作為一個完整的工作單元(Oracle最小的工作單元,不可分割),要麼全部執行成功,要麼全部執行失敗.在資料庫中,通過事務來保證資料的一致性
    
    事務處理語言:TPL
        對組成事務的DML語句的操作結果進行確認或取消(commit,rollback)
        
    事務的組成:
        在資料庫中,事務由一組相關的DML或select語句,加上一個TPL語句(commit,rollback)或一個DDL語句(create,alter,drop,truncate等)或一個DCL語句(grant,revoke)組成.
            DDL語句,DCL語句資料庫進行隱式提交.
    
    
    事務特徵:(ACID)
        1)原子性(Atomicity):
            事務就像原子一樣,不可被分割,組成事務的DML操作語句要麼全部執行成功,要麼全部執行失敗,不可能出現部分失敗的情況
        2)一致性(Consistency):
            一旦事務完成,不管是成功的還是失敗的,整個系統處於資料一致的狀態.
        3)隔離性(Isolation):
            一個事務的執行不會被另一個事務所幹擾
        4)永續性(Durability):
            也成為永久性,事務一旦提交,對資料的改變就是永久的,不可以再被回滾
        
    事務分類:
        1)顯式事務:
            1-1)顯式提交:commit
                以成功的方式結束事務,組成事務的DML語句全部生效
            1-2)顯式回滾:rollback
                以失敗的方式結束事務,組成事務的DML語句全部取消
            1-3)儲存點:savepoint
        2)隱式事務:
            2-1)隱式提交:當下列任意一種情況發生時,會發生隱式提交
                2-1-1)執行一個DDL(create,alter,drop,truncate,rename)語句;
                2-1-2)執行一個DCL(grant,revoke)語句;
                2-1-3)從SQL Plus正常退出(使用exit或quit命令退出)
            2-2)隱式回滾:當下列任意一種情況發生時,會發生隱式回滾
                2-2-1)從SQL Plus中強制退出
                2-2-2)客戶端連線到伺服器端異常中斷
                2-2-3)系統崩潰
            
    事務的開始和結束:
        事務開始:
            事務自動開啟於上一個事務結束後第一個執行的DML語句
        事務結束:
            顯式結束:事務在遇到commit或者rollback時結束
            隱式結束:執行隱式事務時會自動結束事務
        
    設定儲存點:
        如果在一個事物內,想要回滾到指定的位置,不是回滾到事務的起始點,可以通過儲存點實現
        savepoint  sp;--定義一個儲存點語句
        rollback to sp;--回滾到指定儲存點
            以上兩條語句不結束事務的執行
        

Oracle的鎖機制:
    概念:
        1)鎖是用來在多使用者併發訪問和操作資料庫時,保證資料的一致性的一種機制
        2)鎖有Oracle自動管理,如一個DML操作,Oracle預設的機制是在DML操作映像的行記錄上自動加鎖
        3)鎖在被相關的操作申請並持有後,會一直保持到事務的結束,事務結束後,鎖才會被釋放
        4)查詢語句不會鎖定任何記錄,如果在查詢語句後面加for update子句會鎖定查詢所影響的行記錄

    1)行級加鎖:預設行級鎖,針對dml語句
    2)表級加鎖:
    
    Oracle加鎖方式:
        1)自動加鎖:使用者在執行insert,update,delete,DCl,DDL語句時,Oracle會自動加鎖
        2)手動加鎖
            2-1)表級加鎖:
                LOCK TABLE 表名 IN 鎖型別 MODE [NOWAIT]
            2-2)行級加鎖:
                SELECT 查詢列 FROM 表名 FOR UPDATE [NOWAIT]
        
    鎖的型別:
        排它鎖(Exclusive):不能在其上再加其他鎖
        共享鎖(share):可以在其上再加共享鎖
        
    提交或回滾前資料狀態
        1)資料變化前的狀態可以被恢復
        2)當前會話可以使用select語句來驗證DML操作後的結果
        3)其他會話不能檢視當前使用者的DML操作結果
        4)受影響紀錄被鎖定,也就是其他使用者不能改變受影響記錄中的資料
    提交後資料狀態
        1)在資料庫中資料變化為永久性的,先前的資料狀態永久性消失
        2)所有使用者/會話都可以查詢到提交後的結果
        3)鎖定的記錄被釋放,可以有效地被其他使用者操作
        4)所有的儲存節點被清除
    回滾後資料狀態
        1)先前的資料狀態被恢復
        2)鎖定的記錄被釋放
        3)所有的儲存節點被清除