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

4

我有一张带自增主键列"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将取自该表的自增值,并继续增加?)

注意:如果有特定于PhpMyAdmin的解决方案,欢迎提供。

-抱歉我的英语不好!(Ops随意编辑)

2个回答

8
创建一个具有相同布局的表格。然后:
INSERT INTO new_table (data) SELECT data FROM old_table;

这将仅复制数据字段到新表中。由于id列是自动递增的,它将添加从一开始计数的id。

(摊手)...哦,太明显了!我的脑子去哪儿了?谢谢Mantriur! - Sharky
1
可以这样做。如果您想控制新表中行的顺序,可以使用ORDER BY子句:INSERT INTO new_table (data) SELECT data FROM old_table ORDER BY id; - Ike Walker
@Mantriur:如果表中有多列怎么办?我也遇到了同样的问题。问题是我有20个表,每个表都包含主键,可能是外键,也可能不是。每个表中的列数可能从5到10不等。有什么解决方案吗? - Gapchoos
2
@Gapchoos:你可以做任意数量的列,就像这样:INSERT INTO newTable (column1, column2, column3) SELECT column1, column2, column3 FROM oldTable;。你需要为每个表单独修改查询语句。 - Travesty3

5
INSERT INTO newTable (data) SELECT data FROM oldTable;

谢谢您的回答,Travesty3!不过Mantriur更快几秒钟 :) (我想知道为什么你们俩都被投反对票?我给你投了赞成票) - Sharky
@Sharky:是的,他比我快了大约8秒,而且他的答案更详细。不确定为什么我们被踩了,但还是谢谢!请确保将他的答案标记为您的接受解决方案! - Travesty3
@Sharky 接受其中一个答案也不会有什么损失。 - fancyPants
@tombom 我需要等待几秒钟... 我在这里等着接受 ;) - Sharky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接