JDBC Item4: (MySql)事務管理

1、事務的概念

  事務指邏輯上的一組操做,組成這組操做的各個單元,要不所有成功,要不所有不成功。 java

2、MySQL數據庫中操做事務命令

MySql事務操做命令:
數據庫

  1. 開啓事務: start transaction併發

  2. 輸入一些CRUD操做spa

  3. 提交事務: commitcode

  4. 回滾事務: rollback對象

3、JDBC使用事務

    當Jdbc程序向數據庫得到一個Connection對象時,默認狀況下這個Connection對象會自動向數據庫提交在它上面發送的SQL語句。若想關閉這種默認提交方式,讓多條SQL在一個事務中執行,可以使用下列的JDBC控制事務語句。事務

Connection.setAutoCommit(false);//開啓事務(start transaction)
Connection.rollback();//回滾事務(rollback)
Connection.commit();//提交事務(commit)

3.1 設置事務回滾點Savepoint

在開發中,有時候可能須要手動設置事務的回滾點,在JDBC中使用以下的語句設置事務回滾點ci

Savepoint sp = conn.setSavepoint();
conn.rollback(sp);
conn.commit();//回滾後必須通知數據庫提交事務

4、事務的四大特性(ACID)

4.1 原子性(Atomicity)

   原子性是指事務是一個不可分割的工做單位,事務中的操做要麼所有成功,要麼所有失敗。好比在同一個事務中的SQL語句,要麼所有執行成功,要麼所有執行失敗開發

4.2 一致性(Consistency)

   官網上事務一致性的概念是:事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態。以轉帳爲例子,A向B轉帳,假設轉帳以前這兩個用戶的錢加起來總共是2000,那麼A向B轉帳以後,無論這兩個帳戶怎麼轉,A用戶的錢和B用戶的錢加起來的總額仍是2000,這個就是事務的一致性。it

4.3 隔離性(Isolation)

   事務的隔離性是多個用戶併發訪問數據庫時,數據庫爲每個用戶開啓的事務,不能被其餘事務的操做數據所幹擾,多個併發事務之間要相互隔離。

4.4 持久性(Durability)

  持久性是指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來即便數據庫發生故障也不該該對其有任何影響。

5、事務的隔離級別

5.1 髒讀

    髒讀指一個事務讀取了另一個事務未提交的數據。

5.2 不可重複讀

    不可重複讀指在一個事務內讀取表中的某一行數據,屢次讀取結果不一樣。 

    不可重複讀和髒讀的區別是,髒讀是讀取前一事務未提交的髒數據,不可重複讀是從新讀取了前一事務已提交的數據。 

5.3 虛讀(幻讀)

    虛讀(幻讀)是指在一個事務內讀取到了別的事務插入的數據,致使先後讀取不一致。

5.4 MySQL數據庫四種隔離級別

  • Serializable(串行化):可避免髒讀、不可重複讀、虛讀狀況的發生。

  • Repeatable read(可重複讀):可避免髒讀、不可重複讀狀況的發生。

  • Read committed(讀已提交):可避免髒讀狀況發生。

  • Read uncommitted(讀未提交):最低級別,以上狀況均沒法保證。

相關文章
相關標籤/搜索