事務指邏輯上的一組操做,組成這組操做的各個單元,要不所有成功,要不所有不成功。 java
MySql事務操做命令:
數據庫
開啓事務: start transaction併發
輸入一些CRUD操做spa
提交事務: commitcode
回滾事務: rollback對象
當Jdbc程序向數據庫得到一個Connection對象時,默認狀況下這個Connection對象會自動向數據庫提交在它上面發送的SQL語句。若想關閉這種默認提交方式,讓多條SQL在一個事務中執行,可以使用下列的JDBC控制事務語句。事務
Connection.setAutoCommit(false);//開啓事務(start transaction) Connection.rollback();//回滾事務(rollback) Connection.commit();//提交事務(commit)
在開發中,有時候可能須要手動設置事務的回滾點,在JDBC中使用以下的語句設置事務回滾點ci
Savepoint sp = conn.setSavepoint(); conn.rollback(sp); conn.commit();//回滾後必須通知數據庫提交事務
原子性是指事務是一個不可分割的工做單位,事務中的操做要麼所有成功,要麼所有失敗。好比在同一個事務中的SQL語句,要麼所有執行成功,要麼所有執行失敗開發
官網上事務一致性的概念是:事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態。以轉帳爲例子,A向B轉帳,假設轉帳以前這兩個用戶的錢加起來總共是2000,那麼A向B轉帳以後,無論這兩個帳戶怎麼轉,A用戶的錢和B用戶的錢加起來的總額仍是2000,這個就是事務的一致性。it
事務的隔離性是多個用戶併發訪問數據庫時,數據庫爲每個用戶開啓的事務,不能被其餘事務的操做數據所幹擾,多個併發事務之間要相互隔離。
持久性是指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來即便數據庫發生故障也不該該對其有任何影響。
髒讀指一個事務讀取了另一個事務未提交的數據。
不可重複讀指在一個事務內讀取表中的某一行數據,屢次讀取結果不一樣。
不可重複讀和髒讀的區別是,髒讀是讀取前一事務未提交的髒數據,不可重複讀是從新讀取了前一事務已提交的數據。
虛讀(幻讀)是指在一個事務內讀取到了別的事務插入的數據,致使先後讀取不一致。
Serializable(串行化):可避免髒讀、不可重複讀、虛讀狀況的發生。
Repeatable read(可重複讀):可避免髒讀、不可重複讀狀況的發生。
Read committed(讀已提交):可避免髒讀狀況發生。
Read uncommitted(讀未提交):最低級別,以上狀況均沒法保證。