在上一篇文章中我们介绍了事务的概念,还有事务的相关的特性和隔离属性。既然我们了解了事务是什么东西,那么事务是数据存储中怎么使用的呢,在这篇文章中我们就来看看事务在MySQL中的应用。
首先我们知道MySQL是一个关系型的数据库,MySQL支持多种存储引擎,其中InnoDB是支持事务的。接下来我们就看看在MySQL的InnoDB的存储引擎中事务的使用.
MySQL关于事务的主要命令有以下几个
START TRANSACTION;-- 开启事务 COMMIT;-- 提交事务 ROLLBACK;-- 回滚事务
假设我们在MySQL的数据库中存在以下InnoDB表:
- 表:test_table_a
字段 | 类型 |
---|---|
id | int |
name | varchar(5) |
MySQL有个事务开关语句用来设置当前会话中是否是默认提交事务的语句,在支持默认提交的情况下,即每个语句都会被当成一个事务,然后在执行单个语句的时候,会自动提交一个事务,默认情况下,MySQL的这个开关是开启的。
SET autocommit = {0 | 1}
在接下来例子中我们都会使用去主动开启一个事务,而不是使用MySQL的默认提交。
我们开启一个MySQL事务,插入数据,提交事务,再查出数据,可以看到我们的事务成功提交数据,并且在提交可以查出对应的数据。
START TRANSACTION;-- 开启事务 INSERT INTO test_table_a(name) value ('testA'); COMMIT;-- 提交事务 SELECT * FROM test_table_a;
接下来我们重新开启一个事务,也是插入数据,但是此时我们不提交事务,可以看到我们能查出最新插入的数据
START TRANSACTION;-- 开启事务 INSERT INTO test_table_a(name) value ('test'); SELECT * FROM test_table_a;
当前会话的事务尚未提交,此时我们打开另外一个会话看看,在另外一个事务能否查看到当前会话事务尚未提交的信息
结果发现另一个会话的事务并不能查询出尚未提交的事务修改的数据,说明MySQL的事务隔离性是在读已提交之上的一个级别
执行MySQL查询查询语句事务隔离级别,发现是可重复读级别,因此是读不到其他事务尚未提交的修改。
SELECT @@tx_isolation;
此时我们插入语句的事务还没有提交,我们执行回滚语句,然后再执行查询语句,看下数据是否依然存在
ROLLBACK;
SELECT * FROM test_table_a;
结果发现我们插入的数据已经不存在,说明此时对应的SQL语句已经回滚成功。
这就是MySQL关于事务的相关操作命令,我们使用这些指令,便可以实现在MySQL中使用一个事务进行事务操作。