mysql事務內容筆記

2021-10-08 17:07:13 字數 2179 閱讀 2529

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...