关键字:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




