数据库事务

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

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. Centos-查看磁盘分区占用情况-df

    df 检查linux系统中磁盘分区占用情况 相关选项 -h 以人类友好读方式显示 -k 以KB为单位输出磁盘分区使用情况 -m   以MB为单位输出磁盘分区使用情况 -a 列出所有文件系统分区情况,包 ...

  2. 04 sublime text 3在线安装package control插件,之后安装主题插件和ConvertToUTF8 插件

    前提:需要@@科学@@上网 在线安装包通常都需要@@科学@@上网 安装package control插件 在线安装package control插件 按ctrl+shift+p 输入install,选 ...

  3. Java知识系统回顾整理01基础06数组07数组工具类Arrays

    一.Arrays简介 Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能. 大大提高了开发人员的工作效率. 二.Arrays提供的数组复制方法 与使用System.arraycopy ...

  4. Docker---初识到使用

    1.剖析虚拟化技术概念 1)虚拟化是一个主流的技术,虚拟的,看不见的,但是可以落地的,用于资源管理的一项技术: 2)虚拟化的技术诞生的目标就是为了解决资源管理和资源利用的解决方案: 3)虚拟化就是将物 ...

  5. c++ 中预编译头文件名 pch.h

    转载:https://www.it-swarm.asia/zh/c++/%e6%88%91%e5%8f%af%e4%bb%a5%e4%bd%bf%e7%94%a8includepchh%e2%80%9 ...

  6. CodeForces 79D 【Password】,洛谷P3943 【星空】

    其实我做的是洛谷的P3943,但是听说fstqwq窃题...... 题目描述: 小 C 拿来了一长串星型小灯泡,假装是星星,递给小 F,想让小 F 开心一点.不过,有 着强迫症的小 F 发现,这串一共 ...

  7. ansible-playbook文件结构

    ansible-playbook文件结构: 1 --- 2 - name: play1 #指定的playbook名字 3 hosts: webservers #指定主机组 4 remote_user: ...

  8. SDN实验 3: Mininet 实验——测量路径的损耗率

    验 3:Mininet 实验--测量路径的损耗率 一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定:初步了解 Mininet 安装时自带的 POX ...

  9. MeteoInfoLab脚本示例:MODIS Sinusoidal投影HDF数据

    MODIS卫星很多陆面数据都是Sinusoidal投影,数据被分为一个个10*10度(赤道地区)的瓦片(http://modis-land.gsfc.nasa.gov/MODLAND_grid.htm ...

  10. Redis的介绍以及安装

       redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库,缓存和消息中间件 高速缓存介绍 高速缓存利用内存保存数据,读写速度远超硬盘 高速缓存可以减少 I/O 操作,降 ...