一、事务的特性

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中开启事务的更多相关文章

  1. 数据库事务的四大特性以及事务的隔离级别(mysql)

      本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指 ...

  2. MySQL数据库事务的四大特性以及事务的隔离级别

    一.事务的四大特性(ACID) 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 1.原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因 ...

  3. MySQL 事务的隔离级别

    转载:https://developer.aliyun.com/article/743691?accounttraceid=80d4fddb3dc64b97a71118659e106221tozz 简 ...

  4. MySQL(26):事务的隔离级别出现问题之 幻读

    1. 幻读 幻读(Phantom Read)又称为虚读,是指在一个事务内两次查询中数据条数不一致,幻读和不重复读有些类型,同样是在两次查询过程中,不同的是,幻读是由于其他事务做了插入记录的操作,导致记 ...

  5. 数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

    数据库事务的四大特性以及事务的隔离级别   本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ ...

  6. 数据库事务的四大特性以及4种事务的隔离级别-以及对应的5种JDBC事务隔离级别

    本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...

  7. 「DB」数据库事务的隔离级别

    *博客搬家:初版发布于 2017/04/10 00:37    原博客地址:https://my.oschina.net/sunqinwen/blog/875833 数据库事务的隔离级别 讲事务的隔离 ...

  8. MySQL中事务和事务的隔离级别

    本文主要是帮助理解相关知识,没有具体的操作和代码. 事务 事务就是一组操作,这组操作要么全部成功,要么全部失败. 最经典的例子就是银行转账: 张三给李四转账100,对用户来说,就是一个操作.但对应到数 ...

  9. [高性能MYSQL 读后随笔] 关于事务的隔离级别(一)

    一.锁的种类 MySQL中锁的种类很多,有常见的表锁和行锁,也有新加入的Metadata Lock等等,表锁是对一整张表加锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做dd ...

随机推荐

  1. 分布式事物-2pc和3pc区别

    参考地址: https://www.cnblogs.com/bangerlee/p/5268485.html, 感谢原作者 http://blog.51cto.com/11821908/2058651 ...

  2. Nginx笔记总结十六:nginx优化指南

    1.高层的配置 worker_processes 定义了nginx对外提供web服务时的worker进程数 worker_rlimit_nofile 更改worker进程最大打开文件数量限制,如果没有 ...

  3. linux下载文件到本地_把linux服务器的文件下到本地windows

    tar -cvf script.tar scriptsz script.tar 文件夹先要打包,并且要指定打包的名字. 具体:  sz/rz命令:  一般来说,linux服务器大多是通过ssh来进行远 ...

  4. Windows Server 2008 配置 PHP 环境

    在配置PHP环境之前要先配置好IIS. 传送门-> Win2008 Server下配置安装IIS 如果IIS是以默认的配置安装,则还需要安装CGI. 在这里勾选CGI,然后安装. 创建一个网站 ...

  5. 新财报再次巨亏 HTC还能活到2017吗?

    HTC还能活到2017吗?" title="新财报再次巨亏 HTC还能活到2017吗?"> 当下智能手机行业虽然竞争惨烈,但也称得上是精彩纷呈:性能.外形不断进化, ...

  6. Js对于数组去重提高效率一些心得

    最近在找工作,好几次面试都问过数组去重的问题.虽然问的都不一样,但是核心思想是没有变的. 第一种是比较常规的方法 思路: 构建一个新的数组存放结果 for循环中每次从原数组中取出一个元素,用这个元素循 ...

  7. Git常用的操作指令

    修改最后一次提交 有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了.想要撤消刚才的提交操作,可以使用--amend 选项重新提交: 1 $ git commit --amend -m& ...

  8. 脚本化处理linux云服务器第二硬盘初始化

    #!/usr/bin/bash # 可以带参数 method=$ size=$ mydir=$ [ $#== ]&&{ echo -e "Missing parameter! ...

  9. 超全!python的文件和目录操作总结

    文件的基本读写 path = r'C:\Users\Brady\Documents\tmp' with open(path + r'\demo.txt', 'r', encoding='utf-8') ...

  10. 完整版EXCEL导出 (大框架SpringCloud 业务还是Springboot一套)

    这里用的是easypoi 首先引入jar包 <!-- excel --><dependency> <groupId>cn.afterturn</groupId ...