我正在使用MySQL Workbench将一些巨大的(数百万行)MyISAM表改为InnoDB。我在克隆表后通过ALTER TABLE...
和INSERT INTO othertable SELECT * FROM mytable
尝试了它,但似乎表格太大了。工作台退出时出现与服务器的连接丢失错误。
所以我认为我可以怀疑一个SQL脚本,每隔10000个条目循环过多,并将MyISAM表的内容以块的形式复制到InnoDB表中。
由于似乎没有for循环SQL,我想知道是否有人建议如何实现这个?
INSERT INTO `latest`.`AUTHORS` (author_id, author_name)
SELECT
`author_names`.`author_name_id`,
`author_names`.`name`
FROM `pubmap_latest`.`dblp_author_names`;
这是我想要以块的形式运行的查询。 count(*)
- 查询返回985330行。
答案 0 :(得分:1)
我会使用mysqldump(命令行工具)从旧表中导出数据,然后将其导入新表。类似的东西:
mysqldump database table > file.sql
然后编辑表名并输入文件并:
mysql database < file.sql
答案 1 :(得分:0)
在MySQL中,您可以在LIMIT
语句中使用SELECT
关键字,定义要显示的结果行数。将此与偏移量相结合,您可以将表格分块。当然,在将表拆分为块时,应该使用order by子句来处理相同的结果集。
SELECT `author_names`.`author_name_id`, `author_names`.`name`
FROM `pubmap_latest`.`dblp_author_names`
ORDER BY `author_names`.`author_name_id`
LIMIT 10000 OFFSET 0
INTO OUTFILE dblp_author_names_0.sql
对于偏移,您必须使用10000,20000,30000,...
使用
加载结果LOAD DATA INFILE ...