【问题标题】:How to insert values into auto identity column in MYSQL [closed]如何将值插入 MYSQL 中的自动标识列 [关闭]
【发布时间】:2013-04-13 01:07:03
【问题描述】:

我想将值插入到 mysql innodb 表 Auto_Increment 列中。

我正在将旧表中的一些数据加载到具有标识的新表中,并且需要保留旧表中的现有值,因此我需要保留现有的 Id 值,但保留列 @987654323 @ 表示新值。

在 MS T-SQL 中,我会以 SET SET IDENTITY_INSERT MyTable ON 开始我的 insert 查询脚本,并以 SET SET IDENTITY_INSERT MyTable OFF 结束查询。

我怎样才能在 MySQL 中做同样的事情?

【问题讨论】:

  • 为什么? MySQL自动提供的值不合适吗?
  • 如果您需要插入该列,为什么该列是自动标识?
  • 我想将其他表中的一些数据加载到具有标识的新表中,所以我想使用旧表中的现有值。
  • 在加载示例数据或将数据从一个数据库移动到另一个数据库时,这是一种非常常见的需求。我真的不明白为什么这被标记为“不是问题”。
  • 同意前面2个cmets。它们很简单,显然不是基于迁移真实数据或构建开发测试的经验(必须使用相同的数据在暂存和生产环境中运行)。

标签: mysql auto-increment mysql-workbench


【解决方案1】:

照常做:

INSERT INTO my_table(auto_inc_field, other_field) VALUES(8547, 'some value');

如果值来自另一个表,您可以使用:

INSERT INTO my_table(auto_inc_field, other_field)
SELECT auto_inc_field, other_field FROM other_table;

【讨论】:

  • 如果你导入数据,你会得到一个全新的 id 值,如果你在 auto_inc_field 中的整数是 0 或 NULL,就会生成这个值。 “违反外键约束 xxx”。这个答案值得被否决而不是问题......
  • 如果有人像我一样偶然发现这一点,并且您插入了带有 ID 的行。您可以使用 'ALTER TABLE test AUTO_INCREMENT = 10' 手动设置 auto_inc_field - 其中 10 是用于插入行的下一个值。
  • 使用 PostgreSQL,您同样必须重置自动增量字段。
  • @MartinBlore 4 年后更新了这个答案。来自 5.7 版的文档When you insert any other value into an AUTO_INCREMENT column, the column is set to that value and the sequence is reset so that the next automatically generated value follows sequentially from the largest column value.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多