首页 > 其他分享 >openGauss学习笔记-37 openGauss 高级数据管理-事务

openGauss学习笔记-37 openGauss 高级数据管理-事务

时间:2023-08-11 20:03:31浏览次数:299  
标签:customer 事务 TRANSACTION READ 37 数据管理 提交 openGauss

openGauss学习笔记-37 openGauss 高级数据管理-事务

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。openGauss数据库支持的事务控制命令有启动、设置、提交、回滚事务。openGauss数据库支持的事务隔离级别有读已提交和可重复读。

  • READ COMMITTED:读已提交隔离级别,事务只能读到已提交的数据而不会读到未提交的数据,这是缺省值。

    实际上,SELECT查询会查看到在查询开始运行的瞬间该数据库的一个快照。不过,SELECT能查看到其自身所在事务中先前更新的执行结果。即使先前更新尚未提交。请注意,在同一个事务里两个相邻的SELECT命令可能会查看到不同的快照,因为其它事务会在第一个SELECT执行期间提交。

    因为在读已提交模式里,每个新的命令都是从一个新的快照开始的,而这个快照包含所有到该时刻为止已提交的事务,因此同一事务中后面的命令将看到任何已提交的其它事务的效果。这里关心的问题是在单个命令里是否看到数据库里绝对一致的视图。

    读已提交模式提供的部分事务隔离对于许多应用而言是足够的,并且这个模式速度快,使用简单。不过,对于做复杂查询和更新的应用,可能需要保证数据库有比读已提交模式更加严格的一致性视图。

  • REPEATABLE READ:事务可重复读隔离级别,事务只能读到事务开始之前已提交的数据,不能读到未提交的数据以及事务执行期间其它并发事务提交的修改(但是,查询能查看到自身所在事务中先前更新的执行结果,即使先前更新尚未提交)。这个级别和读已提交是不一样的,因为可重复读事务中的查询看到的是事务开始时的快照,不是该事务内部当前查询开始时的快照,就是说,单个事务内部的select命令总是查看到同样的数据,查看不到自身事务开始之后其他并发事务修改后提交的数据。使用该级别的应用必须准备好重试事务,因为可能会发生串行化失败。

37.1 语法格式

  • 启动事务

    使用BEGIN语法启动事务。

    BEGIN [ WORK | TRANSACTION ]
      [ 
        { 
           ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE | REPEATABLE READ }
           | { READ WRITE | READ ONLY }
          } [, ...] 
      ];
    

    使用START TRANSACTION启动事务。

    START TRANSACTION
      [ 
        { 
           ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE | REPEATABLE READ }
           | { READ WRITE | READ ONLY }
         } [, ...] 
      ];
    
  • 设置事务特性

    用户可以使用SET TRANSACTION或语法设置事务的隔离级别、读写模式。

    { SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION }
      { ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE | REPEATABLE READ }
      | { READ WRITE | READ ONLY } } [, ...];
    
  • 提交事务

    用户可以使用COMMIT或者END完成提交事务的功能,即提交事务的所有操作。

    { COMMIT | END } [ WORK | TRANSACTION ] ;
    
  • 回滚事务

    回滚是在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销。

    ROLLBACK [ WORK | TRANSACTION ];
    

37.2 参数说明

  • WORK | TRANSACTION

    BEGIN格式中的可选关键字,没有实际作用。

  • ISOLATION LEVEL

    指定事务隔离级别,它决定当一个事务中存在其他并发运行事务时它能够看到什么数据。

    img 说明: 在事务中第一个数据修改语句(SELECT, INSERT,DELETE,UPDATE,FETCH,COPY)执行之后,事务隔离级别就不能再次设置。

    取值范围:

    • READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。
    • REPEATABLE READ: 可重复读隔离级别,仅仅看到事务开始之前提交的数据,它不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。
    • SERIALIZABLE:目前功能上不支持此隔离级别,等价于REPEATABLE READ。
  • READ WRITE | READ ONLY

    指定事务访问模式(读/写或者只读)。

  • LOCAL

    声明该命令只在当前事务中有效。

  • SESSION

    声明这个命令只对当前会话起作用。

    取值范围:字符串,要符合标识符的命名规范。

  • COMMIT | END

    提交当前事务,让所有当前事务的更改为其他事务可见。

37.3 示例

假设存在表customer_t1 ,数据内容如下:

openGauss=# SELECT * FROM customer_t1;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          3769 | hello         | Grace        |             |   1000
          3769 |               | Grace        |             |
          3769 | hello         |              |             |
          6885 | maps          | Joes         |             |   2200
          4321 | tpcds         | Lily         |             |   3000
          9527 | world         | James        |             |   5000
(6 rows)

开启一个事务,并从表中删除amount为1000的行,最后使用ROLLBACK命令撤销所有的更改。

openGauss=# START TRANSACTION;
openGauss=# DELETE FROM customer_t1 WHERE amount = 1000;
openGauss=# ROLLBACK;

查看表customer_t1,amount为1000的行仍然存在。

openGauss=# select * from customer_t1;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          3769 | hello         | Grace        |             |   1000
          3769 |               | Grace        |             |
          3769 | hello         |              |             |
          6885 | maps          | Joes         |             |   2200
          4321 | tpcds         | Lily         |             |   3000
          9527 | world         | James        |             |   5000
