91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何理解MySQL中的事務

發布時間:2021-11-29 16:45:40 來源:億速云 閱讀:170 作者:柒染 欄目:數據庫

今天就跟大家聊聊有關如何理解MySQL中的事務,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

事務又叫做TCL,全稱是transaction control  language,意思是事務控制語言。

一、事務的理解

張三有1000塊錢,李四也有1000塊錢,張三給李四500,還剩下500,李四此時就有1500。我們想象著會執行下面的mysql語句:

update table user set money=500 where name = "張三";  update table user set money=1500 where name = "李四";

但是在計算機中可能會不一樣。可能上面語句執行了下面的沒有執行,因此為了保證兩條語句要么都執行,要么都不執行,這時候就用到了事務。

事務的意思是一條或者是一組語句組成一個單元,這個單元要么全部執行,要么全不執行。

事務具有四個特性,也是面試常考的四個特性ACID:

  • A(原子性Atomicity):原子性指的是事務是一個不可分割的,要么都執行要么都不執行。

  • C(一致性Consistency):事務必須使得數據庫從一個一致性狀態,到另外一個一致性狀態。

  • I(隔離性Isolation):指的是一個事務的執行,不能被其他的事務所干擾。

  • D(持久性Durability):持久性指的是一個事務一旦提交了之后,對數據庫的改變就是永久的。

二、創建一個事務

事務其實可以劃分為兩大類:隱式的事務和顯示的事務:

  • 隱式的事務很簡單,比如我們的insert、delete、update、select這些語句都是隱式的事務。

  • 顯示的事務指的是帶有很明顯的開始和結束的標記,下面就來創建一個顯示的事務。

步驟一:禁用步驟提交功能

set autocommit = 0;

步驟二:開啟一個事務

start transaction;

步驟三:sql語句

update table user set money=500 where name = "張三";  update table user set money=1500 where name = "李四";

步驟四:結束事務

commit(提交)或者是rollback(回滾)。如果確定我們的語句沒有問題,那么我們就可以commit,如果認為我們的語句有問題,那就rollback。

如何理解MySQL中的事務

在這里新建了一個表,然后插入了兩條數據。下面我們使用事務,來更新一下:

如何理解MySQL中的事務

在這里我們使用的是commit進行提交。當然如果突然發現我們之前的操作有錯誤,那就可以使用rollback。

三、事務的隔離級別

上面的事務在單個情況下一般不會出現什么問題,但是如果同時運行多個,就會出現問題了。我們知道并發操作總是會出現各種各樣的問題,對于事務來說就會出現下面三個典型的問題:

(1)臟讀

有倆事務T1,T2。如果T1讀了一條數據,這條數據是T2更新的但是還沒提交,突然T2覺得不合適進行事務回滾了,也就是不提交了。此時T1讀的數據就是無效的數據。

(2)不可重復讀

有倆事務T1,T2。如果T1讀了一條數據,之后T2更新了這條數據,T1再次讀取就發現值變了。

(3)幻讀

有倆事務T1,T2。如果T1讀了一條數據,之后T2插入了一些新的數據,T1再次讀取就會多出現一些數據。

如何去解決這些問題呢?既然多個事務同時運行不好,那就把他們隔離開來。這時候就用到了事務的隔離性。

如何理解MySQL中的事務

mysql默認的事務隔離級別為repeatable-read,Oracle默認的是read-committed,

想要去演示事務的隔離級別也很簡單,只需要開啟兩個客戶端演示就OK了,在這里就不說了。

看完上述內容,你們對如何理解MySQL中的事務有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

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

AI

烟台市| 龙山县| 鄢陵县| 新营市| 德清县| 昌图县| 长寿区| 拜泉县| 虞城县| 望谟县| 隆尧县| 赣榆县| 百色市| 庆城县| 关岭| 广灵县| 龙陵县| 西盟| 靖州| 山西省| 南丹县| 全南县| 婺源县| 诸暨市| 双城市| 南投市| 长沙县| 射阳县| 察隅县| 庐江县| 蓝田县| 吉林市| 迭部县| 安图县| 黑水县| 巨鹿县| 湘阴县| 雷山县| 承德县| 茌平县| 托克逊县|