一 、事物的特性:ACID

数据库的事务必须具备ACID特性,ACID是指 Atomicity(原子性)、Consistensy(一致性)、Isolation(隔离型)和Durability(持久性)的英文缩写。

1、原子性(Atomicity

事务包装的一组sql,要么都执行成功,要么都失败。这些操作是不可分割的。

2、一致性(Consistency

数据库的数据状态是一致的。

事务的成功与失败,最终数据库的数据都是符合实际生活的业务逻辑。一致性绝大多数依赖业务逻辑和原子性。

3、持久性:(Durability)

事务成功提交之后,对于数据库的改变是永久的。哪怕数据库发生异常,重启之后数据亦然存在。

4、隔离性(Isolation

一个事务的成功或者失败对于其他的事务是没有影响。两个事务应该相互独立。

二 、事物的隔离级别

如果不考虑事务的隔离性,由于事务的并发,将会出现以下问题:

1、脏读 -- 最严重,杜绝发生

2、不可重复读

3、幻读(虚读)

  • 脏读:指一个事务读取了另外一个事务 未提交的数据。

一个事务读取了另一个事务没有提交的数据,非常严重。应当尽量避免脏读。

  • 不可重复读:在一个事务内多次读取表中的数据,多次读取的结果不同。

  • 幻读(虚读)

隔离级别:解决问题

  • 数据库规范规定了4种隔离级别,分别用于描述两个事务并发的所有情况。

   1.read uncommitted 读未提交,一个事务读到另一个事务没有提交的数据。

     a)       存在:3个问题(脏读、不可重复读、虚读)。

     b)       解决:0个问题

   2.read committed 读已提交,一个事务读到另一个事务已经提交的数据。

     a)       存在:2个问题(不可重复读、虚读)。

     b)       解决:1个问题(脏读)

   3.repeatable read:可重复读,在一个事务中读到的数据始终保持一致,无论另一个事务是否提交。

     a)       存在:1个问题(虚读)。

     b)       解决:2个问题(脏读、不可重复读)

   4.serializable 串行化,同时只能执行一个事务,相当于事务中的单线程。

        a)       存在:0个问题。

     b)       解决:3个问题(脏读、不可重复读、虚读)

  • 安全和性能对比

    安全性:serializable > repeatable read > read committed > read uncommitted

    性能 : serializable < repeatable read < read committed < read uncommitted

  • 常见数据库的默认隔离级别:

    MySql:repeatable read

    Oracle:read committed

演示(在mysql数据库中,底层对于幻读做了优化,演示不了)

  查询数据库的隔离级别

 show variables like '%isolation%';

select @@tx_isolation;

  设置数据库的隔离级别

  • set session transaction isolation level 级别字符串
  • 级别字符串:read uncommitted、read committed、repeatable read、serializable
  • 例如:set session transaction isolation level read uncommitted;

  读未提交:read uncommitted

  • A窗口设置隔离级别
  • AB同时开始事务
  • A 查询
  • B 更新,但不提交
  • A 再查询?-- 查询到了未提交的数据
  • B 回滚
  • A 再查询?-- 查询到事务开始前数据

  读已提交:read committed

  • A窗口设置隔离级别
  • AB同时开启事务
  • A查询
  • B更新、但不提交
  • A再查询?--数据不变,解决问题【脏读】
  • B提交
  • A再查询?--数据改变,存在问题【不可重复读】

  可重复读:repeatable read

  • A窗口设置隔离级别
  • AB 同时开启事务
  • A查询
  • B更新, 但不提交
  • A再查询?--数据不变,解决问题【脏读】
  • B提交
  • A再查询?--数据不变,解决问题【不可重复读】
  • A提交或回滚
  • A再查询?--数据改变,另一个事务

  串行化:serializable

  • A窗口设置隔离级别
  • AB同时开启事务
  • A查询
  • B更新?--等待(如果A没有进一步操作,B将等待超时)
  • A回滚
  • B 窗口?--等待结束,可以进行操作

