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

MySQL關(guān)系型數(shù)據(jù)庫(kù)事務(wù)的ACID特性與實(shí)現(xiàn)

 更新時(shí)間:2022年07月31日 09:14:05   投稿:hqx  
這篇文章主要介紹了MySQL關(guān)系型數(shù)據(jù)庫(kù)事務(wù)的ACID特性與實(shí)現(xiàn),ACID?是為保證事務(wù)transaction是正確可靠的,具備原子性、一致性、隔離性、持久性等特性

1. 事務(wù)的 ACID 特性詳

ACID 是為保證事務(wù)(transaction)是正確可靠的,所必須具備的四個(gè)特性:

  • 原子性(Atomicity):事務(wù)中的操作同時(shí)成功或者失敗。
  • 一致性(Consistency):數(shù)據(jù)庫(kù)事務(wù)不能破壞數(shù)據(jù)的完整性以及業(yè)務(wù)邏輯上的一致。
  • 隔離性(Isolation):一個(gè)事務(wù)不影響其他事務(wù)的運(yùn)行效果。
  • 持久性(Durability):事務(wù)完成后,事務(wù)所做的修改應(yīng)該持久的保存在數(shù)據(jù)庫(kù)中,不會(huì)被回滾。

以 A 給 B 轉(zhuǎn)賬100元為例:

  • 原子性:A 失去100元與 B 收到 100 元同時(shí)發(fā)生。
  • 一致性:A 的賬戶(hù)在失去100元后不能為負(fù)數(shù)。
  • 隔離性:A 賬戶(hù)在執(zhí)行該事務(wù)的同時(shí)如果執(zhí)行 B 事務(wù)失去1元,那么最終應(yīng)為失去101元,兩者互不影響。
  • 持久性:A 的賬戶(hù)失去100元后就不能要回來(lái)了。

2. MySQL 事務(wù)的實(shí)現(xiàn)

MySQL事務(wù)是由 InnoDB 存儲(chǔ)引擎實(shí)現(xiàn)的。

可以用如下的命令顯式的開(kāi)啟事務(wù):

start transaction / (Begin);
#一條或多條sql語(yǔ)句
Commit;

另外,在自動(dòng)提交(autocommit)模式下,我們執(zhí)行的每一條 SQL 語(yǔ)句都是一條獨(dú)立的事務(wù);如果關(guān)閉了自動(dòng)提交(autocommit)模式,則所有的 SQL 語(yǔ)句都在一個(gè)事務(wù)中,直到執(zhí)行了 commit 或 rollback,該事務(wù)結(jié)束,同時(shí)開(kāi)始了另外一個(gè)事務(wù)。

MySQL 事務(wù)的 ACID 特性靠如下機(jī)制實(shí)現(xiàn):

  • 原子性:undo log,邏輯日志,記錄 SQL 執(zhí)行相關(guān)的信息。當(dāng)發(fā)生回滾時(shí),InnoDB 會(huì)根據(jù) undo log 的內(nèi)容做與之前相反的工作
  • 持久性:redo log,當(dāng)事務(wù)提交時(shí),會(huì)調(diào)用fsync接口對(duì)redo log進(jìn)行刷盤(pán)。
  • 隔離性:鎖機(jī)制與 MVCC。
  • 一致性:數(shù)據(jù)庫(kù)本身的設(shè)計(jì)。

3. Gorm 事務(wù)的使用

Go 語(yǔ)言的 Gorm 提供了對(duì)于事務(wù)操作的支持:

db.Transaction(func(tx *gorm.DB) error {
  // 在事務(wù)中執(zhí)行一些 db 操作(從這里開(kāi)始,您應(yīng)該使用 'tx' 而不是 'db')
  if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
    // 返回任何錯(cuò)誤都會(huì)回滾事務(wù)
    return err
  }

  if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
    return err
  }

  // 返回 nil 提交事務(wù)
  return nil
})

此外,還有嵌套事務(wù)以及手動(dòng)事務(wù)等操作,可以參考中文文檔:Go GORM 事務(wù)詳細(xì)介紹

4. Spring 事務(wù)的使用

public class AClass {

    @Transactional(rollbackFor = Exception.class)
    public void aFunction() {
        //todo: 數(shù)據(jù)庫(kù)操作A(增,刪,該)
    }
}

@Transactional 注解必須添加在public方法上,private、protected方法上是無(wú)效的。

一般情況下,推薦將@Transactional 注解加在方法上,因?yàn)锧Transactional直接加在類(lèi)或者接口上,@Transactional注解會(huì)對(duì)類(lèi)或者接口里面所有的public方法都有效,會(huì)影響性能。

