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

歡迎訪問 生活随笔!

生活随笔

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

数据库

数据库事务的四大特征

發布時間:2024/9/30 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库事务的四大特征 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 數據庫事務的四大特征
    • 原子性
    • 一致性
    • 隔離性
    • 持久性
    • Read uncommitted
      • 分析:
    • Read committed
      • 分析:
    • Repeatable read
      • 分析:
    • 什么時候出現幻讀?
    • Serializable序列化

數據庫事務的四大特征

原子性

指事物包含的所有操作要么全部成功,要么全部回滾。

一致性

指事物必須是數據庫從一個一致性狀態到另一個一致性狀態。也就是說一個事物執行之前和執行之后都必須處于一致性狀態。

隔離性

當多個用戶并發訪問數據庫時,比如操作同一張表時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作所干擾,多個并發事物之間要相互隔離。
關于事務的隔離性數據庫提供了多種隔離級別,下面就是。。。

持久性

指事務一旦被提交,那么數據庫的數據的改變就是永久性的,即便是在數據庫系統遇到故障的情況下也不會丟失事務的操作。

數據庫事務的隔離級別有4種,由低到高分別是:Read uncommitted、Read committed、Repeatablead、Serializable。事物的并發操作中可能休閑臟讀,不可重復讀,幻讀。

Read uncommitted

讀 未提交,就是一個事務可以讀取另一個未提交事務的數據。
eg: 老板要給程序員發工資,程序員的工資是3.6萬/月。但是發工資時老板不小心按錯了數字,按成3.9萬/月,該錢已經打到程序員的戶口,但是事務還沒有提交,就在這時,程序員去查看自己這個月的工資,發現比往常多了3千元,以為漲工資了非常高興。但是老板及時發現了不對,馬上回滾差點就提交了的事務,將數字改成3.6萬再提交。

分析:

實際程序員這個月工資還是3.6萬,但是程序員看到的是3.9萬,他看到的是老板沒提交事物的數據。就是臟讀。
解決方法:Read commited讀提交,能解決臟讀問題。

Read committed

讀 提交,就是事務要等另一個事物提交后才能讀取數據
eg: 程序員拿著信用卡去享受生活(卡里當然是只有3.6萬),當他埋單時(程序員事務開啟),收費系統事先檢測到他的卡里有3.6萬,就在這個時候!!程序員的妻子要把錢全部轉出充當家用,并提交。當收費系統準備扣款時,再檢測卡里的金額,發現已經沒錢了(第二次檢測金額當然要等待妻子轉出金額事務提交完)。程序員就會很郁悶,明明卡里是有錢的…

分析:

這就是讀提交,若有事務對數據進行更新(UPDATE)操作時,讀操作事物要等這個更新操作事物提交才能讀取數據,可以解決臟讀問題。但在這個示例中,出現了一個事物范圍內兩個相同的查詢卻返回了不同數據,這就是不可重復讀。

解決方法:Repeatable read

Repeatable read

重復讀,就是在開始讀取數據(事物開啟)時,不再允許修改操作。MySQL是這一級別。
eg: 程序員拿著信用卡去享受生活(卡里當然是只有3.6萬),當他埋單時(事務開啟,不允許其他事務的UPDATE修改操作),收費系統事先檢測到他的卡里有3.6萬。這個時候他的妻子不能轉出金額了。接下來收費系統就可以扣款了。

分析:

重復讀可以解決不可重復讀問題。寫到這里,應該明白一點就是,不可重復讀對應的是修改 UPDATE操作。但是可能會有幻讀問題。因為幻讀問題對應的是插入INSERT操作,而不是UPDATE操作。

什么時候出現幻讀?

eg: 程序員某一天消費,花了2千元,然后他的妻子去查看他今天的消費記錄(全表掃描FTS,妻子事物開啟),看到確實是花了2千元,就在這個時候,程序員花了1萬元買了一臺電腦,即新增INSERT了一條消費記錄,并提交。當妻子打印程序員的消費記錄清單時(妻子提交事務),發現花了1.2萬元,似乎出現了幻讀,就是幻讀。

解決:Serializable

Serializable序列化

Serializable是最高的事務隔離級別,在該級別下,事務串行化順序執行,可以避免臟讀,不可重復讀與幻讀。但是這種事務隔離級別效率低下,比較耗數據庫性能,一般不用。

大多數數據庫默認的事務級別隔離級別是Read committed、比如Sql Server,Oracle。Mysql的默認級別是Repeatable read

123

總結

以上是生活随笔為你收集整理的数据库事务的四大特征的全部內容,希望文章能夠幫你解決所遇到的問題。

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