问答详情
源自:5-4 秒杀交互

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

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

提问者:天空属于蓝色 2017-05-13 18:24

个回答

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

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

  • _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

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