Oracle数据库数据编程SQL<4.1 事务(会面试的哦)>

事务是 Oracle 数据库中最基本的工作单元,它代表一组必须全部成功或全部失败的 SQL 语句。下面我将详细讲解 Oracle 中的事务概念、特性、控制和管理。

目录

一、事务的基本概念

二、事务的特性(ACID)

1、原子性(Atomicity):

2、一致性(Consistency):

3、隔离性(Isolation):

4、持久性(Durability):

三、Oracle 事务控制语句

1. COMMIT:

2. ROLLBACK:

3. SAVEPOINT:

4. SET TRANSACTION:

四、Oracle 事务的生命周期

1. 开始事务: 

2. 执行事务:

3. 结束事务:

五、事务隔离级别 

六、分布式事务

七、事务监控

1. 可以通过以下数据字典视图监控事务:

2. 查询示例: 

八、事务最佳实践

九、示例 


一、事务的基本概念

事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

二、事务的特性(ACID)

Oracle 事务遵循标准的 ACID 特性:

1、原子性(Atomicity)

事务中的所有操作要么全部完成,要么全部不完成;事务包含的所有操作要么成功要么失败回滚。成功必须要全应用到数据库,失败则不会对数据库不会产生影响

2、一致性(Consistency)

事务执行前后,数据库从一个一致状态变为另一个一致状态

3、隔离性(Isolation)

一个事务的执行不应影响其他事务;当多个用户并发使用数据库时,数据库为每个用户开启的事务不被其他事务的操作所干扰,多个并发事务之间相互隔离的

4、持久性(Durability)

一旦事务提交,其结果就是永久性的;一个事务一旦被提交,那么对数据库的改变是永久性的。即便在数据库系统遇到故障的情况下也不会丢失事务的操作

三、Oracle 事务控制语句

Oracle 提供了以下事务控制语句:

1. COMMIT:

 提交事务,使事务的修改永久生效

COMMIT;

2. ROLLBACK

回滚事务,撤销事务中的所有修改

ROLLBACK;

3. SAVEPOINT

 在事务中设置保存点,可以回滚到特定点

SAVEPOINT savepoint_name;
ROLLBACK TO savepoint_name;

4. SET TRANSACTION

设置事务属性

SET TRANSACTION READ ONLY;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

四、Oracle 事务的生命周期

1. 开始事务: 

当执行第一条 DML(INSERT, UPDATE, DELETE, MERGE)语句时,事务自动开始

2. 执行事务

执行一系列 SQL 语句

3. 结束事务

  • 提交(COMMIT):永久保存更改

  • 回滚(ROLLBACK):撤销所有更改

  • 隐式提交:执行 DDL 语句或正常断开连接时

  • 隐式回滚:系统崩溃或会话异常终止时

五、事务隔离级别 

Oracle 支持以下隔离级别:

  • READ COMMITTED(默认级别):只能读取已提交的数据
  • SERIALIZABLE:事务看到的数据就像没有其他并发事务一样
  • READ ONLY:只读事务,不能执行任何 DML 操作

设置方法:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION READ ONLY;

六、分布式事务

Oracle 支持跨多个数据库的分布式事务:

COMMIT FORCE 'transaction_id';  -- 手动提交悬而未决的分布式事务
ROLLBACK FORCE 'transaction_id'; -- 手动回滚悬而未决的分布式事务

七、事务监控

1. 可以通过以下数据字典视图监控事务:

  • V$TRANSACTION:当前活动事务信息
  • DBA_TRANSACTIONS:分布式事务信息
  • V$SESSION:会话信息,包括事务状态

2. 查询示例: 

SELECT s.sid, s.serial#, s.username, t.start_time, t.status
FROM v$session s JOIN v$transaction t ON s.saddr = t.ses_addr;

八、事务最佳实践

  1. 尽量保持事务短小精悍
  2. 避免在事务中与用户交互
  3. 合理使用保存点处理复杂事务
  4. 在高并发环境中选择合适的隔离级别
  5. 定期监控长时间运行的事务

九、示例 

-- 开始事务(隐式)
UPDATE accounts SET balance = balance - 1000 WHERE account_id = 101;
SAVEPOINT after_withdrawal;

UPDATE accounts SET balance = balance + 1000 WHERE account_id = 202;
-- 假设这里检查到错误
ROLLBACK TO after_withdrawal;

-- 或者提交
COMMIT;

通过以上内容,您应该对 Oracle 中的事务有了全面的了解。事务是保证数据一致性和完整性的关键机制,合理使用事务对于开发可靠的数据库应用至关重要。

你可能感兴趣的:(Oracle,数据库,oracle,sql)