数据库锁与事务三级隔离、脏读 幻读 不可重复读

详细介绍:https://blog.csdn.net/qq_27525611/article/details/102590314

ACID

原子性、一致性、隔离性、持久性

  • 一致性:事务执行前后,数据库均处于正确的状态。
  • 不加锁情况下,只能保证 ACID,不能实现多线程同步。

乐观锁 & 悲观锁

悲观锁:读数据之前上锁

乐观锁:

不上锁,在写入之前检测一下数据是否有被修改;

标记是否被修改的方法有版本号、时间戳、CAS 算法。

事务的三级隔离

Read uncommittedRead committedRepeatable Read(默认)Serializable(三级)
读取数据S 锁,读完立即释放👈S 锁,事务结束后释放
修改数据X 锁,事务结束后释放👈👈👈
更新丢失
脏读
不可重复读
幻读

脏读

select 到另一个事务未提交的值。

不可重复读

两次读取到不同的值:已读的值发生变化。

幻读

两次读取到不同的结果集:其他事务 insert 的新值。

更新丢失(2 类)

  1. 一个事务更新完提交后, 另一事务回滚, 造成丢失.
  2. 先更新的事务被后更新的事务提交的数据覆盖。

https://blog.csdn.net/u010841296/article/details/84204701

发布者

胡中元

《中原驿站》站长

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注