欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么在mysql中實現(xiàn)事務的隔離級別

這篇文章給大家介紹怎么在MySQL中實現(xiàn)事務的隔離級別,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

公司主營業(yè)務:成都網(wǎng)站建設、網(wǎng)站建設、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出濱州免費做網(wǎng)站回饋大家。

事務就是一組一起成功或一起失敗的sql語句。事務還應該具備,原子性,一致性,隔離性和持久性。

一、事務的基本要素 (ACID)

1、原子性:事務開始后,所有的操作,要么全部成功,要么全部失敗,不可能處于中間狀態(tài),事務是一個不可分割的整體,就像原子一樣。

2、一致性:事務開始前和結束后,數(shù)據(jù)庫的完整性約束沒有破壞,A向B轉賬,A扣了錢,但B卻沒到賬。

3、隔離性:同時發(fā)生的事務(并發(fā)事務)不應該導致數(shù)據(jù)庫處于不一致的狀態(tài)中,每個事務都獨立執(zhí)行,不影響其他事務的存在。

4、持久性:事務對數(shù)據(jù)庫的更改都會保存在磁盤上,不會丟失。

二、事務的并發(fā)問題

1、臟讀:事務A讀取了事務B未提交的寫入數(shù)據(jù),讀取到的數(shù)據(jù)就稱為臟數(shù)據(jù)

2、不可重復讀:事務A多次讀取同一數(shù)據(jù),但在讀取過程中,事務B對數(shù)據(jù)做了修改,并提交了。導致多次讀取同一數(shù)據(jù),結果不一樣。

3、幻讀:事務A對表中所有數(shù)據(jù)行進行了修改,比如設置status = 1,但同時,事務B往該表插入了一行新數(shù)據(jù)status = 0,對于操作事務A的用戶而言,表中還有一條記錄沒被修改,就像發(fā)生幻覺一樣。

三、事務隔離性的四個級別

事務隔離級別臟讀不可重復讀幻讀
讀取未提交 read uncommitted

讀已提交 read committed

×

可重復讀取 repeatable read

×

×

序列化 serializable

×

×

×

四、獲取和設置數(shù)據(jù)庫隔離級別

SHOW VARIABLES LIKE '%isolation%';
SHOW GLOBAL VARIABLES LIKE '%isolation%';

使用系統(tǒng)變量查詢

SELECT @@GLOBAL.tx_isolation;
SELECT @@SESSION.tx_isolation;
SELECT @@tx_isolation;

對于mysql8而言,使用下面的變量進行查詢

SELECT @@GLOBAL.transaction_isolation;
SELECT @@SESSION.transaction_isolation;
SELECT @@transaction_isolation;

設置隔離級別

SET GLOBAL tx_isolation = '隔離級別';
SET SESSION tx_isolation = '隔離級別';
SET @@tx_isolation = '隔離級別';

對于mysql8而言,使用下面語句進行設置

SET GLOBAL transaction_isolation = '隔離級別';
SET SESSION transaction_isolation = '隔離級別';
SET @@transaction_isolation = '隔離級別';

五、通過例子說明各隔離級別的情況

先準備一張表,和一點數(shù)據(jù)。

CREATE TABLE `account` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `name` varchar(32) DEFAULT '' COMMENT '名稱',
 `money` decimal(11,2) DEFAULT '0.00' COMMENT '金錢',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `account` (`name`, `money`) VALUES ('A', '500.00');
INSERT INTO `account` (`name`, `money`) VALUES ('B', '100.00');

1、讀取未提交

set transaction_isolation = 'READ-UNCOMMITTED';
set autocommit = 0;

怎么在mysql中實現(xiàn)事務的隔離級別

事務B修改了表中的數(shù)據(jù),但是未提交,事務A確讀取到了修改后的數(shù)據(jù)。如果因為某些原因,事務B回滾了,事務A讀取的這個數(shù)據(jù)就是臟數(shù)據(jù)。

2、讀已提交

set transaction_isolation = 'READ-COMMITTED';
set autocommit = 0;

怎么在mysql中實現(xiàn)事務的隔離級別

事務B修改數(shù)據(jù)但沒有提交,那么事務A仍然獲取的原來數(shù)據(jù),解決了臟讀的問題。

但是事務B提交,事務A執(zhí)行上一次查詢,結果與上一次查詢不一致,這就產(chǎn)生不可重復讀的問題。

怎么在mysql中實現(xiàn)事務的隔離級別

3、可重復讀取

set transaction_isolation = 'REPEATABLE-READ';
set autocommit = 0;

怎么在mysql中實現(xiàn)事務的隔離級別

