MySQL事務介紹

##數據庫事務
###含義
    通過一組邏輯操作單元(一組DML——sql語句),將數據從一種狀態切換到另外一種狀態

###特點
    (ACID)
    原子性:要麼都執行,要麼都回滾
    一致性:保證數據的狀態操作前和操作後保持一致
    隔離性:多個事務同時操作相同數據庫的同一個數據時,一個事務的執行不受另外一個事務的干擾
    持久性:一個事務一旦提交,則數據將持久化到本地,除非其他事務對其進行修改

相關步驟:

    1、開啓事務
    2、編寫事務的一組邏輯操作單元(多條sql語句)
    3、提交事務或回滾事務

###事務的分類:

隱式事務,沒有明顯的開啓和結束事務的標誌

    比如
    insert、update、delete語句本身就是一個事務


顯式事務,具有明顯的開啓和結束事務的標誌

        1、開啓事務
        取消自動提交事務的功能
        
        2、編寫事務的一組邏輯操作單元(多條sql語句)
        insert
        update
        delete
        
        3、提交事務或回滾事務
###使用到的關鍵字

    set autocommit=0;
    start transaction;
    commit;
    rollback;
    
    savepoint  斷點
    commit to 斷點
    rollback to 斷點


###事務的隔離級別:

事務併發問題如何發生?

    當多個事務同時操作同一個數據庫的相同數據時
事務的併發問題有哪些?

    髒讀:一個事務讀取到了另外一個事務未提交的數據
    不可重複讀:同一個事務中,多次讀取到的數據不一致
    幻讀:一個事務讀取數據時,另外一個事務進行更新,導致第一個事務讀取到了沒有更新的數據
    
如何避免事務的併發問題?

    通過設置事務的隔離級別
    1、READ UNCOMMITTED
    2、READ COMMITTED 可以避免髒讀
    3、REPEATABLE READ 可以避免髒讀、不可重複讀和一部分幻讀
    4、SERIALIZABLE可以避免髒讀、不可重複讀和幻讀
    
設置隔離級別:

    set session|global  transaction isolation level 隔離級別名;
查看隔離級別:

    select @@tx_isolation;
    
 

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