1乐观锁
实现的机制
- 一般会在数据库中加一个字段一般叫(version)
实现原理
- 取出记录时,获取当前version
- 更新时,带上这个version
- 执行更新时, set version = newVersion where version = oldVersion
- 如果version不对,就更新失败
2悲观锁
3事务
3.1原子性
**原理: **
- 当我们开启了事务,将数据全部写到日志中
- 利用了滚回日志(undo)
- 如果出现异常,根据日志中的记录回滚
保证事务的原子性
3.2持久性
作用: 容灾备份
原理:
- 有一个缓冲池,异步线程统统不数据到硬盘中
- 保存在redo日志文件之中,保证数据的不容易对丢失
3.3隔离性
作用:解决高并发问题,会有以下问题
- 脏读
- 幻读
- 不可重复读
- 更新数据丢失问题
隔离级别:实现原理
通过对锁的组合实现并发控制
分类:
- 共享锁(读锁)
多个请求可以同时共享一把锁,提高高并发效率
- 排它锁(写锁)(Sql语句: for update)
排斥其他请求,等待写入完成,才释放
- MVCC 多版本并发控制(乐观锁原理)
会创建两个隐藏的列,用来做版本控制,版本不一样就拒绝写入
3.4一致性
- 事务完成时,数据必须处于一致状态,数据的完整性约束没有被破坏,事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没 有执行过一样。