欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

public class AClass {

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

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

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

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

相關(guān)文章

  • MySQL基于group_concat()函數(shù)合并多行數(shù)據(jù)

    MySQL基于group_concat()函數(shù)合并多行數(shù)據(jù)

    這篇文章主要介紹了MySQL基于group_concat()函數(shù)合并多行數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • MySQL如何用分隔符分隔字符串

    MySQL如何用分隔符分隔字符串

    這篇文章主要介紹了MySQL如何用分隔符分隔字符串,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的方法實例

    Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的方法實例

    在日常業(yè)務(wù)開發(fā)中通常mysql數(shù)據(jù)庫中某個字段會需要存儲json格式字符串,下面這篇文章主要給大家介紹了關(guān)于Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • MySQL如何改變表的存儲引擎方式

    MySQL如何改變表的存儲引擎方式

    這篇文章主要介紹了MySQL如何改變表的存儲引擎方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 解決遠程連接MySQL報錯:2003 - Can‘t connect to MySQL server on ‘X.X.X.X‘ (10060 “Unknown error“)問題

    解決遠程連接MySQL報錯:2003 - Can‘t connect to&nb

    這篇文章主要給大家介紹了解決遠程連接MySQL報錯:2003 - Can‘t connect to MySQL server on ‘X.X.X.X‘ (10060 “Unknown error“)問題的方案,文中有詳細的解決步驟,需要的朋友可以參考下
    2023-09-09
  • MySQL replace函數(shù)替換字符串語句的用法

    MySQL replace函數(shù)替換字符串語句的用法

    MySQL replace函數(shù)我們經(jīng)常用到,下面就為您詳細介紹MySQL replace函數(shù)的用法,希望對您學(xué)習(xí)MySQL replace函數(shù)方面能有所啟迪。
    2010-12-12
  • mysql中l(wèi)ike % %模糊查詢的實現(xiàn)

    mysql中l(wèi)ike % %模糊查詢的實現(xiàn)

    這篇文章主要介紹了mysql中l(wèi)ike % %模糊查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MySQL邏輯備份into?outfile

    MySQL邏輯備份into?outfile

    這篇文章主要介紹了MySQL?備份之?into?outfile,文章圍繞主題展開詳細內(nèi)容介紹,具有一定的參考價值需要的小伙伴可以參考一下
    2022-05-05
  • MySQL主從庫過濾復(fù)制配置教程

    MySQL主從庫過濾復(fù)制配置教程

    搭建MySQL主從庫過濾復(fù)制,備份指定數(shù)據(jù)庫,有利于數(shù)據(jù)庫的管理,本文主要介紹了MySQL主從庫過濾復(fù)制配置教程,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Mysql中DATEDIFF函數(shù)的基礎(chǔ)語法及練習(xí)案例

    Mysql中DATEDIFF函數(shù)的基礎(chǔ)語法及練習(xí)案例

    Datediff函數(shù),最大的作用就是計算日期差,能計算兩個格式相同的日期之間的差值,下面這篇文章主要給大家介紹了關(guān)于Mysql中DATEDIFF函數(shù)的基礎(chǔ)語法及練習(xí)案例?的相關(guān)資料,需要的朋友可以參考下
    2022-09-09

最新評論