事務B修改了數(shù)據(jù)并提交了,事務A兩次查詢的結果是一致的,解決了不可重復讀的問題。

這個時候,事務A去修改name為A的money數(shù)據(jù)

怎么在mysql中實現(xiàn)事務的隔離級別

name為A的money變成了350,而不是400,可重復讀保證了數(shù)據(jù)的一致性。

我們重新在事務A中修改所有賬號的money等于200,同時在事務B中插入一條新的數(shù)據(jù)。

怎么在mysql中實現(xiàn)事務的隔離級別

事務A中獲取的仍然是兩條數(shù)據(jù),解決了新增數(shù)據(jù)時,事務A出現(xiàn)的幻讀問題。

4、序列化

set transaction_isolation = 'SERIALIZABLE';
set autocommit = 0;

怎么在mysql中實現(xiàn)事務的隔離級別

事務A對表進行查詢,如果沒有提交,則事務B的插入語句一直等待在那里,直到超時或事務A提交。

反之,事務B對表進行插入后,沒有提交,則事務A對表的查詢也一直等待,直到事務B提交。

此時對表的讀寫都會進行鎖表,當然對并發(fā)性能的影響也比較大。

隔離級別越高,越能保證數(shù)據(jù)的完整性和一致性。

六、mysql的鎖

鎖分為兩種類型:

內(nèi)部鎖:mysql服務器內(nèi)部執(zhí)行的內(nèi)部鎖,以管理多個會話對表內(nèi)容的爭用。

外部鎖:mysql為客戶會話提供顯式地獲取表鎖,以阻止其他會話訪問表。

內(nèi)部鎖又會為兩種類型:

1、行級鎖:行級鎖是細粒度的,只有被訪問的行會被鎖定,這允許多個會話同時進行寫訪問。

2、表級鎖:mysql對myisam,memory和merge表使用表級鎖,一次只允許一個會話更新表,這使得這些存儲引擎更適用于以讀取為主的操作。

外部鎖:可以使用 LOCK TABLE 和 UNLOCK TABLE 來控制鎖定。

READ (共享鎖) :多個會話可以從表中讀取數(shù)據(jù)而不需要獲取鎖,此外,多個會話可以在同一表上獲得鎖,當 READ 鎖時,沒有會話可以將數(shù)據(jù)寫入表中。任何寫入操作都將處于等待狀態(tài),直到 READ 鎖被釋放。

WRITE (排他鎖) :當表被 WRITE 鎖定時,除持有該鎖的會話外,其他會話都不能讀取或寫入數(shù)據(jù),除非 WRITE 鎖被釋放。

鎖表的語句:

LOCK TABLES table_name [READ | WRITE];

解鎖表的語句:

UNLOCK TABLES;

鎖定數(shù)據(jù)庫中所有表:

FLUSH TABLES WITH READ LOCK;

關于怎么在mysql中實現(xiàn)事務的隔離級別就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享名稱:怎么在mysql中實現(xiàn)事務的隔離級別
文章源于:http://aaarwkj.com/article10/gpjpdo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷網(wǎng)站收錄、手機網(wǎng)站建設、小程序開發(fā)網(wǎng)站改版、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
亚洲码与欧洲码一二三| 日韩在线视频 一区二区三区| 欧美另类亚洲日本一区二区| 人妻勾引中文字幕在线视频| 国产欧洲日本一区二区| 男人午夜福利视频在线观看| 久久精品噜噜噜成人av农村| 夫妻爱爱视频在线观看| sedoge在线播放免费有码| 免费看国产一级黄色大片| 国产激情片午夜福利| 俄罗斯少妇毛茸茸的高潮| 日韩精品一区伦理视频| 在线免费观看91亚洲| 四虎久久久最新网址| 高清亚洲一区二区三区| 亚洲欧美日韩国产在线一区| 国产精品原创传媒在线观看| 国产精品白浆大屁股一区二区三| 国产精品一级二区三区| 精品国产伦一区二区三区在线| 亚洲一区二区视频免费看| 最新中文字幕成人在线观看| av资源中文字幕在线天堂| 亚洲av偷拍一区二区三区不卡| 二区三区在线欧美日韩| 在线观看日韩三级av| 久久国产精品一区二区三区| 亚洲第一毛片免费在线观看| 国产精品久久午夜伦鲁鲁| av中文资源在线观看| 国内午夜福利精品视频| 日韩精品一区二区在| 麻豆精东传媒一区二区| 偷拍丝袜美腿亚洲超碰| 国产亚洲欧美精品久久久久久| 日本韩国欧美一区二区在线| 欧美一区二区三区有限公司| 国产精品久久综合网| 久久精品高潮999久久久| 日韩中文字幕一区二区不卡|