最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL事務的基礎學習以及心得分享

 更新時間:2017年12月06日 09:42:44   作者:久違的韓哥  
本篇內(nèi)容是關于MySQL事務的基礎知識學習內(nèi)容,并把學習中網(wǎng)友的心得做了總結,分享給大家,一起學習參考下吧。

事務是邏輯上的一組操作,組成這組操作的各個單元,要不全都成功要不全都失敗,這個特性就是事務,下面就是關于MySQL事務學習中的心得分享:

事務的特性

1.原子性(Atomicity):原子性是指事務是一個不可分割的工作單位,事務中的操作要么都發(fā)生,要么都不發(fā)生。 

2.一致性(Consistency):在一個事務中,事務前后數(shù)據(jù)的完整性必須保持一致,可以想象銀行轉賬、火車購票。

3.隔離性(Isolation):多個事務,事務的隔離性是指多個用戶并發(fā)訪問數(shù)據(jù)庫時, 一個用戶的事務不能被其它用戶的事務所干擾,多個并發(fā)事務之間數(shù)據(jù)要相互隔離。

4.持久性(Durability):持久性是指一個事務一旦被提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就是永久性的,接下來即使數(shù)據(jù)庫發(fā)生故障也不應該對其有任何影響。

寫這些概念呢,是有點繞!繞就繞吧!反正也不是我規(guī)定的,這是官方的,解釋是我編的!??!

事務的并發(fā)訪問問題

如果我們在不考慮隔離性問題時,事務是存在三種并發(fā)訪問問題的。

1.臟讀:在一個事務中,當讀取數(shù)據(jù)時,讀到了另一個事務未提交的數(shù)據(jù)。  

比如A賬戶給B賬戶轉了1塊錢,但是A沒有提交事務,被B賬戶通過臟讀看到了,這時,B就會以為A已經(jīng)把錢轉過來了,但是這時,A賬戶回滾事務。其實錢就沒給B轉過去,但是B自己本身以為A已經(jīng)轉過去了,,,有點繞,估計是我描述到繞!

看代碼:

update account set money=money+1 where name='B';  --此時A去通知B
update account set money=money -1 where name='A';

2.不可重復讀:在一個事務中,兩次讀取的數(shù)據(jù)內(nèi)容不一致,這是因為在查詢時,有時間間隔,數(shù)據(jù)被另一個事務已經(jīng)修改提交了,那就會出現(xiàn)問題。

3.幻讀/虛讀:在一個事務中,兩次讀取的數(shù)據(jù)量不一致。

事務的隔離級別

上面介紹了3種事務并發(fā)問題!現(xiàn)在介紹一下數(shù)據(jù)庫提供的解決方案!

1.read uncommitted : 讀取尚未提交的數(shù)據(jù) :這個最低級,但是效率肯定最高,但是哪一個問題都不能解決。

2.read committed:讀取已經(jīng)提交的數(shù)據(jù) :可以解決臟讀  。

3.repeatable read:重讀讀?。嚎梢越鉀Q臟讀 和 不可重復讀 。

4.serializable:串行化:可以解決臟讀不可重復讀和虛讀,效率最差,相當于鎖表,開發(fā)中一般不用。 

上面的“2”是oracle數(shù)據(jù)庫默認設置,“3”是mysql數(shù)據(jù)庫默認的設置。

下面呢我就重點解釋一下mysql數(shù)據(jù)庫在上面各種事務隔離級別上的演示:

首先介紹兩個語法:

1.查看mysql數(shù)據(jù)庫默認的隔離級別:select @@tx_isolation

如圖:

2.設置mysql的隔離級別:set session transaction isolation level 事務的隔離級別

如圖:

事務的隔離級別演示

注意:如果要自己模擬要開啟兩個mysql客戶端,也就是模擬兩個用戶!

1.read uncommitted

如圖:

我通過語法將數(shù)據(jù)庫的事務隔離級別改為了read uncommitted。

首先我有一張account表。 

如圖:窗口一

 窗口二

數(shù)據(jù)庫表原始數(shù)據(jù)money都是5000,當我啟動事務后,在zhangsan賬戶增加了1000和在李四賬戶減去了1000,但是我的事務還未提交,但是我再次查詢數(shù)據(jù)庫表時,數(shù)據(jù)已經(jīng)發(fā)生變化,這就是臟讀和不可重復讀!

幻讀/虛讀我就不掩飾了,同樣存在!

2.read committed

 如圖:

我將數(shù)據(jù)庫事務隔離性改為了read committted。

還是上面那張表:

如圖:窗口一

 窗口二

 

 

數(shù)據(jù)庫表zhangsan賬戶的money和lisi賬戶的money都發(fā)生了變化,我未提交事務,在另一個窗口事務開啟下查詢時,沒有出現(xiàn)臟讀,但是當我提交事務時,在另一個窗口的事務下再次查詢,出現(xiàn)了不可重復讀的情況,這樣可以避免臟讀,但是查詢時已經(jīng)出現(xiàn)不可重復讀和幻讀/虛讀!

3.repeatable read

如圖:

我將數(shù)據(jù)庫事務隔離性改為了read committted。

還是上面那張表:

如圖:窗口一

 窗口二

