十: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 ...
随机推荐
- linux定时任务报错mysql: command not found
本人在用docker做镜像的时候,把定时任务打到镜像里,但是执行的时候发现错误日志总是报 sh: mysql: command not found ,然后开始解决问题 1)首先确认镜像有没有装mysq ...
- mongodb数据库分片实现链接
http://www.lanceyan.com/tech/arch/mongodb_shard1.html
- ios开发static关键字的理解
:static关键字修饰局部变量::当static关键字修饰局部变量时,该局部变量只会初始化一次,在系统中只有一份内存 :static关键字不可以改变局部变量的作用域,但是可延长局部变量的生命周期,该 ...
- 选择提示框UIAlertController 和网络状态判断AFNetworking
// 选择提示框 DownloadView *vc = [[DownloadView alloc] initWithFrame:CGRectMake(, , SCREEN_WIDTH, SCREEN_ ...
- [題解](單調隊列/水)luogu_P3088擠奶牛
d長度內區間最大值,單調隊列維護即可 由於需要滿足左右同時有2倍高度的牛才能更新答案,所以正反跑兩次 #include<bits/stdc++.h> using namespace std ...
- Flask (四) 模型进阶
模型进阶 多对多关联 用户收藏电影,一个用户可以收藏多部电影, 一部电影可以被不同的用户收藏, 是一个多对多关系. # 中间表(不是模型) collects = db.Table('collect ...
- D. Kay and Snowflake 树的重心
http://codeforces.com/contest/686/problem/D 给出q个询问,每次要求询问以x为根的子树中,哪一个点是重心. 树的重心:求以cur为根的子树的重心,就是要找一个 ...
- [转]用NPOI操作EXCEL--通过NPOI获得公式的返回值
本文转自:http://www.cnblogs.com/atao/archive/2009/10/12/1582085.html 前面我们学习了通过NPOI向Excel中设置公式,那么有些读者可能会问 ...
- tar.gz
tar.gz,或者.tgz的文件一般是在UNIX下用tar和gunzip压缩的文件.可能的文件名还有.tar.gz等.gunzip是一种比pkzip压缩比高的压缩程序,一般 UNIX下都有.tar是一 ...
- Git常用命令的使用方法
推荐一个比较好的GIT的教学地址,廖雪峰老师的git教程! 这里简述Git常用命令的使用方法: 一.初始化git 右键进入 Git Bash 1.建立身份信息 git config --global ...