一位同事让我意识到一个非常奇怪的MySQL行为.
假设您有一个包含auto_increment字段的表和另一个设置为唯一的字段(例如用户名字段).当尝试插入具有已存在于表中的用户名的行时,插入失败,如预期的那样.但是,在多次尝试失败后插入有效的新条目时,可以看到auto_increment值增加.
例如,当我们的最后一个条目看起来像这样......
ID: 10
Username: myname
Run Code Online (Sandbox Code Playgroud)
...我们在下一次插入时尝试五个具有相同用户名值的新条目,我们将创建一个新行,如下所示:
ID: 16
Username: mynewname
Run Code Online (Sandbox Code Playgroud)
虽然这本身并不是一个大问题,但似乎是一个非常愚蠢的攻击向量,通过使用失败的插入请求充斥它来杀死表,正如MySQL参考手册所述:
"如果值大于可以存储在指定整数类型中的最大整数,则不会定义自动增量机制的行为."
这是预期的行为吗?