ACID是事务的四大特性,想要成为事务,必须具备这四点。
Atomicity
原子性体现在对于一个事务来讲,要么一起执行成功要么一起失败,执行的过程中是不能被打断或者执行其他操作的。
Consistency
一致性表现为事务进行过后和执行前,整体系统都是稳定的,比如对于入账出账操作是不会有总资金的变化的。
Isolation
隔离性表示各个事务之间不会互相影响,数据库一般会提供多种级别的隔离。实际上多个事务是并发执行的,但是他们之间不会互相影响。
Durability
持久性表示一旦一个事务成功了,那么他的改变是永久性的被记录和操作。
脏读
数据在读取数据的时候读到了其他事务正在进行修改的数据,其他的事务修改数据后又对它进行了其他操作或回滚了,这样读取的那个数据是错误的。
不可重复读
在一个事务中反复读取一个数据时读到了不同的数据,因为在读取的过程中其他的事务对其进行了修改并提交了。
幻读
第二个事务插入或删除一条数据,这个数据本应该是第一个事务读取到的,但是因为第二个事务紧接着第一个事务完成后才完成,导致了第一个事务没有读到这一条,好像出错了一样。
如何避免上述三种问题?
数据库提供了四种级别的事务隔离,来保证不同的效果。数据库锁是为了构建这些隔离级别存在的。
序号 | 隔离级别 | 可避免情况 |
---|---|---|
1 | 串行化 | 脏读、不可重复读、幻读 |
2 | 可重复读 | 脏读、不可重复读 |
3 | 读已提交 | 脏读 |
4 | 读未提交 | 无 |
MySQL默认为可重复读级别,这四种方法从上到下效率和吞吐量越来越高。