Mysql8 0下驗證mysql的四種隔離級別

2021-10-10 03:10:00 字數 2733 閱讀 8085

mysql版本是8.0

隔離級別

髒讀不可重複讀

幻讀read uncommitted

yesyes

yesread committed

noyes

yesrepeatable read

nono

yesserializable

nono

no檢視當前的隔離級別:

設定當前會話的隔離級別

set session transaction isolation level read uncommitted; -- 讀未提交,下文**現的ru

set session transaction isolation level read committed; -- 讀提交,下文**現的rc

set session transaction isolation level repeatable read; -- 可重複讀,下文**現的rr

set session transaction isolation level serializable; -- 序列化

準備表

-- 建表

create table `amount` (

`id` int null,

`money` numeric null);

-- 插入資料

insert into amount(id,money) values(1, 800);

insert into amount(id,money) values(2, 200);

insert into amount(id,money) values(3, 1000);

事務操作

-- 開啟事務

begin;

-- 回滾事務

rollback;

-- 提交事務

commit;

設定當前read uncommited隔離級別

開啟乙個客戶端稱為事務a

我們再開啟乙個客戶端稱為事務b,注意此時事務a沒有提交,可事務b中查詢到1號使用者少了200

出現了髒讀----------事務的修改,即使沒有提交,對其他事務也是可見的。即事務可以讀取未提交的資料。

事務a rollback; 回滾事務

繼續使用ru級別的客戶端。修改當前事務為read commited

修改money,沒有提交事務

b客戶端讀到的沒有仍是修改前的

此時我們提交a事務的修改,此時我們再b客戶端執行同樣的查詢,發現兩次查詢得到的結果不一致。------不可重複讀

commit;			-- 提交a事務

恢復到最開始的資料,修改當前事務為repeatable read。

a事務新增一條資料,並提交;

第一種情況:在a事務沒有commit之前,b事務先查詢了一次,查詢版本號小於等於當前事務版本號的資料,稱作快照讀。之後的查詢的記錄版本號都小於等於當前事務的版本號,因此不論a事務提交與否,b事務的查詢結果都不變,而update則把記錄修改為當前事務b的版本號,所以下一次的select出現了a事務提交的記錄。

第二種情況:b事務開始後沒有操作,再a事務commit提交資料後,b事務進行查詢,那麼會出現a事務提交的資料,這裡注意兩個事務操作的順序,b事務select的時間是在a事務commit之後, 因此查詢的事務版本號是在b事務commit之後的版本號+1,而第一種情況是b事務的查詢在a事務commit之前。

事務序列執行,這裡不做演示。

mysql8 0提示命令 MySQL8 0操作命令

mysql8.0版本和mysql5.0的加密規則不一樣,而現在的很多任務具等都是不支援的,我們這裡使用的是將mysql使用者登入的加密規則修改為mysql native password的方法來進行解決的。修改加密規則alter user root localhost identified by p...

Linux下徹底刪除Mysql 8 0

本文前最好有一定的linux命令基礎,具體為centos7.3環境中清除使用yum安裝的mysql 解除安裝前請先關閉mysql服務service mysql stop使用 rpm 命令的方式檢視已安裝的mysqlrpm qa 開始解除安裝mysql服務 使用yum安裝需要先進行清除服務等 再次查詢...

linux環境下 安裝mysql8 0

訪問 wget 進入mysql目錄 cd usr local mysql 解壓 tar zxvf mysql 8.0.11 linux glibc2.12 x86 64.tar.gz 得到mysql 8.0.11 linux glibc2.12 x86 64 重新命名 mv mysql 8.0.11...