MySQL存储引擎-事务

457 阅读2分钟

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

猫和老鼠.jpg

前言: 本篇文章 是我关于MySQL的第10篇文章,水平一般、能力有限。文章写的比较浅,适合新手来看。本篇文章是接着前面的数据库中的死锁来讲一下MySQL中存储引擎和事务的关系。

MySQL提供了支持事务的存储引擎有:InnoDB和NDB Cluster。

1. 自动提交

一般来说MySQL的存储引擎是默认开启自动提交的。但是前提是该SQL是一个单条的SQL。例如下文中的两条SQL其实是开启了默认提交的。只不过是我注释掉的SQL存储引擎帮我们实现了。

-- start transaction;
update NewTable set name='汤师爷' where id=1;
-- commit;
-- start transaction;
update NewTable set name='张麻子' where id=2;
-- commit;

2. 关闭自动提交

自动提交可以关闭吗,答案是肯定的。

show variables like 'autocommit'; -- 查询自动提交是否开启

Variable_name|Value|
-------------+-----+
autocommit   |ON   |

set autocommit =OFF; -- 1/ON表示启动  0/OFF表示禁用

show variables like 'autocommit'; --这里已经改变了
Variable_name|Value|
-------------+-----+
autocommit   |OFF  |

当autocommit =OFF时,所有的操作都是在同一个事务中,直到手动执行commit;或提交rollback回滚,该事务结束,同时开启一个新的事务。

3. 导致自动提交的命令

另外还有一些命令在执行之前会强制执行,commit,提交当前的活动事务,典型的例子,在数据定义语言中,如果是会导量大,导致大量数据改变的操作比修改表结构就是如此,此外,还有额索表等其他语句也会导致同样的结果,如果有需要,请检查对应版本的官方文档来确认所有可能导致自动提交的语句列表。

MySQL 可以设置隔离级别时,会在下一个事务开始时生效。当前进行的事务并不生效。