MysqlInnodb锁
乐观锁
具体流程
读取数据对数据操作事务提交,校验数据读取后是否被修改
时间戳判断:数据更新同时更新时间戳版本判断:数据更新升版 校验无误写入,否则回滚 特点:
实际上没有使用数据库的锁适用于乐观的场景,及对数据竞争冲突较少的情况(读频繁)
悲观锁
共享锁(S)
大家都可以加锁,无论是否已经加了共享锁加了锁之后,谁也不能修改,直到所有锁被释放
排他锁(X)
增删改默认加加锁后其他线程不得对被加锁数据任何操作
行锁
锁定一行数据根据主键索引锁定该行
begin;select XXX from XXX where XXX=XXX for update;commit; 若无索引,则锁定整表
表锁
锁定一张表
特点
适用于写频繁的场景