一、事务是什么?
事务指的是一组SQL语句的操作,是一个整体,要么全部成功,一旦这一事务中的SQL语句中有错误出现,则全部失败,在本文中提到的都是源于Mysql中INNODB学习后的总结,在MySql中,MYISAM是不支持事务
关闭MySQL自动提交 SET AUTOCOMMIT = 0;开启一个事务,标记事务的起始点 START TRANSACTION;向数据库提交事务 COMMIT;将事务回滚,所有的数据库操作被取消 ROLLBACK;开启MySQL自动提交 SET AUTOCOMMIT = 1;
二、事务的ACID的特性
事务为了保证自己的完整性,保证数据的准确性,将有错误的事务进行回滚,事务有这样的四个比较鲜明的特性。分别是即原子性、一致性、隔离性、持久性。
原子性(Atomicity)
2.1. 一个事务中的多组操作,要么全部成功,要么全部失败。在事务提交(commit)成功之后,所有的操作都生效,提交失败,所有的操作都会回滚。
一致性(Consistency)
2.2. 一个事务执行之前和执行之后数据库都必须处于一致性状态。在事务执行的过程中,只要事务未提交,就不会改变数据库的状态。提交之后事务已完成,此时数据库状态发生变化。
隔离性(Isolation)
2.3. 事务在执行过程中,是与外界完全隔离的,即使数据库发生了变更,事务中也获取不到。A 事务对数据库做的变更,在事务未提交之间,数据库中也看不到,B 事务中也看不到。
持久性(Durability)
2.4.也称为永久性。 事务一旦提交,对数据库的变更就会持久化到磁盘,即使数据库发生异常重启,数据也不会丢失。
三、隔离级别
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。
3.1 Read Uncommitted(读取未提交内容)
在该隔离级别,所有事务都可以看到还没有被提交的事务,获取本来此时不会获取的信息,这种隔离级别一般不会被应用在实际应用中,它的性能也不比其他的隔离级别好,它也被称为脏读。
3.2 Read Committed(读取提交内容 也叫做不可重复读)
这种隔离级别被大多数数据库默认使用(但并不是MySql默认),在此隔离级别下,事务只能看见已经被提交的数据,当读取一个事务两次,读取到的结果不相同,说明这个事务在两次读取期间被进行修改了