前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql在InnoDB引擎中的锁

mysql在InnoDB引擎中的锁

作者头像
槽痞
发布2020-06-23 15:29:52
8360
发布2020-06-23 15:29:52
举报

源问题 : 有懂秒杀的兄弟吗?为什么 mysql 这样会出现超卖的问题

  • 锁的隔离级别分为四种
    • 未提交读
    • 提交读
    • 可重复读:Innodb默认级别
    • 可串行化

Innodb默认情况下是开启了自动事务。

幻读和脏读的区别: 幻读侧重于新增和删除(同一事务中读取的数据不一致),脏读倾向于数据

Innodb通过多版本并发控制解决幻读的问题。

update语句条件中在有id情况和没id的情况下,锁级别不一样,有id是行锁,没id是表锁。

效率方面,在mysql条件中进行计算会导致索引失效。

代码语言:javascript
复制
    for i := 0;i<300;i++{
        i := i
        go func(i int){
            if err := model.UpdateTest();err != nil{
                fmt.Println(err)
            }

            fmt.Println("current num:" + strconv.Itoa(i))
        }(i)
    }
    time.Sleep(time.Second*5)
代码语言:javascript
复制
func  UpdateTest() error{

    return DB.Self.Exec("update class set num = num -1 where  id = 1 and (num -1 ) >= 0").Error

}
测试结果
测试结果

最后,简单在demo用go开300并发也没有出现超售现象

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档