本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
事务:让数据库操作更安全可靠
想象一下你在网上购物:点击"购买"后,系统需要同时完成扣款、减库存、生成订单三个操作。如果其中任何一个步骤失败,整个交易就应该取消,否则就会出现"钱扣了但没订单"的尴尬情况。这就是数据库事务要解决的核心问题。
事务是什么?
简单说,事务就是把多个数据库操作打包成一个不可分割的工作单元。就像网购的三个步骤必须"要么全成功,要么全失败",事务确保数据库始终保持正确状态。
四大特性(ACID)
- 原子性:像原子一样不可分割,所有操作要么全部完成,要么全部不做
- 一致性:保证数据始终符合预设规则(比如账户余额不能为负)
- 隔离性:多个事务同时进行时互不干扰
- 持久性:一旦提交,修改就永久保存
事务怎么用?
在Oracle中,你不需要专门"开始"一个事务。当你执行第一条修改数据的SQL(比如UPDATE、INSERT)时,事务就自动开始了。
关键操作命令
- 提交(COMMIT):确认所有修改,让更改永久生效
- 可以直接写COMMIT,或者完整写法COMMIT WORK
- 就像网购最后点"确认支付",钱才真正划走
- 回滚(ROLLBACK):取消所有未提交的修改
- 简单写ROLLBACK或ROLLBACK WORK都可以
- 相当于网购时点了"取消订单"
- 保存点(SAVEPOINT):给事务设置"里程碑"
- 可以在事务中设置多个保存点
- 比如先更新商品价格(设置保存点A),再修改库存,如果库存修改失败可以只回滚到A点
- 回滚到保存点:
- 用ROLLBACK TO 保存点名回到指定位置
- 就像游戏存档,可以回到某个检查点重新开始
- 设置事务属性(SET TRANSACTION):
- 可以调整事务的隔离级别(决定事务之间能看到对方多少修改)
- 设置事务为只读模式等
重要提醒
- 一定要显式结束事务:要么COMMIT,要么ROLLBACK。如果不明确结束:
- 在SQL*Plus里退出会默认提交
- 在某些程序里退出会默认回滚
- 这种隐式行为可能随版本变化,所以最好自己明确控制
- 注意特殊回滚:
- 普通ROLLBACK会结束整个事务
- 但ROLLBACK TO SAVEPOINT不会结束事务,只是回到某个中间点
实际应用场景
假设银行转账:
- 从A账户扣款
- 给B账户加款
- 记录交易日志
这三个操作应该放在一个事务里:
- 如果全部成功就COMMIT
- 如果任何一步失败就ROLLBACK,避免出现"A扣款了但B没收到"的情况
通过合理使用事务,可以确保数据库即使在系统崩溃、网络中断等意外情况下,也能保持数据的一致性和完整性。
------------------作者介绍-----------------------
 姓名:黄廷忠
 现就职:Oracle中国高级服务团队
 曾就职:OceanBase、云和恩墨、东方龙马等                 
 
 
                     
            
        













 
                    

 
                 
                    