吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

GaussDB數據庫事務介紹

jf_21561199 ? 來源:jf_21561199 ? 作者:jf_21561199 ? 2023-06-05 16:28 ? 次閱讀

前言

隨著大數據和互聯網技術的不斷發展,數據庫管理系統的作用越來越重要,實現數據的快速讀寫以及保證數據的安全性和完整性成為企業在選擇數據庫技術時最為關注的問題之一。事務是保證數據一致性和完整性的關鍵機制之一,因此事務管理在數據庫技術中占據了極為重要的位置。在這里我們將著重介紹華為云數據庫 GaussDB 對事務的支持及管理,包括事務應用場景、事務管理、事務語句、事務隔離、事務監控等內容。

GaussDB 事務的定義及應用場景事務是數據庫系統中的一個重要概念,通俗來講,事務就是一組數據庫操作看成一個整體,這個整體要么全部執行成功,要么全部撤銷。

事務可以應用在并發訪問數據庫時,保持數據的一致性。一些常見的應用場景包括轉賬操作、訂單修改、銀行交易等。在這些場景中,事務的功能是保證操作的原子性,即要么全部執行成功,數據庫的值正確地更新,即處于一個“一致狀態”,要么出現異常或系統故障,全部回滾至操作前的狀態,以保證數據的準確性和完整性。

wKgaomR9nKuACxJ0AACB84cx4xQ582.png

GaussDB 支持 ACID 事務,即原子性、一致性、隔離性和持久性。在 GaussDB 中,事務是指一組數據庫操作,這些操作要么全部成功,要么全部失敗。當一個事務提交時,所有的修改都會被永久保存。如果事務失敗,則所有的修改都會被回滾,數據庫狀態會被還原到事務開始前的狀態。GaussDB 還支持分布式事務(集群事務),可以涉及到多個節點的事務(本次不做重點介紹)。

原子性(Atomicity):事務是數據庫的邏輯工作單位,事務中的操作,要么都做, 要么都不做。

一致性(Consistency):事務的執行結果必須是使數據庫從一個一致性狀態轉到另一 個一致性狀態。

隔離性(Isolation):數據庫中一個事務的執行不能被其他事務干擾。即一個事務 的內部操作及使用的數據對其他事務是隔離的,并發執行的 各個事務不能相互干擾。

持久性(Durability):事務一旦提交,對數據庫中數據的改變是永久的。提交后的 操作或者故障不會對事務的操作結果產生任何影響。

wKgaomR9nKyAa9HEAAD8fNlAD9g628.png

GaussDB 事務的管理事務管理是指在使用數據庫系統時,對事務的開啟、提交、回滾、保存點、分布式事務等進行管理:

啟動事務:GaussDB 通過 START TRANSACTION 和 BEGIN 語法啟動事務

設置事務:GaussDB 通過 SET TRANSACTION 或者 SET LOCAL TRANSACTION 語法設置事務

提交事務:GaussDB 通過 COMMIT 或者 END 可完成提交事務的功能,即提交事務的所有操作

回滾事務:回滾是在事務運行的過程中發生了某種故障,事務不能繼續執行,系統將事務中對數據庫的所有已完成的操作全部撤銷

存儲過程本身就處于一個事務中,開始調用最外圍存儲過程時會自動開啟一個事務,在調用結束時自動提交或者發生異常時回滾。除了系統自動的事務控制外,也可以使用 COMMIT/ROLLBACK 來控制存儲過程中的事務。在存儲過程中調用 COMMIT/ROLLBACK 命令,將提交/回滾當前事務并自動開啟一個新的事務,后續的所有操作都會在此新事務中運行。

示例 1:啟動一個事務

--以默認方式啟動事務。START TRANSACTION;SELECT * FROM tpcds.reason;END;

--以默認方式啟動事務。BEGIN;SELECT * FROM tpcds.reason;END;

--以隔離級別為 READ COMMITTED,讀/寫方式啟動事務。START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;SELECT * FROM tpcds.reason;COMMIT;

示例 2:設置事務

--開啟一個事務,設置事務的隔離級別為 READ COMMITTED,訪問模式為 READ ONLY。START TRANSACTION;SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;COMMIT;示例 3:支持在 PLSQL 的存儲過程內使用 COMMIT/ROLLBACK。

