zoukankan      html  css  js  c++  java
  • 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!
  • 相关阅读:
    Java语言基础(3)
    Java语言基础(2)
    Java语言基础(1)
    标准C语言(13)
    标准C语言(12)
    标准C语言(11)
    标准C语言(10)
    IDEA 学习笔记之 Console显示日志大小
    Java 学习笔记之 线程sleep方法
    Java 学习笔记之 线程isAlive方法
  • 原文地址:https://www.cnblogs.com/pickmea/p/13470531.html
Copyright © 2011-2022 走看看