(6 rows)

开始另一个事务,从表中删除amount=1000的记录,最后使用COMMIT命令提交所有的更改。

--开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。
openGauss=# BEGIN;
openGauss=# DELETE FROM customer_t1 WHERE amount = 1000;
openGauss=# COMMIT;

查询表customer_t1,amount=1000的记录已经被删除。

openGauss=# select * from customer_t1;
 c_customer_sk | c_customer_id | c_first_name | c_last_name | amount
---------------+---------------+--------------+-------------+--------
          3769 |               | Grace        |             |
          3769 | hello         |              |             |
          6885 | maps          | Joes         |             |   2200
          4321 | tpcds         | Lily         |             |   3000
          9527 | world         | James        |             |   5000
(5 rows)

标签:customer,事务,TRANSACTION,READ,37,数据管理,提交,openGauss
From: https://blog.51cto.com/shuchaoyang/7051158

相关文章

  • ARC137D Prefix XORs 题解
    这里的所有下标从\(\bm0\)开始。我们考察一下每次操作后的数列\(a\)会是什么样的。这里用\(a_i\)前面的系数\(x\)表示\(a_i\)贡献了\(x\)次,\(+\)表示异或。\[\begin{matrix}k=0&a_0&a_1&a_2&\cdots&a_{n-1}\\k=1&a_0&a_0+a_1&a_0+a_1+a_2&\cdots&......
  • 微软ADRMS权限服务批量加密解密工具,需要可加V:Aixi9837
    ADRMS是一种信息保护技术,可帮助保护数字信息免遭未经授权的使用。通过启用权限的应用程序,内容所有者将能够定义可以对内容进行打开、修改、打印、转发或执行其他操作的人员。该工具可以实现Word、Excel、PowerPoint不同版本文件的加解密处理。支持在原权限基础上增加权限,支持自......
  • i5 13600kf和i7 13700kf差距 i513600kf和i713700kf选哪个好
    i5-13600KF采用10工艺14核20线程,睿频5.1GHz,三级缓存24.00MB基础功耗125W,最大睿频功耗181WF组装电脑选i513600kf还是713700kf怎么搭配更合适这些点很重要 http://www.adiannao.cn/dui7-13700KF采用10nm工艺16核24线程,睿频5.4GHz,三级缓存30MB基础功耗125W,最......
  • P1137 旅行计划
    \(P1137\)旅行计划这个题,我们根据题意是不是知道这个是一个\(DAG\),我们需要计算的是以城市\(i\)为终点最多能够游览多少个城市;这个是不是也是在一个拓扑序上做一个简单的\(dp\)就行了,我们记录一下最大值即可;#include<bits/stdc++.h>usingnamespacestd;constintN=1......
  • 7937: 良好的感觉 单调栈
    描述 kkk做了一个人体感觉分析器。每一天,人都有一个感受值Ai,Ai 越大,表示人感觉越舒适。在一段时间[i,j] 内,人的舒适程度定义为[i,j] 中最不舒服的那一天的感受值×[i,j]中每一天感受值的和。现在给出kkk在连续N 天中的感受值,请问,在哪一段时间,kkk感觉最舒适? ......
  • 【我和openGauss的故事】Navicat连接openGauss_5.0.0 企业版数据库
    【我和openGauss的故事】Navicat连接openGauss_5.0.0企业版数据库心有阳光[openGauss](javascript:void(0);)2023-08-0316:49发表于四川收录于合集#第六届openGauss技术文章征集初审合格文章62个引言在当今互联网时代,数据成为企业和组织的重要资产。为了更好地管理和分析数据,......
  • 【我和openGauss的故事】openGauss 主备架构及同步复制模式理论学习与验证测试
    【我和openGauss的故事】openGauss主备架构及同步复制模式理论学习与验证测试尚雷[openGauss](javascript:void(0);)2023-08-0818:00发表于四川收录于合集#第六届openGauss技术文章征集初审合格文章62个备注:非常感谢在这研究本文相关内容中openGauss数据库官网行尘(张旭博)......
  • 元数据管理等相关问题
    http://cio.csai.cn/bi/200610191143031431.htm希赛网元数据管理技术及应用现状作者:佚名2006年10月19日朋友老朱在最近惊喜地发现,在营业部的每周例会上,原先各部门针对每日用户数的争吵声,现在逐渐销声匿迹了。原来,老朱所在的这家电信运营商,最近刚刚验收并启用了一个元数据管理......
  • openGauss学习笔记-36 openGauss 高级数据管理-TRUNCATE TABLE语句
    openGauss学习笔记-36openGauss高级数据管理-TRUNCATETABLE语句清理表数据,TRUNCATETABLE用于删除表的数据,但不删除表结构。也可以用DROPTABLE删除表,但是这个命令会连表的结构一起删除,如果想插入数据,需要重新建立这张表。它和在目标表上进行无条件的DELETE有同样的效果,但由于......
  • 英伟达市值一夜蒸发3700亿元
    英伟达的辉煌历程英伟达(NVIDIA)是全球领先的人工智能计算公司,成立于1993年。多年来,该公司通过不断的创新和技术突破,成功地在图形处理器市场上占据了主导地位。其产品和技术广泛应用于游戏、数据中心、人工智能以及自动驾驶等领域,而且表现出了强大的增长势头。料想不到的市值蒸发......