成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

誰家面試往死里問事務啊?

數據庫 其他數據庫
事務,指的是一組操作的集合,它是一個不可分割的工作單位,它會把這個集合中所有的操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要么同時成功,要么同時失敗。事務常常用于在需要操作多條記錄或多張表的情況下,為了避免在執行過程中出現異常行為導致數據一致性被破壞,這時候我們就需要開啟事務。

大家好,我是哪吒。

說個挺奇葩的事,有個老鐵給我發私信吐槽了一下他的面試經歷,他去了個國企單位面試,然后面試官跟他就MySQL事務的問題聊了半個多小時。

面試嘛這些都不稀奇,總能遇到是千奇百怪的人,千奇百怪的問題。不過,我分析這個面試官一定是在事務這塊吃過虧,哈哈哈!

下面通過十六張圖詳解一下MySQL事務,事無巨細。

下次聊一個小時都沒問題~

一、引入

事務,指的是一組操作的集合,它是一個不可分割的工作單位,它會把這個集合中所有的操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要么同時成功,要么同時失敗。

事務常常用于在需要操作多條記錄或多張表的情況下,為了避免在執行過程中出現異常行為導致數據一致性被破壞,這時候我們就需要開啟事務。

就比如最經典的銀行轉賬問題:

張三給李四轉賬1000塊錢,張三銀行賬戶的余額減少1000,而李四銀行賬戶的余額要增加 1000。

這一組操作就必須在一個事務的范圍內,即要么都成功,要么都失敗。總不可能在出現異常后,張三的余額減少了,李四的余額卻沒有增加?

假設我們沒有開啟事務,也就是這一系列操作不在一個事務的范圍內:

  • 這是我們的理想情況。

假設拋出了異常。

為了解決上述的問題,我們就需要通過開啟事務來完成,只需要在業務邏輯執行之前開啟事務,執行完畢后必須提交事務,如果執行過程中報錯,則回滾事務,把數據恢復到事務開始之前的狀態。

值得一提的是,默認MySQL的事務是自動提交的,也就是說,當執行完一條DML語句時,MySQL會立即隱式的提交事務。

即默認情況下,一條SQL語句就是一個事務。假如關閉自動提交則必須在每次執行SQL之后手動提交事務,否則SQL不生效。

二、事務操作

1、查看事務提交方式

SELECT @@autocommit;

其中 1 表示自動提交事務,0表示手動提交事務。

2、設置事務提交方式

SET @@autocommit = 0; # 設置為手動提交事務
SET @@autocommit = 1; # 設置為自動提交事務

3、提交事務

COMMIT;

上述我們把事務的提交方式修改為了手動提交,接下來我們來驗證一下“關閉自動提交事務則必須在每次執行SQL之后手動提交事務,否則SQL不生效”。

我們關閉了自動提交事務,執行SQL后發現執行成功,但沒有提交事務,查看數據庫發現數據并未發生變化。

待我們提交事務后,數據才更新!

4、回滾事務

ROLLBACK;

當我們執行事務的過程中碰到了異常導致中止,可以使用rollback使得事務回滾,即恢復事務開始執行之前的狀態。

5、開啟事務

START TRANSACTION; 或 BEGIN;

我們除了可以以關閉自動提交事務,然后手動commit的方式控制事務以外,還可以通過在SQL開始執行之前,先執行START TRANSACTION; 或 BEGIN;然后執行SQL,最后commit的方式控制事務。

三、四大特性

事務有著四大特性(ACID):

原子性(Atomicity):事務是不可分割的最小操作單元,要么全部成功,要么全部失敗。

  • 一致性(Consistency):事務完成時,必須使所有的數據都保持一致狀態。
  • 隔離性(Isolation):數據庫系統提供的隔離機制,保證事務在不受外部并發操作影響的獨立 環境下運行。

持久性(Durability):事務一旦提交或回滾,它對數據庫中的數據的改變就是永久的。

四、并發事務問題

多個事務同時操作某一個數據庫或者某一張表時,可能會產生一系列問題:

  • 贓讀:一個事務讀到另外一個事務還沒有提交的數據

不可重復讀:一個事務先后讀取同一條記錄,但兩次讀取的數據不同,稱之為不可重復讀。

幻讀:一個事務按照條件查詢數據時,沒有對應的數據行,但是在插入數據時,又發現這行數據已經存在,好像出現了 "幻影"。

五、事務的隔離級別

為了解決并發事務所引發的問題,在數據庫中引入了事務隔離級別。主要有以下幾種:

隔離級別(發生- √,不發生- ×)

臟讀

不可重復讀

幻讀

Read uncommitted(讀未提交)




Read committed(讀已提交)

×



Repeatable Read(可重復讀)(默認)

×

×


Serializable (串行化)

×

×

×

MySQL默認的隔離級別為Repeatable Read,也就是只會產生幻讀問題。當然,隨著安全系數的增加,數據庫的性能也有所下降。

  • 查看事務隔離級別。
SELECT @@TRANSACTION_ISOLATION;

  • 設置事務隔離級別。
SET  [ SESSION | GLOBAL ]  TRANSACTION  ISOLATION  LEVEL  { READ UNCOMMITTED | 
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

責任編輯:姜華 來源: 哪吒編程
相關推薦

2023-08-30 08:23:11

2022-06-28 10:58:48

協議通信加密

2013-07-10 14:30:29

2023-03-28 21:33:53

面試隔離MVCC

2021-11-03 11:58:44

分布式事務面試

2021-12-13 11:12:41

Spring事務失效

2023-02-02 07:06:10

2021-07-21 09:15:27

MySQL數據庫面試

2023-06-30 07:58:07

Spring數據源事務

2021-09-02 18:39:01

Spring隔離級別

2009-06-15 17:05:02

IP通信

2021-02-05 12:34:33

線程池系統

2012-06-11 16:20:16

蘋果面試

2022-01-05 09:55:26

asynawait前端

2022-08-17 08:17:01

SPI機制接口

2023-06-07 08:08:43

JVM內存模型

2020-07-28 08:59:22

JavahreadLocal面試

2021-12-09 12:22:28

MyBatis流程面試

2025-04-07 09:31:05

2009-03-01 21:13:27

iPhone蘋果3G
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲自拍偷拍欧美 | 亚洲精品乱码久久久久久久久久 | 激情一区二区三区 | 欧美日韩精品一区 | 在线观看国产三级 | 亚洲欧美在线一区 | 日韩精品激情 | 亚洲女优在线播放 | 中文字幕 国产 | 涩涩视频网站在线观看 | 亚洲精品一区二区在线观看 | 久久国产精品无码网站 | 美女精品一区 | 欧美黑人一区 | 国产精品视频网 | 国产精品99久久久久久动医院 | 久久精彩视频 | 91视频国产区 | 国产一区二区 | 久久精品国产久精国产 | 国产亚洲精品久久情网 | 亚洲视频中文字幕 | 91精品久久久久久综合五月天 | 日韩亚洲一区二区 | 亚洲视频三 | 久久国产精品无码网站 | japan21xxxxhd美女 日本欧美国产在线 | 嫩草视频网 | 国产精品久久国产精品久久 | 天堂久久久久久久 | 欧美日韩亚洲二区 | 精品国产欧美一区二区 | 国产精品精品视频一区二区三区 | 天天操夜夜骑 | 野狼在线社区2017入口 | 怡红院成人在线视频 | 久久免费精品 | 黑人精品欧美一区二区蜜桃 | 三区在线观看 | 色性av| 97av视频在线 |