mysql學習12:第七章:事務

studywell發表於2018-11-07

 

1.1.   事務的特性

InnoDB儲存引擎支援事務,預設自提交模式,如要開啟事務,必須以begin命令開始,以commit或者rollback結束。

事務特性

l   原子性(Atomiity):要麼都做,要麼都不做。

l   一致性(Consistency):操作前後滿足業務規則約束。

l   隔離性(Isolation):多個併發事務互不影響。

l   永續性(Durabili):事務結束,對資料的修改是持久的。

1.2.   事務語句

事務開啟語句由begin或start transaction(read write|read only)命令開始,結束用commit或rollback顯示結束。

隱式提交:DDL操作或再次輸入begin和start transaction命令。

隱式回滾:退出會話、連線超時、關機等。

關閉自提交特性(set autocommit=0)

開啟自提交特性(set autocommit=1)

關閉自動提交好處:不用一個事務一次提交,多個事務一起體驕傲,提高處理能力。

關閉自提交壞處:如一事務長期不提交,導致行鎖等待,影響資料庫TPS值。

不建議關閉自提交模式。

1.3.   truncate和delete的區別

truncate 是DDL,事務中不能回滾,會清空表的自增屬性,回到原始開始值。

delete是DML

共同點:清空表內資料,

1.4.   事務的隔離級別

SQL標準的4鍾隔離級別

n   讀未提交(read uncommitted),RU,一個事務可以讀取到其他事務未提交的資料變化,叫髒讀,生產環境不建議使用。

n   讀已提交(read committed),RC,一個事務可以讀其他事務已提交的資料變化,叫不可重複讀,是Oracle預設事務隔離級別。

n   可重複讀(repetable read),RR,一個事務中,直到事務結束前,都可以反覆讀取到事務剛開始時看到的資料,並一直不發生變化,避免了髒讀、不可重複讀、幻讀現象的發生。mysql預設事務隔離級別。

n   序列(serializable),在每個讀的資料行上都加表級共享鎖,在每次寫資料時都要加表級排他鎖。造成InnoDB的併發能力下降、大量超時和鎖競爭的發生,不建議用到生產環境。

 

檢視當前庫隔離級別

[mysql]>show variables like '%tx_isolation%';

 

+---------------+-----------------+

| Variable_name | Value           |

+---------------+-----------------+

| tx_isolation  | REPEATABLE-READ |

+---------------+-----------------+

 

修改全域性或當前會話的事務隔離級別

set global|session transaction isolation level

1.5.   髒讀、不可重複讀、幻讀、可重複讀

1.5.1.   髒讀

RU,一個事務讀取別的事務未提交的資料。

1.5.2.   不可重複讀與幻讀

不可重複讀:一個事務讀取到其他事務針對舊資料的修改記錄,常見(update,delte)。

幻讀:一個事務讀取到其他事務新增資料,常見(insert),允許出現在已提交事務的隔離級別中。

1.5.3.   可重複讀

可重複讀是mysql預設事務隔離級別,消除髒讀、不可重複讀、幻讀等現象,很好保證事務的一致性。

如在本事務想讀取別的新增資料,可如下:

查詢:select * from t for update;

本事務提交一次:commit;

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2219140/,如需轉載,請註明出處,否則將追究法律責任。

相關文章