秒杀成功后,再次刷新页面,为什么会把秒杀开始时间改变了??该怎么处理
准备看高并发 就发现了这个问题!nice!!!
给大家一个详细的步骤。。
修改了数据库里seckill表的start_time的属性就好了,
把DEFAULT CURRENT_TIMESTAMP ON UPDATE,改为 DEFAULT '0000-00-00 00:00:00'
不知道为什么当时sql创建完后start_time的属性是 CURRENT_TIMESTAMP ON UPDATE。。。
老师当时:
修改后:
原因:
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的值。
同楼主,我的项目秒杀成功后"秒杀开始时间"就变成了刚执行秒杀的时间了。。。
问题已经找到,结果太出乎意料了,是数据库的秒杀开始时间列为|“更新”了(╯︵╰)(╯︵╰)(╯︵╰)