我在兩個窗口都開啟了事務,當窗口一進行數(shù)據(jù)操作后,并進行事務提交,在窗口二的事務開啟情況下,我去查詢,沒有查詢到剛才窗口一的數(shù)據(jù)操作記錄,這樣就避免了臟讀和不可重復讀。

 有人說也避免了虛讀/幻讀,其實沒有。

 看圖:

我在操作lisi賬戶時,數(shù)據(jù)只是發(fā)生修改的變化,但是當我修改wangwu這個賬戶時,再去查詢出現(xiàn)了wangwu,賬戶的數(shù)據(jù),但是其實在我未操作前,wangwu賬戶的數(shù)據(jù)是查詢不出的。這就是幻讀/虛讀!

如果不理解幻讀/虛讀這塊,可以查一下InnoDB。

4.serializable

我就不演示了,開發(fā)不建議用,效率又慢,但是所有的問題都能避免!!

總結一下 

事務隔離級別的性能:

read uncommitted>read committed>repeatable read>serialazable

事務隔離級別的安全性:

read uncommitted<read committed<repeatable read<serialazable

mysql 事務控制:

開啟事務:start transaction;

提交:commit;

回滾:rollback;

相關文章

  • MySQL 數(shù)據(jù)庫函數(shù)庫

    MySQL 數(shù)據(jù)庫函數(shù)庫

    MySQL 數(shù)據(jù)庫函數(shù)庫...
    2006-12-12
  • MySQL進行JSON查詢的詳細教程

    MySQL進行JSON查詢的詳細教程

    在MySQL中,一般會使用特定的 JSON 路徑表達式語法來導航和提取 JSON 文檔中的數(shù)據(jù),本文將為大家詳細介紹一下具體的查詢方法,希望對大家有所幫助
    2025-03-03
  • MySQL授權用戶訪問數(shù)據(jù)操作方式

    MySQL授權用戶訪問數(shù)據(jù)操作方式

    用戶授權操作可以控制數(shù)據(jù)庫用戶對數(shù)據(jù)庫對象的訪問權限,本文就來介紹MySQL授權用戶訪問數(shù)據(jù)操作方式,感興趣的可以了解一下
    2023-10-10
  • MySQL索引失效原理

    MySQL索引失效原理

    索引可以加快查找速度是因為,在每一層的兄弟節(jié)點之間,索引是有序的,因此可以通過二分法快速定位到相應位置。如果一些操作破壞了索引排列的有序性或者不能利用索引的有序性,這個索引自然就失效了,下文更詳細說明,需要的朋友可以參考一下
    2021-12-12
  • MySQL多實例安裝開機自啟動服務配置過程

    MySQL多實例安裝開機自啟動服務配置過程

    這篇文章主要介紹了MySQL中,多實例安裝開機自啟服務配置的過程詳細步驟,有需要的朋友可以借鑒參考下,希望可以有所幫助,感謝閱讀
    2021-09-09
  • 探索MySQL?8中utf8mb4釋放多語言數(shù)據(jù)的強大潛力

    探索MySQL?8中utf8mb4釋放多語言數(shù)據(jù)的強大潛力

    這篇文章主要為大家介紹了探索MySQL?8中utf8mb4釋放多語言數(shù)據(jù)的強大潛力,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 使用mysqldump導出導入mysql表結構或者數(shù)據(jù)

    使用mysqldump導出導入mysql表結構或者數(shù)據(jù)

    這篇文章主要介紹了使用mysqldump導出導入mysql表結構或者數(shù)據(jù)的相關資料,mysqldump是MySQL數(shù)據(jù)庫備份工具,用于導出數(shù)據(jù)和表結構,可以使用命令行工具運行該工具,并指定數(shù)據(jù)庫和表的名稱,導出的數(shù)據(jù)可以保存為SQL文件,需要的朋友可以參考下
    2024-12-12
  • 詳解MySQL索引原理以及優(yōu)化

    詳解MySQL索引原理以及優(yōu)化

    在本篇文章中小編給大家整理了關于MySQL索引原理以及優(yōu)化的相關知識點以及實例代碼,需要的朋友們參考下。
    2019-06-06
  • Win7 64位 mysql 5.7下載安裝常見問題小結

    Win7 64位 mysql 5.7下載安裝常見問題小結

    這篇文章主要介紹了Win7 64位 mysql 5.7下載安裝常見問題小結,本文圖文并茂給大家介紹的非常詳細,需要的朋友參考下吧
    2017-06-06
  • MySQL ORDER BY 的實現(xiàn)分析

    MySQL ORDER BY 的實現(xiàn)分析

    總的來說,在 MySQL 中的ORDER BY有兩種排序實現(xiàn)方式,一種是利用有序索引獲取有序數(shù)據(jù),另一種則是通過相應的排序算法,將取得的數(shù)據(jù)在內(nèi)存中進行排序
    2012-07-07

最新評論

锡林浩特市| 赤城县| 晋宁县| 密山市| 团风县| 柏乡县| 论坛| 镇安县| 望江县| 山阴县| 顺义区| 安顺市| 竹山县| 象山县| 高碑店市| 东乡族自治县| 济阳县| 辛集市| 宁远县| 太和县| 湘阴县| 龙井市| 蒲城县| 图片| 云和县| 长沙市| 杭锦后旗| 兴文县| 湾仔区| 来凤县| 安阳县| 黄陵县| 陕西省| 凤山市| 洛宁县| 平湖市| 九台市| 丰镇市| 邯郸市| 乡城县| 炎陵县|