十: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 ...
随机推荐
- bzoj1458士兵占领
传送门 和上一题差不多,每行和每列分别看做一个点,障碍点坐标的行和列就不建边,再按照有源汇上下界建图就好了,唯一的区别就是这个题求的是最小流 这个题的数据好水呢,建错图也能A呢 #include< ...
- python文件实现增删改查操作
# coding = utf-8 import os import json import re ''' 本程序旨在将练习基础知识部分,包括: 列表,元组,字典,文件,函数,字符串等知识 实现的功能: ...
- [coci2015-2016 coii] dijamant【图论】
传送门:http://www.hsin.hr/coci/archive/2015_2016/ 进去之后的最下面的国家赛.顺便说一句,dijamant是克罗地亚语的“钻石”的意思. 官方题解是说压位的暴 ...
- c#学习系列之跳出循环 break,continue
break是完全跳出循环: ) { ) break; Console.WriteLine(a++); } 此处输出1,2,3,4,5,6,7,8 continue是跳出当前的循环: ;i<=;i ...
- h5旋转效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- (转)UVM挑战及概述
UVM的调度也具有其独特的挑战,尤其是在调试的领域.其中的一些挑战如下: 1. Phase的管理:objections and synchronization 2. 线程调试 3. Tracing i ...
- C# 语句 分支语句
语句是指程序命令,按照顺序执行.可以分为 顺序语句 分支语句 循环语句 之前学习的内容都是按照顺序程序执行的,称之为顺序语句. 今天学的的内容是分支语句. 语句可以嵌套,可以是以分号结尾的单行 ...
- C#操作Txt(追加模式)
/// <summary> /// 输出指定信息到文本文件 /// </summary> /// <param name="msg">输出信息& ...
- chm文件帮助功能全解
在winform中点击某个按钮弹出关于这个窗体的功能的具体解释文档方法如下: 第一步,使用chm编译工具修改chm每个文档的url 修改完成后保存确认能否打开, 如果不能就使用这个软件的转换功能把ch ...
- HDU 4348 I - To the moon 可持续化
队友套的可持续化线段树,徘徊在RE和MLE之间多发过的... 复用结点新的线段树平均要log2N个结点. 其实离线就好,按照时间顺序组织操作然后dfs. #include <iostream&g ...