首页 > 数据库 >数据库事务

数据库事务

时间:2023-02-09 10:35:05浏览次数:40  
标签:转账 事务 账户 数据库 一致性 100

什么是事务?

转账是生活中常见的操作,比如从A账户转账100元到B账号。站在用户角度而言,这是一个逻辑上的单一操作,然而在数据库系统中,至少会分成两个步骤来完成:

  • 1.将A账户的金额减少100元。
  • 2.将B账户的金额增加100元。

在这个过程中可能会出现以下问题:

  1. 转账操作的第一步执行成功,A账户上的钱减少了100元,但是第二步执行失败或者未执行便发生系统崩溃,导致B账户并没有相应增加100元。
  2. 转账操作刚完成就发生系统崩溃,系统重启恢复时丢失了崩溃前的转账记录。
  3. 同时又另一个用户转账给B账户,由于同时对B账户进行操作,导致B账户金额出现异常。

为了便于解决这些问题,需要引入数据库事务的概念。

 

事务机制可以确保数据一致性。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(Atomicity):事务中的所有操作作为一个整体像原子一样不可分割,要么全部成功,要么全部失败。(事务中包括的诸操作要么都做,要么都不做) 

一致性(Consistency):事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。一致性状态是指:1.系统的状态满足数据的完整性约束(主码,参照完整性,check约束等) ;2.系统的状态反应数据库本应描述的现实世界的真实状态,比如转账前后两个账户的金额总和应该保持不变。

隔离性(Isolation):并发执行的事务不会相互影响,其对数据库的影响和它们串行执行时一样。比如多个用户同时往一个账户转账,最后账户的结果应该和他们按先后次序转账的结果一样。

持久性(Durability):事务一旦提交,其对数据库的更新就是持久的。任何事务或系统故障都不会导致数据丢失。

 

在事务的ACID特性中,即一致性是事务的根本追求,而对数据一致性的破坏主要来自两个方面。

# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 向数据库提交
    db.commit()
except:
    # 发生错误时回滚
    db.rollback()

对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。

 commit() 方法提交游标的所有更新操作, rollback() 方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

 

 

 

 

 

标签:转账,事务,账户,数据库,一致性,100
From: https://www.cnblogs.com/hls-code/p/17104344.html

相关文章

  • 主流数据库产品高可用性对比
    1.openGauss主备HA主备复制采用WAL日志复制技术,支持级联备库,目前支持一主八备规模,支持同步复制、异步复制,支持最大可用模式,支持switchover、failover操作。Switchover:主......
  • mysql数据库修改密码的几种方法
    目录MYSQL修改用户密码updatesetgrantmysqladmin在日常使用mysql数据库的时候,我们有修改mysql数据库密码的需求。以下介绍四种修改mysql数据库密码的方法。MYSQL修改用......
  • Mybatis数据库批量操作
     1:新增首先,Mysql插入一条记录返回主键对Mybatis版本要求低,而批量插入返回带主键的,需要升级到3.3.1以及以上的版本。 ​1.1:Mysql上图需要注意加入useGenerate......
  • Avalonia中使用EF增删改查DM数据库
    达梦客户端下载地址选择X86平台#下载文件dm8_20220714_x86_win_64_ent.zipdocker方式安装数据库服务dm-docker安装大小写问题#下载文件dm8_20220822_rev166351_......
  • 云数据库有哪些优势
    一,是更高的灵活性和可扩展性。   利用云计算池化资源的天然优势,云数据库可以提供更好的弹性,利于企业进行存储和计算资源的独立扩缩容,按需开通、快速部署,使资源得到最......
  • MySQL 定时备份数据库
    在操作数据过程中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库。本篇文章主要讲述了几种方法进行 MySQL定时备份数据库。一.mysqldump命令备......
  • 数据库基础操作 - 4
    6、事物6.1、什么是事物要么都成功,要么都失败一一一一一1、SQL执行A给B转账A1000-->200B2002、SQL执行B收到A的钱A800B400一一一一一将一组SQL放......
  • 利用AutoUpgrade工具升级数据库
    0.当升级到12cR2及以上的版本时,可以使用AutoUpgrade工具来完成升级工作。具体可以参考MOS文档AutoUpgradeTool(DocID2485457.1)。在本示例中,源数据库的版本为:11.2.0.4......
  • Spring声明式事务的工作原理
    Spring事务管理Java后端项目开发中都会用到的一个技术点,每个Java工程师都必须精通。Spring事务管理可以分为两类:声明式事务管理编程式事务管理声明式事务管理只需要......
  • 程序员必备的数据库知识 2:Join 算法
    前言连接(Join)是关系数据库重要特性,它和事务常被作为数据库与文件系统的两个重要区别项。程序员江湖一直流传着某某baba的神秘开发宝典,其中数据库部分有重要一条避免过多表......