MySQL入門(8)--事務

10、事務

1.事務的基本介紹:

1)概念:

		如果一個包含多個步驟的業務操作,被事務管理,那麼這些操作要麼同時成功,要麼同時失敗。
		比如轉賬,如果其中一條SQL語句出錯,而又沒有用事務來執行,就可能發生A之前轉出的錢轉出去了,B卻沒有收到。

2)操作:

		①開啓事務:start transaction;
		②回滾:rollback;(出現異常就回滾)
		③提交:commit;
		④MySQL數據庫中事務默認自動提交:
			一條DML(增刪改)語句會自動提交一次事務。

3)事務提交的兩種方式:

		①自動提交:mysql就是自動提交的,一條DML語句提交一次。
		②手動提交:需要先開啓事務,再提交

4)修改事務的默認提交方式:

		先查看事務的默認提交方式:
			select @@autocommit;#1代表自動提交,0代表手動提交
		修改默認提交方式:
			set @@autocommit=0;
	注意:Oracle默認是手動提交事務。
		rollback只能回退增刪改語句。insert update delete

5)使用了事務操作的轉賬例子:

create table account(
		id int primary key auto_increment,
		name varchar(10),
		balance double
);
insert into account (name,balance) values('zhangsan',1000),('lisi',500);
#張三給李四轉賬500元
#0.開啓事務
START TRANSACTION;
#1.查詢張三的賬戶餘額是否大於500
#select * from account;
#2.張三賬戶-500
update account set balance = balance -500 where name ='zhangsan';
#3.李四賬戶+500
#添加錯誤語句,模擬出錯
sahsafaf
update account set balance = balance +500 where name ='lisi';

#發現執行沒有問題,提交事務
COMMIT;

#發現出問題了,回滾事務
ROLLBACK;

2.事務的四大特徵:

	1)原子性:是不可分割的最小操作單位,要麼同時成功,要麼同時失敗。
	2)持久性:當事務提交或者回滾後,數據庫會持久化的保存數據。
	3)隔離性:多個事務之間,相互獨立。
	4)一致性:事務操作前後,數據總量不變。

3.事務的隔離級別:

1)概念:

		多個事務之間,是相互獨立的,
		但是如果多個事務操作同一批事務,則會引發一些問題,設置不同的隔離級別就可以解決這些問題。

2)存在問題:

		①髒讀:一個事務,讀取到另一個事務中沒有提交的數據。
		②虛讀(不可重複讀):同一個事務中,兩次讀取到的數據不一樣。
		③幻讀:一個事務操作(DML)數據表中的所有記錄,另一個事務添加了一條數據,第一個事務查詢不到自己的修改。

3)隔離級別:

		①read uncommited:讀未提交
			產生的問題:髒讀、虛讀、幻讀。
		②read commited:讀已提交(Oracle默認)
			產生的問題:虛讀、幻讀。
		③repeatable read:可重複讀(MySQL默認)
			產生的問題:幻讀。
		④serializable:串行化
			可以解決所有的問題。
		注意:隔離級別從小到大安全性越來越高,但是效率越來越低。
		數據庫查詢隔離級別:
			select @@tx_isolation;
		數據庫設置隔離級別:
			set global transaction isolation level 級別字符串; 
發佈了33 篇原創文章 · 獲贊 1 · 訪問量 4694
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章