1.事务定义:
在一组业务逻辑操作中,要么全部成功,要么全部失败。
2.事务特性(ACID):
- 原子性:事务是一个不可分割的整体。
- 一致性:事务的操作前后,数据保持一致(数据保持完整)。
- 隔离性:两个事务的并发问题。
- 持久性:事务一旦提交,不能回滚。
3.并发访问问题(隔离问题)
- 脏读:一个事务读到了另一个事务没有的数据。
- 不可重复读:一个事务读到了另一个事务已经提交的数据(特指Update)。
- 虚读/幻读:一个事务读到了另一个事务已经提交的数据(特指Insert)。
4.隔离级别:用于解决隔离问题。
Read Uncommitted (读取未提交):一个事务读到了另一个事务没有提交的数据。存在3个问题:脏读,不可重复读,幻读。
Read Committed(读取已提交):一个事务读到了另一个书屋已经提交的数据。解决一个问题:脏读。存在两个问题:不可重复读,幻读。
Repeatable Read(可重复读):一个事务中,多次读取的数据重复。解决2个问题:脏读,不可重复读。存在1个问题:幻读。
Serializable(串行化):一次执行一个任务(单事务)。
为了解决隔离问题,数据库管理系统引入了隔离级别(如读未提交、读提交、可重复读和串行化),以及并发控制机制(如锁定、多版本并发控制等)。这些技术和策略可以保证多个事务并发执行时的数据一致性和正确性,避免隔离问题的发生。具体的隔离级别和并发控制机制的选择取决于应用的需求和性能要求。
5.常见数据库默认隔离级别:
mysql:默认级别 可重复读
oracle:默认级别 读已提交
6.性能&安全:
性能:读未提交 > 读已提交 > 可重复读 > 串行化
安全:读未提交 < 读已提交 < 可重复读 < 串行化