十:MYSQL中的事务
前言:
因为没有多少时间和精力,目前无法深入研究数据库中的事务,比如
但是,对于事务的一些基本知识,还是需要牢牢掌握的,做到了解事务的基本常识,在实际开发中能够理解各个持久层框架对事务的处理
一:是么是事务?
下面是百度百科的结果

在开发中对于一个业务逻辑需要对数据进行的一系列CRUD操作,这一系列操作,我们可以把它称为一个事务
这样理解事务就必须了解事务四大特性:原子性 、一致性、隔离性、持久性
二:事务的四大特性--ACID
2.1:原子性
在一个事务中对数据的所有操作,属于一个单元,不可分割,只有成功或者失败,不可能某个操作成功某个操作失败
2.2:一致性
事务前后,数据的一致性,在既定规则下的事务处理过程中,必须严格按照既定规则操作数据,不可破坏规则
维护数据的一致性任务应该由程序员来完成
比如数据修改前为 10.00 修改完后变成了 5.5 满足一致性应该为5.50(这是我自己的理解)
2.3:隔离性
体现在并发事务情况下,多个事务互相隔离,互不影响
2.4:持久性
在正确提交事务后,对数据的修改将是永久性的
三:事务的隔离级别
体现在并发事务中的读的操作
事务有四个隔离级别:READ-UNCOMMITTED 、 READ COMMITTED、 REPEATABLE READ 、 SERIALIZABLE
MySQL默认使用repeatable read级别--可重复读
3.1:脏读
在事务A中读取到事务B修改了但是未提交的数据,一旦其他事务回滚了,那么这样式比较危险的,读取到了错误的数据
3.2:不可重复读
事务中读取到其他事务提交后的数据,重复读取相同数据可能发现前后结果矛盾,因此叫 不可重复读
解决了脏读,但是在事务A中可以读取到事务B提交后的数据(导致在事务A中多次执行相同的读的操作的结果不同)
3.3:可重复读
在一个事务中不会读取到其他事务提交后的数据,重复读取数据前后结果一致,因此叫 可重复读
但是事务B如果在查询数据后对又修改,然后再读取数据,此时结果逻辑上可能不正确,好像前面读取时发生了幻觉!!
图解MySQL默认隔离级别可重复读解决的问题和存在的问题

