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精粹。
四、锁概述
五、锁的分类
六、案例
下一篇: 什么是Spring事务