Oracle - 數據更新 - 事務


/*
    事務
        事務是為了控制數據異步訪問所使用的一種技術
        就類似於java中的鎖機制 synchronized,只不過功能更加強大
        事務不能進行嵌套,當我們開啟一個事務的之后作的每一次dml語句都屬於這個事務
        
        
        
        在oracle里面
            事務的開啟
                執行一個dml語句就會開啟一個事務
                他會把當前dml語句操作的數據進行鎖定,別人在操作這些數據的時候就需要等鎖
            事務的結束
                當事務結束的時候會釋放掉當前事務所擁有的鎖
                
                顯示的事務結束
                    rollback:事務的回滾
                        回到開啟事務的之前的狀態
                    commit:事務的提交
                        將數據寫入到數據庫
                隱式的事務結束
                    執行DDL(創建表)語句會提交當前事務
                    正常退出數據庫會提交事務
                    非正常退出會回滾事務
                    
    制造oracle數據庫的死鎖
        窗口1
            UPDATE EMP SET SAL = 888 WHERE EMPNO = 7788;
        窗口2
            UPDATE EMP SET SAL = 666 WHERE EMPNO = 7934;
        窗口1
            UPDATE EMP SET SAL = 666 WHERE EMPNO = 7934;
        窗口2
            UPDATE EMP SET SAL = 888 WHERE EMPNO = 7788;
            
        ORACLE死鎖是非常影響性能的,所以有自己的死鎖檢測機制
    
    
    Oracle查詢也會開啟事務
        SELECT * FROM EMP FOR UPDATE;
        
    事務的隔離級別
        定義
            在數據庫操作中,為了有效保證並發讀取數據的正確性,提出的事務隔離級別。
            
            
        更新丟失
            兩個事務都同時更新一行數據,一個事務對數據的更新把另一個事務對數據的更新覆蓋了
            兩個事務同時操作一條數據,如果沒有鎖,那么我正在更改的數據可能會覆蓋別人的數據
        臟讀
            一個事務讀取到了另一個事務未提交的數據操作結果
            如果A線程更新數據為888,然后鎖定,如果這個時候b線程可以看到這個數據
        不可重復讀
            一個事務對同一行數據重復讀取兩次,但是卻得到了不同的結果
            虛讀
                別的事務對其做了修改操作
            幻讀
                別的事務對其做了 新增 刪除 操作
        
        SQL定義了一些級別去避免這些問題
            未授權讀取,也稱為讀未提交(Read Uncommitted)
                可以避免更新丟失,但是不能避免臟讀
            授權讀取,也稱為讀提交(Read Committed)
                可以避免臟讀,但是不能避免  不可重復讀
            可重復讀取(Repeatable Read)
                避免了臟讀和虛讀和幻讀的刪除操作
                但是不能避免幻讀的新增操作
            序列化      序列化(Serializable):提供嚴格的事務隔離。它要求事務序列化執行,事務只能一個接着一個地執行,不能並發執行
    事務的四大特征
            原子性( Atomicity )、
            一致性( Consistency )、
            隔離性( Isolation )
            持續性( Durability )。
            這四個特性簡稱為 ACID 特性。 
        1 、原子性 
        事務是數據庫的邏輯工作單位,事務中包含的各操作要么都做,要么都不做 
        2 、一致性 
        事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。因此當數據庫只包含成功事務提交的結果時,就說數據庫處於一致性狀態。如果數據庫系統 運行中發生故障,有些事務尚未完成就被迫中斷,這些未完成事務對數據庫所做的修改有一部分已寫入物理數據庫,這時數據庫就處於一種不正確的狀態,或者說是 不一致的狀態。 
        3 、隔離性 
        一個事務的執行不能其它事務干擾。即一個事務內部的操作及使用的數據對其它並發事務是隔離的,並發執行的各個事務之間不能互相干擾。 
        4 、持續性 
        也稱永久性,指一個事務一旦提交,它對數據庫中的數據的改變就應該是永久性的。接下來的其它操作或故障不應該對其執行結果有任何影響。
    
        
*/  
--
CREATE TABLE BANK AS SELECT * FROM EMP;
--窗口1
UPDATE BANK SET SAL = SAL - 1000 WHERE EMPNO = 7839 AND ENAME = 'KING' AND SAL >= 1000;
UPDATE BANK SET SAL = SAL + 1000 WHERE EMPNO = 7369 AND ENAME = 'SMITH';    
--窗口2
UPDATE BANK SET SAL = 10  WHERE EMPNO  = 7839;

 

/*
    
         使
         java   synchronized
         dml
        
        
        
         oracle
             
                   dml
                   dml ,
             
                  
                  
                  
                        rollback:
                            
                        commit:
                            
                  
                        DDL
                        退
                        退
                       
     oracle
         1
              UPDATE  EMP  SET  SAL  =  888  WHERE  EMPNO  =  7788;
         2
              UPDATE  EMP  SET  SAL  =  666  WHERE  EMPNO  =  7934;
         1
              UPDATE  EMP  SET  SAL  =  666  WHERE  EMPNO  =  7934;
         2
              UPDATE  EMP  SET  SAL  =  888  WHERE  EMPNO  =  7788;
             
         ORACLE
    
    
     Oracle
         SELECT *  FROM  EMP  FOR  UPDATE;
        
    
        
             
             
             
        
             
             
        
             
              A 888 b
        
             
             
                  
             
                        
        
         SQL
              , Read  Uncommitted
                  
              , Read  Committed
                     
              Repeatable  Read
                  
                  
                     Serializable
 
    
                Atomicity 
                Consistency 
                Isolation 
                Durability 
                ACID   
         1   
          
         2   
         使      
         3   
         使  
         4   
        
    
        
* /  
--
CREATE  TABLE  BANK  AS  SELECT *  FROM  EMP;
 
--1
UPDATE  BANK  SET  SAL  =  SAL  -  1000  WHERE  EMPNO  =  7839  AND  ENAME  =  'KING'  AND  SAL  >=  1000;
UPDATE  BANK  SET  SAL  =  SAL  +  1000  WHERE  EMPNO  =  7369  AND  ENAME  =  'SMITH';    
 
--2
UPDATE  BANK  SET  SAL  =  10   WHERE  EMPNO   =  7839;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM