首页 > 数据库 >Mysql:事务

Mysql:事务

时间:2023-06-05 15:11:28浏览次数:64  
标签:事务 隔离 重复 提交 Mysql sqlA 100

事务特性

事务的特性:acid。

原子性(重要)

事务内的一组操作为原子操作,要么全部成功,要么全部失败。在实际业务如转账,就必须保证一方数目多了一方少了,数目平衡。

一致性(面试常问)

事务成功或失败的结果必须符合业务逻辑。还是以转账为例,A转给B100块,成功就A少100,B多100,失败就双方金额该多少就多少。

不能允许出现,成功了B居然没增加,失败了A少了100

隔离性(面试常问)

其实网上对隔离性的定义是这样的:一个事务的执行不能被其他事务所干扰。
这样的定义不够细致和准确,先说举个违反隔离性的例子吧:
image

B的最终结果应该为100,但为50,是因为违反了隔离性。
我来定义一下隔离性:多个事务差不多同时执行,且共同读写包含同一数据源时,最终多个事务的结果必须符合业务,即符合一致性

但实际中为了性能的考虑,是做不到完全的隔离性的

首先大家要明白,根据违反隔离性的程度,可以分为3个:

  1. 脏读。A事务正在执行还未提交,B事务读到了A事务中的数据且做了相关操作,但是A回滚了
  2. 不可重复读。A事务正在执行了查询sqlA的结果为abc,此时B事务更改数据源abc为def,然后A事务再次执行sqlA得到是def,此情况称为不可重复度。有人问,这不正常嘛,其实真正的隔离性应该做到不管多少次sqlA都应该是abc。说白了还是因为读取了未提交的事务导致
  3. 幻读。和不可重复读是一个道理,不一样是不可重复读关注值的修改,幻读是行记录变更。A事务对user表正在执行了查询sqlA的结果有1条记录,此时B事务在user表添加了2条记录,然后A事务再次执行sqlA得到3条记录,此情况称为幻读,还是因为读取了未提交的事务导致

为了解决上述的问题,提出了4个隔离级别:

  1. 读未提交:一个都解决不了(不采取)
  2. 读已提交:解决脏读
  3. 可重复读:解决脏读、不可重复读
  4. 串行化:全部解决(一般也不采取,并发性太低)

在实际生产中,2和3采取的比较多,因为做不到完全的隔离性会损坏性能

持久性(不太重要)

事务提交或回滚的结果是永久性,即保存在硬盘上的。

标签:事务,隔离,重复,提交,Mysql,sqlA,100
From: https://www.cnblogs.com/ibcdwx/p/17457800.html

相关文章

  • pymysql.err.DataError: (1366, “Incorrect string value: ‘\\xF0\\x9F\\x92
    原因是字符串中有emoji数据。原因:字符串中有emoji字符,数据库是utf8无法识别解决方法:安装emoji库pipinstallemoji处理字符串:importemojis=emoji.demojize('......
  • mysql数据自动备份脚本
    #!/bin/bash#日期date=$(date'+%Y%m%d')#设置备份目录和保留天数backup_dir="/opt/dbback"retention_days=7#数据库账密muser=mpasswd=mhost=#创建备份目录(如果不存在)mkdir-p$backup_dir#获取当前时间戳now=$(date+%s)#备份MySQL数据库到备份目......
  • MySQL数据库表结构优化方式详解
    前言从今天开始本系列文章就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深,全面讲解数据库体系。非常适合零基础的小伙伴来学习。全文大约【2083】字,不说废话,只讲可以让你学到技术、明白原理的纯干......
  • Mysql 主从备份 Last_Errno: 1146 Last_Error: Error executing row event: 错误问题
    本人在做主从备份的时候发现了此问题! 1主数据库是已经把这个表删除了丛数据库也是没有备份这个表但是一直报这个错原因是bin-log日志有这个表 但是没记录到已经把这个表删除了 主从表同步实际从库是根据主库的bin-log二进制的SQL进行执行的 这是Mysql的一个BUG1......
  • mysql 8.0 解压版安装以及安装版更改密码
    解压版:下载地址https://dev.mysql.com/downloads/mysql/在根目录下创建文本文档,并重命名为my.ini文件 使用文本编辑器打卡my.ini,将下面内容复制进去[mysqld]#validate_password密码校验#plugin-load-add=validate_password.dll#connection_control登录超时插件#p......
  • mysql 递归查询父级下的所有子级
    有一张组织表,该表有上下层级,使用mysql递归查询某个组织下的所有子组织,sql要怎么写?假设这张表名为organization的表,其结构如下:CREATETABLEorganization(idINTPRIMARYKEY,nameVARCHAR(50),parent_idINT);表里插入了几条数据INSERTINTO`organization`(`......
  • MySQL学习从基础开始
    1.什么是数据库DataBase,简称DB;数据库软件称为数据库管理系统,英文简称DBMS,全称为DataBaseManagementSystem,例如:Oracle、MySQL、SQLServer、Sybase、informix、DB2等等。2.MySQL概述MySQL最初是由“MySQLAB公司”开发的一套关系型数据库管理系统(RDBMS-RelationDataBas......
  • mysql备忘录
    MySQL8下载安装腾讯云Ubuntu20.04服务器下载MySQL8并开启远程服务下载sudoaptupdate#更新Ubuntu存储库sudoaptinstallmysql-server#下载mysqlsudosystemctlstatusmysql#查看mysql状态配置启动找到mysqld文件路径find/-namemysql.server或find/-namemy......
  • Mysql数据备份
    导出库/表导出库:mysqldump-h主机-u用户-p密码数据库>目标路径导出表:mysqldump-h主机-u用户-p密码数据库表1表2表3...>目标路径例如:mysqldump-hlocalhost-uroot-p123456schoolt_studentt_grade>D:/sql/1.sql导入表/库(建议)如果在登录情况下,......
  • Elasticsearch与MySql实现数据同步
    选择方案基于RabbitMq的异步通知流程如下:管理端对mysql数据库数据完成增、删、改后,发送MQ消息服务端监听MQ,接收到消息后完成elasticsearch数据修改优点:低耦合,实现难度一般缺点:依赖mq的可靠性实现步骤在管理端和服务端都导入依赖坐标和配置application.yml文件点击......