亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL數據庫事務transaction示例講解教程

 更新時間:2021年10月26日 17:08:53   作者:數據分析與統(tǒng)計學之美  
這篇文章主要為大家介紹了MySQL數據庫事務transaction的示例講解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

1、什么是事務?

在這里插入圖片描述

一個事務是一個完整的業(yè)務邏輯單元,不可再分。
比如:銀行賬戶轉賬,從A賬戶向B賬戶轉賬10000,需要執(zhí)行兩條update語句:

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

以上兩條DML語句必須同時成功,或者同時失敗,不允許出現一條成功,一條失敗。
要想保證以上的兩條DML語句,同時成功或者同時失敗,那么就需要使用數據庫的
“事務機制”。

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

“為什么只有這3個DML語句:insert、delete、update?”
因為它們這三個語句都是和數據庫表中的"數據相關"的。事務的存在是為了保證數據的完整性,安全性。

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

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

4、事務的原理

在這里插入圖片描述

注意:
一旦提交事務,就會把歷史操作持久化到硬盤上去,持久化完成后,清空歷史記錄。
一旦回滾事務,就會把歷史記錄直接清空掉,而不持久化到硬盤中。
事務操作,還可以設計保存點:了解。

5、事務的四大特性:ACID

在這里插入圖片描述

事務包括四大特性:ACID
A原子性:事務是最小的工作單元,不可再分。
C一致性:事務必須保證多條DML語句,同時成功或者同時失敗。
I隔離性:事務A與事務B之間具有隔離。
D持久性:持久性指的是最終數據必須持久化到硬盤文件中,事務才算成功結束。

下面對上述事務四大特性,進行一個更為詳細的說明
“原子性”:一組操作要么都成功,要么都失敗,這一組操作是不可拆分的。
“一致性”:事務發(fā)生前后,數據總額仍然是匹配的。模擬一個人給另外一個人轉賬來說,轉賬之前,2人的金額總和為400;轉賬以后,2人的金額總額仍為400。
“隔離性”:所有操作沒有執(zhí)行完畢之前,其它會話窗口不能看見中間數據的改變過程,只有當前窗口可以看見數據改變過程。
“持久性”:一旦commit提交后,事務產生的影響就不能夠撤銷了,已經實實在在把數據修改了。

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

"事務的隔離性存在隔離級別,理論上隔離級別包括4個"
隔離級別一般都是從2級、3級起步,1級一般用不上。

1)第一級別:讀未提交(read uncommitted)

  對方的事務還沒有提交,當前事務可以讀取到對方為提交的數據。
   讀未提交存在的問題:"臟讀現象",表示讀到了臟數據。
   "臟讀":指的是一個事務正在修改數據,但是這種修改并沒有提交到數據庫。
而另一個事務,訪問到了該數據,此時這個數據屬于【臟數據】,因而叫臟讀。

2)第二級別:讀已提交(read committed)

   對方事務提交后的數據,我方可以讀取到。
   這種隔離級別解決了:臟讀現象沒有了。
   讀已提交存在的問題:不可重復讀。

3)第三級別:可重復讀(repeatable read)

   這種隔離級別解決了:不可重復讀問題。
   這種級別存在的問題:讀取到的數據是幻想,即讀取的是備份數據。

4)第四級別:序列化讀/串行化讀(serializable)

   解決了所有問題。
   但是效率低,需要事務排隊。

"需要注意的是"
oracle數據庫默認的隔離級別是:讀已提交(第二級別)。
mysq1數據庫默認的隔離級別是:可重復讀(第三級別)。

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

1)演示事務之前,需要掌握的知識點。

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

2)設置全局事務隔離級別。

"設置全局事務隔離級別,設置完成后,退出重新登陸。"
-- 設置第一級別
set global transaction isolation level read uncommitted;
-- 設置第二級別
set global transaction isolation level read committed;
-- 設置第三級別(系統(tǒng)默認的事務級別,不用設置)
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)

3)演示讀未提交。

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

在這里插入圖片描述

下面進行正式的演示:

4)演示讀已提交

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

在這里插入圖片描述

下面進行正式的演示:

在這里插入圖片描述

5)演示可重復讀

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

在這里插入圖片描述

下面進行正式的演示:

在這里插入圖片描述

