MySQL和其它的数据库产品有一个很大的不同就是事务由存储引擎所决定
例如MYISAM,MEMORY,ARCHIVE都不支持事务,事务就是为了解决一组查询要么全部执行成功,要么全部执行失败。
MySQL事务默认是采取自动提交的模式,除非显示开始一个事务。
事务的四大特征是什么?
数据库事务正确执行的四个基本要素,ACID,原子性(Atomicity),一致性(Correspondence),隔离性(Isolation),持久性(Durability)。
- 原子性:整个事务的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节,事务在执行过程中发生错误,会回滚到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性:在事务开始之前和结束以后,事务的完整性约束没有被破坏。
- 隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中只有改事务在使用系统。
- 持久性:在事务完成之后,该事务对数据库所作的更改便持久的保存在数据库中,并不会被回滚。
四种隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommitted (读未提交) | 是 | 是 | 是 |
Read committed (读已提交) | 否 | 是 | 是 |
Repeatable read (可重复读) | 否 | 否 | 是 |
Serializable (串行读) | 否 | 否 | 否 |
- 读未提交(Read uncommitted):未提交读隔离级别也叫脏读,就是事务可以读取其他事务未提交的事务
- 读已提交(READ COMMITTED):在其它数据库系统比如 SQL Server 默认的隔离级别就是提交读,已提交读隔离级别就是在事务未提交之前所做的修改其它事务是不可见的。
- 可重复读(REPEATABLE READ):保证同一个事务中的多次相同的查询的结果是一致的,比如一个事务一开始查询了一条记录然后过了几秒钟又执行了相同的查询,保证两次查询的结果是相同的,可重复读也是 mysql 的默认隔离级别。
- 可串行化(SERIALIZABLE):可串行化就是保证读取的范围内没有新的数据插入,比如事务第一次查询得到某个范围的数据,第二次查询也同样得到了相同范围的数据,中间没有新的数据插入到该范围中。