1、四大特性

  1.1 原子性(Atomicity) 

    一个事务是不可分割的最小工作单位。一个事务是不可分割的最小工作单位。

    利用undo log保证原子性,undo log记录的是操作的反向语句,例如执行的insert语句,则undo log记录的是delete语句。

  1.2 一致性(Consistency):

    事务执行前后的数据,必须保持一致。

    利用redo log保证持久性,需要注意redo log和binlog的一致性。为了保证一致性,mysql的内部存在XA事务,俗称日志的两阶段提交协议。

      redo log 记录的是数据的物理变化,所以叫物理日志,当我们修改数据的时候,写完内存了,但数据还没真正写到磁盘的时候。此时我们的数据库挂了,我们可以根据redo log来对数据进行恢复!

      binlog 记录的是数据的逻辑变化,所以又叫逻辑日志,statement模式下记载的是update/delete/insert这样的SQL语句,主要用来主从复制和恢复数据用

      XA事务:将事务提交分为了两个阶段,prepare阶段和commit阶段

        prepare:写入redo log,并将回滚段置为prepared状态,此时binlog不做操作

        commit:innodb释放锁,释放回滚段,设置提交状态,写入binlog,然后存储引擎层提交。

      mysql数据库崩溃恢复:

        崩溃恢复时,扫描最后一个Binlog文件,提取其中的xid;

        InnoDB维持了状态为Prepare的事务链表,将这些事务的xid和binlog中记录的xid做比较,如果在binlog中存在,则提交,否则回滚事务。

  1.3 隔离性(Isolation):

    多个事务之间数据要相互隔离,即彼此独立和透明互不影响。

    利用锁和MVCC机制保证隔离性

    隔离级别分为:读未提交、读已提交、可重复读、串行化

    四种隔离级别主要是为了解决:脏读、不可重复读、幻读等情况

    详细说明见 4

  1.4 持久性(Durability):

    事务一旦被提交(commit / rollback ),数据的改变是永久性的。

2、大事务

  执行时间很长的事务,会造成大量的阻塞和锁超时,容易造成主从延迟,回滚费劲等

  监控:监控表 information_schema.Innodb_trx ,设置长时间阈值,超过了报警或者kill

select * from information_schema.innodb_trx where TIME_TO_SEC(timediff(now(),trx_started))>60;

3、数据库宕机重启,事务丢失

  主要sync_binlog配置(控制binlog刷盘时机)和innodb_flush_log_at_trx_commit配置(配置redolog刷盘时机)

  默认innodb_flush_log_at_trx_commit=1 sync_binlog=0 :每次事务提交时都将 redo log 直接持久化到磁盘.但是MySQL不控制binlog的刷新,由操作系统自己控制它的缓存的刷新

4、隔离性

  隔离级别:读未提交、读已提交、可重复读、串行化

  解决问题:脏读、不可重复读、幻读

  名词解释

    脏读:某个事务执行时,读到了其他事务还没commit的数据,其他事务进行了回滚操作,就造成了脏读,也就是读到了脏数据

    不可重复读:某事务执行时,事务执行过程中任意两个时间点读取同一数据时结果不同,原因是读取某一个数据后,其他事务进行了update、commit操作,此时再读数据就出现了内容不一致情况。主要出现在update上

    幻读:a按某个规则读取记录后,b事务执行了insert语句,a再查询的时候就会发现相同规则出来的数据有变化,主要出现在insert上

    读未提交:mysql的最低隔离级别,相当于什么措施都没有

    读已提交:只能读取其他事务提交的数据,解决了脏读,但是不能解决不可重复读

    可重复读:mysql的默认隔离级别

    串行化:最高级别的隔离,所有的事务顺序执行,隔离效果最好,性能最差

  读已提交和可重复读分别是用行锁、间隙锁和MVCC机制实现的。

