Java知識點總結(JDBC-事務)

Java知識點總結(JDBC-事務)

@(Java知識點總結)[Java, JDBC]數據庫

事務

事務基本概念

  • 一組要麼同時執行成功,要麼同時執行失敗的 SQL 語句。是數據庫操做的一個執行單元!
  • 事務開始於:併發

    • 執行 commit 或 rollback 語句。
    • 執行一條 DDL 語句,例如 create table 語句;在這種狀況下,會自動執行 commit 語句。
    • 執行一條 DCL 語句,例如 grant 語句;在這種狀況下,會自動執行 commit 語句。
    • 斷開與數據庫的鏈接。
    • 執行了一條 DML 語句,該語句卻失敗了;在這種狀況下,會爲這個無效的 DML 語句執行 rollback 語句。

事務的四大特色(ACID)

  • atomicity(原子性)性能

    • 表示一個事務內的全部操做是一個總體, 要麼所有成功,要麼全失敗
  • consistency(一致性)atom

    • 表示一個事務內有 一個操做失敗時 ,全部的更改過的數據都必須 回滾到修改前的狀態 ;
  • isolation(隔離性)code

    • 事務查看數據時 數據所處的狀態 ,要麼是另外一併發事務 修改它以前 的狀態,要麼是另外一事務 修改它以後 的狀態,事務不會查看中間狀態的數據。
  • durability(持久性)事務

    • 持久性事務完成以後,它對於系統的 影響是永久性的 。

事務併發處理可能引發的問題

  1. 讀髒(dirty read):一個事務讀取了另外一個事務還沒有提交的數據,
  2. 不可重複讀(non-repeatable read):一個事務的操做致使另外一個事務先後兩次讀取到不一樣的數據
  3. 幻讀(phantom read):一個事務的操做致使另外一個事務先後兩次查詢的結果數據量不一樣。

隔離級別

4個等級的事務隔離級別,在相同的數據環境下,使用相同的輸入,執行相同的工做,根據不一樣的隔離級別,能夠致使不一樣的結果。不一樣事務隔離級別可以解決的數據併發問題的能力是不一樣的。ci

  • SERIALIZABLE(串行化)it

    • 不會出現任何併發問題,由於它是對同一數據的訪問是串行的,非併發訪問的;

性能最差io

  • REPEATABLE READ(可重複讀)(MySQL)table

    • 防止髒讀和不可重複讀,不能處理幻讀
    • 性能比SERIALIZABLE好
  • READ COMMITTED(讀已提交數據)(Oracle)

    • 防止髒讀,不能處理不可重複讀和幻讀;
    • 性能比REPEATABLE READ好
  1. READ UNCOMMITTED(讀未提交數據)

    • 可能出現任何事物併發問題,什麼都不處理。
    • 性能最好
MySQL隔離級別

MySQL的默認隔離級別爲Repeatable read,能夠經過下面語句查看:

SELECT @@`TX_ISOLATION`;

也能夠經過下面語句來設置當前鏈接的隔離級別:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ ;//[4選1]
JDBC設置隔離級別

con.setTransactionIsolation(int level) :參數可選值以下:

Connection.TRANSACTION_READ_UNCOMMITTED;
Connection.TRANSACTION_READ_COMMITTED;
Connection.TRANSACTION_REPEATABLE_READ;
Connection.TRANSACTION_READ_SERIALIZABLE。
相關文章
相關標籤/搜索