MySQL - 导出数据,忽略主键。然后使用自动增量导入

Posted

技术标签:

【中文标题】MySQL - 导出数据,忽略主键。然后使用自动增量导入【英文标题】:MySQL - Export data, and ignore primary key. Then import using auto increment 【发布时间】:2012-03-23 01:12:35 【问题描述】:

我在自动增量列“id”和列“data”中有一个主键表

表格内容:

id | data
1  | aaaaa
2  | bbbbb
3  | whatever :P
5  | dang
99 | hello

如您所见,共有 5 行。 id 是 1,2,3,5,99(没有 id = 4 或 id = 6 到 98)。

如何导出此表,然后将其导入另一个表(当然结构相同),id 将获得值 1,2,3,4,5 而不是 1,2,3,5,99 .

(或者将它们导入到已经有数据的表中,并且导入的 id 将从该表的 auto_increment 值中获取任何值并继续?)

注意:如果有专门针对 phpMyAdmin 的解决方案,欢迎。

-抱歉英语不好! (操作随意编辑)

【问题讨论】:

【参考方案1】:

创建一个具有相同布局的表格。那么:

INSERT INTO new_table (data) SELECT data FROM old_table;

这只会将数据字段复制到新表中。由于id列是auto_increment,所以会从1往上加id。

【讨论】:

(捂脸)……太明显了!我的心思到哪去了?谢谢你曼特里尔! 那行得通。如果要控制新表中行的顺序,可以使用 ORDER BY 子句:INSERT INTO new_table (data) SELECT data FROM old_table ORDER BY id; @Mantriur :如果表中有多个列怎么办?我也遇到了同样的问题。问题是我有 20 个表,每个表都包含主键,可能是也可能不是外键。每个表中的列可能从 5 到 10 不等。任何解决方案? @Gapchoos:您可以创建任意数量的列,例如:INSERT INTO newTable (column1, column2, column3) SELECT column1, column2, column3 FROM oldTable;。您必须单独修改每个表的查询。【参考方案2】:
INSERT INTO newTable (data) SELECT data FROM oldTable;

【讨论】:

感谢 Travesty3 的回答!虽然 Mantriur 快了几秒钟 :) (我想知道为什么你们都被否决了?-我又投了你一票) @Sharky:是的,他比我快 8 秒,而且他的回答更具描述性。也不知道为什么我们被否决了,但是谢谢!请务必将他的答案也标记为您接受的解决方案! @Sharky 接受其中一个答案也无妨。 @tombom 我需要等几秒钟...我在这里等着接受 ;) ...完成

以上是关于MySQL - 导出数据,忽略主键。然后使用自动增量导入的主要内容,如果未能解决你的问题,请参考以下文章

sql主键列自增问题

mysql数据库,保存数据后,如何获得int型自增主键?

JPA 自动建表- @Id,@GeneratedValue 与 @GenericGenerator 设置主键生成策略

SQL Server 2000中如何设置自增主键?

MySQL设置自增字段

Mysql数据库安装使用教程10:列属性(列约束)---主键自增默认值注释