秒杀成功后,再次刷新页面,为什么会把秒杀开始时间改变了??

来源:5-4 秒杀交互

天空属于蓝色

2017-05-13 18:24

秒杀成功后,再次刷新页面,为什么会把秒杀开始时间改变了??该怎么处理

写回答 关注

4回答

  • reeeex
    2018-03-10 17:38:43

    准备看高并发 就发现了这个问题!nice!!!

    reeeex

    我还以为是自己哪里的参数传错 还是sql写错了

    2018-03-10 17:39:11

    共 1 条回复 >

  • _Spike
    2017-09-28 19:07:11

    给大家一个详细的步骤。。

    修改了数据库里seckill表的start_time的属性就好了,

    把DEFAULT CURRENT_TIMESTAMP ON UPDATE,改为  DEFAULT '0000-00-00 00:00:00'


    不知道为什么当时sql创建完后start_time的属性是 CURRENT_TIMESTAMP ON UPDATE。。。

    老师当时:

    http://img1.mukewang.com/59ccd71e00011c1408320254.jpg

    修改后:

    http://img.mukewang.com/59ccd7820001d59506390258.jpg

    原因:

    timestamp如果设置成CURRENT_TIMESTAMP ,当执行insert操作的时候,会插入当前系统时间。

    如果是ON UPDATE CURRENT_TIMESTAMP,当执行update操作的时候,会跟着更新为当前UPDATE操作时的时间。

    我们项目里在执行减库存的时候,执行的是update语句:

                update 

                    seckill 

                set

                    number = number -1

                 where seckill_id=#{seckillId}

                 and  start_time <![CDATA[ <= ]]> #{killTime}

                 and end_time>=#{killTime}

                 and number>0;

    所以会随着这个秒杀减库存的操作改变start_time的值。


  • _Spike
    2017-09-28 18:36:47

    同楼主,我的项目秒杀成功后"秒杀开始时间"就变成了刚执行秒杀的时间了。。。

  • 天空属于蓝色
    2017-05-13 22:56:17

    问题已经找到,结果太出乎意料了,是数据库的秒杀开始时间列为|“更新”了(╯︵╰)(╯︵╰)(╯︵╰)

Java高并发秒杀API之web层

Java实现高并发秒杀API的第三门课,介绍Web层的设计和实现

66079 学习 · 395 问题

查看课程

相似问题