数据库的事务

事务的四大特性(ACID)

  • 原子性(Atomic):事务式最小的执行单位,不允许分割。事务包含的所有操作要么全部成功,要么全部失败回滚
  • 一致性(Consistency):事务执行前后状态一致,假设A+B账号5000,不管AB相互转账多少次,最后A+B都等于5000
  • 隔离性(Isolation):多个用户并发房屋内数据时,事务相互隔离,隔离程度由隔离级别保证,主要隔离级别有读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)、串行化(serializable)
  • 持久性(Durability):事务一旦提交后对数据的改变时永久的,即使数据库遇到故障也不会丢失数据

事务级别

  • 读未提交(read uncommitted)一个事务做的变更在还未提交时就能被其他事务看到,如事务A修改id=1的sex=2,执行update语句(未commit),这时事务B查询id=2得到sex=2,这时就认为时间发生了胀读
  • 读提交(read committed)一个事务做的变更在提交后,其他事务才能看到,如事务A修改id=2的sex=2,执行update语句(未commit),这时事务B查询id=1得到的sex=1,事务A commit 后,事务B再次查询得到sex=2,这时就认为发生了不可重复读,因为同一事务多次读同一条数据状态不一致
  • 可重复读(repeatable read)一个事务执行过程中看到的数据时一样的,但查询的数据状态不正确,比如 select 一条数据不存在(状态不正确),执行 insert 操作,然后 insert 失败,这时就认为数据发生了幻读
  • 串行化(serializable)多个事务加锁串行执行,性能差,但不存在脏读、不可重复读、幻读问题

数据库的事务
https://zhstzzy.github.io/2022/06/28/数据库的事务/
作者
zhstzzy
发布于
2022年6月28日
许可协议