前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【高性能MySQL】什么是事务日志及MySQL中的事务

【高性能MySQL】什么是事务日志及MySQL中的事务

原创
作者头像
用户9295575
修改2025-01-01 21:19:23
修改2025-01-01 21:19:23
1760
举报

大家好,今天又来更文了。上篇文章简单介绍了事务之后,我们来学习下什么是事务日志和MySQL中的事务。

1、事务日志

事务日志可以帮助提高事务效率。事务开始和结束都会记录到事务日志中,存储引擎在修改表数据时,只修改其内存拷贝,并把修改行为记录到硬盘上的事务日志中,事务日志是按顺序追加的,因此写日志的操作磁盘上一小块区域内的顺序I/O,而不是随机IO,需要在磁盘上移动磁头,所以记录事务日志很快,事务日志持久以后,内存中被修改的数据在后台,根据记录的事务日志再慢慢回写到磁盘上。通常称之为预写式日志。

如果数据的修改只记录到了事务日志,内存中的数据还没有回写到磁盘时,系统崩溃了,存储引擎在重启的时候能够自动恢复这部分修改的数据。

2、MySQL中的事务

MySQL提供了两种事务型的存储引擎:InnoDB和NDB Cluster。

MySQL默认使用自动提交(AUTOCOMMIT)模式。如果不是显示的开始一个事务,那么每个查询都被当做一个事务提交。

查看MySQL的自动提交模式:

代码语言:sql
复制
show variable like 'autocommit';

autocommit=1或者ON时表示开启自动提交模式。autocommit=0或者OFF表示禁用。修改autocommit对于非事务型表,不会有影响。

修改提交模式:

代码语言:sql
复制
set autocommit=1;

另外还有一些命令,在执行之前会强制执行commit提交当前的活动事务。比如ALTER TABLE、LOCK TABLES。

MySQL中默认的隔离级别是REPEATABLE READ可重复读模式。

执行如下命令修改隔离级别为提交读:

代码语言:sql
复制
set transaction isolation level read commited;

在事务中不要混合使用存储引擎。

隐式和显示锁定是什么?

InnoDB采用的是两阶段锁定协议。事务在执行过程中,随时都可以执行锁定,锁只有在提交和回滚时候才会释放。InnoDB会根据隔离级别在需要的时候自动加锁。这是隐式锁定。

InnoDB也支持通过特定的语句显示加锁。比如:

代码语言:sql
复制
select ... for update;
select ... lock in share mode;

每天学习一点,每天进步一点!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、事务日志
  • 2、MySQL中的事务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档