3.4:串行化
可能在分布式事务中会使用
总结:首先我们需要明确一点,所有隔离级别,可能出现的问题或者所解决的问题都有一个前提,那就是在一个事务中
对于前三个隔离级别都有各自存在的问题,问题严重程度是递减的
可能出现的问题都发生在select语句中,毕竟 脏读、不可重复读,可重复读,幻读,都有一个读字
对于递增的隔离级别,试图要解决的问题是
脏读:读取到的数据可能是错误的(其他事务未正确提交,或者回滚),可能导致我们错误的判断,错误的数据操作,必须解决
不可重复读:前后读取的数据不一致,某种程度上违背了事务的隔离性原则;但是在一个事务单元中,相同的读取操作却每次的结果都可能不一样,某种程度上也会让我们感到困惑
可重复读:相同条件下每次读取到的结果都一样,仅仅是在我们读取前后之间对数据操作有可能会导致结果在本事务中逻辑上存在错误,但是数据本身是没有错的
对于不可重复读和可重复读,虽然都有各自的缺点,但是都不影响我们对数据的修改,持久化数据的操作(update)总会获取当前最新的值。
四:事务的分类
4.1:扁平事务(FLAT TRANSACTION)
4.2:带有保存点的扁平事务(FLAT TRANSACTION WITH SAVPOINTS)
4.3:链式事务(Chained TRANSACTION)
4.4:嵌套事务(Nested Transaction) InnoDB不支持
4.5:分布式事务(Distributed Transaction)--ATM机跨行转账案例
五:MYSQL中的事务
innoDB是MYSQL数据库的默认存储引擎,支持事务操作
本来想自己亲手测试一下,不同事务隔离级别对数据读取的影响,想想还是算了吧,了解了就可以了
MYSQL默认事务隔离级别是REPEATABLE READ---可重复读
十:MYSQL中的事务的更多相关文章
- 【MySQL】漫谈MySQL中的事务及其实现
最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySQL,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...
- 漫谈MySql中的事务
最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySql,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...
- MySql中的事务嵌套
1.Mysql中的事务必须是InnoDB.Berkeley DB引擎,myisam不支持. 2.Mysql是不支持嵌套事务的,开启了一个事务的情况下,再开启一个事务,会隐式的提交上一个事务. 3.My ...
- MySQL中Procedure事务编写基础笔记
原文:MySQL中Procedure事务编写基础笔记 目录: 一.PROCEDURE: 二.CREATE PROCEDURE基本语法: 三.PROCEDURE小进阶 3.1.基本的DECLARE语 ...
- MySql中的事务、JDBC事务、事务隔离级别
一.MySql事务 之前在Oracle中已经学习过事务了,这个东西就是这个东西,但是在MySql中用法还是有一点不同,正好再次回顾一下. 先看看MySql中的事务,默认情况下,每执行一条SQL语句,都 ...
- (转)漫谈MySql中的事务
最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySql,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...
- 举例说明MySQL中的事务
一.场景导入 现在有一张仓库表,仓库表中记录了每一个物品的数量,还有一张用户表,用户购买产品,仓库表的产品数量减少,而用户拥有产品的数量增加. 但是如果仓库中的产品数量不足时怎么处理? 例子: #仓库 ...
- 【转】全面了解Mysql中的事务
为什么要有事务? 事务广泛的运用于订单系统.银行系统等多种场景.如果有以下一个场景:A用户和B用户是银行的储户.现在A要给B转账500元.那么需要做以下几件事: 1. 检查A的账户余额>500元 ...
- 在MySQL中设置事务隔离级别有2种方法:
在MySQL中设置事务隔离级别有2种方法: 1 在my.cnf中设置,在mysqld选项中如下设置 [mysqld] transaction-isolation = READ-COMMITTED 2 ...
随机推荐
- redis-分布式锁2
https://wudashan.cn/2017/10/23/Redis-Distributed-Lock-Implement/ 站在巨人的肩膀上 本博客使用第三方开源组件Jedis实现Redis客户 ...
- Mybatis分页中遇到的坑2
站在巨人的肩膀上 http://crocutax.com/blog/mybatis-one-to-many-nestes-query-and-page-query Mybatis一对多嵌套查询和 ...
- RPC入门
在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系 ...
- SSE练习:单精度浮点数组求和
SSE(Streaming SIMD Extensions)指令是一种SIMD 指令, Intrinsics函数则是对SSE指令的函数封装,利用C语言形式来调用SIMD指令集,大大提高了易读性和可维护 ...
- mysql 维护添加远程主机访问
https://www.cnblogs.com/JNUX/p/6936548.html
- ZSP12项目的总结
前言:一款测量仪器做出来容易,想好做好还是需要投入更多的时间和心血. 项目概述:硬件已经定型,在C8051F020基础上的软件开发. 一 关于C8051F单片机:虽然自己整过8051单片机,但那已经是 ...
- python学习之序列化
序列化:不同编程语言之间传递对象需要序列化成标准格式,有XML /JSON,json格式化为字符串,UTF-8编码,速度快,切实标准格式.JSON 和 Python内置的数据类型对应如下: JSON ...
- POJ 1830 开关问题 高斯消元,自由变量个数
http://poj.org/problem?id=1830 如果开关s1操作一次,则会有s1(记住自己也会变).和s1连接的开关都会做一次操作. 那么设矩阵a[i][j]表示按下了开关j,开关i会被 ...
- Storm编程入门API系列之Storm的Topology多个Workers数目控制实现
前期博客 Storm编程入门API系列之Storm的Topology默认Workers.默认executors和默认tasks数目 继续编写 StormTopologyMoreWorker.java ...
- php出现Warning: file_put_contents,failed to open stream
Warning: file_put_contents(D:/wwwroot/jinxiongdi/web/temp/caches/f/index_40F756F0.php) [function.fil ...