一位同事刚刚让我意识到一个非常奇怪的行为.
假设您有一个带有自动递增字段和另一个设置为唯一的字段(例如用户名字段)的表.当试图插入一个用户名已经在表中的行时,插入失败,正如预期的那样.然而,当您在多次try 失败后插入一个有效的新条目时,auto_增量值会增加.
例如,当我们的最后一个条目看起来像这样时...
ID: 10
Username: myname
...我们在下一次插入时try 五个用户名值相同的新条目,我们将创建一个新行,如下所示:
ID: 16
Username: mynewname
虽然这本身不是一个大问题,但它似乎是一个非常愚蠢的攻击向量,它通过用插入失败的请求来淹没表,因为MySQL参考手册指出:
"自动增量机制的行为未定义,如果[…]该值大于可存储在指定整数类型中的最大整数."
这是预期的行为吗?