长话短说,我有一个 SQL 文件,我想将其作为skel
样式文件导入,所以这将以编程方式重复完成。我可以随心所欲地编辑 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
thenUPDATE
查询,但是有没有办法告诉 MySQL 是的,我实际上想插入0
这个字段?
您可以使用:
如此处所述,这将阻止 MySQL 将 0 的 INSERT/UPDATE ID 解释为下一个序列 ID。这种行为将被限制为 NULL。
不过,我认为这是应用程序中非常糟糕的行为。您必须非常小心地使用它,特别是如果您选择在以后实施复制。
使用以下命令检查您的 sql DB 模式:
如果它为空或未设置,请使用:
当心!如果您使用
GLOBAL
,这不是即时更改,您需要重新启动连接以应用设置。因此,例如,如果您将数据从一个数据库恢复到另一个数据库,并且您不确定是否应用了此设置,请使用
SESSION
中间更改(关闭连接时重置)。完成后,插入 0 值,即使更改也不会sql_mode
更改。要重置此模式(和其他),请使用
不建议使用零自动增量值,因为它没有在 mysql 数据库中设置为默认值。
有关更多信息,请查看有关此的mysql 开发页面主题