欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle笔记(十一):事务与锁 (Transaction Processing & Lock)

程序员文章站 2024-01-14 09:02:34
...

一、事务处理概述

        事务(Transaction)是Oracle中的基本工作单元,是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

        属性: 一个工作单元必有四个属性ACID

  • 原子性:(Atomic) 事务必须是原子工作单元;对于数据修改,要么全部执行,要么全都不执行。
  • 一致性:(Consistent) 事务完成时,必须所有的数据都保持一致状态,结束时,结构都必须正确。
  • 隔离性:(Isolated) 由并发事务做的修改必须与其他并发事务所做的修改隔离。不存在中间状态。
  • 持久性:(Durable) 事务完成后,对系统影响永久,即使系统故障,修改也会保持。

       

二、开启事务

        当执行一组 SQL 语句的时候,Oracle 会自动帮我们开启一个事务。

        通过 SET TRANSACTION 语句手动开启一个事务

BEGIN
 -- 手动开启事务 tran
SET TRANSACTION NAME 'tran';
--SET TRANSACTION READ WRITE NAME 'tran'; -- 同上语句,表明它是一个读写事务
INSERT INTO tb_test VALUES ('Scott');
COMMIT; -- 提交
 
END;
/

        SET TRANSACTION 还有许多其他参数,可以对事务进行更精准的控制。

-- 我们可以设置事务为只读事务,这在生成报告,账单等时特别有用
SET TRANSACTION READ ONLY NAME 'tran';
SELECT * FROM TEST;
COMMIT; -- 提交事务,只读事务也需要提交的哦
 
 
-- 我们还可以指定事务的隔离级别
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE NAME 'tran';
-- SET TRANSACTION ISOLATION LEVEL READ COMMITTED NAME 'tran'; -- 事务默认的隔离级别是 READ COMMITTED
SELECT * FROM TEST;
COMMIT; -- 提交事务
 
-- 我们还可以指定当事务失败时,将事务回滚到指定的回滚段
-- Oracle 不推荐我们这样做,尽量使用自动回滚
SET TRANSACTION USE ROLLBACK SEGMENT test NAME 'tran';
INSERT INTO TEST VALUES ('Scott');
ROLLBACK; -- 回滚事务

 

三、保存点的运用

回滚点
Oracle 使用 SAVEPOINT 来设置回滚点。

INSERT INTO TEST VALUES ('Scott');
SAVEPOINT sp1;
INSERT INTO TEST VALUES ('Tom');
ROLLBACK TO SAVEPOINT sp1; -- 回滚到sp1,'Tom' 记录会被回滚
COMMIT;

文章部分代码源于:https://blog.csdn.net/shangboerds/article/details/43282115 Oracle精粹。

四、锁概述

五、锁的分类

 

 

 

 

 

 

六、案例