Mysql事务以及隔离级别,版本链及MVCC

本文将通过操作实际Mysql表来演示Mysql的事务相关知识点,以及介绍四种事务隔离级别是如何处理并发事务问题,最后引出MVCC和锁。

一.Mysql支持事务的引擎InnoDB

在MySQL 5.1 及之前的版本,MyISAM是默认引擎,MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM并不支持事务以及行级锁。

于是在Mysql5.1版本之后,Mysql就将InnoDB作为默认引擎。InnoDB可以支持行锁和事务,非常适用于处理操作量大,复杂度高的数据,存在频繁写操作的场景。

1.比较MyISAM与InnoDB区别

(1)存储结构上:

         MyISAM:每个MyISAM在磁盘上存储成三个文件。分别为:表定义文件、数据文件、索引文件。

         InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。

(2)存储空间上:

         MyISAM: MyISAM支持支持三种不同的存储格式:静态表、动态表、压缩表。

         InnoDB: 需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。

(3) 可移植性、备份及恢复  

         MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。

         InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,对于数据量大的文件会很吃力。

(4)事务支持

          MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持

          InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

(5)表锁差异

         MyISAM: 只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。

         InnoDB: 支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。

(6)CRUD操作

         MyISAM:执行大量的SELECT,MyISAM是更好的选择。

         InnoDB:执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

(7)外键

         MyISAM:不支持

         InnoDB:支持

可参考文章 https://segmentfault.com/a/1190000008227211

2.Mysql事务作用

  • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
  • 事务用来管理 insert,update,delete 语句

二.事务ACID原则

一般情况下,事务需要满足ACID四个基本原则。

(1)原子性:Atomicity,又称不可分割性

一个事务中的所有操作要么全部完成,要么全部失败,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

(2)一致性:Consistency

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值