事务是数据库最小工作单元,它的操作是不可以被分割的原子操作,是保证数据一致性的重要手段之一。本文将通过基本概念、特性、隔离级别以及实现原理,带领大家熟悉MySql中的事务。在MySql中,常见支持事务的存储引擎包括innoDB,NDB等,而另外一个常用的存储引擎MyISAM是不支持事务的,本文主要针对innoDB进行分析。
1
事务基础
首先来看一下事务的4大特性ACID:
原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
一致性(Consistent):一方面,在事务开始之前和事务结束以后,数据库的完整性没有被破坏;另一方面,写入的数据必须完全符合所有的预设规则。
隔离性(Isolation):不同的会话或线程,操作数据库的时候可能产生多个事务。如果同时操作一张表或同一行数据,必然产生并发或干扰操作。隔离性要求事务间对表或数据操作是透明的,互相不存在干扰的,通过这种方式保证一致性。
持久性(Durable):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
那么,数据库中什么时候会出现事务呢?在MySql中,事务的提交存在两种方式,自动提交与手动提交,默认已经开启了自动提交。
可以使用指令查看是否开启自动提交:
show variables like 'autocommit';
当变量autocommit的值为ON时,代表自动提交开启,改为OFF则变为手动提交。在手动提交模式下,可以使用下面两种指令开启事务: