事務知識點總結

冷無缺發表於2019-10-25
  1. 事務的概念:一組資料庫操作,要麼全部成功,要麼全部失敗;
  2. 事務的特性:原子性、一致性、隔離性、永續性;
  3. 同一記錄多個事務同時執行,可能會出現的問題:髒讀、不可重複度、幻讀;(為了解決這些問題,就出現了隔離級別的概念)
  4. 隔離級別:讀未提交、讀提交、可重複讀、序列化;(執行效率依次降低,安全性依次增高)
    • 讀未提交:一個事務還未提交,他做的變更就能被另一個事務看到;
    • 讀提交:一個事物提交後,他做的變更才能被另一個事務看到;
    • 可重複讀:一個事務執行過程中看到的資料,總是和它啟動時看到的資料保持一致。當然,該級別下,所做的變更在未提交前,其他事務也是不可見的;
    • 序列化:對於同一記錄,“讀”會加讀鎖,“寫”會加寫鎖。當出現讀寫鎖衝突的時候,後訪問的事務必須等前一個事務執行完成,才能繼續執行。
  5. 隔離級別的實現:資料庫底層通過建立一個檢視,訪問的整個過程以檢視邏輯結果為準;另外,每條記錄在更新的時候,都會同時記錄一條回滾操作;故同一條記錄在系統中同時可能會存在多個版本,也就是多版本併發控制(MVCC)。
    • 讀未提交:直接返回記錄上的最新值,沒有檢視的概念;
    • 讀提交:是在每條sql語句執行的時候,建立檢視;
    • 可重複讀:是在事務開啟的時候,就建立檢視;
    • 序列化:是用加鎖的形式來避免並行訪問的;
  6. 事務隔離級別的配置引數:transaction-isolation;
  7. 回滾日誌什麼時候清除?當系統中沒有比這個回滾日誌更早的 reda-view 的時候;
  8. 事務的啟動方式:顯示的啟動;begin transaction ; commit ; rollback;
  9. set autocommit = 0 ;set autocommit = 1

    建議總是使用 set autocommit = 1,然後顯示的啟動事務