大家好,今天又来更文了。上篇文章简单介绍了事务之后,我们来学习下什么是事务日志和MySQL中的事务。
事务日志可以帮助提高事务效率。事务开始和结束都会记录到事务日志中,存储引擎在修改表数据时,只修改其内存拷贝,并把修改行为记录到硬盘上的事务日志中,事务日志是按顺序追加的,因此写日志的操作磁盘上一小块区域内的顺序I/O,而不是随机IO,需要在磁盘上移动磁头,所以记录事务日志很快,事务日志持久以后,内存中被修改的数据在后台,根据记录的事务日志再慢慢回写到磁盘上。通常称之为预写式日志。
如果数据的修改只记录到了事务日志,内存中的数据还没有回写到磁盘时,系统崩溃了,存储引擎在重启的时候能够自动恢复这部分修改的数据。
MySQL提供了两种事务型的存储引擎:InnoDB和NDB Cluster。
MySQL默认使用自动提交(AUTOCOMMIT)模式。如果不是显示的开始一个事务,那么每个查询都被当做一个事务提交。
查看MySQL的自动提交模式:
show variable like 'autocommit';
autocommit=1或者ON时表示开启自动提交模式。autocommit=0或者OFF表示禁用。修改autocommit对于非事务型表,不会有影响。
修改提交模式:
set autocommit=1;
另外还有一些命令,在执行之前会强制执行commit提交当前的活动事务。比如ALTER TABLE、LOCK TABLES。
MySQL中默认的隔离级别是REPEATABLE READ可重复读模式。
执行如下命令修改隔离级别为提交读:
set transaction isolation level read commited;
在事务中不要混合使用存储引擎。
隐式和显示锁定是什么?
InnoDB采用的是两阶段锁定协议。事务在执行过程中,随时都可以执行锁定,锁只有在提交和回滚时候才会释放。InnoDB会根据隔离级别在需要的时候自动加锁。这是隐式锁定。
InnoDB也支持通过特定的语句显示加锁。比如:
select ... for update;
select ... lock in share mode;
每天学习一点,每天进步一点!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。