我正在使用MySQL工作台将一些巨大的(数百万行) 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(*)-query返回985330行。
发布于 2011-08-04 15:58:59
我将使用mysqldump (命令行工具)从旧表导出数据,然后将其导入到新表中。类似于:
mysqldump database table > file.sql
然后编辑文件中的表名和类型,然后:
mysql database < file.sql
发布于 2011-08-04 15:44:46
在MySQL中,您可以在SELECT语句中使用LIMIT关键字,定义要显示多少结果行。将此与偏移量相结合,您可以将您的表分割成块。当然,当将表分割成块时,您应该使用order子句来处理相同的结果集。
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 ...请参考MySQL 5.1参考手册。
https://stackoverflow.com/questions/6944073
复制相似问题