时间:2021-07-01 10:21:17 帮助过:2人阅读
坑爹了!第二次会把道具数量扣为负数。
但是这依然不能解释这42亿的溢出那里来的!哎,祸不单行的古语再次应验了,我们的count字段的数据类型是Unsigned int,坑爹的MySQL,假如字段是Unsigned int,然后输入了一个负数,它就会让这个数字变为42亿这个巨大的数值。
看明白了吧!这42亿就是这么来的,坑啊!
解决方案的话,可以在update的sql改成这样
<?php $update = "UPDATE `user` SET `count`=(CASE WHEN `count`<={$consume_props_count} THEN 0 ELSE `count`-{$consume_props_count} END) WHERE `userid`=123456" ?>
这样,就不会在扣成负数了,另外以防万一,还要将Unsigned int的字段类型,改为int。
摘自:http://h5b.net/php-mysql-high-concurrency-accident
【转】记录PHP、MySQL在高并发场景下产生的一次事故
标签: