1、什麼是事務,事物的隔離級別有哪些?
事務是構成單一邏輯工作單元的操作集合,
事務隔離界別有讀未提交、讀已提交,可重複讀,序列化
2、事務的每個隔離級別會引發什麼問題,mysql預設的哪個隔離級別
讀未提交:髒讀:讀到還沒有提交的資料
讀已提交:不可重複讀:同乙個事務裡,讀到了兩次不一樣的資料
可重複讀:幻讀:在同乙個事務裡,查詢查不到,但是增加或刪除操作會收到影響
序列化:
預設可重複讀
3、mysql有哪些鎖?
共享鎖:多個事務對於同乙個資料可以共享一把鎖,都能訪問資料庫,但是只能讀不能改
事務a:
select * from student where id = 1 lock in share mode;
事務b:
select * from student where id =1;(讀取沒有問題)
事務b:
update student set name = 'hehe' where id =1;
注意:無法修改會卡死,當事務a提交之後,b才會成功
排他鎖: 排他鎖不能與其他鎖並存,如乙個事務獲取了乙個資料行的排他鎖,其他事務就不能在獲取該行的鎖。只有當前獲取了排他鎖的事務可以對資料進行讀取和修改
delete、update、insert、預設是排他鎖
事務a:
select * from student where id=1 for update
事務b:
select * from student where id = 1 for update;
select * from student where id =1 lock in share mode;
注意:事務b操作的時候會卡死,提交事務立馬成功
意向共享鎖:表示事務準備給資料行加入共享鎖,也就是說乙個資料行在加共享鎖之前必須先取得該錶的is鎖
意向排他鎖:表示事務準備給資料行加入排他鎖,也就是說乙個資料行加排他鎖之前必須先取得該錶的ix鎖
意向鎖是innodb資料操作之前自動加的,不需要使用者干預
自增鎖:
針對自增列自增長的乙個特殊的表級別鎖
show variables like `innodb_autoinc_lock_mode`;
預設值1 代表連續,事務未提交則id永久丟失
4、資料庫崩潰時事物的恢復機制(redo日誌和undo日誌)
一、原子性(atomicity)
乙個事務要麼全部提交成功,要麼全部失敗回滾,不能只執行其中的一部分操作,這就是事務的原子性
事務的原子性是通過undo log來實現的
undolog是邏輯日誌,可以理解為:
當delete一條記錄時,undo log中會記錄一條對應的insert記錄
當insert一條記錄時,undolog中會記錄一條對應的delete記錄
當update一條記錄時,它記錄一條對應相反的update記錄
二、一致性(consistency)
事務的執行不能破壞資料庫資料的完整性和一致性,乙個事務在執行之前和執行之後,資料庫都必須處於一致性狀態。
如果資料庫系統在執行過程中發生故障,有些事務尚未完成就被迫中斷,這些未完成的事務對資料庫所作的修改有一部分已寫入物理資料庫,這是資料庫就處於一種不正確的狀態,也就是不一致的狀態
事務的一致性是通過原子性,永續性,隔離性來實現的
三、隔離性(isolation)
事務的隔離性是指在併發環境中,併發的事務時相互隔離的,乙個事務的執行不能不被其他事務干擾。不同的事務併發操作相同的資料時,每個事務都有各自完成的資料空間,即乙個事務內部的操作及使用的資料對其他併發事務時隔離的,併發執行的各個事務之間不能相互干擾。
事務的隔離性是通過(讀寫鎖+mvcc)來實現的
四、持久化(durabilify)
事務的永續性是通過redo log來實現的
redolog 記錄的新資料的備份,資料庫在頁面持久化前,會確保先把redo log寫入磁碟持久化
事務,隔離性、一致性由併發控制。原子性永續性由日誌恢復保證 mysql事務筆記 MySQL事務筆記
1.結束事務的方法用什麼?2.事務的最終形態是什麼?commit 提交 rollback 回滾 3.事務的四大特徵?原子性 乙個事務是最小的工作單元,事務包含的所有操作要麼全部成功,要麼全部失敗回滾 一致性 事務執行之前和執行之後都必須處於一致性狀態。拿轉賬來說,假設使用者a和使用者b兩者的錢加起來...
MySQL事務筆記
1.結束事務的方法用什麼?2.事務的最終形態是什麼?commit 提交 rollback 回滾 3.事務的四大特徵?乙個事務是最小的工作單元,事務包含的所有操作要麼全部成功,要麼全部失敗回滾 事務執行之前和執行之後都必須處於一致性狀態。拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,...
mysql 筆記 事務
一 問題讀取 1.髒讀 dirty read 事務1更新了某一條記錄,但未提交 事務2讀取到新的未提交記錄 事務1回滾。2.不可重複讀取 nonrepeatable read 不可重複讀,是指在資料庫訪問中,乙個 事務範圍內兩個相同的查詢卻返回了不同資料。例子 事務1讀取某一條記錄 事務2修改事務1...