程式設計雜記 事務相關

2021-08-08 06:17:12 字數 1367 閱讀 1014

原子性、一致性、隔離性、永續性

隔離性:多個使用者併發訪問資料庫時,乙個使用者的事務不可以被其他使用者的事務所干擾,多個併發事務之間,資料要相互隔離。

如果不考慮事務的隔離性將會導致:髒讀、不可重複讀、幻讀

髒讀:乙個事務讀取了另乙個事務改寫但還未提交的資料,如果這些資料被回滾,則讀到的資料是無效的。

不可重複讀:在同一事務中,多次讀取同一資料返回的結果有所不同。

幻讀:乙個事務讀取了幾行記錄後,另乙個事務插入一些記錄,幻讀就發生了,在後來的查詢中,第乙個事務就會發生有些原來沒有的記錄。

default:使用後端資料庫預設的隔離級別(spring)中的預設選擇

@target()

@retention(retentionpolicy.runtime)

@inherited

@documented

public @inte***ce

transactional ;

string rollbackforclassname() default {};

class

<? extends

throwable> norollbackfor() default {};

string norollbackforclassname() default {};

}

read_uncommited:允許你讀取還未提交的改變了的資料,可導致髒讀、幻讀、不可重複讀

read_commited:允許在併發事務已經提交後讀取,可防止髒讀但幻讀和不可重複讀仍可發生。

repeatable_read:對相同欄位的多次讀取是一致的,除非資料被事務本身改變。可防止髒讀、不可重複讀但幻讀仍可能發生, 該事務的隔離級別也是mysql預設的事務隔離級別。

serializtable:完全服從acid的隔離級別,確保不發生髒讀、幻讀、不可重複讀。這是所有的隔離級別中是最慢的,它是典型的通過完全鎖定在事務中涉及的資料表完成。

1.對於我們公司常用的mysql innodb的資料引擎,它所執行的是行級鎖。所以我們要減少更新、修改、刪除操作,對一條資料的鎖定時間。如果乙個事務長期占有一條資料,那麼其他執行緒事務操作該資料時就會等待。

2.在springboot專案程式設計中,如果要對乙個service進行事務管理,需要在該service的實現類的重寫方法上新增事務註解指定rollbackfor = 因為spring預設的事務只回滾執行異常。

@transactional(rollbackfor = )

//並且在需要回滾的地方加上

transactionaspectsupport.currenttransactionstatus().setrollbackonly();

mysql 筆記 事務

一 問題讀取 1.髒讀 dirty read 事務1更新了某一條記錄,但未提交 事務2讀取到新的未提交記錄 事務1回滾。2.不可重複讀取 nonrepeatable read 不可重複讀,是指在資料庫訪問中,乙個 事務範圍內兩個相同的查詢卻返回了不同資料。例子 事務1讀取某一條記錄 事務2修改事務1...

mysql筆記 事務

寫日誌為什麼比直接寫磁碟要快?使用事務日誌,儲存引擎在修改表的資料時,只需要修改其記憶體拷貝,再把該修改行為記錄到硬碟上的事務日誌中,而不用每次都將修改的資料本身持久到磁碟。事務日誌採用的是追加的方式,因此寫日誌的操作是磁碟上一小塊區域內的順序i o,而不是隨機i o,所以快很多。事務日誌持久以後,...

Mysql筆記 事務

事務 transaction 會把資料庫從一種一致狀態轉換為另一種一致狀態。在資料庫提交工作時,要麼所有修改都已經儲存了,要麼修改都不儲存。事務是訪問並更新資料庫中各種資料項的乙個程式執行單元。在執行中要麼都做修改,要麼都不做修改。innodb儲存引擎中的事務完全符合acid的特性。l 原子性 at...