這個需要注意:

這里演示的是"可重復讀",我們在右邊窗口演示事務的一些列過程,左邊窗口
根本無法讀取,左邊窗口讀取到的,始終是原始數據的備份數據。

怎么理解呢?

你別忘記了,左邊窗口,也是開啟事務功能了的,start transaction;只要
是左邊這個窗口的事務功能,沒有結束(commit或者rollback都可以結束事務),那
么左邊窗口讀取到的,始終是原始數據的備份數據,這就是我們所說的"幻想"。任
憑右邊黑窗口中做了任何改變,就算你也提交了事務,我左邊窗口,就是看不到。

左邊黑窗口,要怎么才可以看見這個變化呢?"

只有左邊這個黑窗口,先結束了當前黑窗口的事務,重新再次讀取,就可以看
到數據是真實變化了。 

6)演示序列化讀

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

在這里插入圖片描述

下面進行正式的演示:
第一幅圖:

在這里插入圖片描述

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

在這里插入圖片描述

以上就是MySQL數據庫事務transaction示例講解教程的詳細內容,更多關于MySQL數據庫事務transaction的資料請關注腳本之家其它相關文章!

相關文章

  • 一文帶你了解MySQL中的子查詢

    一文帶你了解MySQL中的子查詢

    子查詢指一個查詢語句嵌套在另一個查詢語句內部的查詢,這個特性從MySQL 4.1開始引入,SQL中子查詢的使用大大增強了SELECT 查詢的能力,本文帶大家詳細了解MySQL中的子查詢,需要的朋友可以參考下
    2023-06-06
  • MySQL用truncate命令快速清空一個數據庫中的所有表

    MySQL用truncate命令快速清空一個數據庫中的所有表

    這篇文章主要介紹了MySQL用truncate命令快速清空一個數據庫中的所有表,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • MySQL如何實現負載均衡功能

    MySQL如何實現負載均衡功能

    這篇文章主要介紹了MySQL如何實現負載均衡功能,學習過數據庫的朋友們都會知道MySQL,那么如何在MySQL下實現負載均衡功能呢?本文就將為大家細致地介紹一下
    2019-06-06
  • MySQL redo死鎖問題排查及解決過程分析

    MySQL redo死鎖問題排查及解決過程分析

    被告知在多實例場景下 MySQL Server hang 住,無法測試下去,原生版本不存在這個問題,而新版本上出現了這個問題,不禁心頭一顫,心中不禁感到奇怪,還好現場環(huán)境還在,為排查問題提供了一個好的環(huán)境,隨即便投入到緊張的問題排查過程當中
    2016-10-10
  • 登錄MySQL數據庫最快幾步(圖文步驟詳解)

    登錄MySQL數據庫最快幾步(圖文步驟詳解)

    當?MySQL?服務開啟后,就可以通過客戶端來登錄?MySQL?數據庫了。在?Windows?操作系統(tǒng)下可以使用?DOS?命令登錄數據庫,本節(jié)將介紹使用命令方式登錄?MySQL?數據庫的方法
    2023-10-10
  • MySQL DBA 常用手冊小結

    MySQL DBA 常用手冊小結

    MySQL DBA 常用手冊小結,使用mysql的朋友可以參考下。
    2011-11-11
  • Mysql、Oracle中常用的多表修改語句總結

    Mysql、Oracle中常用的多表修改語句總結

    這篇文章主要給大家介紹了關于Mysql、Oracle中常用的多表修改語句的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 關于mysql主備切換canal出現的問題解決

    關于mysql主備切換canal出現的問題解決

    這篇文章主要給大家介紹了關于mysql主備切換canal出現的一些問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Mysql中 show table status 獲取表信息的方法

    Mysql中 show table status 獲取表信息的方法

    這篇文章主要介紹了Mysql中 show table status 獲取表信息的方法的相關資料,需要的朋友可以參考下
    2016-03-03
  • 阿里云 Centos7.3安裝mysql5.7.18 rpm安裝教程

    阿里云 Centos7.3安裝mysql5.7.18 rpm安裝教程

    這篇文章主要介紹了阿里云 Centos7.3安裝mysql5.7.18 rpm安裝教程,需要的朋友可以參考下
    2017-06-06

最新評論