事务的隔离级别,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 ...
随机推荐
- 微软Hyperlapse技术:让第一人称摄像稳定而流畅
编者按:GoPro等第一人称摄像设备已经几乎成为了极限运动者的标配,但拍摄过程中的抖动常会让画面非常糟糕.微软Hyperlapse技术实现了将第一人称录像转化成稳定而流畅的视频.该成果的论文已发表在S ...
- JavaScript秒转换成天-小时-分钟-秒
根据时间秒转换成天-小时-分钟-秒 // 秒转换成day.hour.minutes.seconds formatSecond(second: number) { const days = Math.f ...
- Django正向解析和反向解析
转载:https://blog.csdn.net/jeekmary/article/details/79673867 先创建一个视图界面 urls.py index.html index页面加载的效果 ...
- 如何在sublime中调试html文件
一.安装View In Browser插件 快捷键 Ctrl+Shift+P(菜单栏Tools->Command Paletter),输入 pcip选中Install Package并回车,输入 ...
- xshell 常用命令1
date命令 date命令是显示或设置系统时间与日期. 很多shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作.延时通常用于脚本执行过程中提供一段等待的时间.日期可以以多种格 ...
- 免密码 ssh 到其它机器
背景:在配置 hadoop 的时候这样设置会比较方便.目标:A 机器上输入 ssh root@B 可以直接访问,不需要输入密码 步骤: 首先在 A 机器上生成密钥对,一路回车 1 ssh-keygen ...
- UMD: 通用模块规范
既然CommonJs和AMD风格一样流行,似乎缺少一个统一的规范.所以人们产生了这样的需求,希望有支持两种风格的“通用”模式,于是通用模块规范(UMD)诞生了.
- STL迭代器的使用、正向、逆向输出双向链表中的所有元素
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- LeetCode【面试题 16.17. 连续数列】
------------恢复内容开始------------ 题目描述 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5 ...
- python之面向对象02
在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法 1. __init__()方法 class Cat: def __init__(self,newname, ...