真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

MySQLInnoDB事務與鎖的詳細講解

這篇文章主要介紹“MySQL InnoDB事務與鎖的詳細講解”,在日常操作中,相信很多人在MySQL InnoDB事務與鎖的詳細講解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL InnoDB事務與鎖的詳細講解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

十載的曲松網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網絡營銷推廣的優(yōu)勢是能夠根據用戶設備顯示端的尺寸不同,自動調整曲松建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“曲松網站設計”,“曲松網站推廣”以來,每個客戶項目都認真落實執(zhí)行。

引題:為何引入事務?
    1>.數(shù)據完整性
    2>.數(shù)據安全性
    3>.充分利用系統(tǒng)資源,提高系統(tǒng)并發(fā)處理的能力
    1. 事務的特征
    事務具有四個特性:原子性(Atomiocity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),這四個特性簡稱ACID特性.
    1.1原子性
    事務是數(shù)據庫的邏輯工作單位,事務中包括的所有操作要么都做,要么都不做.
    1.2 一致性
    事務執(zhí)行的結果必須是使數(shù)據庫從一個一致性的狀態(tài)變到另外一個一致性狀態(tài).
    1.3 隔離性
    一個事務的執(zhí)行不能被其他事務干擾.即一個事務內部的操作及使用的數(shù)據對其他
    事務是隔離的,并發(fā)執(zhí)行的各個事務之間互相不干擾.
    1.4 持久性
    一個事務一旦成功提交,對數(shù)據庫中數(shù)據的修改就是持久性的.接下來其他的其他
    操作或故障不應該對其執(zhí)行結果有任何影響.
    2. MySQL的InnoDB引擎中事物與鎖
    2.1 SELECT …… LOCK IN SHARE MODE
    會話事務中查找的數(shù)據,加上一個共享鎖.若會話事務中查找的數(shù)據已經被其他會話事務加上獨占鎖的話,共享鎖會等待其結束再加,若等待時間過長就會顯示事務需要的鎖等待超時.
    2.2 SELECT ….. FOR UPDATE
    會話事務中查找的數(shù)據,加上一個讀更新瑣,其他會話事務將無法再加其他鎖,必須等待其結束.
    2.3 INSERT、UPDATE、DELETE
    會話事務會對DML語句操作的數(shù)據加上一個獨占鎖,其他會話的事務都將會等待其釋放獨占鎖.
    2.4 gap and next key lock(間隙鎖)
    InnoDB引擎會自動給會話事務中的共享鎖、更新瑣以及獨占鎖,需要加到一個區(qū)間值域的時候,再加上個間隙鎖(或稱范圍鎖),對不存在的數(shù)據也鎖住,防止出現(xiàn)幻寫.
    備注:
    以上2.1,2.2,2.3,2.4中描述的情況,跟MySQL所設置的事務隔離級別也有關系.
    3.四種事務隔離模式
    3.1 READ UNCOMMITED
    SELECT的時候允許臟讀,即SELECT會讀取其他事務修改而還沒有提交的數(shù)據.
    3.2 READ COMMITED
    SELECT的時候無法重復讀,即同一個事務中兩次執(zhí)行同樣的查詢語句,若在第一次與第二次查詢之間時間段,其他事務又剛好修改了其查詢的數(shù)據且提交了,則兩次讀到的數(shù)據不一致.
    3.3 REPEATABLE READ
    SELECT的時候可以重復讀,即同一個事務中兩次執(zhí)行同樣的查詢語句,得到的數(shù)據始終都是一致的.
    3.4 SERIALIZABLE
    與可重復讀的唯一區(qū)別是,默認把普通的SELECT語句改成SELECT …. LOCK IN SHARE MODE.即為查詢語句涉及到的數(shù)據加上共享瑣,阻塞其他事務修改真實數(shù)據.
    4. 驗證事務與鎖定示例
    接下來,我們將以MySQL中的InnoDB引擎,解釋其如何實現(xiàn)ACID特性,不同隔離級別下事務與事務之間的影響.示例表結構:
    CREATE TABLE `account ` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `VACCOUNT_ID` varchar(32) NOT NULL,
    `GMT_CREATE` datetime NOT NULL,
    PRIMARY KEY (`ID`),
    KEY `idx_VACCOUNT_PARAMETER_VACCOUNTID ` (`VACCOUNT_ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
    然后向表account中寫入10W條創(chuàng)建日期分布合理的帳號數(shù)據,以方便測試之用.
    tx_isolation:SET GLOBAL tx_isolation='read-uncommitted'
    ID 事務1 事務1輸出 事務2 事務2輸出
    1 START TRANSACTION;
    2 SELECT VACCOUNT_ID from account  where ID =1001; caimao101510
    START TRANSACTION;
    3
    UPDATE account set VACCOUNT_ID='uncommitted' where ID =1001;
    4
    SELECT VACCOUNT_ID from account  where ID =1001; uncommitted
    5 SELECT VACCOUNT_ID from account  where ID =1001; uncommitted
    6
    ROLLBACK;
    7 SELECT VACCOUNT_ID from account  where ID =1001; caimao101510
    8 COMMIT;
    tx_isolation:SET GLOBAL tx_isolation='read-committed'
    ID 事務1 事務1輸出 事務2 事務2輸出
    1 START TRANSACTION;
    2 SELECT VACCOUNT_ID from account  where ID =1001; caimao101510
    3
    START TRANSACTION;
    4
    UPDATE account set VACCOUNT_ID='uncommitted' where ID =1001;
    5
    SELECT VACCOUNT_ID from account  where ID =1001; uncommitted
    6 SELECT VACCOUNT_ID from account  where ID =1001; caimao101510
    7
    COMMIT;
    8 SELECT VACCOUNT_ID from account  where ID =1001; uncommitted
    9 COMMIT;
    tx_isolation:SET GLOBAL tx_isolation='REPEATABLE-READ'

到此,關于“MySQL InnoDB事務與鎖的詳細講解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網站欄目:MySQLInnoDB事務與鎖的詳細講解
網站URL:http://weahome.cn/article/gdodes.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部