5、锁

  只有在inner DB下才会存在锁的概念

  范围锁

    表锁:直接锁定一个表、其余所有对表的操作都被阻塞,一般用在DDL处理时(insert,alter、drop)

    行锁:冻结一行或者几行,比如where name ='张三',则锁定所有name=张三的行

  其他锁

    共享锁:S锁,加了S锁之后可以允许其他事务读该记录

    排他锁:X锁,加了X锁之后不允许其他事务读该记录

    记录锁:仅锁定单挑索引记录的数据

    间隙锁:冻结一个索引区间,比如where id in (1,4,6,8),那么会冻结1-4行 5-8行两个区间,左开右闭

    意向锁:可以与表锁或者行锁共用,比如某事务给某一行加了一个排他锁,会同时给表添加一个意向锁,那么事务2读该表时就可以不用每条记录的判断是否有锁,而是可以直接通过意向锁知道锁的位置。

      

  

mysql 事务 隔离性 锁的更多相关文章

  1. 跟面试官侃半小时MySQL事务隔离性,从基本概念深入到实现

    提到MySQL的事务,我相信对MySQL有了解的同学都能聊上几句,无论是面试求职,还是日常开发,MySQL的事务都跟我们息息相关. 而事务的ACID(即原子性Atomicity.一致性Consiste ...

  2. 19.10.11学习日记随笔 mysql事务隔离性

    一天的感悟 学习事务的处理方式,其中反想自己学过的flask 默认是开启事务的,flask_sqlalchemy每次在提交时都是需要commit,或者失败是需要rollback回滚操作的,其实pyth ...

  3. MySQL事务及事务隔离级别 锁机制

    什么是事务? 当多个用户访问同一份数据时,一个用户在更改数据的过程中可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态更改为另一个一致性状态,这样的操作过程就是事务.事务具有的AC ...

  4. 理解MySQL数据库事务-隔离性

    Transaction事务是指一个逻辑单元,执行一系列操作的SQL语句. 事务中一组的SQL语句,要么全部执行,要么全部回退.在Oracle数据库中有个名字,叫做transaction ID 在关系型 ...

  5. Mysql事务-隔离级别

    MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...

  6. MySQL事务隔离级别(二)

    搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...

  7. MySQL事务隔离级别(一)

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

  8. Mysql 事务隔离级别分析

    Mysql默认事务隔离级别是:REPEATABLE-READ --查询当前会话事务隔离级别mysql> select @@tx_isolation; +-----------------+ | ...

  9. 一文讲清楚MySQL事务隔离级别和实现原理,开发人员必备知识点

    经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗,事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢?本文就帮大家梳理一下. MySQL 事务 本文所说的 MySQL 事务都是指在 I ...

随机推荐

  1. Keil MDK STM32系列(四) 基于抽象外设库HAL的STM32F401开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  2. MATLAB中插值算法实现

    %%%1.M文件%(1).以往少的程序可以在命令行窗口进行编码,但大量的程序编排到命令行窗口,%会有造成乱码的危险.(2).如果将命令编成程序存储在一个文件中(M文件),依次运行文件中的命令,则可以重 ...

  3. github与gitlab创建新仓库

    github创建新仓库 然后根据下一页的命令提示进行即可 gitlab创建新仓库 git init git remote add origin git@***.***.**.**:user/proje ...

  4. 动态多条件mysql模糊查询

    sql拼接函数 public static String Instructor_sql_whole_study(String[] val_ids,String[] val_values) { Stri ...

  5. 2月2日 体温APP开发记录

    1.阅读构建之法 现代软件工程(第三版) 2.观看Android开发视频教程最新版 Android Studio开发 3.Edit text使用学习

  6. csapp lab2 拆炸弹

    1. 实验内容 包含一个二进制应用bomb,需要根据该应用猜测程序的运行过程.程序主体包含了六个函数phase_1到phase_6,每个函数会根据用户的输入做出反应,当输入符合要求时,会炸弹拆解成功, ...

  7. 浅析DOM 与 html ,xml。

    DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构.是表示和处理一个HTML或XML文档的常用方法. DOM定义了 ...

  8. mysqldump 逻辑备份和物理备份

    逻辑备份 逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现. 工具:mysqldump 特点: 1.可移植性比较强 2.备份和恢复的花费时间长,不适用于大型业务系统 物理 ...

  9. cygwin -- 在windows平台上运行的unix模拟环境

    cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购).它对于学 ...

  10. 人口信息普查系统-JavaWeb-三

    今天给大家分享前端主页面的代码,设有五个功能.涉及到增删改查,用到了超链接的跳转. <!DOCTYPE html> <html lang="en"> < ...