CREATE TABLE EXAMPLE1(COL1 INT);

CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE()ASBEGINFOR i IN 0..20 LOOPINSERT INTO EXAMPLE1(COL1) VALUES (i);IF i % 2 = 0 THENCOMMIT;ELSEROLLBACK;END IF;END LOOP;END;/運行結果:

wKgZomR9nK2AQKeEAABxTDOEgDk714.png

在 GaussDB 中,控制管理事務可以采用兩個方法:原子性和隔離性。原子性指一組操作要么全部執行,要么全部不執行。隔離性指一個事務的操作不受其他事務干擾,保證并發執行時數據的一致性。

更多事務管理過程中的使用場景(支持/不支持調用的上下文環境),請參見官網示例:

https://support.huaweicloud.com/centralized-devg-v2-opengauss/devg_03_0713.html

GaussDB 事務語句

事務語句可以看作是在事務中執行的一組語句,常見的事務語句有 insert、update、delete 等。

GaussDB 支持事務語句,事務語句組合成一組原子性、隔離性和一致性的操作。例如,下面的所有查詢都包含在同一個事務小片中。如果有任何一個查詢失敗,整個事務將回滾。以下是事務語句的例子:

BEGIN;SELECT balance FROM account WHERE id = 1 FOR UPDATE;UPDATE account SET balance = balance - 100 WHERE id = 1;COMMIT

wKgaomR9nK2AaaqUAAEbeyXuoKQ088.png

GaussDB 事務隔離

GaussDB 支持的事務隔離級別包括:Read Uncommitted(讀未提交)、Read Committed(讀提交)、Repeatable Read(重復讀)、Serializable(序列化,Serializable 是最高的事務隔離級別,在該級別下,事務串行化順序執行,可以避免臟讀、不可重復讀與幻讀。但是這種事務隔離級別效率低下,比較耗數據庫性能,一般不建議使用)。

語法:

{ SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION }{ ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ }| { READ WRITE | READ ONLY } } [, ...]

Read Uncommitted 隔離級別:最低的隔離級別,它允許提交了但尚未被寫入磁盤的事務修改的數據被其他事務所讀取。

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;2. Read Committed 隔離級別:這個級別保證一個事務所見到的數據,要么是提交事務所修改的(已經將數據更新至磁盤),要么就是其他提交事務所修改的。

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED;3. Repeatable Read 隔離級別:保證在一個事務內重復執行的查詢返回的結果集是一樣的。特別地,在這個級別的情況下,在事務中第一次讀表時就會自動獲取到所有被查詢記錄的共享鎖,直到關閉連接為止。

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable 隔離級別:這個級別最高,實現方法是對數據進行鎖定,以保證在寫操作(INSERT、DELETE 和 UPDATE 等)期間數據不會被訪問。

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;事務監控是指對事務進行實時的監控,包括事務的狀態、執行時間、執行語句、執行結果等。

GaussDB 事務監控

事務監控可以對數據庫操作進行記錄和追蹤,包括事務開始和結束的時間、事務中執行的語句、事務提交或回滾的狀態等。可以通過這些信息來監控事務的執行情況,優化性能和調整配置。

華為云數據庫 GaussDB 支持 ACID 事務,事務隔離級別支持讀已提交、可重復讀、序列化三種,并具有分布式事務支持功能。在實際應用中,GaussDB 的事務機制可適用于金融賬務、電商訂單、物流管理等多種場景。

例如,在電商訂單場景中,可以在一個事務中包含插入訂單、更新庫存、生成支付信息等相關操作,確保這些操作全部成功或全部失敗,而不會出現其中某個操作提交,其他操作失敗的情況。

而在日常開發中,要注意對事務的合理使用,避免在一個事務中執行過多的操作,盡可能縮小事務的范圍,減少事務的執行時間,從而提高系統的并發性能。

事務監控可以對數據庫操作進行記錄和追蹤,包括事務開始和結束的時間、事務中執行的語句、事務提交或回滾的狀態等。可以通過這些信息來監控事務的執行情況,優化性能和調整配置。以下是事務監控的示例:

