91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL關系型數據庫事務的ACID特性與實現方法

發布時間:2022-08-01 11:21:00 來源:億速云 閱讀:132 作者:iii 欄目:開發技術

這篇文章主要介紹“MySQL關系型數據庫事務的ACID特性與實現方法”,在日常操作中,相信很多人在MySQL關系型數據庫事務的ACID特性與實現方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL關系型數據庫事務的ACID特性與實現方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1. 事務的 ACID 特性詳

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

  • 原子性(Atomicity):事務中的操作同時成功或者失敗。

  • 一致性(Consistency):數據庫事務不能破壞數據的完整性以及業務邏輯上的一致。

  • 隔離性(Isolation):一個事務不影響其他事務的運行效果。

  • 持久性(Durability):事務完成后,事務所做的修改應該持久的保存在數據庫中,不會被回滾。

以 A 給 B 轉賬100元為例:

  • 原子性:A 失去100元與 B 收到 100 元同時發生。

  • 一致性:A 的賬戶在失去100元后不能為負數。

  • 隔離性:A 賬戶在執行該事務的同時如果執行 B 事務失去1元,那么最終應為失去101元,兩者互不影響。

  • 持久性:A 的賬戶失去100元后就不能要回來了。

2. MySQL 事務的實現

MySQL事務是由 InnoDB 存儲引擎實現的。

可以用如下的命令顯式的開啟事務:

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

另外,在自動提交(autocommit)模式下,我們執行的每一條 SQL 語句都是一條獨立的事務;如果關閉了自動提交(autocommit)模式,則所有的 SQL 語句都在一個事務中,直到執行了 commit 或 rollback,該事務結束,同時開始了另外一個事務。

MySQL 事務的 ACID 特性靠如下機制實現:

  • 原子性:undo log,邏輯日志,記錄 SQL 執行相關的信息。當發生回滾時,InnoDB 會根據 undo log 的內容做與之前相反的工作

  • 持久性:redo log,當事務提交時,會調用fsync接口對redo log進行刷盤。

  • 隔離性:鎖機制與 MVCC。

  • 一致性:數據庫本身的設計。

3. Gorm 事務的使用

Go 語言的 Gorm 提供了對于事務操作的支持:

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

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

  // 返回 nil 提交事務
  return nil
})

此外,還有嵌套事務以及手動事務等操作,可以參考中文文檔:Go GORM 事務詳細介紹

4. Spring 事務的使用

public class AClass {

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

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

一般情況下,推薦將@Transactional 注解加在方法上,因為@Transactional直接加在類或者接口上,@Transactional注解會對類或者接口里面所有的public方法都有效,會影響性能。

到此,關于“MySQL關系型數據庫事務的ACID特性與實現方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德兴市| 宜宾市| 芦山县| 桂平市| 灵山县| 仁怀市| 武鸣县| 江永县| 日照市| 通州区| 波密县| 茂名市| 尚志市| 墨竹工卡县| 磐安县| 温泉县| 周宁县| 阳高县| 南充市| 和平区| 南木林县| 陈巴尔虎旗| 乌什县| 昆山市| 云霄县| 蕉岭县| 龙门县| 屯昌县| 无锡市| 晋江市| 孟津县| 九江县| 肥西县| 额济纳旗| 大洼县| 林周县| 米易县| 潍坊市| 嵊泗县| 和静县| 平和县|