暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

人大金仓数据库KingbaseES事务介绍

数据猿 2023-08-31
393

关键字:

KingbaseES、事务

1.什么是事务?

事务是一组数据库操作语句的逻辑单元,可以确保这组操作要么全部成功执行,要么全部回滚到起始状态,以保持数据的一致性和完整性。

2.事务的属性-ACID

(1)原子性(Atomicity)–事务的原子性强调了一个事务是一个逻辑工作单元,是一个整体,是不可分割的。一个事务所包含的操作要么全部做,要不全部不做。

(2)一致性(Consistency)-一个事务执行一项数据库操作,事务使数据库从一种一致性的状态变换成另一种一致性状态。

(3)隔离性(Isolation)-在事务未提交前,它操作的数据,对其他用户不可见。

(4)持久性(Durability)-一旦事务成功完成,该事务对数据库所施加的所有更新都是永久的。

3.数据库事务的控制语句

BEGIN…END:
COMMIT:
ROLLBACK:
SAVEPOINT:
SET TRANSACTION:

3.1事务的回滚

(1)显示回滚

显示回滚:通过编程或手动执行ROLLBACK语句来回滚事务,如果需要回滚,则执行ROLLBACK语句将事务中已执行的操作撤销,并将数据库返回到事务开始前的状态。

\set SQLTERM / 
DECLARE 
BEGIN 
IF condition THEN;
ROLLBACK;
ELSE 
  COMMIT;
END IF;  
END; 
/

(2)隐式回滚

隐式回滚:是有数据库管理系统自动执行的回滚操作,当发生以下情况时,隐式回滚会自动回滚当前事务:

  • 当前事务所在的会话意外断开或关闭
  • 当前事务中执行的SQL语句遇到严重的错误或异常。
  • 数据库管理系统检测到死锁情况
  • 当前事务使用的资源超过了系统限制

4.事务处理的应用

4.1 异常处理

使用异常处理程序来捕获和处理在事务执行过程中发生的错误。

  • 使用EXCEPTION关键字来定义异常处理程序,以便对特定类型的异常进行处理
  • 可以使用RAISE语句来显示引发异常

4.2并发控制

(1)使用事务隔离级别:读未提交(READ UNCOMMITTED),读已提交(READ COMMITTED),可重复读(REPEATABLE READ)和串行化(SERIALIZABLE);通过设置事务隔离级别,可以确保每个事务对象的读取和修改操作按照指定的规则进行,并避免脏读、不可重复读和幻读等并发情况。

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN
UPDATE INTO table_name(column1,column2)VALUES(value1,value2);
DELETE FROM table_name WHERE condition;
COMMIT;
EXCEPTION
WHEN OTHERS THENROLLBACK;
END;

(2)使用排他锁:可以使用排他锁来限制对某个数据对象的并发访问。事务在访问该数据对象之前,获取排他锁并持有,其他事务需要等待锁的释放才能继续执行。

BEGIN
LOCK TABLE table_name IN EXCLUSIVE MODE;
UPDATE INTO table_name(column1,column2)VALUES(value1,value2);
DELETE FROM table_name WHERE condition;
COMMIT;
EXCEPTION
WHEN OTHERS THENROLLBACK;
END;

4.3 批量操作

DECLARE
  TYPE emp_cursor_tyep IS REF CURSOR;
  emp_cursor emp_cursor_tyep;
  emp_record employees%ROWTYPE;
  emp_salary NUMBER(7,2);
BEGIN
  OPEN emp_cursor FOR
  SELECT * FROM employees WHERE department_id =10;
  LOOP
  FETCH emp_cursor INTO emp_record;
  EXIT WHEN emp_cursor%NOTFOUND;
  emp_salary ;= emp_record.salary *1.1;
  UPDATE employees SET salary = emp_salary WHERE employee_id = emp_record.employee_id;
  END LOOP;
  CLOSE emp_cursor;
  COMMIT;
END;

4.4 事务嵌套

CREATE OR REPLACE PROCEDURE outer_transaction IS
BEGIN
 SAVEPOINT outer_savepoint;
 inner_transaction;
 EXCEPTION 
 WHEN OTHERS THEN
 END;
 CREATE OR REPLACE PROCEDURE inner_transaction IS
 BEGIN
SAVEPOINT inner_savepoint;
 EXCEPTION 
 WHEN OTHERS THEN
 rollback to inner_savepoint;
 RAISE;
 END;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论