Golang PostgreSql資料庫事務處理

2021-10-08 21:21:28 字數 1966 閱讀 5241

對於資料庫執行多個更新操作時,事務會將多個操作當成單個單元處理,要成功都成功,否則都失敗。本文通過例項說明go sql事務處理。

​ 搭建postgresql資料庫環境,我們打算在postgre資料庫中新建表meta_data(id, source),然後插入記錄測試事務。

​ go運算元據庫的包為"database/sql",這裡資料庫使用postgresql,需要匯入github.com/lib/pq;下面是準備資料庫連線**。

)}go預設實現了資料庫連線池,無需引入第三方連線池實現。

下面是事務示例實現,我們使用postgresql,因此變數佔位符使用 $ , mysql使用 ?。

func

insertdata()

sql :=

"insert into meta_data(id, source) values($1, $2)"

tx,err := db.

begin()

checkerror

(err)

defer tx.

commit()

for_

, item :=

range data

}}

函式開始之前首先啟動事務,使用defer語句確保最後提交事務。接著執行多個插入語句,如果有錯誤回滾事務。

這個實現沒有問題,只是每次需要寫和事務相關的**,顯得多餘,最好能封裝事務相關**,使用者只關心業務。

上節手動實現了事務,本節對事務操作進行封裝,讓**更有通用性。

這裡定義updatewithtx()函式,其中封裝了事務相關**,具體執行和資料庫相關操作通過其函式引數傳入。

func

updatewithtx

(fn func

(tx *sql.tx)

error

)error

defer

func()

}() err =

fn(tx)

return err

}

func

testupdatewithtx

(t *testing.t)

sql :=

"insert into meta_data(id, source) values($1, $2)"

for_

, item :=

range data

// err = errors.new("人為錯誤")

}return err

})}

具體業務和上節**一樣,但我們不在關心事務相關**,使用者可測試有錯誤時是否回滾事務。

mysql業務資料庫回退 MySQL 事務處理

事務 一組sql語句操作單元,組內所有sql語句,完成乙個業務。若整組成功,意味著組內的全部操作都成功 反之,若其中任何一條語句失敗,意味著整個操作都失敗。操作失敗,意味著整個過程都是沒有意義的,應使資料庫回到操作前的初始狀態。point 1.失敗後,能回到開始位置 2.成功之前,其他使用者 程序 ...

事務處理 資料庫事務

事務簡介 事務的作用 事務的作用是將一系列操作作為乙個整體,一但其 現問題,會回滾到事務的開始狀態。即事務維護了資料的完整性和一致性。事務的四個特性 acid 原子性 事務的操作是原子不可分割的。一致性 事務的運算元據保證一致性,不存在一部分改變一部分不改變。隔離性 隔離性是當多個使用者併發訪問資料...

MySQL資料庫總結(10)儲存引擎與事務處理

事務 資料庫對同樣的資料,有著不同的儲存方式和管理方式,在mysql中,稱為儲存引擎 儲存引擎與其特點 文章,新聞等安全性要求不高的,選myisam 訂單,資金,賬單,火車票等對安全性要求高的,可以選用innodb 對於臨時中轉表,可以用memory型 速度最快 通俗的說事務 原子性 要麼都成功執行...