一尘不染

如何强制MySQL将0作为有效的自动增量值

mysql

长话短说,我有一个要导入为skel样式文件的SQL 文件,因此将以编程方式重复进行此操作。我可以根据需要编辑SQL文件,但我不想触摸应用程序本身。

此应用程序userid = 0用来代表匿名用户。它在数据库中也有一个相关的(空白)条目来表示此“用户”。因此,我的行skel.sql看起来像这样:

INSERT INTO `{{TABLE_PREFIX}}users` VALUES (0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);

问题在于这uid是一个auto_increment字段,从技术上讲,该字段0是无效值。或者至少,如果将其设置为0,则基本上是在告诉MySQL:“请在该字段中插入下一个ID。”

现在,我想我可以在SQL文件中添加INSERT一个UPDATE查询,但是有没有一种方法可以告诉MySQL,是的,我实际上想插入0到该字段中吗?


阅读 217

收藏
2020-05-17

共1个答案

一尘不染

从答案我来到 这里

您可以使用:

SET [GLOBAL|SESSION] sql_mode='NO_AUTO_VALUE_ON_ZERO'

其如所描述的在这里,将防止从MySQL的解释0-2的插入/更新ID为下一个序列ID。这种行为将被限制为NULL。

这就是我认为应用程序中非常糟糕的行为。您必须非常谨慎地确保它的使用一致,尤其是如果您选择以后实施复制时。

2020-05-17