MYSQL 作為一款常用的數(shù)據(jù)庫(kù),它的隔離級(jí)別涉及到了數(shù)據(jù)的并發(fā)訪問和數(shù)據(jù)一致性問題。比如在高并發(fā)的場(chǎng)景下,同一個(gè)數(shù)據(jù)同時(shí)被多個(gè)線程訪問時(shí),如何確保數(shù)據(jù)的正確性呢?MYSQL提供了四種隔離級(jí)別,用以解決這個(gè)問題,其中最高隔離級(jí)別是最終隔離日期。
-- 設(shè)置隔離級(jí)別 SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; -- 查看隔離級(jí)別 SELECT @@TX_ISOLATION; -- 具體演示 -- MySQL1 session1 BEGIN; UPDATE book SET name = 'book2' WHERE id = 1; -- MySQL2 session2(新開的連接) BEGIN; SELECT * FROM book WHERE id = 1; -- 等待session1釋放鎖 -- MySQL1 session1 COMMIT; -- 提交后才會(huì)釋放鎖 -- MySQL2 session2 SELECT * FROM book WHERE id = 1; -- 當(dāng)前值為 'book2' COMMIT;
最終隔離日期是MYSQL的最高隔離級(jí)別,它可以有效解決讀臟數(shù)據(jù)和不可重復(fù)讀的問題。當(dāng)一個(gè)事務(wù)開啟后,它對(duì)數(shù)據(jù)的修改將完全對(duì)其他事務(wù)不可見,直到該事務(wù)提交或回滾。這種隔離級(jí)別能保證所有的數(shù)據(jù)操作都是在當(dāng)前時(shí)間之前,也就是最終隔離日期之前完成的。如果需要保證數(shù)據(jù)完全一致性,并且對(duì)性能要求不那么高,可以選擇最終隔離日期。