日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

默认事务等级_事务

發(fā)布時間:2024/4/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 默认事务等级_事务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、事務(wù)定義

  • 事務(wù):一個最小的不可再分的工作單元;通常一個事務(wù)對應(yīng)一個完整的業(yè)務(wù)(例如銀行賬戶轉(zhuǎn)賬業(yè)務(wù),該業(yè)務(wù)就是一個最小的工作單元)
  • 一個完整的業(yè)務(wù)需要批量的DML(insert、update、delete)語句共同聯(lián)合完成
  • 事務(wù)只和DML語句有關(guān),或者說DML語句才有事務(wù)。這個和業(yè)務(wù)邏輯有關(guān),業(yè)務(wù)邏輯不同,DML語句的個數(shù)不同

二、查看事務(wù)語句

只有InnoDB支持事務(wù)

1.查看 mysql 當(dāng)前默認(rèn)的存儲引擎

show variables like '%storage_engine%';

2.查看某張表的存儲引擎

show create table 表名 ;

三、事務(wù)特性

1、原子性(atomicity)

一個事務(wù)必須被視為一個不可分割的最小單元, 整個事務(wù)中的所有操作要么全部提交成功,

要么全部失敗, 對于一個事務(wù)來說, 不可能只執(zhí)行其中的一部分操作

整個事務(wù)要么全部成功, 要么全部失敗

2. 一致性(consistency)

一致性是指事務(wù)將數(shù)據(jù)庫從一種一致性轉(zhuǎn)換到另外一種一致性狀態(tài), 在事務(wù)開始之前和事務(wù)

結(jié)束之后數(shù)據(jù)庫中數(shù)據(jù)的完整性沒有被破壞

例如轉(zhuǎn)賬:A給B轉(zhuǎn)賬,A減去500,B增加500,減少和增加相加應(yīng)該是0

3、持久性(durability)

一旦事務(wù)提交, 則其所做的修改就會永久保存到數(shù)據(jù)庫中。 此時即使系統(tǒng)崩潰, 已經(jīng)提交的

修改數(shù)據(jù)也不會丟失

并不是數(shù)據(jù)庫的角度完全能解決

4、隔離性(isolation)

一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾。 即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事

務(wù)是隔離的, 并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾。

(對數(shù)據(jù)庫的并行執(zhí)行, 應(yīng)該像串行執(zhí)行一樣)

事務(wù)并發(fā)問題:

  • 臟讀:事務(wù)A讀取了事務(wù)B更新的數(shù)據(jù),然后B回滾操作,那么A讀取到的數(shù)據(jù)是臟數(shù)據(jù)
  • 不可重復(fù)讀:事務(wù) A 多次讀取同一數(shù)據(jù),事務(wù) B 在事務(wù)A多次讀取的過程中,對數(shù)據(jù)作了更新并提交,導(dǎo)致事務(wù)A多次讀取同一數(shù)據(jù)時,結(jié)果 不一致。
  • 幻讀:系統(tǒng)管理員A將數(shù)據(jù)庫中所有學(xué)生的成績從具體分?jǐn)?shù)改為ABCDE等級,但是系統(tǒng)管理員B就在這個時候插入了一條具體分?jǐn)?shù)的記錄,當(dāng)系統(tǒng)管理員A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來,就好像發(fā)生了幻覺一樣,這就叫幻讀。

不可重復(fù)讀的和幻讀很容易混淆,不可重復(fù)讀側(cè)重于修改,幻讀側(cè)重于新增或刪除。解決不可重復(fù)讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

四種隔離級別:

  • 未提交讀(READ UNCOMMITED)

事務(wù)A讀取到事務(wù)B未提交的數(shù)據(jù)

事務(wù)A讀取了事務(wù)B更新的數(shù)據(jù),然后B回滾操作,那么A讀取到的數(shù)據(jù)是臟數(shù)據(jù)

事務(wù)A:

set SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

begin;

select * from test ;

insert into test(name,age) values ('李四',20);

事務(wù)B:

begin;

set SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

  • 已提交讀(READ COMMITED)

set SESSION TRANSACTION ISOLATION LEVEL read committed;

可以讀到已經(jīng)事務(wù)提交的數(shù)據(jù)

不能出現(xiàn)臟讀

  • 可重復(fù)讀(REPEATABLE READ)

set SESSION TRANSACTION ISOLATION LEVEL repeatable read;

在同一個事務(wù)中讀到是同一條數(shù)據(jù),其他事務(wù)修改了讀的也是修改前的數(shù)據(jù)

不能出現(xiàn)臟讀和不可重復(fù)讀

特別注意的是MySQL數(shù)據(jù)庫在RR隔離級別時候也解決了幻讀問題

  • 可串行化

set SESSION TRANSACTION ISOLATION LEVEL serializable;

在一個事務(wù)未提交時候,另外一個事務(wù)不能對這個表的數(shù)據(jù)修改,包括新增、修改、刪除、查詢

四種隔離級別對比:

是:代表能出現(xiàn);否:代表不能出現(xiàn)

MySQL默認(rèn)隔離級別是repeatable-read

五、語法

1、開啟事務(wù)

begin

START TRANSACTION(推薦)

begin work

2、提交

commit;

3、回滾:

rollback;

4、默認(rèn)事務(wù)時自動提交

SHOW VARIABLES LIKE 'autocommit';

結(jié)果顯示,autocommit 的值是 ON,表示系統(tǒng)開啟自動提交模式。

在 MySQL 中,可以使用 SET autocommit 語句設(shè)置事務(wù)的自動提交模式,語法格式如下:

SET autocommit = 0|1|ON|OFF;

對取值的說明:

  • 值為 0 和值為 OFF:關(guān)閉事務(wù)自動提交。如果關(guān)閉自動提交,用戶將會一直處于某個事務(wù)中,只有提交或回滾后才會結(jié)束當(dāng)前事務(wù),重新開始一個新事務(wù)。
  • 值為 1 和值為 ON:開啟事務(wù)自動提交。如果開啟自動提交,則每執(zhí)行一條 SQL 語句,事務(wù)都會提交一次。

六、事務(wù)還原點

savepoint

show variables like '%autocommit%'; 自動提交事務(wù)是開啟的

set autocommit=0;

insert into testdemo values(5,5,5);

savepoint s1;

insert into testdemo values(6,6,6);

savepoint s2;

insert into testdemo values(7,7,7);

savepoint s3;

select * from testdemo

rollback to savepoint s2

rollback

總結(jié)

以上是生活随笔為你收集整理的默认事务等级_事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。