MySQL事務及鎖機制大揭秘 公開課筆記

2021-10-07 10:18:04 字數 2713 閱讀 8077

spring事務和資料庫事務有什麼區別?

spring提供了乙個類,由這個類以aop的方式管理,只需要@transactional即可

為什麼要有事務?

事務的基本概念:要不然全成功,要不然全失敗,為了保證一致性。

轉賬的步驟需要3條語句:查詢a賬戶,a賬戶減去,增加b賬戶

跨行轉賬:分布式事務

一些處理機制:2階段提交、3階段提交…

acid

原子性 一致性 隔離性 永續性

每個特點底層實現的原理是什麼?

原子性事務中的所有操作作為乙個整體,像原子一樣不可分割,通過undolog回滾日誌實現

undolog存在**?

log有幾種?

binlog, undolog, redolog, relaylog, errorlog, slowlog

mysql可以看做是分為3層

(查詢快取在8.0之後就沒有了)

只有innodb儲存引擎有 redolog,undolog

所有儲存引擎都有binlog,errorlog,relaylog,slowlog

既然有binlog,為什麼還需要redolog,undolog?

因為在mysql剛開始誕生的時候,並沒有innodb引擎,用的是myisam引擎,它不支援事務。

innodb引擎後來被創造之後,一開始是以外掛程式的形式執行的,但是在5.5版本之後,預設使用的是innodb儲存引擎。

如何在運算元據之前,將資料備份到乙個地方?

undolog,使用反邏輯,根據邏輯計算出實際的值,而不需要在每乙個狀態的時候都儲存乙份資料。

相當於:(實際上不是這樣儲存的)

undolog是否需要落盤?隔離

併發操作,兩個人同時操作同乙個資料,加鎖

加什麼鎖?間隙鎖?樂觀鎖?共享鎖?排它鎖?

永續性資料一旦發生了更新,一定要溢寫到磁碟。下次讀資料的時候,一定要和上一次是一樣的。

永續性通過redolog和binlog共同保證

永續性實現原理:redolog

innodb_flush_log_at_trx_commit引數:

0:如果在0.9秒,mysql服務崩了,會丟失1秒的資料。伺服器斷電,該丟都丟。如果只是mysql程序掛了,依然會給你寫到磁碟中去。

1:如果在0.9秒,mysql服務崩了,不會丟資料。每次提交都直接寫磁碟,做到資料足夠安全,但是會帶來效能問題。

2:為什麼要有redolog?直接寫資料不行嗎?

wal——write ahead log溢日誌

以下三種方法都不能做到嚴格不丟資料,都有可能丟失1秒鐘資料。

批量操作的時候,不是每一次都提交事務,而是分批提交。

如果插了900條,剩下100條突然斷電了,重啟之後,可以使用redolog繼續寫

redolog相當於乙個增量儲存,redolog滿了之後,會進行持久化的同步歸檔。然後將redolog清空。

undo和redo的執行順序?

讀未提交,讀已提交,可重複度,序列化

不同的隔離級別可能導致不同的併發異常,如下圖:

不可重複讀:同乙個事務可能讀到不同的資料

mvcc:multi version concurrency control 多版本併發控制

髒讀是指乙個事務讀取到其他事務已修改未提交的內容,不可重複讀是值 讀到其他事務已經提交的內容

不可重複讀

幻讀 跟 不可重讀讀,操作一樣,只不過乙個是修改,乙個是插入

read view

用undolog實現mvcc:

所以undolog還是要存磁碟,所以到底要不要存?

mysql有多少種鎖?

Mysql 事務及鎖機制

事務的基本概念 資料庫事務是構成單一邏輯工作單元的操作集合 注意點 1.資料庫事務可以包含乙個或多個資料庫操作,但這些操作構成乙個邏輯上的整體 2.構成邏輯整體的這些資料庫操作,要麼全部執行成功,要麼全部不執行 3.構成事務的所有操作,要麼全部對資料庫產生影響,要麼全部都不產生影響,即資料庫保持一致...

mysql事務與鎖機制 mysql事務與鎖機制

在併發下事務會容易出現的一些問題 資料更新丟失 兩個事務同時操作一條資料,乙個事務因為異常導致資料更新丟失 髒讀 乙個失誤開始讀取了某行資料,另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾。不可重複讀 乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的...

mysql事務及其鎖機制

1.事務是一條或多條資料庫操作語句的組合。四個特性 acid 原子性 隔離性 一致性 永續性。mysql 本身不提供事務支援,而是開放了儲存引擎介面,由具體的儲存引擎來實現,具體來說支援 mysql 事務的儲存引擎就是 innodb。儲存引擎實現事務的通用方式是基於 redo log 和 undo ...