一、事务的特性

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. CF-1144F-Graph Without Long Directed Paths

    题意: 给出一个无向联通图,要求你给出每条边的方向,使得无论从哪个点出发最多只能走一条边: 思路: 对于每个点,要么出度为0,要么入度为0即可.所以这就是一个判断二分图. 二分图 #include & ...

  2. cs231n spring 2017 lecture6 Training Neural Networks I

    1. 激活函数: 1)Sigmoid,σ(x)=1/(1+e-x).把输出压缩在(0,1)之间.几个问题:(a)x比较大或者比较小(比如10,-10),sigmoid的曲线很平缓,导数为0,在用链式法 ...

  3. Java反射的应用 --- 内省

    一.基础概念 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.Java JDK中提供了一套 API 用来访问某个属性的 getter/sette ...

  4. python两个队列实现一个栈和两个栈实现一个队列

    1.两个栈实现一个队列 两个栈stack1和stack2, push的时候直接push进stack1,pop时需要判断stack1和stack2中的情况.如果stack2不为空的话,直接从stack2 ...

  5. Python之configparser配置文件的读取

    配置文件名 config.ini 文件内容: [linux] ip:10.0.13.26 port:22 username:root password:W2ynE6b58wheeFho [mysql] ...

  6. excel中ppmt/pmt/ipmt的计算方式

    参考来源: https://www.experts-exchange.com/articles/1948/A-Guide-to-the-PMT-FV-IPMT-and-PPMT-Functions.h ...

  7. C++二级指针和指针引用传参

    前提 一级指针和引用 已经清晰一级指针和引用. 可参考:指针和引用与及指针常量和常量指针 或查阅其他资料. 一级指针和二级指针 个人觉得文字描述比较难读懂,直接看代码运行结果分析好些,如果想看文字分析 ...

  8. 用R的dplyr进行数据转换(一)

    在网上找了很久关于数据转换的,都没有找到比较好的.现在为大家整理一下.按照我自己的思路.当然也是为了自己做笔记. 为了方便,大家可以统一安装一个系列的包,这个只需要安装tidyverse这个包就可以, ...

  9. SWUST OJ Gold Nuggets Distribution(0490)

    Gold Nuggets Distribution(0490) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 421 Accepte ...

  10. CentOS卸载旧版本内核

    CentOS卸载旧版本内核 查看正在使用的内核 uname -a 查看系统中的全部内核 rpm -qa | grep kernel 卸载多余内核 yum remove kernel-x.xx.x