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

MySQL数据库事务

时间:2023-04-19 18:26:42浏览次数:37  
标签:事务 读取 数据库 余额 提交 MySQL 解决

什么是数据库事务

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

数据库事务的四大特性

数据库事务的四大特性和程序事务相同,即ACID

  • A(Atomic)原子性
  • C(Consistency)一致性
  • I(Islation)隔离性
  • D(Durability)持久性

通过一个A给B转账的例子理解一下ACID的概念

关系型数据库中这个事务需要以下操作

  1. 读A余额,假设是1000
  2. 对A的余额扣减,假设需要给B转200,则1000-200=800
  3. 写回A余额,800
  4. 读B余额,假设也是1000
  5. 对A的余额增加,则1000+200=1200
  6. 写回B余额,1200
原子性

1-6的操作要么都执行,要么都回滚

一致性

转账前后AB账户总额不变

隔离性

A给B转帐,只要事务没提交,去查AB的余额都不会变化;A给B转帐不会影响C给B转帐

持久性

一旦转帐成功(事务提交),AB账户的余额将会真正改变

数据库事务的并发问题

事务在并发时可能产生的问题

更新丢失

一个事物的更新覆盖另一个事物的更新

脏读

读取了其他事物未提交的数据

不可重复读

事务读取记录时,其他事务修改了该记录,导致两次读取的数据不同

幻读

事务做范围查询时,其他事物新增了满足范围查询条件的记录,导致范围查询结果条数不一致

数据库事务的隔离级别

MySQL中事物的隔离级别由低到高有以下四个级别:

读未提交(read-uncommitted)(RU)

同一记录:事务写其他事务不能写,可以读取其他事务未提交的数据

读已提交(read-committed)(RC)

同一记录:事务写其他事务不能读写,事务可以读取其他事务已提交的数据

可重复读(repeatable-read)(RR)

同一记录:事务写时其他事务不能读写,事务读时其他事务不能写

串行化(Serializable)(S)

直接将事务串行执行

MySQL默认的隔离级别为RR,Oracle默认为RC

各个隔离级别能解决的问题如下表:
更新丢失 脏读 不可重复读 幻读
RU 解决 未解决 未解决 未解决
RC 解决 解决 未解决 未解决
RR 解决 解决 解决 未解决
S 解决 解决 解决 解决

标签:事务,读取,数据库,余额,提交,MySQL,解决
From: https://www.cnblogs.com/xxhahn/p/17334216.html

相关文章

  • 图数据库 NebulaGraph 的 Java 数据解析实践与指导
    如何快速、即时、符合直觉地去处理NebulaJavaClient中的数据解析?读这一篇就够了。图数据库NebulaGrpah的论坛和微信群里,有不少用户问及了Java客户端数据解析的问题。在本文教你一种简单的方式同返回结果交互,快速、即时地拿到解析数据。愉快、干净的Java交互环境本......
  • mysql备份脚本
    [root@node1scripts]#catmysql_bak.shBackup_Dir=/data/backup/mysql/dayuser=roothost=localhostpwd=rootif[!-d$Backup_Dir]thenmkdir-p$Backup_DirfiDB_Name=(information_schemaachievements_statistical_utf8mb4adv......
  • Python操作MySQL就是这么简单
    Python操作MySQL就是这么简单下载MySQL8.0安装MySQL8.0步骤2:选择安装类型步骤3:选择安装位置步骤4:配置MySQL8.0步骤5:安装MySQL8.0步骤6:完成安装启动MySQL8.0MySQL8.0的常用命令python的pymysql库操作方法安装pymysql库安装pymysql库连接到MySQL数据库......
  • Mysql操作多表查询的方法
    多表查询是指在关系型数据库中,通过同时查询多个数据表来检索相关数据的操作。这种查询方式通常用于需要在多个数据表中搜索和比较数据的情况,以获取更完整和准确的结果。在多表查询中,使用联接(join)操作将多个表连接在一起,并使用条件语句来指定要检索的数据。联接操作可以使用不同的方......
  • 缓存与数据库双写一致性几种策略分析
    作者:京东零售 于泷一、背景在高并发场景中,为防止大量请求直接访问数据库,缓解数据库压力,常用的方式一般会增加缓存层起到缓冲作用,减少数据库压力。引入缓存,就会涉及到缓存与数据库中数据如何保持一致性问题,本文将对几种缓存与数据库保证数据一致性的使用方式进行分析。为保证高......
  • 推进数字化转型进程,AntDB数据库协同神州云动共促新发展
    当今,数字化转型已成为企业发展的必由之路。随着新技术的不断发展和市场的日益竞争,越来越多的企业开始意识到数字化转型的重要性,在帮助企业数字化转型过程中,高效的客户关系管理软件和具有灵活性、可伸缩的数字底座,可以帮助企业突破管理瓶颈,降本增效的同时提高客户满意度,为企业的可持......
  • 普罗米修斯MySQL监控
    1.下载MySQL的exporter下载地址:https://prometheus.io/download/ 2.上传到需要监控的MySQL的机器上进行解压 解压安装tar-xzvfmysqld_exporter-0.14.0.linux-amd64.tar.gz 为了后续使用方便将名称修改为:mysqld_exporterexportDATA_SOURCE_NAME='root:123456......
  • MySQL 查看数据库表容量大小
    1.查看所有数据库容量大小selecttable_schemaas'数据库',sum(table_rows)as'记录数',sum(truncate(data_length/1024/1024,2))as'数据容量(MB)',sum(truncate(index_length/1024/1024,2))as'索引容量(MB)'frominformation_schema.t......
  • 【获奖案例巡展】信创先锋之星——中信证券基于国产图数据库构建企业图谱的应用实践
    为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目,星环科技自2021年推出了“新科技星力量”星环科技科技实践案例评选活动,旨在为各行业提供更多的优秀产品案例,彰显技术改变世界的力量,目前已成功举办两届,收到了来自各界的积极参与。 ......
  • MySQL 级联查询所有父级
    表结构:idnamecodeparent_code1老板A 2总经理BA3项目总监CB4开发工程师DC      查询D开发工程师的所有上级:SELECT`name`,@`code`ASc_ids,(SELECT@`code`:=parent_codeFROMdepartWHERE`code`=@`code`)ASp_id......