国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 幫助中心 > 正文

innodb如何巧妙的實現(xiàn)事務(wù)隔離級別詳解

2024-07-09 22:47:55
字體:
供稿:網(wǎng)友

前言

之前的文章mysql鎖機(jī)制詳解中我們詳細(xì)講解了innodb的鎖機(jī)制,鎖機(jī)制是用來保證在并發(fā)情況下數(shù)據(jù)的準(zhǔn)確性,而要保證數(shù)據(jù)準(zhǔn)確通常需要事務(wù)的支持,而mysql存儲引擎innodb是通過鎖機(jī)制來巧妙地實現(xiàn)事務(wù)的隔離特性中的4種隔離級別。

事務(wù)ACID特性,其中I代表隔離性(Isolation)。隔離性是指,多個用戶的并發(fā)事務(wù)訪問同一個數(shù)據(jù)庫時,一個用戶的事務(wù)不應(yīng)該被其他用戶的事務(wù)干擾,多個并發(fā)事務(wù)之間要相互隔離。

我們都知道事務(wù)的幾種性質(zhì),數(shù)據(jù)庫中的一致性和隔離性等是實現(xiàn)事務(wù)的基本思想,在系統(tǒng)有大量的并發(fā)訪問的情況下,了解和熟練應(yīng)用數(shù)據(jù)庫的本身的事務(wù)隔離級別,對于寫出健壯性,并發(fā)處理能力強(qiáng)的代碼還是起關(guān)鍵的作用。

1. 事務(wù)之間如何互相干擾

一個事務(wù)是如何干擾其他事務(wù)呢?舉個例子,有如下表:

create table lock_example(id smallint(10),name varchar(20),primary key id)engine=innodb;

表中有如下數(shù)據(jù):

1, zhangsan
2, lisi
3, wangwu

demo1:

事務(wù)A,先執(zhí)行,處于未提交的狀態(tài):

insert into t values(4, 'zhaoliu');

事務(wù)B,后執(zhí)行,也未提交:

select * from t;

如果事務(wù)B能夠讀取到(4, zhaoliu)這條記錄,說明事務(wù)A就對事務(wù)B產(chǎn)生了影響,這種影響叫做“讀臟”,即讀到了未提交事務(wù)操作的記錄。

demo2:

事務(wù)A,先執(zhí)行:

select * from t where id=1;

結(jié)果集為

1,zhangsan

事務(wù)B,后執(zhí)行,并且提交:

update t set name=xxx where id=1;commit;

事務(wù)A,再次執(zhí)行相同的查詢:

select * from t where id=1;

結(jié)果集為:

1, xxx

這次是已提交事務(wù)B對事務(wù)A產(chǎn)生的影響,這種影響叫做“不可重復(fù)讀”,即一個事務(wù)內(nèi)相同的查詢,卻得到了不同的結(jié)果。

demo3:

事務(wù)A,先執(zhí)行:

select * from t where id>3;

結(jié)果集為:

NULL

事務(wù)B,后執(zhí)行,并且提交:

insert into t values(4, zhaoliu);commit;

事務(wù)A,首次查詢了id>3的結(jié)果為NULL,于是想插入一條為4的記錄:

insert into t values(4, xxoo);

結(jié)果集為:

Error : duplicate key!

你可能會想。。。你TM在逗我?查了id>3為空集,insert id=4時又告訴我PK沖突?→_→

這次是已提交事務(wù)B對事務(wù)A產(chǎn)生的影響,這種影響叫做“幻讀”。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泸州市| 东辽县| 永安市| 赤水市| 天镇县| 社旗县| 建阳市| 东源县| 安化县| 怀宁县| 佛教| 滁州市| 荔波县| 建水县| 隆林| 铁力市| 广西| 绵竹市| 莫力| 额尔古纳市| 巨鹿县| 淮南市| 石柱| 漾濞| 伊宁市| 奉化市| 会宁县| 凤山市| 司法| 湖南省| 得荣县| 临汾市| 闽侯县| 丹寨县| 萝北县| 南川市| 泾川县| 淮滨县| 泸州市| 民丰县| 淮南市|