mysql基础_事务
定义
一个事务其实就是一个完整的业务逻辑,是一个最小的工作单元,不可再分,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
例如:王五向赵六的账户上转2000块钱,王五的账户上少2000块钱,赵六的账户上多2000块钱,这个操作是一个最小的工作单元,要么同时成功,要么同时失败。
只有insert,delete,update语句才跟事务有关,因为只有这些语句是数据库表中数据进行增、删、改的。
做某件事的时候,需要多条增删改语句共同联合起来才能完成,所以需要事务的存在。一个事务其实就是多条增删改语句同时成功,或者同时失败!
提交事务、回滚事务
事务是通过InnoDB存储引擎来实现多条增删改语句同时成功或者同时失败的,InnoDB存储引擎是提供用来记录事务性活动的日志文件的。在事务的执行过程中,每一次的增删改操作都会记录到“事务性活动的日志文件”中。
定义
提交事务:清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。提交事务标志着事务的结束,并且是一种全部成功的结束。
回滚事务:将之前所有的增删改操作全部撤销,并且清空事务性活动的日志文件,回滚事务标志着,事务的结束,并且是一种全部失败的结束。
演示事务:
1.回滚事务:


2.提交事务


事务的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;

设置事务隔离级别
语法:
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ |SERIALIZABLE };
事务隔离级别越高,数据越安全,但是性能越低。
mysql基础_事务的更多相关文章
- MySQL基础之事务编程学习笔记
MySQL基础之事务编程学习笔记 在学习<MySQL技术内幕:SQL编程>一书,并做了笔记.本博客内容是自己学了<MySQL技术内幕:SQL编程>事务编程一章之后,根据自己的理 ...
- Mysql基础之 事务
MySql事务 Mysql事务主要处理操作量大,复杂度高的数据. Mysql事务需要注意的三点: 1.在mysql中只有使用innodb数据库引擎的数据库或表才支持事务 2.事务处理可以用来维护数据库 ...
- 重新整理 mysql 基础篇————— 事务隔离级别[四]
前言 简单介绍一下事务隔离的基本 正文 Read Uncommitted(未提交读) 这个就是读未提交.就是说在事务未提交的时候,其他事务也可以读取到未提交的数据. 这里举一个例子,还是前一篇的例子. ...
- mysql基础_操作文件中的内容
1.插入数据: insert into t1(id,name) values(1,'alex'); #向t1表中插入id为1,name为'alex'的一条数据 2.删除: delete from t1 ...
- mysql基础_数据类型
1.数字 (1)tinyint(小整数值) 范围:有符号(-128,127) 无符号(0.255) (2)int(大整数值) 范围:有符号 (-2 147 483 648,2 147 483 647 ...
- mysql基础_操作数据库以及表
1.数据库的操作 create database 数据库名:#一般创建方式 create database 数据库名 show databases;#查看所有数据 drop database 数据库名 ...
- MySQL中Procedure事务编写基础笔记
原文:MySQL中Procedure事务编写基础笔记 目录: 一.PROCEDURE: 二.CREATE PROCEDURE基本语法: 三.PROCEDURE小进阶 3.1.基本的DECLARE语 ...
- MySQL基础环境_安装配置教程(Windows7 64或Centos7.2 64、MySQL5.7)
MySQL基础环境_安装配置教程(Windows7 64或Centos7.2 64.MySQL5.7) 安装包版本 1) VMawre-workstation版本包 地址: https://m ...
- MySQL基础篇(06):事务管理,锁机制案例详解
本文源码:GitHub·点这里 || GitEE·点这里 一.锁概念简介 1.基础描述 锁机制核心功能是用来协调多个会话中多线程并发访问相同资源时,资源的占用问题.锁机制是一个非常大的模块,贯彻MyS ...
- mysql基础 事务的认识和使用
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务是恢复和并发控制的基本单位. 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序 ...
随机推荐
- Spyglass CDC工具使用(三)
最近一直在搞CDC (clock domain crossing) 方面的事情,现在就CDC的一些知识点进行总结. 做CDC检查使用的是Spyglass工具.以下内容转载自:Spyglass之CDC检 ...
- EL_获取域中存储的值_ List 集合&Map集合值和EL _ empty 运算符&隐式对象 pageContext
3.获取对線. List 集合. Map 集合的值 1.对線:${域名称,键名.属性名}本质上会去调用对線的 getter 方法 2. List 集合:${域名称.键名[索引]} List list ...
- mysql5.7_win64位安装
1.下载MySQL压缩包解压缩 2.更改my.ini配置文件 [mysqld] #设置3306端口号 port=3306 #设置MySQL的安装目录 basedir=F:\\JavaSoftware\ ...
- 软件工程日报——第十天(Android 开发中的异常处理问题)
Android 开发中的异常处理问题 在代码的编写工作当中,我们会遇到很多有关错误处理的内容.这个时候,你用的最多的应该是try-catch-finally,这样的句式.系统提供的这个句式极大方便我们 ...
- C++编码注意事项
1. vector,string不能按位赋值(vector用push_back, string用重载"+"号)
- DRF提供的请求与响应类
一 内容协商 drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个视图子类出来提供给我们使用. Dja ...
- 一个关于 Linux环境下输出操作符 >和>>的问题
[>和>>的区别]命令>文件,表示以覆盖的方式,把命令正确输出到指定的文件或者设备当中:命令>>文件,表示以追加的方式,把命令正确输出到指定的文件或者设备当中. [ ...
- 为什么 C# 可能是最好的第一编程语言
纵观神州大地,漫游中华互联网,我看到很多人关注为什么你应该开始学习JavaScript做前端,而对blazor这样的面向未来的框架有种莫名的瞧不起,或者为什么你应该学习Python作为你的第一门编程语 ...
- Java中的String类真的不可变吗?java面试常见问题
其实在Java中,String类被final修饰,主要是为了保证字符串的不可变性,进而保证了它的安全性.那么final到底是怎么保证字符串安全性的呢?接下来就让我们一起来看看吧. 一. final ...
- 最新版本 Stable Diffusion 开源AI绘画工具之部署篇
目录 AI绘画 本地环境要求 下载 Stable Diffusion 运行启动 AI绘画 关于 AI 绘画最近有多火,既然你有缘能看到这篇文章,那么相信也不需要我过多赘述了吧? 随着 AI 绘画技术的 ...