一文帶你明白“MySQL事務(transaction)”

      網友投稿 688 2025-04-01

      1、什么是事務?


      2、和事務相關的語句只有這3個DML語句:insert、delete、update

      3、假設所有的業務都能使用1條DML語句搞定,還需要事務機制嗎?

      4、事務的原理

      5、事務的四大特性:ACID

      6、關于事務之間的隔離性

      7、演示事務的隔離級別(演示數據自己造一些)

      一個事務是一個完整的業務邏輯單元,不可再分。

      比如:銀行賬戶轉賬,從A賬戶向B賬戶轉賬10000,需要執行兩條update語句:

      update t_act set balance=balance-10000 where actno='act-001'; update t_act set balance=balance+10000 where actno='act-0021';

      1

      2

      以上兩條DML語句必須同時成功,或者同時失敗,不允許出現一條成功,一條失敗。

      要想保證以上的兩條DML語句,同時成功或者同時失敗,那么就需要使用數據庫的

      “事務機制”。

      “為什么只有這3個DML語句:insert、delete、update?”

      因為它們這三個語句都是和數據庫表中的"數據相關"的。事務的存在是為了保證數據的完整性,安全性。

      不需要事務。

      但實際情況不是這樣的,通常一個事兒(“事務”)需要多條DML語句共同聯合完成。

      注意:

      一旦提交事務,就會把歷史操作持久化到硬盤上去,持久化完成后,清空歷史記錄。

      一旦回滾事務,就會把歷史記錄直接清空掉,而不持久化到硬盤中。

      事務操作,還可以設計保存點:了解。

      事務包括四大特性:ACID

      A原子性:事務是最小的工作單元,不可再分。

      C一致性:事務必須保證多條DML語句,同時成功或者同時失敗。

      I隔離性:事務A與事務B之間具有隔離。

      D持久性:持久性指的是最終數據必須持久化到硬盤文件中,事務才算成功結束。

      下面對上述事務四大特性,進行一個更為詳細的說明

      “原子性”:一組操作要么都成功,要么都失敗,這一組操作是不可拆分的。

      “一致性”:事務發生前后,數據總額仍然是匹配的。模擬一個人給另外一個人轉賬來說,轉賬之前,2人的金額總和為400;轉賬以后,2人的金額總額仍為400。

      “隔離性”:所有操作沒有執行完畢之前,其它會話窗口不能看見中間數據的改變過程,只有當前窗口可以看見數據改變過程。

      “持久性”:一旦commit提交后,事務產生的影響就不能夠撤銷了,已經實實在在把數據修改了。

      "事務的隔離性存在隔離級別,理論上隔離級別包括4個" 隔離級別一般都是從2級、3級起步,1級一般用不上。 1)第一級別:讀未提交(read uncommitted) 對方的事務還沒有提交,當前事務可以讀取到對方為提交的數據。 讀未提交存在的問題:"臟讀現象",表示讀到了臟數據。 "臟讀":指的是一個事務正在修改數據,但是這種修改并沒有提交到數據庫。 而另一個事務,訪問到了該數據,此時這個數據屬于【臟數據】,因而叫臟讀。 2)第二級別:讀已提交(read committed) 對方事務提交后的數據,我方可以讀取到。 這種隔離級別解決了:臟讀現象沒有了。 讀已提交存在的問題:不可重復讀。 3)第三級別:可重復讀(repeatable read) 這種隔離級別解決了:不可重復讀問題。 這種級別存在的問題:讀取到的數據是幻想,即讀取的是備份數據。 4)第四級別:序列化讀/串行化讀(serializable) 解決了所有問題。 但是效率低,需要事務排隊。 "需要注意的是" oracle數據庫默認的隔離級別是:讀已提交(第二級別)。 mysq1數據庫默認的隔離級別是:可重復讀(第三級別)。

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      一文帶你明白“MySQL事務(transaction)”

      22

      23

      24

      1)mysql默認情況下,事務是自動提交的。 2)什么是自動提交? 只要是執行任意一條DML語句,則自動提交一次。 因此,在演示事務之前,必須先關閉自動提交。 "關閉自動提交語句":start transaction; 3)"演示事務需要知道的3條命令:" -- 關閉自動提交事務功能。 start transaction; -- 提交事務。 commit; -- 回滾事務,只能回滾到上一次的提交點。 rollback;

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      "設置全局事務隔離級別,設置完成后,退出重新登陸。" -- 設置第一級別 set global transaction isolation level read uncommitted; -- 設置第二級別 set global transaction isolation level read committed; -- 設置第三級別(系統默認的事務級別,不用設置) set global transaction isolation level repeatable read; --設置第四級別 set global transaction isolation level serializable; "查看全局事務隔離級別" mysql> select @@global.tx_isolation; +-----------------------+ | @@global.tx_isolation | +-----------------------+ | REPEATABLE-READ | +-----------------------+ 1 row in set, 1 warning (0.00 sec)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      首先,設置全局事務隔離級別。

      下面進行正式的演示:

      首先,設置全局事務隔離級別。

      下面進行正式的演示:

      首先,設置全局事務隔離級別。

      下面進行正式的演示:

      這個需要注意: 這里演示的是"可重復讀",我們在右邊窗口演示事務的一些列過程,左邊窗口 根本無法讀取,左邊窗口讀取到的,始終是原始數據的備份數據。 怎么理解呢? 你別忘記了,左邊窗口,也是開啟事務功能了的,start transaction;只要 是左邊這個窗口的事務功能,沒有結束(commit或者rollback都可以結束事務),那 么左邊窗口讀取到的,始終是原始數據的備份數據,這就是我們所說的"幻想"。任 憑右邊黑窗口中做了任何改變,就算你也提交了事務,我左邊窗口,就是看不到。 "左邊黑窗口,要怎么才可以看見這個變化呢?" 只有左邊這個黑窗口,先結束了當前黑窗口的事務,重新再次讀取,就可以看 到數據是真實變化了。

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      首先,設置全局事務隔離級別。

      下面進行正式的演示:

      第一幅圖:

      當左邊窗口,使用"commit"命令,提交事務以后,我們再看右邊窗口的變化。

      MySQL 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何在保存時自動備份excel
      下一篇:模型組的測試初步結果
      相關文章
      亚洲五月午夜免费在线视频| 亚洲av永久无码精品网址| 国产亚洲精品2021自在线| 亚洲卡一卡2卡三卡4卡无卡三| 亚洲人和日本人jizz| 在线视频亚洲一区| 亚洲国产精品ⅴa在线观看| 亚洲人成色77777| 亚洲AV无码无限在线观看不卡| 永久亚洲成a人片777777| 亚洲人AV在线无码影院观看| 亚洲AV无码不卡无码| 亚洲成av人无码亚洲成av人| 亚洲午夜无码毛片av久久京东热| 亚洲VA中文字幕不卡无码| 国产亚洲情侣一区二区无码AV| 中文字幕亚洲一区二区三区| 精品无码专区亚洲| 亚洲一区二区免费视频| 亚洲AV无码一区二区三区人| 亚洲成人激情小说| 亚洲国产精品无码观看久久| 亚洲精品无码人妻无码| 亚洲AV无码成人网站在线观看| 亚洲av日韩精品久久久久久a | 一本色道久久88亚洲精品综合| 中文字幕 亚洲 有码 在线| 亚洲国产成人久久精品动漫| 亚洲av不卡一区二区三区| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲成人一级电影| a级亚洲片精品久久久久久久| 亚洲中文字幕在线第六区| 亚洲AV无码一区二区三区系列| 亚洲一区精品中文字幕| 精品国产人成亚洲区| 亚洲爆乳无码专区| 亚洲图片中文字幕| 亚洲熟妇丰满xxxxx| 国产精品亚洲一区二区三区久久 | 亚洲精品成a人在线观看☆|