读书笔记:事务:让数据库操作更安全可靠
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《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、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

浙公网安备 33010602011771号