到此這篇關(guān)于MySQL關(guān)系型數(shù)據(jù)庫(kù)事務(wù)的ACID特性與實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL ACID特性?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何利用amoeba(變形蟲(chóng))實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫(xiě)分離

    詳解如何利用amoeba(變形蟲(chóng))實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫(xiě)分離

    這篇文章主要介紹了詳解如何利用amoeba(變形蟲(chóng))實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)讀寫(xiě)分離,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Mac安裝 mysql 數(shù)據(jù)庫(kù)總結(jié)

    Mac安裝 mysql 數(shù)據(jù)庫(kù)總結(jié)

    本文給大家分享的是如何在Mac下安裝mysql數(shù)據(jù)庫(kù)的方法,總結(jié)的很全面,有需要的小伙伴可以參考下
    2016-04-04
  • mysql導(dǎo)入csv的4種報(bào)錯(cuò)的解決方法

    mysql導(dǎo)入csv的4種報(bào)錯(cuò)的解決方法

    這篇文章主要介紹了mysql導(dǎo)入csv的4種報(bào)錯(cuò)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 圖文詳解MySQL中兩表關(guān)聯(lián)的連接表如何創(chuàng)建索引

    圖文詳解MySQL中兩表關(guān)聯(lián)的連接表如何創(chuàng)建索引

    這篇文章通過(guò)圖文給大家介紹了關(guān)于MySQL中兩表關(guān)聯(lián)的連接表如何創(chuàng)建索引的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • MySQL和Redis的數(shù)據(jù)一致性問(wèn)題

    MySQL和Redis的數(shù)據(jù)一致性問(wèn)題

    這篇文章主要介紹了MySQL和Redis的數(shù)據(jù)一致性問(wèn)題,下面文章圍繞Redis大的相關(guān)資料展開(kāi)詳情,需要的小伙伴可以參考一下
    2022-04-04
  • MySQL慢查詢(xún)?nèi)罩局械腖ock_time由來(lái)解析

    MySQL慢查詢(xún)?nèi)罩局械腖ock_time由來(lái)解析

    這篇文章主要為大家介紹了慢查詢(xún)?nèi)罩局蠰ock_time的由來(lái)解析,以及Lock_time?包含哪些鎖等待時(shí)間、以及是怎么計(jì)算得到的,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-06-06
  • SQL性能優(yōu)化方法及性能測(cè)試

    SQL性能優(yōu)化方法及性能測(cè)試

    這篇文章主要介紹了SQL性能優(yōu)化方法及性能測(cè)試,文章圍繞主題展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-05-05
  • MySql通過(guò)ip地址進(jìn)行訪(fǎng)問(wèn)的方法

    MySql通過(guò)ip地址進(jìn)行訪(fǎng)問(wèn)的方法

    這篇文章主要介紹了MySql通過(guò)ip地址進(jìn)行訪(fǎng)問(wèn)的方法,首先要登錄mysql,切換數(shù)據(jù)庫(kù)然后授權(quán),具體代碼詳情大家參考下本文
    2018-06-06
  • 淺談MySQL觸發(fā)器的原理以及使用

    淺談MySQL觸發(fā)器的原理以及使用

    這篇文章主要介紹了淺談MySQL觸發(fā)器的原理以及使用,觸發(fā)器的執(zhí)行不需要使用 CALL 語(yǔ)句來(lái)調(diào)用,也不需要手工啟動(dòng),只要一個(gè)預(yù)定義的事件發(fā)生就會(huì)被 MySQL自動(dòng)調(diào)用,需要的朋友可以參考下
    2023-05-05
  • mysql中的load命令使用方法

    mysql中的load命令使用方法

    使用mysql 中的load 命令,可以將txt 文件中的內(nèi)容加載到數(shù)據(jù)庫(kù)表中
    2013-10-10

最新評(píng)論

阿坝| 油尖旺区| 乐清市| 金秀| 厦门市| 凤庆县| 平顺县| 郯城县| 永兴县| 商城县| 菏泽市| 新郑市| 肇东市| 河南省| 达拉特旗| 宜丰县| 荆门市| 姜堰市| 时尚| 子长县| 海丰县| 邻水| 青田县| 分宜县| 阜宁县| 噶尔县| 龙山县| 仁寿县| 长阳| 乌拉特前旗| 巨鹿县| 高雄县| 金华市| 凤阳县| 洛扎县| 安福县| 普格县| 石台县| 平湖市| 嘉兴市| 仁怀市|