当前位置: 首页 > 面试题库 >

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

丰岳
2023-03-14
问题内容

长话短说,我有一个要导入为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到该字段中吗?


问题答案:

从答案我来到 这里:

您可以使用:

SET [GLOBAL|SESSION] sql_mode='NO_AUTO_VALUE_ON_ZERO'

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

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



 类似资料:
  • 问题内容: 我刚刚使用MySQL查询浏览器创建了一个新表,并注意到在“自动增量列”下有一个勾号。这是如何运作的? 以编程方式添加到数据库时,是否仅添加一个数字,然后数据库会自动将该数字递增? 每次有新用户在我的网站上注册时,我都希望他们的客户ID(仅整数)自动递增,因此我不必尝试随机生成一个唯一的数字。 可以简单地完成吗? 谢谢! 问题答案: 以编程方式添加到数据库时,是否仅添加一个数字,然后数据

  • 问题内容: 让我们假设下表(例如,几个内部join语句的结果): 例如,您可以从以下语句中获取: 现在,如果我想将t1.column_1和t2.column_2总结如下 结果显示如下: 我的问题基本上是:有没有一种方法可以将NULL类型转换为0以便进行一些数学运算? 我曾尝试和,而是保持一个。 问题答案: 使用的列值转换到零。或者,COALESCE函数将执行相同的操作,除了(1)符合ANSI标准,

  • 问题内容: 我正在尝试在mysql数据库中创建一列,该列自动递增1但从0-Z开始然后滚动。 例如000、001、002,…,009、00A,00B,…,00Z,010,…,0ZZ,…,100。 我想让数据库通过自动递增字段创建列。 我的想法是: 为从0到36的每个字符创建一列,然后将行N(其中N是最低有效数字)自动递增1。然后在每列上添加触发器,以在第N列达到36时向N-1列添加1 。 创建一个包

  • 我有一个标准的长领域 但它是在过程中填充的,并且具有随机值。如果我试图通过DAO将其添加到数据库中,则该id不会被autoGenerate sqlite引擎覆盖 如果我这样做类型字段为空,它也不起作用 有一种方法可以将id字段中的任何值强制转换为db中的自动增量值? 我从存储库livedata恢复数据。在视图模型

  • 问题内容: 我正在使用php和mysql。我有一个表,其中id列设置为自动递增作为主键。我正在尝试添加另一个名为sort_order的列。插入行后,sort_order列应自动递增。然后,用户将能够更改sort_order值。但是mysql不允许多于一列的自动递增? 自动递增sort_order值的最佳方法是什么? 受欢迎的要求,更多的解释。 在管理区域中,用户将具有类别列表。用户可以使用java

  • 问题内容: 我有多个结构相同的数据库,有时会在其中复制数据。为了保持数据完整性,我使用两列作为主键。一个是数据库ID,它链接到包含有关每个数据库的信息的表。另一个是表键。它不是唯一的,因为它可能有多个行,且此值相同,但database_id列中的值不同。 我打算将这两列变成一个联合主键。但是,我也想将表键设置为自动递增-但基于database_id列。 EG,使用以下数据: 如果我要添加包含dab