Mysql中的事务是什么?事务都有哪些隔离级别?

事务

1.概念

事务是一组操作的集合,它是一个不可分割的整体,在mysql中:事务就是完成特定功能的sql语句集合。

2.特性

1)原子性(atomicity):事务是不可分割的整体,事务中包括的操作要么都做(commit),要么都不做(rollback)。
2)一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。事务开始前和结束后,数据库的完整性没有被破坏。
3)隔离性(isolation):多事务状态下,一个事务内部的操作和使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
4)持久性(durability):指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

事务隔离级别

1.场景

多条数据并发操作同一条数据

2.处理的问题

1)脏写:一个事务修改了另一个事务未提交的更新数据。
2)脏读:一个事务读取到另一个事务未提交的更新数据。
3)不可重复读:事务A读取一行数据后,事务B修改该数据并提交,事务A再次读取该数据,两次读到的数据不同。
4)幻读:事务A读取一组数据后,事务B添加新数据并提交,事务A再次读取该数据,两次读到的数据行不同。

3.隔离级别:

1)读未提交(Read Uncommited)
事务读取时不加读锁,事务写入时加写锁,解决脏写
2)读已提交(Read Commited)
事务读取时加读锁,事务写入时加写锁,解决脏写、脏读
3)可重复度(Repeatable Read) - MySQL的默认隔离级别
事务读取时不加读锁(innodb还会加间隙锁),事务写入时加写锁,解决脏写、脏读、不可重复读
MySQL通过给查询提供虚拟表,解决了不可重复读和幻读 4)可串行化(Serializable)
所有事务串行化顺序执行

4.隔离级别和所处理的问题对照表

隔离级别\问题

脏写

脏读

不可重复读

幻读

读未提交

解决

存在

存在

存在

读已提交

解决

解决

存在

存在

可重复读

解决

解决

解决

存在

可串行化

解决

解决

解决

解决