事务基本要素
- 原子性:事务要么成功,要么中间失败回滚到操作之前的状态
- 一致性:A向B转钱,不可能B没收到
- 隔离性:对于某数据,在一个时刻只能有一个事务在操作
- 持久性:事务完成后,事务对数据库的所有操作将将被保存到数据库,不能回滚
事务并发问题
- 脏读:事务A读取事务B更新的数据,然后B回滚操作。
- 不可重复读:在一个事务的多次查询中出现数据不一致。这可能是在查询过程中插入了对原有数据的更新。
- 幻读:在一个事务的多次查询中,发现数据笔数不一致。比如查询某列数据,最后发现多了几条数据,这是因为在读的过程中插入了几列新的数据。
四种隔离级别
- 读取未提交内容:所有事务都可以看到其他未提交事务的内容。但会出现脏读
- 读取提交内容:事务只能看见其他已提交事务所做的修改。避免了脏读的产生,但是还是存在不可重复读现象。
- 可重读:确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。update、delete、add才会更新版本。但是还是存在幻读现象,因为其他事物可以向数据库提交新数据。
- 可串行化:通过强制事务排序,使之不可能相互冲突。事务隔离级别最高,但是性能最低