2、事務的建立
2、事務的隔離級別
事務:乙個或一組sql語句組成乙個執行單元,這個執行單元要麼全部執行,要麼全部不執行。
事務由單獨單元的-個或多個sql語句組成,在這個單元中,每個mysql語句是相互依賴的。而整個單獨單元作為乙個不可分割的整體,如果單元中某條sql語句一且執行失敗或產生錯誤,整個單元將會回滾。所有受到影響的資料將返回到事物開始以前的狀態;如果單元中的所有sql語句均執行成功,則事物被順利執行。
通過show engines;
來檢視mysql支援的儲存引擎。
在mysql中用的最多的儲存引擎有: innodb,myisam , memory等。其中innodb
支援事務,而myisam、memory等不支 持事務
1.原子性(atomicity)
原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼
都發生,要麼都不發生。
2.一致性(consistency )
事務必須使資料庫從乙個一致性狀態變換到另外乙個一致性狀態
3.隔離性(isolation)
事務的隔離性是指乙個事務的執行不能被其他事務干擾,即乙個
事務內部的操作及使用的資料對併發的其他事務是隔離的,併發
執行的各個事務之間不能互相干擾。
4.永續性(durability)
永續性是指一乙個事務一旦被提交,它對資料庫中資料的改變就是
永久性的,接下來的其他操作和資料庫故障不應該對其有任何影
響隱式事務:事務沒有明顯的開啟和結束的標記
比如insert、update、 delete語句
delete from表 where id =1;
顯式事務:事務具有明顯的開啟和結束的標記
前提:必須設定自動提交功能為禁用
update 表set a.salary=500 where name='a'
update 表set b.salary=1500 where name='b'
演示事務的使用步驟
#開啟事務
set autocommit=0;
start
transaction
;#編寫一組事務的語句
update account set balance =
500where username=
'張無忌'
;update account set balance =
1500
where username=
'趙敏'
;#結束事務
commit:
對於同時執行的多個事務,當這些事務訪問資料庫中相同的資料時,如果沒
有採取必要的隔離機制,就會導致各種併發問題 :
髒讀:對於兩個事務t1, t2,t1讀取了已經被t2更新但還沒有被提交的字段.
之後,若t2回滾,t1讀取的內容就是臨時且無效的.
不可重複讀:對於兩個事務t1,t2, t1讀取了乙個字段,然後t2更新了該字段.
之後,t1再次讀取同乙個字段,值就不同了,
幻讀:對於兩個事務t1,t2,t1從乙個表中讀取了乙個字段,然後t2在該表中插
入了一些新的行.之後,如果t1再次讀取同乙個表,就會多出幾行.
資料庫事務的隔離性:資料庫系統必須具有隔離併發執行各個事務的能力,使它們不會相互影響,避免各種併發問題。
乙個事務與其他事務隔離的程度稱為隔離級別.資料庫規定了多種事務隔資料庫提供四種事務隔離級別:離級別,不同隔離級別對應不同的干擾程度,隔離級別越高,資料一致性就
越好,但併發性越弱。
隔離級別
描述read uncommitted (讀未提交資料)
允許事務讀取未被其他事物提交的變更.髒讀,不可重複讀和幻讀的問題都會出現題仍然可能出現
read commited(讀已提交資料)
只允許事務讀取已經被其它事務提交的變更.可以避免髒讀,但不可重複讀和幻讀問
repeatable read(可重複讀)
確保事務可以多次從乙個欄位中讀取相同的值.在這個事務持續期問,禁止其他事物對這個字段進行更新.可以避免髒讀和不可重複讀,但幻讀的問題仍然存在.
serializable(序列化)
確保事務可以從乙個表中讀取相同的行在這個事務持續期問,禁止其他事務對該錶執行插入,更新和刪除操作.所有併發問題都可以避免,但效能十分低下.
mysql支援4種事務隔離級別,mysql預設的事務隔離級別是repeatable read
MySQL 事務控制語句 TCL
乙個或者一組 sql 語句組成乙個執行單元,這個執行單元要麼全部執行,要麼全部都不執行,在這個單元中每個 sql 語句都是相互依賴的。整個單元作為乙個不可分割的整體,如果單元中的某條 sql 語句一旦執行失敗或者產生錯誤,整個單元將會回滾。所有受影響的資料將返回到事務開始前的狀態,如果單元中的所有 ...
事務控制語言 TCL
概念 乙個或一組sql語句組成的執行單元,執行單元所有sql語句要麼全執行,要麼全不執行。栗子 張三給李四轉賬。張三 賬戶1000元。李四 賬戶1000元。update 表 set 張三賬戶 500 where name 張三 資料庫中途異常.update 表 set 李四賬戶 1500 where...
TCL語言筆記 TCL基礎語法
tcl 全稱是 tool command language。它是乙個基於字串的命令語言,基礎結構和語法非常簡單,易於學習和掌握。tcl 語言是乙個解釋性語言,所謂解釋性是指不象其他高階語言需要通過編譯和聯結,它象其他 shell 語言一樣,直接對每條語句順次解釋執行。tcl 資料型別簡單。對 tcl...