事務筆記

事務:
	定義:是數據庫管理系統(數據全量)執行過程當中的一個邏輯單位,由一個有限的數據庫操做序列構成
	目的:數據一致和數據隔離
	屬性:ACID, 原子性(Atomicty),一致性(Consistency),隔離性(Isolation),持久性(Durability)
		隔離級別(四個級別逐漸加強),每一個級別解決一個問題:
			未提交讀(READ UNCOMMITTED)。另外一個事務修改了數據,但還沒有提交,而本事務中的SELECT會讀到這些未被提交的數據(髒讀)。
			提交讀(READ COMMITTED)。本事務讀取到的是最新的數據(其餘事務提交後的)。問題是,在同一個事務裏,先後兩次相同的SELECT會讀到不一樣的結果(不重複讀)。
			可重複讀(REPEATABLE READ)。在同一個事務裏,SELECT的結果是事務開始時時間點的狀態,所以,一樣的SELECT操做讀到的結果會是一致的。可是,會有幻讀現象(稍後解釋)。
			串行化(SERIALIZABLE)。讀操做會隱式獲取共享鎖,能夠保證不一樣事務間的互斥。
			解釋:
				髒讀:事務發生回滾,事務未提交
				不可重複讀:同一個事務中,另外一個事務提交了新數據,B讀取A數據會致使兩次讀取不一致
					https://segmentfault.com/a/1190000017755376
				幻讀:解決了不重複讀,保證了同一個事務裏,查詢的結果都是事務開始時的狀態(一致性)。可是,若是另外一個事務同時提交了新數據,本事務再更新時,就會神奇的發現了這些新數據
			InnoDB默認的隔離級別是REPEATABLE READ,可重複讀 
		傳播行爲:7種事務傳播行爲,肯定客戶端和被調用端的事務邊界
			PROPAGATION_REQUIRED(XML文件中爲REQUIRED)表示當前方法必須在一個具備事務的上下文中運行,若有客戶端有事務在進行,那麼被調用端將在該事務中運行,不然的話從新開啓一個事務。(若是被調用端發生異常,那麼調用端和被調用端事務都將回滾)
			PROPAGATION_SUPPORTS(XML文件中爲SUPPORTS)表示當前方法沒必要須要具備一個事務上下文,可是若是有一個事務的話,它也能夠在這個事務中運行
			PROPAGATION_MANDATORY(XML文件中爲MANDATORY)表示當前方法必須在一個事務中運行,若是沒有事務,將拋出異常
			PROPAGATION_NESTED(XML文件中爲NESTED)表示若是當前方法正有一個事務在運行中,則該方法應該運行在一個嵌套事務中,被嵌套的事務能夠獨立於被封裝的事務中進行提交或者回滾。若是封裝事務存在,而且外層事務拋出異常回滾,那麼內層事務必須回滾,反之,內層事務並不影響外層事務。若是封裝事務不存在,則同PROPAGATION_REQUIRED的同樣
			PROPAGATION_NEVER(XML文件中爲NEVER)表示當方法務不該該在一個事務中運行,若是存在一個事務,則拋出異常
			PROPAGATION_REQUIRES_NEW(XML文件中爲REQUIRES_NEW)表示當前方法必須運行在它本身的事務中。一個新的事務將啓動,並且若是有一個現有的事務在運行的話,則這個方法將在運行期被掛起,直到新的事務提交或者回滾才恢復執行。PROPAGATION_NOT_SUPPORTED(XML文件中爲NOT_SUPPORTED)表示該方法不該該在一個事務中運行。若是有一個事務正在運行,他將在運行期被掛起,直到這個事務提交或者回滾才恢復執行
			參考:https://juejin.im/post/5ae9639af265da0b926564e7
相關文章
相關標籤/搜索