首页 > 数据库 >mysql基础_事务

mysql基础_事务

时间:2023-04-28 22:16:17浏览次数:36  
标签:事务 隔离 重复 数据 基础 提交 mysql 级别

定义

一个事务其实就是一个完整的业务逻辑,是一个最小的工作单元,不可再分,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

例如:王五向赵六的账户上转2000块钱,王五的账户上少2000块钱,赵六的账户上多2000块钱,这个操作是一个最小的工作单元,要么同时成功,要么同时失败。

只有insert,delete,update语句才跟事务有关,因为只有这些语句是数据库表中数据进行增、删、改的。

做某件事的时候,需要多条增删改语句共同联合起来才能完成,所以需要事务的存在。一个事务其实就是多条增删改语句同时成功,或者同时失败!

提交事务、回滚事务

事务是通过InnoDB存储引擎来实现多条增删改语句同时成功或者同时失败的,InnoDB存储引擎是提供用来记录事务性活动的日志文件的。在事务的执行过程中,每一次的增删改操作都会记录到“事务性活动的日志文件”中。

定义

提交事务:清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。提交事务标志着事务的结束,并且是一种全部成功的结束。

回滚事务:将之前所有的增删改操作全部撤销,并且清空事务性活动的日志文件,回滚事务标志着,事务的结束,并且是一种全部失败的结束。

演示事务:

1.回滚事务:

image-20230428213258883

image-20230428213415374

2.提交事务

image-20230428213759756

image-20230428213943064

事务的ACID 特性

原⼦性(Atomicity)

事务是⼀个原⼦操作,要么全部提交,要么全部回滚。当⼀个事务执⾏期间发⽣故障,操作系统会⾃动将其回滚到事务执⾏之前的状态,保证数据的⼀致性。

⼀致性(Consistency)

事务执⾏结束后,数据必须保持⼀致性状态。在事务执⾏期间,数据库中的数据可以处于中间状态,但在事务完成时必须保证数据的⼀致性。

隔离性(Isolation)

数据库系统必须保证事务之间相互隔离,不会互相⼲扰。隔离级别不同,会影响到事务的并发性和数据⼀致性,⽐如出现脏读、不可重复读、幻读等问题。

持久性(Durability)

⼀旦事务提交,其所做的修改必须永久保存到数据库中。即使系统发⽣故障或宕机,数据也能够保持不变。

事务的隔离级别

隔离级别 脏读 不可重复读 幻读
Read uncommitted(读未提交)
Read committed (读提交) ×
Repeatable Read(可重复读取,默认) × ×
Serializable(可序化) × × ×

读未提交(READ UNCOMMITTED)

在读未提交隔离级别下,事务 A 可以读取到事务 B 修改过但未提交的数据。可能发生脏读、不可重复读和幻读问题,一般很少使用此隔离级别。这种隔离级别一般都是理论上的,大多数的数据库隔离级别都是二档起步!

读已提交(READ COMMITTED)

在读已提交隔离级别下,事务 B 只能在事务 A 修改过并且已提交后才能读取到事务 B 修改的数据。读已提交隔离级别解决了脏读的问题,但可能发生不可重复读和幻读问题

可重复读(REPEATABLE READ)

在可重复读隔离级别下,事务 B 只能在事务 A 修改过数据并提交后,自己也提交事务后,才能读取到事务 B 修改的数据。可重复读隔离级别解决了脏读和不可重复读的问题,但可能发生幻读问题。mysql中默认的事务隔离级别就是这个

可串行化(SERIALIZABLE)

这是最高隔离级别,效率最低。解决了所有的问题。每一次读取到的数据都是最真实的。

脏读

一个事务读到另一个事务还没有提交的数据

不可重复读

一个事务先后读取同一条记录,但两次读取的数据不同,称为不可重复读

幻读

一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”

查看当前会话隔离级别

SELECT @@transaction_isolation;

image-20230428210200846

设置事务隔离级别

语法:

SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ |SERIALIZABLE };

事务隔离级别越高,数据越安全,但是性能越低。

标签:事务,隔离,重复,数据,基础,提交,mysql,级别
From: https://www.cnblogs.com/malinyan/p/17363258.html

相关文章

  • 【深度学习基础】使用libtorch部署pytorch训练的网络
    下载安装配置:https://pytorch.org/cppdocs/installing.html小例程:https://pytorch.org/cppdocs/frontend.html官方:https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.htmllibtorch的API官网文档:https://pytorch.org/cppdocs/api/library_root.html配置环......
  • MySQL基础篇
    导入表的问题导入数据时外键约束问题数据导入指令:sourced:\xxx.sql通过FOREIGN_KEY_CHECKS解决,用法如下:setFOREIGN_KEY_CHECKS=0;#在导入前设置为不检查外键约束setFOREIGN_KEY_CHECKS=1;#在导入后恢复检查外键约束第三章_最基本的SELECT语句1.SQL语言的规则和......
  • Linux下安装mysql(aarch64版本)
    MySQL安装及配置1.停止MySQL服务sudosystemctlstopmysqld2.启动MySQL服务sudosystemctlstartmysqld3.卸载旧版本MySQL查看现有版本,mariadb和mysql都要查:rpm-qa|grepmariadbrpm-qa|grepmysql卸载:rpm-e--nodeps【文件名】再次检查是否卸载干净:rpm-......
  • 【Python】【MySQL】Python将JSON数据以文本形式存放到MySQL的Text类型字段中
    1.起因在做一个自动打卡的玩意。登录会得到那个平台一系列的信息。我又不想专门修改、增加数据库字段来存放,所有打算直接将返回的JSON数据保存到一个MySQL字段中。内容肯定不能直接放,考虑下比如数据注入的问题,对吧,容易出问题,所有我是打算将JSON数据转为base64编码的格式。先写......
  • 现在告诉你MySQL为什么选择B+Tree呢?
    大家都知道MySQL数据库选择的是B+Tree作为索引的数据结构,那为什么会选择B+Tree呢?本文分四种数据结构来分析:二叉查找树平衡二叉树多路平衡查找树加强版多路平衡查找树(B+Tree)二叉查找树二叉搜索树的特点:左子树的键值小于根的键值,右子树的键值大于根的键值。   从上面的2个图来看......
  • [数据库]MYSQL之授予/查验binlog权限
    在后端做主从备份;亦或是在大数据领域中,各类CDC同步(Canal/FlinkCDC等),均会基于MYSQL的binlog来实现。因此,知道需要哪些权限?怎么查验去、怎么授权就很重要了。感觉网上的文章没成体系地清楚,而今天工作上处理问题的过程中遇到了此疑问,且曾多次对此产生疑问,自然便有了这一篇,作......
  • Cobar使用文档(可用作MySQL大型集群解决方案)
    Cobar使用文档(可用作MySQL大型集群解决方案)2014-06-17 1514举报简介: 原文:http://blog.csdn.net/shagoo/article/details/8191346项目已经迁移到Git上面,地址为:https://github.com/alibaba/cobar最近好不容易抽空研究了下Cobar,感觉这个产品确实很不错(在文档方面比Amoeba强多了......
  • mysql中列转行,并多个字段转到一行中的一个字段上,中间用逗号分开
    mysql中列转行,并多个字段转到一行中的一个字段上,中间用逗号分开 SELECT group_concat(a.idSEPARATOR',')ASidsFROM ( SELECT * FROM tablename WHERE 1=1 ORDERBY rand() LIMIT10 )a ......
  • web安全基础-渗透相关字段
    1、Set-Cookie和cookies2、csp3、x-frame-option4、x-xss-frame5、location6、referer和origin7、user-agent、xff作为sql注入参数点、收集用户信息8、server、x-powered-for收集服务端信息9、cors......
  • 开心档之MySQL 创建数据库
    MySQL数据类型MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。数值类型MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似......