为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

4 回答

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

0 回复 有任何疑惑可以回复我~
#1

reeeex

我还以为是自己哪里的参数传错 还是sql写错了
2018-03-10 回复 有任何疑惑可以回复我~

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

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

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


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

老师当时:

http://img1.sycdn.imooc.com//59ccd71e00011c1408320254.jpg

修改后:

http://img1.sycdn.imooc.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的值。


1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信