MySQL听讲(二)——事务

经常听人说事务,事务具有ACID,现在来说一说事务:

隔离性

事务的隔离,实际上是一个虚拟视图的创建。

隔离级别 意义 视图创建时间
读未提交 一个事务还没提交时,他的变更就可以被别的事务看到
读提交 一个事务提交之后,他的变更才被其他事务看到 每个SQL开始执行时创建视图
可重复读 一个事务执行中看到的数据,和事务启动时看到的一致。其未提交的变更,其他事务也不可见 事务启动时创建视图
序列化 对于同一行记录,按顺序执行 加锁,没有视图
读加读锁
写加写锁

关于隔离级别的查询:

show VARIABLES LIKE 'transaction_isolation';

MySQL默认的隔离级别是可重复读。其MVCC(多版本并发控制)就是依赖于事务的视图。
在每一个事务中存在着虚拟视图、修改的新记录、回滚到旧记录的记录(回滚段)。

尽量不要使用长事务,原因有下:

  • 占空间。长事务会意味着系统里存在着很老的视图。再提交之前,这些东西会一直占用存储空间(期间会使用到磁盘和内存,参见第一节中的redo log部分)。
  • 占有锁。锁资源占有时间长了会拖垮数据库的。

查询长事务,如下是查询事务时间超过60s的:

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

关闭长事务(MySQL默认为关闭的):

set AUTOCOMMIT =1;

幻读

在同一事物中,前后两次查询同一范围时,后一次查询看到了前一次查看没有看到的值。
幻读只发生在“当前读”下,且幻读仅指新插入的行。
select * from t where name='x' for update;这就是一条当前读语句。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 观其大纲 第1章 MySQL体系结构和存储引擎第2章 InnoDB存储引擎第3章 文件第4章 表第5章 索引与算法...
    周少言阅读 7,000评论 0 33
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,755评论 0 30
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,853评论 5 116
  • 为了充分发挥MySQL的性能并顺利地使用,就必须理解其设计。MySQL的灵活性体现在很多方面。例如,你可以通过配置...
    李文文丶阅读 1,210评论 0 4
  • 一、事务 1、事务四要素:ACID 对于事务,我之前的理解是很粗糙的,不就是为了保证操作的原子性么?一般订单系统或...
    张伟科阅读 1,349评论 0 5