数据库事务

关注公众号“轻松学编程”了解更多。

1、概念

​ 执行批量操作时,这些操作作为一个整体,要么全部成功,要么全部失败。如银行转账,己方扣钱、对方加钱,这两个操作是一个整体,要么全部成功,要么全部失败。

2、四大特性ACID

  1. 原子性(Atomicity)

    • 事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生
  2. 一致性(Consistency)
    • 事务前后,数据关系一致、业务逻辑一致
  3. 隔离性(Isolation)
    • 一个事务所做的修改在最终提交以前,对其他事务是不可见的
  4. 持久性(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 ,OracleMySQL的默认隔离级别是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处理数据库事务的更多相关文章

  1. 【MySQL】数据库事务深入分析

    一.前言 只有InnoDB引擎支持事务,下边的内容均以InnoDB引擎为默认条件 二.常见的并发问题 1.脏读 一个事务读取了另一个事务未提交的数据 2.不可重复读 一个事务对同一数据的读取结果前后不 ...

  2. 【Mysql】数据库事务,脏读、幻读、不可重复读

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

  3. PHP 操作 MySQL 执行数据库事务

    <?php $mysqli=new mysqli();//实例化mysqli $mysqli->connect('localhost','root','admin','test'); if ...

  4. 五分钟详解MySQL并发控制及事务原理

    在如今互联网业务中使用范围最广的数据库无疑还是关系型数据库MySQL,之所以用"还是"这个词,是因为最近几年国内数据库领域也取得了一些长足进步,例如以TIDB.OceanBase等 ...

  5. MySQL 数据库事务与复制

    好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适. 最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类. 结合实际工作中碰到的问题,以寻找答案的方式 ...

  6. MySQL数据库事务剖析

    MySQL数据库事务剖析 事务就是一组原子性的SQL查询,是一个独立的执行单元.事务内的语句,要么全部执行成功,要么全部执行失败. 1.事务的标准特征 一个运行良好的事务处理系统,必须具备原子性.一致 ...

  7. mysql数据库事务详细剖析

    在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...

  8. Net Core中数据库事务隔离详解——以Dapper和Mysql为例

    Net Core中数据库事务隔离详解--以Dapper和Mysql为例 事务隔离级别 准备工作 Read uncommitted 读未提交 Read committed 读取提交内容 Repeatab ...

  9. Mysql数据库事务隔离级别

    事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency ...

随机推荐

  1. PADS Layout VX.2.3 灌铜之后没有显示整块铜皮的原因

    操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 灌铜之后没有显示整块铜皮,如下图所示: 点击菜单Tools > Options...(快捷键:Ctrl + ...

  2. Magicodes.IE 2.4版本发布

    今天我们发布了2.4版本,这离不开大家对Magicodes.IE的支持,我们也对大家的意见以及需求不断的进行更新迭代,目前我们的发布频率平均在一周一个beta版本,一个月一个正式版本的更新,我们欢迎更 ...

  3. SQL Server查询优化指南

    1.尽量不要使用is null,否则将导致引擎放弃使用索引而进行全表扫描.2.char是固定长度,速度快,但占空间,varchar不固定长度,不占空间,但速度慢.3.能使用数字类型就不要使用字符,查询 ...

  4. ansible-初始playbook安装nginx

    1. ansible-初始playbook安装nginx 1) 创建一个ansible存放路径 1 [root@test-1 scripts]# mkdir -p /ansible/nginx/{co ...

  5. 17.JAVA-常用总结

    for另一种写法 for(UserBean bean : list){ //for循环取出list中每个成员,并赋给bean变量 System.out.println(bean.getName()); ...

  6. 多测师讲解自动化测试 _RF模拟鼠标悬停_高级讲师肖sir

    test19 Open Browser https://www.ctrip.com/?sid=155952&allianceid=4897&ouid=index gc Maximize ...

  7. day26 Pyhton select功能语句实现

    一.查询语句功能实现 select id,name where age > '20' name_value = {'id':0,'name':1,'age':2,'phone':3,'job': ...

  8. UVA 10635 Prince and Princess—— 求LCS(最长公共子序列)转换成 求LIS(最长递增子序列)

    题目大意:有n*n个方格,王子有一条走法,依次经过m个格子,公主有一种走法,依次经过n个格子(不会重复走),问他们删去一些步数后,重叠步数的最大值. 显然是一个LCS,我一看到就高高兴兴的打了个板子上 ...

  9. Linux关联文件扩展名和打开程序

    手动为Linux关联文件扩展名与打开程序. 当Linux不认识某种扩展名的时候,需要为此扩展名创建一个MIME类型.Linux是依据MIME类型而不是扩展名来决定打开程序的. 再将此种MIME类型与某 ...

  10. Mysql数据库分布式事务XA详解

    XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准备工作(第一阶段).如果协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交了(第二阶段 ...