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,6482 147 483 647,所以到了最大值后,在之后插入都会认为是2147483647,所以会抛出错误。
所以创建订单功能会失效

解决

  • 订单id不可递增
  • 创建接口增加限频
Pickmea,lets do it!
原文地址:https://www.cnblogs.com/pickmea/p/13470531.html