读书笔记:事务:让数据库操作更安全可靠

我们的文章会在微信公众号IT民工的龙马人生博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

事务:让数据库操作更安全可靠

想象一下你在网上购物:点击"购买"后,系统需要同时完成扣款、减库存、生成订单三个操作。如果其中任何一个步骤失败,整个交易就应该取消,否则就会出现"钱扣了但没订单"的尴尬情况。这就是数据库事务要解决的核心问题。

事务是什么?

简单说,事务就是把多个数据库操作打包成一个不可分割的工作单元。就像网购的三个步骤必须"要么全成功,要么全失败",事务确保数据库始终保持正确状态。

四大特性(ACID)

  1. 原子性:像原子一样不可分割,所有操作要么全部完成,要么全部不做
  2. 一致性:保证数据始终符合预设规则(比如账户余额不能为负)
  3. 隔离性:多个事务同时进行时互不干扰
  4. 持久性:一旦提交,修改就永久保存

事务怎么用?

在Oracle中,你不需要专门"开始"一个事务。当你执行第一条修改数据的SQL(比如UPDATE、INSERT)时,事务就自动开始了。

关键操作命令

  1. 提交(COMMIT):确认所有修改,让更改永久生效

    • 可以直接写COMMIT,或者完整写法COMMIT WORK
    • 就像网购最后点"确认支付",钱才真正划走
  2. 回滚(ROLLBACK):取消所有未提交的修改

    • 简单写ROLLBACKROLLBACK WORK都可以
    • 相当于网购时点了"取消订单"
  3. 保存点(SAVEPOINT):给事务设置"里程碑"

    • 可以在事务中设置多个保存点
    • 比如先更新商品价格(设置保存点A),再修改库存,如果库存修改失败可以只回滚到A点
  4. 回滚到保存点

    • ROLLBACK TO 保存点名回到指定位置
    • 就像游戏存档,可以回到某个检查点重新开始
  5. 设置事务属性(SET TRANSACTION)

    • 可以调整事务的隔离级别(决定事务之间能看到对方多少修改)
    • 设置事务为只读模式等

重要提醒

  1. 一定要显式结束事务:要么COMMIT,要么ROLLBACK。如果不明确结束:

    • 在SQL*Plus里退出会默认提交
    • 在某些程序里退出会默认回滚
    • 这种隐式行为可能随版本变化,所以最好自己明确控制
  2. 注意特殊回滚

    • 普通ROLLBACK会结束整个事务
    • ROLLBACK TO SAVEPOINT不会结束事务,只是回到某个中间点

实际应用场景

假设银行转账:

  1. 从A账户扣款
  2. 给B账户加款
  3. 记录交易日志

这三个操作应该放在一个事务里:

  • 如果全部成功就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)

posted @ 2025-08-07 17:20  认真就输  阅读(6)  评论(0)    收藏  举报