`
aladdin_leon
  • 浏览: 118528 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

数据库事务备忘录之一

阅读更多
      事务是指一组相互依赖的操作行为,举一个举得不能再被举的例子就是银行交易,当然还有其他像网上购物,电子货币交易等等,事务的成功取决于这些相互依赖的操作行为是否都能执行成功,只要有一个操作行为失败,就意味着整个事务失败。例如:bill和tom的QQ账户的QQ币点数都是500点,现在bill把100点QQ币转到tom的QQ币账号上,这个事务就包含以下操作行为:
       ------ bill的QQ币账号减少100点
       ------ tom的QQ币账号增加100点
      这两个操作作为一个不可分割的工作单元,假如仅仅第一步操作执行成功,但是第二步执行失败,那么整个事务失败,回滚到事务开始前的状态,bill和tom的QQ账户的QQ币点数还依然是500点。显然如果没有事务的概念,那么就会造成bill的100点QQ币神秘的消失了...
      数据库的事务就是上面提到的事务在RDB中的实现,它由一组在业务逻辑上相互依赖的SQL语句组成,假设以上QQ账户在DB中的qq_account表结构如下:
              ------------------------------------------------   
                      id           name         balance
              ------------------------------------------------
                      1             bill                500
                      2            tom               500
              ------------------------------------------------
      以上事务的SQL可以表示为:
           UPDATE qq_account SET balance=400 WHERE id=1;
           UPDATE qq_account SET balance=600 WHERE id=2;
     只要两条SQL语句有一个执行失败,整个事务就失败,qq_account表中的数据就必须回退到最初的状态,而不会被更新。
     数据库事务必须具备ACID特性,具体的含义如下:
        ----- Atomic(原子性):只整个数据库事务是不可分割的工作单元。只有事务中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。通过上面的例子我们已经看得很清楚了。
        ----- Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如,不管上面的例子里面QQ币转账的事务成功还是失败,都应该保证事务结束后qq_account表中bill和tom的QQ币总额为1000点。
        ----- Isolation(隔离性):指的是在并发的环境之中,当不同的事务同时操作相同的数据时,每个事务都有各自的完整数据空间,这里涉及的事情就多了,我想在后面单独总结成一篇文章。
        ----- Durability(持久性):指的是只有事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库后,数据库还能恢复到事务成功结束时的状态。
      事务的ACID只是一个抽象的概念,具体是由RDBMS来实现的。数据库管理系统用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生了错误,就可以根据日志,撤销事务对数据库已经做的更新,使数据库回退到执行事务前的初始状态。所以不论讲到什么数据库,都会有专门的一章来讲日志,呵呵,终于从本质上明白了日志的作用。
      至于事务的隔离性,RDBMS则是采用锁机制来实现的。当多个事务同时更新数据库中的临界数据时,只允许持有锁的事务才能更新该数据,其他事务必须等待,直到前一个数据释放了锁,其他事务才可能有机会来进行更新,这和我们在OS中学的进程的并发时所谈到的锁机制原理差不多。
      手指有一点敲麻了,今天就写到这里了...
分享到:
评论

相关推荐

    C#备忘录数据库代码

    - 对于多个操作需要一起成功或一起失败的情况,可以使用数据库事务来确保数据一致性。 10. 性能优化: - 通过合理设计数据库结构、索引和查询语句,以及适当使用缓存和批处理,可以提高应用程序的性能。 综上所...

    oracle 数据库工作备忘录

    Oracle数据库工作备忘录 Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,由甲骨文公司(Oracle Corporation)开发。它以其高效、稳定和强大的功能著称,被广泛应用于金融、电信、政府和各类企业的...

    android 备忘录 数据库存储到本地 定时提醒

    总结,创建一个具有数据库存储和定时提醒功能的Android备忘录应用涉及的主要技术点有:SQLite数据库的使用、数据模型设计、SQLite数据库操作、BroadcastReceiver和AlarmManager的配合以实现定时提醒,以及可选的...

    c# 备忘录源码(含数据库)

    在这个“C# 备忘录源码(含数据库)”项目中,我们将深入探讨如何利用C#实现一个功能完备的备忘录应用程序,并结合数据库进行数据存储和管理。该程序具备添加、删除以及日历功能,为用户提供便捷的日常事务管理。 ...

    Android课程设计--便捷备忘录

    我们可以创建一个新的Activity来实现备忘录的主界面,其中包含一个列表展示所有备忘录条目,并提供一个添加按钮来启动新的编辑界面。 对于增、删、改、查操作,我们需要使用SQLite数据库来存储备忘录数据。SQLite是...

    备忘录,免费桌面备忘录,M备忘

    总的来说,"备忘录,免费桌面备忘录,M备忘"是一款结合了MFC的强大功能和ACCESS数据库的高效数据管理的桌面应用。它以其轻巧的体积、免费的特性以及可定制的源代码,为用户提供了便捷、可靠的备忘解决方案。通过这款...

    数据库Sqlite的备忘录

    7. 数据库事务: SQLite支持事务处理,可以确保数据的一致性和完整性。`BEGIN`, `COMMIT` 和 `ROLLBACK` 语句用于控制事务。例如,当执行一系列操作时,可以包裹在事务中,以确保它们要么全部成功,要么全部回滚: ...

    C#编写的备忘录

    本文将详细介绍一款由C#语言编写的Winform安装程序,它是一个功能完备的备忘录应用,能够帮助用户轻松管理日常事务,设定提醒,确保重要事项不会被遗漏。 C#,全称CSharp,是微软公司推出的一种面向对象的编程语言...

    java+Mysql开发的备忘录系统

    在本项目中,我们讨论的是一个使用Java编程语言与MySQL数据库进行开发的备忘录系统。这个系统的主要目标是提供一套便捷的工具,让用户能够轻松地管理他们的日常事务,包括创建、编辑、查找和删除备忘录。同时,系统...

    android 备忘录小程序

    在Android平台上开发备忘录小程序是一项常见的任务,它能够帮助用户方便地记录和管理日常事务。这个压缩包提供的工程实现了这样一个功能丰富的备忘录应用,包括侧滑删除、置顶操作以及图文并茂的记录方式。 1. **...

    02 as备忘录程序+源码+APK+数据库+移动终端期末大作业项目试验+备忘录大作业2024+JIE图

    该备忘录程序是一款简洁实用的应用,旨在帮助用户高效记录和管理日常事务。用户可以轻松创建、编辑和删除备忘录,支持设置提醒功能,以确保不会错过重要事项。应用界面直观,操作流畅,用户可以通过标签和分类功能对...

    一个简单的备忘录

    【标题】:“一个简单的备忘录” 在移动设备上,备忘录应用程序是日常生活中非常实用的工具,用于记录各种待办事项、想法或者提醒。本项目提供了一个详细的安卓备忘录源码实现,涵盖了核心功能如添加、删除、修改...

    手机备忘录程序

    【手机备忘录程序】是一种常见且实用的智能手机应用程序,主要功能是帮助用户记录日常生活、工作中的重要事项或想法,确保不会遗忘待办任务。它通常具有简洁的用户界面和高效的提醒机制,使得用户可以方便地创建、...

    桌面widget备忘录

    6. **SQLite数据库**: 对于支持多个备忘录,开发者可能需要建立一个本地SQLite数据库来存储各个备忘录条目,便于快速检索和编辑。 7. **UI设计与交互**: 设计简洁易用的备忘录小部件界面至关重要。这包括字体、颜色...

    SQLite的小例子--备忘录

    这个小例子——“SQLite的小例子--备忘录”旨在介绍如何在编程中使用SQLite来实现一个简单的备忘录功能。SQLite是开源的,不需要单独的服务进程,可以直接将数据存储在文件中,方便集成到各种应用程序中。 首先,...

    备忘录系统

    【备忘录系统】是一个由个人开发的软件应用,它提供了创建、管理和删除备忘录的基本功能,旨在帮助用户方便地记录和跟踪日常事务。这个系统可能是用VC(Visual C++)作为编程语言,结合SQL(Structured Query ...

    个人备忘录源码

    【个人备忘录源码】是一个专为个人设计的备忘录应用程序的源代码,它提供了记录、管理和检索日常事务的功能。源码的编写语言可能是Delphi,这是一款基于Object Pascal的集成开发环境,以其高效的编译器和丰富的组件...

    企业备忘录管理系统

    《企业备忘录管理系统》是基于Visual C++编程语言和SQL Server数据库技术开发的一款实用工具,旨在提升企业的信息管理效率。这款系统集成了多种功能,为企业的日常事务处理提供了便捷的解决方案。 首先,Visual C++...

    android 应用 源代码——备忘录

    在Android应用开发中,备忘录(Memo)通常是指一种帮助用户记录、管理和检索日常事务的应用。本资源包提供了一套完整的Android备忘录应用的源代码,这为开发者提供了学习和参考的宝贵材料。以下将详细介绍备忘录应用...

Global site tag (gtag.js) - Google Analytics