mysql处理数据库事务
数据库事务
关注公众号“轻松学编程”了解更多。
1、概念
执行批量操作时,这些操作作为一个整体,要么全部成功,要么全部失败。如银行转账,己方扣钱、对方加钱,这两个操作是一个整体,要么全部成功,要么全部失败。
2、四大特性ACID
- 原子性(Atomicity)
- 事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生
- 一致性(Consistency)
- 事务前后,数据关系一致、业务逻辑一致
- 隔离性(Isolation)
- 一个事务所做的修改在最终提交以前,对其他事务是不可见的
- 持久性(Duration)
- 一旦事务提交,则更改是永久的
3、隔离级别
3.1 并发事务带来的问题
- 脏读:一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的;
- 不可重复读:在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的(不可重复读对应的是修改,即UPDATE操作);
- 幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样(幻读问题对应的是插入INSERT操作);
- 丢失更新: 两个事务同时读取同一条记录,A先修改记录,B也修改记录(B是不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。
3.2 四种级别
数据库的事务隔离级别(TRANSACTION ISOLATION LEVEL)是一个数据库上很基本的一个概念。事务隔离级别的前提是一个多用户、多进程、多线程的并发系统,在这个系统中为了保证数据的一致性和完整性,从而引入了事务隔离级别这个概念,对一个单用户、单线程的应用来说则不存在这个问题。
为了避免上述几种事务之间的影响,可以通过设置不同的隔离级别来进行不同程度的避免。因为高的隔离等级意味着更多的锁,从而牺牲性能。所以这个选项开放给了用户根据具体的需求进行设置。不过默认的隔离级别Read Commited符合了多数的实际需求。
| 隔离级别 | 描述 | 脏读 | 丢失更新 | 不可重复读 | 幻读 | 并发模型 | 更新冲突检测 |
|---|---|---|---|---|---|---|---|
| 读未提交:Read Uncommited | 一个事务可以读取另一个未提交事务的数据 | 是 | 是 | 是 | 是 | 悲观 | 否 |
| 读已提交:Read commited | 一个事务要等另一个事务提交后才能读取数据 | 否 | 是 | 是 | 是 | 悲观 | 否 |
| 可重复读:Repeatable Read | 在开始读取数据(事务开启)时,不再允许修改操作 | 否 | 否 | 否 | 是 | 悲观 | 否 |
| 序列化:Serializable | 最高的事务隔离级别,在该级别下,事务串行化顺序执行 | 否 | 否 | 否 | 否 | 悲观 | 否 |
大多数数据库默认的事务隔离级别是Read committed,比如Sql Server ,Oracle。MySQL的默认隔离级别是Repeatable read。
3.3 编辑隔离级别
1、修改my.ini配置文件
打开服务管理器(运行打开服务的命令services.msc),右键查看MySQL服务的属性找到my.ini所在路径(默认位置:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini)。
在my.ini中设置,在mysqld选项中如下设置 [mysqld] transaction-isolation = READ-COMMITTED
2、命令行
命令行操作
- select @@global.tx_isolation;
- select @@tx_isolation;
- set tx_isolation=‘READ-COMMITTED’;
- set global tx_isolation=‘REPEATABLE-READ’;
4、几个API
无异常时提交修改:conn.commit()
发生异常时回滚:conn.rollback()
捕获异常时回滚:try ... except...
5、参考资料
- 并发问题图解:https://blog.csdn.net/shuaihj/article/details/14163713
- 隔离级别解释:https://blog.csdn.net/csdnxingyuntian/article/details/57081233
- 隔离级别设置:https://www.cnblogs.com/moss_tan_jun/p/5753327.html
后记
【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。
也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!
公众号


关注我,我们一起成长~~
mysql处理数据库事务的更多相关文章
- 【MySQL】数据库事务深入分析
一.前言 只有InnoDB引擎支持事务,下边的内容均以InnoDB引擎为默认条件 二.常见的并发问题 1.脏读 一个事务读取了另一个事务未提交的数据 2.不可重复读 一个事务对同一数据的读取结果前后不 ...
- 【Mysql】数据库事务,脏读、幻读、不可重复读
一.什么是数据库事务 数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位.事务由事务开始与事务结束之间 ...
- PHP 操作 MySQL 执行数据库事务
<?php $mysqli=new mysqli();//实例化mysqli $mysqli->connect('localhost','root','admin','test'); if ...
- 五分钟详解MySQL并发控制及事务原理
在如今互联网业务中使用范围最广的数据库无疑还是关系型数据库MySQL,之所以用"还是"这个词,是因为最近几年国内数据库领域也取得了一些长足进步,例如以TIDB.OceanBase等 ...
- MySQL 数据库事务与复制
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适. 最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类. 结合实际工作中碰到的问题,以寻找答案的方式 ...
- MySQL数据库事务剖析
MySQL数据库事务剖析 事务就是一组原子性的SQL查询,是一个独立的执行单元.事务内的语句,要么全部执行成功,要么全部执行失败. 1.事务的标准特征 一个运行良好的事务处理系统,必须具备原子性.一致 ...
- mysql数据库事务详细剖析
在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...
- Net Core中数据库事务隔离详解——以Dapper和Mysql为例
Net Core中数据库事务隔离详解--以Dapper和Mysql为例 事务隔离级别 准备工作 Read uncommitted 读未提交 Read committed 读取提交内容 Repeatab ...
- Mysql数据库事务隔离级别
事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency ...
随机推荐
- Spring Environment对象获取属性
String[] activeProfiles = env.getActiveProfiles();//获取当前是启用哪一个个配置文件 System.out.println(Arrays.toStri ...
- Salesforce LWC学习(二十七) File Upload
本篇参考: https://developer.salesforce.com/docs/component-library/bundle/lightning-file-upload/documenta ...
- Hibernate4.3 并发控制
一.悲观锁 悲观锁不是Hibernate的锁,而是数据库的update锁,select * from item for update. Hibernate 就是利用这种锁机制,在查询上上锁. 悲观 ...
- Java知识系统回顾整理01基础06数组06二维数组
一.一维数组和二维数组 这是一个一维数组, 里面的每一个元素,都是一个基本类型int int a[] =new int[]{1,2,3,4,5}; 这是一个二维数组,里面的每一个元素,都是一个一维数组 ...
- 【题解】 P2734 [USACO3.3]游戏 A Game
\(\color{purple}{Link}\) \(\text{Solution:}\) 考虑区间\([l,r]\)的最优解.显然它可以由\([l+1,r]\)或\([l,r-1]\)转移而来.至此 ...
- 初始python模块
Python语言中,模块分为三类. 第一类:内置模块,也叫做标准库.此类模块就是python解释器给你提供的,比如我们之前见过的 time模块,os模块.标准库的模块非常多(200多个,每个模块又有很 ...
- docker容器命令2
docker容器命令2 启动守护式容器 docker run -d 镜像名字 [root@tzh ~]# docker images REPOSITORY TAG IMAGE ID CREATED S ...
- 使用appium后安卓手机无法调出键盘解决方法
问题:用appium进行真机调试后,使用手机的app进行输入时无法调出键盘. 原因:appium调试时,将手机输入法设置成了Unicode IME 解决方法: 方法一,手机设置里修改输入法: 不同的手 ...
- Oracle报错>记录被另外一个用户锁定
原因 当一个用户对数据进行修改时,若没有进行提交或者回滚,Oracle不允许其他用户修改该条数据,在这种情况下修改,就会出现:"记录被另外一个用户锁定"错误. 解决 查询用户.数据 ...
- 【矩阵乘优化DP】涂色游戏
题目大意 用 \(p\) 种颜色填 \(n\times m\) 的画板,要求任意相邻两列的颜色数都不少于 \(q\) ,求方案数. 数据范围 \(1\leq n\leq 100,1\leq m\leq ...