亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中事務是什么意思

發布時間:2021-11-25 10:52:14 來源:億速云 閱讀:292 作者:小新 欄目:數據庫

小編給大家分享一下MySQL中事務是什么意思,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一、事務的概念

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

二、MySQL 中的存儲引擎以及支持事務,和不支持事務的存儲引擎 

  1、存儲引擎的概念:在mysql中的數據用各種不同的技術存儲在文件(或內存)中。

這些技術中的每一種技術都使用不同的存儲機制,索引 技巧,并且最終提供廣泛的不同的功能和能力。可以通過選擇不同的技術,可以獲得額外的速度或功能,從而改善應用的整體功能。

  2、這些不同的技術以及配套的相關功能在mysql中被稱為存儲引擎(也稱為表類型)。

  3、通過show engines;來查看mysql支持的存儲引擎。

 4、 在mysql中用的最多的存儲引擎有:innodb,bdb,myisam ,memory 等。其中innodb和bdb支持事務而myisam等不支持事務。

三、事務的四個屬性:

 1、原子性:事務是由一個或一組相互關聯的SQL語句組成,這些語句被認為是一個不可分割的單元。

 2、一致性:對于數據庫的修改是一致的,即多個用戶查的的數據是一樣的。一致性主要由mysql的日志機制處理,他記錄數據的變化,為事務恢復提供跟蹤記錄。

 3、隔離性(孤立性):每個事務都有自己的空間,和其他發生在系統中的事務隔離開來,而且事務的結果只在他完全被執行時才能看到

 4、持久性:但提交了這個事務之后對數據的修改更新就是永久的。當一個事務完成,數據庫的日志已經被更新時,持久性即可發揮其特有的 功效,在mysql中,如果系統崩潰或者數據存儲介質被破壞,通過日志,系統能夠恢復在重啟前進行的最后一次成功更新,可以反應系統崩潰時處于執行過程的事物的變化。

四、事務的創建及生存周期

對于支持事務的存儲引擎,一個事務的周期:

1、在創建事務的過程中,用戶需要創建一個innodb或bdb類型的數據表,其基本命令結構如下:

 create  table table_name  (file  defintions)  type=innodb/bdb;

2、對表類型進行修改

 alert  table table-name  type =innodb/bdb;

3、事務的整個過程

 use  databases;   //使用某個數據庫

 start transaction ;   //開始事務 、這里也可以使用 begin   、 beginwork

 insert  into stu1 values('',  );   //進行相關的操作

 commit    //提交事物

 rollback   //撤銷事務(事務回滾)

五:mysql行為

 1、我們在使用mysql是如果關閉之后,打開在查詢的話就會發現,哪些數據已經保存了,但是我們知道,在這過程中沒有進行顯示或隱式提交,問什么會這樣那?因為我們在mysql中設置了自動提交,但我們也可以改為手動提交。

 2、 set   autocommit =0;  //關閉自動提交

3、 set   autocommit =1;  //開啟自動提交

六、事務的孤立性(隔離性)

1、在多用戶的時候使用孤立性級別是很重要的,這樣可以保證這些事務互不影響,保證數據庫性能不受到影響。

2、mysql中提供的孤立級別有以下四種:

 SQL標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低級別的隔離級一般支持更高的并發處理,并擁有更低的系統開銷。
Read Uncommitted(讀取未提交內容)

       在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用于實際應用,因為它的性能也不比其他級別好多少。讀取未提交的數據,也被稱之為臟讀(Dirty Read)。
Read Committed(讀取提交內容)

       這是大多數數據庫系統的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。這種隔離級別 也支持所謂的不可重復讀(Nonrepeatable Read),因為同一事務的其他實例在該實例處理其間可能會有新的commit,所以同一select可能返回不同結果。
Repeatable Read(可重讀)

       這是MySQL的默認事務隔離級別,它確保同一事務的多個實例在并發讀取數據時,會看到同樣的數據行。不過理論上,這會導致另一個棘手的問題:幻讀 (Phantom Read)。簡單的說,幻讀指當用戶讀取某一范圍的數據行時,另一個事務又在該范圍內插入了新行,當用戶再讀取該范圍的數據行時,會發現有新的“幻影” 行。InnoDB和Falcon存儲引擎通過多版本并發控制(MVCC,Multiversion Concurrency Control)機制解決了該問題。

Serializable(可串行化) 
       這是最高的隔離級別,它通過強制事務排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數據行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。

         這四種隔離級別采取不同的鎖類型來實現,若讀取的是同一個數據的話,就容易發生問題。例如:

         臟讀(Drity Read):某個事務已更新一份數據,另一個事務在此時讀取了同一份數據,由于某些原因,前一個RollBack了操作,則后一個事務所讀取的數據就會是不正確的。

         不可重復讀(Non-repeatable read):在一個事務的兩次查詢之中數據不一致,這可能是兩次查詢過程中間插入了一個事務更新的原有的數據。

         幻讀(Phantom Read):在一個事務的兩次查詢中數據筆數不一致,例如有一個事務查詢了幾列(Row)數據,而另一個事務卻在此時插入了新的幾列數據,先前的事務在接下來的查詢中,就會發現有幾列數據是它先前所沒有的。

         在MySQL中,實現了這四種隔離級別,分別有可能產生問題如下所示:

MySQL中事務是什么意思

3、事務孤立級的查看和修改: 

查看:select @@tx_isolation;

修改:set  global  transaction  isolation level  設置的孤立級別;

七、偽事務(鎖定)

1、在MySQL中根據不同的需求,提供了很多存儲引擎,但是有的存儲引擎不支持事務,對于這種情況,可以使用表鎖定來代替事務。

2、對于不支持事務的存儲引擎MYISAM類型數據表,當用戶插入,修改,刪除時,這些操作都會立即保存到磁盤中,當多用戶同時操作某個表時,可以使用表鎖定來避免同一時間有多個用戶對數據庫中指定表進行操作,這樣可以避免在用戶操作數據表過程中受到干擾。只有但用戶釋放表的操作鎖定后,其他 用戶才可以訪問這些修改的數據表。

這里的鎖和Java多線程中鎖的作用一樣,個人覺的可以這樣理解。

3、對指定表進行鎖操作的過程:

 (1)lock  table table-name lock type ;   //locktype 有read 和write 兩種

對多個表進行加鎖:

 lock table  table-name1 lock type, table -name2  lock type ,table -name3 lock type;

(2)在指定的表中進行相應的操作

(3)當用戶完成對鎖定數據表的操作后,進行解鎖。

unlock tables ;  //釋放了所有加鎖表的鎖。

以上是“MySQL中事務是什么意思”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洛隆县| 枝江市| 师宗县| 涡阳县| 特克斯县| 双辽市| 南川市| 大方县| 永丰县| 张家港市| 长乐市| 岚皋县| 岱山县| 遵义市| 静安区| 新丰县| 黔东| 新民市| 简阳市| 云林县| 长丰县| 金门县| 吉安县| 民权县| 襄城县| 大新县| 清丰县| 南康市| 灌阳县| 漠河县| 三门县| 潼关县| 深圳市| 和平区| 宜宾县| 龙岩市| SHOW| 铅山县| 芒康县| 北宁市| 绵阳市|