我想复制一个非常大的表,但我不想逐行复制它。有没有办法复制它?
例如,你可以TRUNCATE没有删除行/行,所以我想知道复制整个表是否有类似的东西
更新:逐行插入非常痛苦(因为120M行)。无论如何要避免这种情况?
答案 0 :(得分:5)
MySQL不再具有可靠的“复制表”功能 - 许多原因与数据的存储方式有关。但是,下面会逐行插入,但非常简单:
CREATE TABLE `new_table` LIKE `old_table`;
INSERT INTO `new_table` (SELECT * FROM `old_table`);
答案 1 :(得分:4)
您可以使用INSERT INTO ... SELECT
。
答案 2 :(得分:2)
如果您正在使用MyISAM,则可以复制磁盘上的物理文件。重新启动服务,您将获得带有索引的新表,并且所有内容都相同。
答案 3 :(得分:1)
INSERT INTO TABLE2 SELECT * FROM TABLE1
答案 4 :(得分:1)
复制一张大桌子并不重要;最终数据库可能需要重建它。
在InnoDB中,唯一的方法是重建它,这意味着插入...选择或类似,但是,由于它将在单个事务中发生120M行,您可能会超过回滚区域的大小,这将导致插入失败。
mysqldump然后重命名原始表,然后恢复转储应该工作,因为mysqldump可能导致每批行提交。但它会很慢。
答案 5 :(得分:0)
预言:
将表格t作为select * from original_table
创建