日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

shell中执行某条语句失败能不能重复执行_如何理解Mysql中的事务隔离级别?

發布時間:2024/7/19 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell中执行某条语句失败能不能重复执行_如何理解Mysql中的事务隔离级别? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要說清楚Mysql中的事務隔離級別,我們先從事務的定義說起。事務,是一個或一組sql語句組成的一個執行單元,這個執行單元要么全部執行,要么全部不執行。整個單獨單元作為一個不可分割的整體,如果單元中某條sql語句一旦執行失敗或產生錯誤,整個單元將會回滾。所有收到影響的數據將返回到事務開始以前的狀態;如果單元中的所有sql語句均執行成功,則事務被順利執行。

事務有4個屬性,即ACID屬性

1. 原子性(Atomicity)

原子性是指事務是一個不可分割的工作單元,事務中的操作要么都發生,要么都不發生。

2. 一致性(Consistency)

事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態。

3. 隔離性(Isolation)

事務的隔離性是指一個事務的執行不能被其他事務干擾,即一個事務內部的操作及使用的數據對并發的其他事務是隔離的,并發執行的各個事務之間不能互相干擾。

4. 持久性(Durability)

持久性是指一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來的其他操作和數據庫故障不應該對其有任何影響。

對于同時運行的多個事務,當這些事務訪問數據庫中相同的數據時,會有可能發生一下的問題:

臟讀:對于兩個事務T1、T2,T1讀取了已經被T2更新但還未提交的字段,若T2回滾,T1讀取的內容就是臨時且無效的。

不可重復度:對于兩個事務T1、T2,T1讀取了一個字段,然后T2更新了該字段之后, T1再次讀取同一個字段,值就不同了。

幻讀:對于兩個事務T1、T2,T1從表中讀取了一個字段,然后T2在該表中插入了一些新的行之后,如果T1再次讀取同一個表,就會多出幾行。

因此,Mysql定義了四種隔離級別,分別解決以上發生的問題。好,我們通過例子來分別演示著4種隔離級別。

一個事務包括開始事務、執行事務、結束事務

開啟事務:set auto committed = 0

結束事務:commit/rollback

執行事務:一串sql語句。

假設原始表為:

讀未提交:允許事務讀取未被其他事務提交的變更,臟讀、不可重復讀和幻讀的問題都會出現。

用戶A:

用戶B:

此時B在臟讀。

讀已提交:只允許事務讀取已經被其他事務提交的變更,可以避免臟讀,但不可重讀和幻讀問題仍然可能出現。

用戶A:

用戶B:

此時B只讀已提交的數據,但是用戶A提交了,B再讀一次的數據和上一次不一致,不可重復讀的問題依然存在。

可重復讀:確保事務可多次從一個字段中讀取相同的值。但幻讀問題依然存在。

用戶A:

用戶B:

此時B讀取的兩次數據都一致,說明可重復讀。

串行化:在事務持續期間,禁止其他事務對該表進行插入、更新和刪除,所有問題都可以避免,但性能十分地下。

總結

以上是生活随笔為你收集整理的shell中执行某条语句失败能不能重复执行_如何理解Mysql中的事务隔离级别?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。