MYSQL學習之路 事務

2021-09-13 13:21:50 字數 2038 閱讀 2668

事務:事務由單獨單元的乙個或多個sql語句組成,在這個單元中,每個mysql語句都是相互依賴的。而整個單獨單元作作乙個不可分割的整體,如果單元中某條sql語句一旦執行失敗或產生錯誤,整個單元將會回滾。所有收到影響的資料將返回到事務開始以前的狀態;如果單元中的所有sql語句均將執行成功,則事務被順利執行。

事務的特點:

事務的使用:

資料庫的隔離級別:

資料庫的4種事務隔離級別隔離級別描述

read uncommitted(讀未提交的資料)

允許事務讀取未被其他事務提交的變更、髒讀,不可重複讀和幻讀的問題都會出現

read committed(讀已提交的資料)

只允許事務讀取已經被其他事務提交的變更,可以避免髒讀,但不可重複讀和幻讀問題仍然可能出現

repeatable read(可重複讀)

確保事務可以多次從乙個欄位中讀取相同的值,在這個事務持續期間,禁止其他事務對這個時段進行更新,可以避免髒讀和不可重複讀,但幻讀的問題仍然存在

serializable(序列化)

確保事務可以從乙個表中讀取相同的行,在這個事務持續期間,禁止其他事務對該錶執行插入,更新和刪除擦操作,所有併發的問題都可以避免,但效能十分低下

oracle支援2種事務隔離級別:read commited、serializable。oracle預設的事務隔離級別為:read committed

mysql支援4種事務隔離級別,mysql預設的事務隔離級別為:repeatable read

例項演示如下:

win+r------>cmd; 重複兩次,我們需要兩個命令提示符(用作對照使用、判斷可能會出現的髒讀幻讀)。

輸入:mysql -u root -p      並且輸入你的密碼;

再使用我們之前建立好的資料庫:use abc; 並檢視當前隔離級別:select @@tx_isolation;

開始乙個事務:set autocommit = 0;     並且設定當前事務等級:set session transaction isolation read committed;

在另乙個命令提示符重複以上操作後,我們繼續回到第乙個命令提示符操作。

我們來更改一下資料表,查閱的時候會發現亂碼:

這個時候我們輸入:set names gbk後再觀察就會發現顯示正常了

在另乙個命令提示符中我們進行查詢操作,轉換正常文字後,我們會發現資料庫的內容依舊沒有更改

這時候我們需要在第乙個命令提示符中使用commit結束這個事務,再在第二個命令提示符中查詢操作就會發現更新成功

其餘的隔離級別也是如此,有興趣的朋友可以自己嘗試一下,因為我們用的是session事務,不會對資料庫整體造成影響,所以關閉命令提示符後就不必擔憂mysql的結構變化。

mysql學習之路

linux 命令 yum install y mysql server mysql devel mysql重啟 etc init.d.mysql restart 建立資料庫 create database db demo 刪除資料庫 drop database db drop database db...

原 MySQL高階之路九(事務)

事務 a 儲存引擎 資料庫底層軟體組織dbms,通過儲存引擎實現對資料的操作,mysql核心就是儲存引擎 mysql中可以設定多種儲存引擎,不同儲存引擎在索引,儲存一級索引策略上是不同的 mysql5.5之前myisam儲存引擎,支援全文搜尋,不支援事務 mysql5.5之後,預設採用innodb儲...

mysql事務學習

mysql 事務主要用於處理操作量大,複雜度高的資料。比如說,在人員管理系統中,你刪除乙個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的資訊,如信箱,文章等等,這樣,這些資料庫操作語句就構成乙個事務!在 mysql 命令列的預設設定下,事務都是自動提交的,即執行 sql 語句後就會馬上執行...