色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql讀提交和重復讀區(qū)別

林國瑞2年前10瀏覽0評論

MySQL中的并發(fā)控制分為讀提交(Read Committed)和重復讀(Repeatable Read)兩種隔離級別。這兩種隔離級別的主要區(qū)別是在處理未提交寫事務(wù)(Uncommitted Write Transactions)的時候。

在讀提交隔離級別下,一個事務(wù)只能讀取已經(jīng)提交的數(shù)據(jù)。如果一個事務(wù)要讀取另一個事務(wù)尚未提交的數(shù)據(jù),那么它會等待該事務(wù)提交后再讀取。如果一個事務(wù)修改了一行數(shù)據(jù)但尚未提交,那么其他事務(wù)是無法讀取該行數(shù)據(jù)的。

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT * FROM table WHERE id = 1; -- 如果另一個事務(wù)正在修改id為1的行,那么此處會阻塞等待該事務(wù)提交
UPDATE table SET name = 'foo' WHERE id = 2;
COMMIT;

相比之下,重復讀隔離級別允許一個事務(wù)讀取它啟動時已經(jīng)存在的數(shù)據(jù)。如果另一個事務(wù)修改了一行數(shù)據(jù)但尚未提交,那么該行數(shù)據(jù)對于正在運行的事務(wù)是不可見的。在重復讀隔離級別中,當前事務(wù)只能讀取它自己已經(jīng)修改或插入的數(shù)據(jù)。

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN;
SELECT * FROM table WHERE id = 1; -- 如果另一個事務(wù)正在修改id為1的行,那么此處會讀取到啟動事務(wù)時的值
UPDATE table SET name = 'foo' WHERE id = 2;
COMMIT;

總的來說,讀提交隔離級別是更加寬松但并發(fā)性能更好的選擇,因為讀寫沖突更少。但是在某些場景下,要求更高的數(shù)據(jù)一致性可能需要使用重復讀隔離級別。