查看活動事務信息(PG_PREPARED_XACTS 視圖顯示當前準備好進行兩階段提交的事務的信息)

select * from pg_prepared_xacts;

查看事務狀態(PG_STAT_ACTIVITY 視圖顯示和當前用戶查詢相關的信息。)

select pid, datname, usename, query, query_start, state from pg_stat_activity where state != 'idle' and state != 'idle in transaction';

總結

事務是保證數據一致性和完整性的核心機制之一,對于一個數據庫來說,事務的支持和管理是必須的。GaussDB 通過支持手動和自動管理事務、事務隔離級別以及事務監控等功能,滿足了企業對數據一致性和完整性的需求。在日常開發中,需要特別注意事務的控制和隔離,以保證事務的正確執行,從而提高數據的可靠性和安全性。

本文介紹到此結束,更多操作可在實際應用中參考官方文檔。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 云計算
    +關注

    關注

    39

    文章

    7850

    瀏覽量

    137877
  • 數據庫
    +關注

    關注

    7

    文章

    3848

    瀏覽量

    64688
  • 華為云
    +關注

    關注

    3

    文章

    2691

    瀏覽量

    17588
收藏 人收藏

    評論

    相關推薦

    分布式云化數據庫有哪些類型

    分布式云化數據庫有哪些類型?分布式云化數據庫主要類型包括:關系型分布式數據庫、非關系型分布式數據庫、新SQL分布式數據庫、以列方式存儲
    的頭像 發表于 01-15 09:43 ?111次閱讀

    MySQL數據庫的安裝

    MySQL數據庫的安裝 【一】各種數據庫的端口 MySQL :3306 Redis :6379 MongoDB :27017 Django :8000 flask :5000 【二】MySQL 介紹
    的頭像 發表于 01-14 11:25 ?131次閱讀
    MySQL<b class='flag-5'>數據庫</b>的安裝

    數據庫是哪種數據庫類型?

    數據庫是一種部署在虛擬計算環境中的數據庫,它融合了云計算的彈性和可擴展性,為用戶提供高效、靈活的數據庫服務。云數據庫主要分為兩大類:關系型數據庫
    的頭像 發表于 01-07 10:22 ?142次閱讀

    數據庫加密辦法

    企業對于數據的重視程度不言而喻,也衍生出了數據=資產的概念。但是數據泄漏的事件頻繁發生,為了保護數據資產,企業有必要對數據庫做一些針對性的措
    的頭像 發表于 12-24 09:47 ?154次閱讀

    數據庫數據恢復—Mysql數據庫表記錄丟失的數據恢復流程

    Mysql數據庫故障: Mysql數據庫表記錄丟失。 Mysql數據庫故障表現: 1、Mysql數據庫表中無任何數據或只有部分
    的頭像 發表于 12-16 11:05 ?224次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—Mysql<b class='flag-5'>數據庫</b>表記錄丟失的<b class='flag-5'>數據</b>恢復流程

    數據庫事件觸發的設置和應用

    數據庫無論對于生產管理還是很多的實際應用都非常重要。小編這次聊一下數據庫事件觸發的應用。示例使用了postgresql和Python。
    的頭像 發表于 12-13 15:14 ?219次閱讀

    數據庫數據恢復—MYSQL數據庫ibdata1文件損壞的數據恢復案例

    mysql數據庫故障: mysql數據庫文件ibdata1、MYI、MYD損壞。 故障表現:1、數據庫無法進行查詢等操作;2、使用mysqlcheck和myisamchk無法修復數據庫
    的頭像 發表于 12-09 11:05 ?224次閱讀

    數據庫數據恢復—通過拼接數據庫碎片恢復SQLserver數據庫

    一個運行在存儲上的SQLServer數據庫,有1000多個文件,大小幾十TB。數據庫每10天生成一個NDF文件,每個NDF幾百GB大小。數據庫包含兩個LDF文件。 存儲損壞,數據庫
    的頭像 發表于 10-31 13:21 ?337次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—通過拼接<b class='flag-5'>數據庫</b>碎片恢復SQLserver<b class='flag-5'>數據庫</b>

    Oracle數據恢復—異常斷電后Oracle數據庫報錯的數據恢復案例

    Oracle數據庫故障: 機房異常斷電后,Oracle數據庫報錯:“system01.dbf需要更多的恢復來保持一致性,數據庫無法打開”。數據
    的頭像 發表于 09-30 13:31 ?387次閱讀
    Oracle<b class='flag-5'>數據</b>恢復—異常斷電后Oracle<b class='flag-5'>數據庫</b>啟<b class='flag-5'>庫</b>報錯的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—Oracle數據庫文件system01.dbf損壞的數據恢復案例

    打開oracle數據庫報錯“system01.dbf需要更多的恢復來保持一致性,數據庫無法打開”。
    的頭像 發表于 09-21 14:25 ?523次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—Oracle<b class='flag-5'>數據庫</b>文件system01.dbf損壞的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—SQL Server數據庫出現823錯誤的數據恢復案例

    SQL Server數據庫故障: SQL Server附加數據庫出現錯誤823,附加數據庫失敗。數據庫沒有備份,無法通過備份恢復數據庫
    的頭像 發表于 09-20 11:46 ?410次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—SQL Server<b class='flag-5'>數據庫</b>出現823錯誤的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—SQL Server數據庫所在分區空間不足報錯的數據恢復案例

    SQL Server數據庫數據恢復環境: 某品牌服務器存儲中有兩組raid5磁盤陣列。操作系統層面跑著SQL Server數據庫,SQL Server數據庫存放在D盤分區中。
    的頭像 發表于 07-10 13:54 ?579次閱讀

    HarmonyOS開發案例:【搭建關系型數據庫】(4)

    本節將介紹如何調用關系型數據庫接口在本地搭建數據庫,并讀寫相應的用戶數據
    的頭像 發表于 05-11 10:27 ?999次閱讀
    HarmonyOS開發案例:【搭建關系型<b class='flag-5'>數據庫</b>】(4)

    數據庫數據恢復—raid5陣列上層Sql Server數據庫數據恢復案例

    數據庫數據恢復環境: 5塊硬盤組建一組RAID5陣列,劃分LUN供windows系統服務器使用。windows系統服務器內運行了Sql Server數據庫,存儲空間在操作系統層面劃分了三個邏輯分區
    的頭像 發表于 05-08 11:43 ?579次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—raid5陣列上層Sql Server<b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復案例

    選擇 KV 數據庫最重要的是什么?

    最后我也沒問清楚他們業務存啥(推測是這塊業務數據比較機密),但確實業務本身對可靠性要求非常高,開源 Redis 自身的可靠性無法滿足他們的要求,最終該用戶選擇使用 GaussDB(for Redis)數據庫,當前
    的頭像 發表于 03-28 22:11 ?745次閱讀
    選擇 KV <b class='flag-5'>數據庫</b>最重要的是什么?
    金冠百家乐官网的玩法技巧和规则 | 百家乐官网登封代理| 百家乐的庄闲概率| 澳门美高梅| 百家乐作弊视频| 真人百家乐官网打法| 百家乐发牌靴遥控| 网络百家乐官网投注| 太阳城娱乐网88| 巨星百家乐官网的玩法技巧和规则 | 玩百家乐官网输澳门百家乐官网现场 | 在线百家乐官网代理| 什么是百家乐平注法| 百家乐官网博彩资讯论坛| 大发888游戏充值50| 百家乐官网画面| 澳门博彩在线| 真钱百家乐注册送| 百家乐官网的庄闲概率| 大发888扑克官方下载| 7月24日风水| 婺源县| 百家乐是个什么样的游戏| 百家乐官网西园二手房| 威尼斯人娱乐城备用地址| 百家乐官网技巧开户网址| 百家乐官网赌术揭秘| 太阳城雨伞| 百家乐连赢的策略| 百家乐官网投注方法网| 金百家乐的玩法技巧和规则| 菲律宾百家乐官网娱乐| 定远县| 大众百家乐娱乐城| 百家乐类游戏平台| 澳门百家乐官网网上赌| 万博88| 加州百家乐的玩法技巧和规则| 法拉利百家乐官网的玩法技巧和规则 | 皇冠国际现金投注网| 大上海百家乐娱乐城|