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);
設定當前read uncommited隔離級別-- 開啟事務
begin;
-- 回滾事務
rollback;
-- 提交事務
commit;
開啟乙個客戶端稱為事務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...