Mysql B+数的优点、聚簇索引和非聚簇索引的区别、乐观锁和悲

2021-07-13  本文已影响0人  taobao

Mysql使用B+数的优点:

聚簇索引和非聚簇索引的区别

主索引和辅助索引

主索引:

辅助索引:

主索引和辅助索引的差别:

悲观锁和乐观锁

  1. 悲观锁:
set autocommit = 0
  1. 乐观锁
    乐观锁,它认为数据一般情况下不会造成冲突,所以在数据提交更新是才去做冲突检测,
    实现方式:给数据加版本号,数据读取后记录下版本号,修改时带上版本号修改,如果修改失败,说明数据已经被其它会话修改,就需要程序额外处理了。
    一般形式:
    //开始事务
    start transaction;
    //查询信息
    select status,version from order where id = 1;
    获取version的值,v1; //其它操作 ..... //修改 update order set status=2,version=version+1 where id=1 and version= {v1}
    //修改不成功 回滚事务
    rollback;
    //修改成功 提交事务
    commit;
    //如果修改失败,说明版本号发生了变更,数据已经被其它会话修改过,此次操作失败,就可以回滚事务了,后续做报错处理。

在部分场景,比如秒杀活动,
用悲观锁,会导致大量用户长时间等待加锁
用乐观锁,都会导致大量用户修改失败
二者都不太好,有一个乐观锁的优化方案,
一般乐观锁:
select num,version from good where id =1
.....
update good set num=num-1,version=version+1 where id=1 and version={$v}
改进策略,非常巧妙
select num from good where id = 1;
update good set num=num-1 where id=1 and num>0

MySQL当前读和快照读

当前读和快照读的实现方式

备注:
1: 事务隔离级别是串行化,那么所有的会话之间都是排它锁形式,都是当前读,非快照读

上一篇 下一篇

猜你喜欢

热点阅读