Mysql数据库的事物的更多相关文章

  1. MySQL数据库的事物隔离级别

    一. 查看数据库的事物隔离级别 mysql> show variables like '%isolation'; +-----------------------+--------------- ...

  2. Python全栈 MySQL 数据库 (引擎、事物、pymysql模块、orm)

    ParisGabriel              每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰    开局一张图     存储引擎(处理表的处理器)     基本操作:         ...

  3. 数据库操作事物的四大特性以及MySQL数据库的四种隔离级别

    1 .事物操作数据库的四大特性(ACID) 1.原子性 (Atomicity) 原子性:就是事物的所包含的所有操作,要么全部成功,要么全部失败回滚. 2.一致性 (Consistency) 一致性:简 ...

  4. mysql数据库备份

    前一段时间因为误操作删除了一张表的几条数据,弄得很尴尬,正好这周有空就折腾了下数据备份的知识,现把mysql的数据备份相关实践和心得总结如下: 一.使用mysqldump命令备份数据库: 备份整个数据 ...

  5. 优化MySQL数据库性能的八大方法

    本文探讨了提高MySQL 数据库性能的思路,并从8个方面给出了具体的解决方法. 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就 ...

  6. python使用mysql数据库

    一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...

  7. mysql 数据库基本概念

    mysql 数据库基本概念 一.数据库的集中控制优点1.降低存储数据的冗余度2.更高的数据一致性3.存储的数据可以共享4.可以建立数据库所遵循的标准5.便于数据维护完整性6.能够实现数据的安全性 二. ...

  8. nodejs+sequelize操作mysql数据库

    前言: 本人对mysql不是很熟悉,只会命令行的简单增删改查.有些观点可能不到位请谅解. sequelize是针对node.js和io.js开发的基于ORM的框架,它支持的数据库包括:PostgreS ...

  9. Mysql数据库之Binlog日志使用总结

    binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍1)什么是binlo ...

随机推荐

  1. makefile vpath变量

    在讲vpath之前,我们首先了解以下makefile文件. 在类Unix系统中,当我们使用源码编译某个软件的时候,我们会使用confiure,make,make install这三个命令,其中cofi ...

  2. dzzoffice网盘应用有着最强大的团队、企业私有网盘功能,并且全开源无功能限制。

    企业,团队多人使用dzzoffice的网盘应用,灵活并且功能强大. 支持个人网盘,机构部门,群组,并可根据使用情况开启关闭.例如可只开启群组功能.   可通过后缀,标签自定义类型进行快捷筛选   全面 ...

  3. python 字符与字节 json序列和反序列及支持的类型

    b = b"demo" s = "demo" # 字符串转字节 s = bytes(s, encoding = "utf8") s = st ...

  4. sysUpload.vue上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock')

    上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock') <!-- * ...

  5. myBatis的binding错误:Invalid bound statement (not found)

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误这个问题我找了好久,终于找到了正确的写 ...

  6. Python虚拟环境 之 virtualenv 与 virtualenvwrapper

           在开发Python应用程序的时候,比如系统安装的Python3只有一个版本:3.6.所有第三方的包都会被 pip 安装到Python3的 site-packages 目录下. 如果我们要 ...

  7. 沈南鹏@《遇见大咖》: A轮没投,投了8个月以后就证明了张一鸣是对了,在美国都没有张一鸣这种模式

    沈南鹏@<遇见大咖>: A轮没投,投了8个月以后就证明了张一鸣是对了,在美国都没有张一鸣这种模式

  8. 性能测试,如何得到大量token,并保存在本地文件中

    需求:性能测试需要大量的token,模拟登陆 设计思路: 1.使用语言:python +request+正则匹配+写入本地 2.jmeter+函数助手+正则或者json/yaml+后置处理器beans ...

  9. bzoj 3555 企鹅QQ

    https://www.lydsy.com/JudgeOnline/problem.php?id=3555 枚举每一位字符,计算字符两侧的哈希值,然后进行比较,用map或排序记录出与其相同的字符串数量 ...

  10. Python自动化测试框架——生成测试报告

    如何才能让用例自动运行完之后,生成一张直观可看易懂的测试报告呢? 小编使用的是unittest的一个扩展HTMLTestRunner 环境准备 使用之前,我们需要下载HTMLTestRunner.py ...