資料庫 Innodb如何保證可重複讀

2021-09-02 14:14:41 字數 532 閱讀 8955

明確一些概念

db_trx_id: 記錄當前資料行最後一次的更新和插入的事務id

db_roll_ptr: 指向當前記錄項的undo log資訊

db_row_id:標識插入的新資料行

如何保證可重複讀:事務活躍陣列array

1.事務開啟後,有乙個陣列array用來維護當前活躍的事務id(開啟未提交)

2.事務id最大值+1記作高水位

3.事務id最小值記作低水位

每一行資料都會有乙個undo log的鏈,當前事務根據資料行的db_trx_id和array決定是否能夠檢視值。

db_trx_id如果大於高水位,不可檢視;db_trx_id小於低水位,可檢視;db_trx_id在之間,判斷db_trx_id是否在array中,如果在,不可讀。

下面引出乙個問題

innodb的可重複讀機制能夠避免幻讀麼?

乍一看,通過mvcc機制和間隙鎖貌似保證了select和update的問題,但是insert的問題卻沒有解決,所以還是會存在幻讀的情況

如何建立innodb資料庫

假如你用mysql test命令啟動mysql客戶端。要建立乙個innodb表,你必須在表建立sql語句中指定engine innodb或者type innodb選項 create table customers a int,b char 20 index a engine innodb creat...

InnoDB資料庫儲存引擎

innodb 是 mysql 上第乙個提供外來鍵約束的資料儲存引擎,除了提供事務處理外,innodb 還支援行鎖,提供和 oracle 一樣的一致性的不加鎖讀取,能增加併發讀的使用者數量並提高效能,不會增加鎖的數量。innodb 的設計目標是處理大容量資料時最大化效能,它的 cpu 利用率是其他所有...

sql資料庫去重語法 SQL如何去重?

展開全部 1 首先建立乙個臨時表,用於演示sqlserver語法中的去重關鍵字distinct的使用。本文以sqlserver資料庫為例演示,62616964757a686964616fe4b893e5b19e31333431373232 if object id tempdb.tmp1 is no...