数据库原理实验(openGauss)事务与并发控制

Posted BkbK-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库原理实验(openGauss)事务与并发控制相关的知识,希望对你有一定的参考价值。

事务与并发控制

一、事务

(1)事务的ACID特性

  • 原子性(Atomicity):原子事务是一系列不可分割的数据库操作。在事务完成之后,这些操作要么全部发生,要么全部不发生。

  • 一致性(Consistency):事务结束后,数据库处于一致状态,保留数据完整性。

  • 隔离性(Isolation):事务之间不能相互干扰。

  • 持久性(Durability):即使发生崩溃和失败,成功完成(提交)的事务效果持久保存。

(2)事务管理

openGauss数据库支持的事务管理命令有启动、设置、提交、回滚事务。

  • 启动事务(START TRANSACTION | BEGIN)

    START TRANSACTION
     [ 	{ISOLATION LEVEL 
    	{READ COMMITTED | READ UNCOMMITTED  | SERIALIZABLE | REPEATABLE READ} | 
     	{READ WRITE | READ ONLY}} 
    	[, ...] ];
    
  • 设置事务(SET TRANSACTION)

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

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

    ROLLBACK [ WORK | TRANSACTION ];
    

(3)事务实例

1.未提交的事务

  • 启动事务

    START TRANSACTION;
    

    在这里插入图片描述

  • 插入数据

    INSERT INTO Students 
    VALUES ('201905001', 'BK','男', '2000-01-01','2019',' 计算机','CS');
    

    在这里插入图片描述

    SELECT * FROM Students;
    

    在这里插入图片描述

  • 回滚事务

    ROLLBACK;
    

    在这里插入图片描述

    SELECT * FROM Students;
    

    在这里插入图片描述

2.已提交的事务

  • 启动事务

    START TRANSACTION;
    

    在这里插入图片描述

  • 插入数据

    INSERT INTO Students 
    VALUES ('201905001', 'BK','男', '2000-01-01','2019',' 计算机','CS');
    

    在这里插入图片描述

  • 提交事务

    COMMIT TRANSACTION;
    

    在这里插入图片描述

    SELECT * FROM Students;
    

    在这里插入图片描述

二、并发控制

(1)加锁语法

LOCK [ TABLE ] {[ ONLY ] name [, ...]| {name [ * ]} [, ...]}
    [ IN {ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE} MODE ]
    [ NOWAIT ];

(2)加锁实例

  • 创建测试表

    CREATE TABLE TestLock(test CHAR(5));
    

    在这里插入图片描述

  • 开启事务

    START TRANSACTION;
    

    在这里插入图片描述

  • 加锁

    LOCK TestLock;
    

    在这里插入图片描述

  • 查看所有锁

    SELECT  * FROM pg_locks ;
    

    在这里插入图片描述

  • 提交事务

    COMMIT TRANSACTION;
    

    在这里插入图片描述

  • 再次查看所有锁

    SELECT  * FROM pg_locks ;
    

    在这里插入图片描述

以上是关于数据库原理实验(openGauss)事务与并发控制的主要内容,如果未能解决你的问题,请参考以下文章

数据库原理实验(openGauss)完整性控制

openGauss数据库源码解析系列文章—— 事务机制源码解析

数据库原理实验(openGauss)数据库的备份与恢复

数据库原理实验(openGauss)创建数据库表和索引

数据库原理实验(openGauss)实验报告

数据库原理实验(openGauss)金融场景化实验