Mysql id自增可能产生的bug
前言
最近碰到一个问题,下单接口的订单id是递增的,所以就产生了一个问题,可以无限创建订单。无限创建订单本身不是什么大问题,但是如果接口没有限频,被恶意攻击,一个人单独发包创建订单,就会导致订单创建功能直接失效。等到真的被恶意攻击之后在修复成本也就变高了。
本地尝试
创建一个数据库,表,插入数据
create database test;
use test;
CREATE TABLE IF NOT EXISTS `test`(
`id` INT AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入数据
insert into test(id,name) VALUES (4294967290,'pickme');
insert into test(id) VALUES ('pickema');
直到id为2147483647时,再次插入抛出异常
ERROR 1062 (23000): Duplicate entry '2147483647' for key 'PRIMARY'
由于int是-2,147,483,648
到 2 147 483 647
,所以到了最大值后,在之后插入都会认为是2147483647,所以会抛出错误。
所以创建订单功能会失效
解决
- 订单id不可递增
- 创建接口增加限频
Pickmea,lets do it!