事务的隔离级别,mysql中开启事务、django中开启事务
一、事务的特性
A.原子性 atomicity :不可分割,要么都做,要么都不做。
C.一致性 consistency :数据库从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关(总量不变)
I:隔离性 isolation :一个事务的执行不能被其他事务干扰
D:持久性 durability :永久性,事务一旦提交,就已经改变了数据库中的数据。不可回滚
二、数据库中开启事务
1.# 修改数据之前先开启事务操作
start transaction;
2.# 修改操作
sql语句
3.# 回滚到上一个状态,未保存。数据在内存中
rollback;
4.# 开启事务之后,只要没有执行commit操作,数据其实都没有真正刷新到硬盘
commit; # 相当于保存,数据刷到硬盘
三、Django中开启事务的两种方式
第一种
from django.db import transaction
with transaction.atomic():
...
第二种
from django.db import transaction
@transaction.atomic
def post(self,request):
...
sid=transaction.savepoint() #开启事务
...
transaction.savepoint_rollback(sid) # 回滚
...
transaction.savepoint_commit(sid) # 提交
四、事务的隔离级别
隔离级别
read uncommited (可读未提交,脏读):不做任何隔离,具有脏读,不可重读对,幻读的问题
read committed (读提交,不可重复读):可以防止脏读,不能放在不可重复读和幻读的问题
repeated read(可重复读,可重复读):可以防止脏读,不可重复读,不能放在幻读(mysql的默认隔离级别)
serializable(串行化,幻读):数据库运行为串行,以上问题都可以防止,但是性能低
| 事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| 读未提交(read-uncommitted) | 是 | 是 | 是 |
| 不可重复读(read-committed) | 否 | 是 | 是 |
| 可重复读(repeatable-read) | 否 | 否 | 是 |
| 串行化(serializable) | 否 | 否 | 否 |
**1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据**
**2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。** 因为只能读到提交后的数据,原数据不可重复的读取
**3、可重复读:原来的数据就算别其他的事务修改了,还是能读取到原来没有修改的数据
**4、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。**
**小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表**
如何查看mysql隔离级别?
select @@global.tx_isolation;
修改事务的隔离级别
#修改配置文件
transaction-isolation=Read-Committed
#修改后一定要重启数据库
隔离级别解释
下面的解释都用这个user表
| name | age |
|---|---|
| jeff | 38 |
read uncommited (可读未提交,脏读)
脏读(两个事务都是存活的)
1 a 开启事务 将jeff的年龄改成 18岁,但是没有提交事务
2 b 开始事务 读取jeff的年龄,发现是18岁。
上述的问题,
假设a事务回滚,b事务使用的数据就是错误的,就导致程序数据不正确。
read committed(读提交,不可重复读)
不可重复度(两个事务都是存活的)
1 a 开始事务 将jeff的年龄改成18岁,但是提交了
2 b 开启事务 读取jeff的年龄就能读取a事务修改后的jeff年龄18岁。
上述的问题,
只能读提交后的数据,事务a事先读取了数据,事务b紧接着更新了数据,并提交了事务,而事务a再次读取该数据时,数据已经发生了改变。
repeated read(可重复读,可重复读)
可重读读(两个事务都是存活的)
1 a 开始事务 将jeff的年龄改成18岁,但是提交了
2 b 开启事务 读取jeff的年龄不能读取a事务修改后的jeff年龄18岁。而是读取的是38岁
serializable(串行化,幻读)
幻读(两个事务都是存活的)
#概念和不可重读有点像,不可重复度是站在修改的基础上,而幻读是站在新增的基础上
1 a 开始事务 将所有的的年龄改成18岁
2 b 开始事务 新增一条数据数据name=tank,age=19,而且提交了。
3 a 重新查, 发现有一条数据 的age=19,这就是所谓的幻读。
事务的隔离级别,mysql中开启事务、django中开启事务的更多相关文章
- 数据库事务的四大特性以及事务的隔离级别(mysql)
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指 ...
- MySQL数据库事务的四大特性以及事务的隔离级别
一.事务的四大特性(ACID) 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因 ...
- MySQL 事务的隔离级别
转载:https://developer.aliyun.com/article/743691?accounttraceid=80d4fddb3dc64b97a71118659e106221tozz 简 ...
- MySQL(26):事务的隔离级别出现问题之 幻读
1. 幻读 幻读(Phantom Read)又称为虚读,是指在一个事务内两次查询中数据条数不一致,幻读和不重复读有些类型,同样是在两次查询过程中,不同的是,幻读是由于其他事务做了插入记录的操作,导致记 ...
- 数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别
数据库事务的四大特性以及事务的隔离级别 本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ ...
- 数据库事务的四大特性以及4种事务的隔离级别-以及对应的5种JDBC事务隔离级别
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...
- 「DB」数据库事务的隔离级别
*博客搬家:初版发布于 2017/04/10 00:37 原博客地址:https://my.oschina.net/sunqinwen/blog/875833 数据库事务的隔离级别 讲事务的隔离 ...
- MySQL中事务和事务的隔离级别
本文主要是帮助理解相关知识,没有具体的操作和代码. 事务 事务就是一组操作,这组操作要么全部成功,要么全部失败. 最经典的例子就是银行转账: 张三给李四转账100,对用户来说,就是一个操作.但对应到数 ...
- [高性能MYSQL 读后随笔] 关于事务的隔离级别(一)
一.锁的种类 MySQL中锁的种类很多,有常见的表锁和行锁,也有新加入的Metadata Lock等等,表锁是对一整张表加锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做dd ...
随机推荐
- spring和mybatis整合报错:org.springframework.beans.MethodInvocationException: Property 'dataSource' threw exception; nested exception is java.lang.NoClassDefFoundError
Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyExceptio ...
- OpenCV 图像平滑处理
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" us ...
- iOS(Swift)学习笔记之SnapKit+自定义UI组件
本文为原创文章,转载请标明出处 1. 通过CocoaPods安装SnapKit platform :ios, '10.0' target '<Your Target Name>' do u ...
- 推荐几位jenkins发布war包和jar包大佬的博客
jenkins部署tomcat的war包和jar包 https://blog.csdn.net/liuxiaoming1109/article/details/89311696
- 求最长公共子序列-DP问题
Longest common subsequence problem The longest common subsequence (LCS) problem is the problem of fi ...
- DEBUG -- CLOSE BY CLIENT STACK TRACE问题的两种解决方案,整理自网络
1.DEBUG -- CLOSE BY CLIENT STACK TRACE 最近用c3p0遇到各种奇怪的问题,也不知道是它不行还是我不行. 今天又遇到了一个"DEBUG -- CLOSE ...
- xshell 常用命令1
date命令 date命令是显示或设置系统时间与日期. 很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作.延时通常用于脚本执行过程中提供一段等待的时间.日期可以以多种格 ...
- 方兴未艾的云计算:SoCC 2015大会
ACM 云计算研讨会(ACM Symposium on Cloud Computing, 以下简称SoCC)是由SIGMOD(Special Interest Group on Management ...
- python3下BeautifulSoup练习一(爬取小说)
上次写博客还是两个月以前的事,今天闲来无事,决定把以前刚接触python爬虫时的一个想法付诸行动:就是从网站上爬取小说,这样可以省下好多流量(^_^). 因为只是闲暇之余写的,还望各位看官海涵:不足之 ...
- 在没有APP的125年前 印度的外卖小哥是这样送餐
说到印度,你想到的是什么?咖喱.歌舞剧.开挂的火车?通通不是,我今天要说的是他们的外卖小哥,在印度如同"神"一般的存在.其实印度人不叫这批人为外卖小哥,而称他们为dabbawala ...