Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MYSQL中复制表而不一次复制一行_Mysql_Database_Duplicates - Fatal编程技术网

在MYSQL中复制表而不一次复制一行

在MYSQL中复制表而不一次复制一行,mysql,database,duplicates,Mysql,Database,Duplicates,我想复制一个非常大的表,但我不想逐行复制它。有办法复制它吗 例如,您可以通过删除行/行来截断w/o,所以我想知道复制整个表是否有类似的方法 更新:逐行插入非常痛苦(因为有120M行)。无论如何,为了避免这种情况?MySQL不再具有可靠的“复制表”功能——许多原因与数据的存储方式有关。但是,下面的代码不逐行插入,但非常简单: CREATE TABLE `new_table` LIKE `old_table`; INSERT INTO `new_table` (SELECT * FROM `old_

我想复制一个非常大的表,但我不想逐行复制它。有办法复制它吗

例如,您可以通过删除行/行来截断w/o,所以我想知道复制整个表是否有类似的方法


更新:逐行插入非常痛苦(因为有120M行)。无论如何,为了避免这种情况?

MySQL不再具有可靠的“复制表”功能——许多原因与数据的存储方式有关。但是,下面的代码不逐行插入,但非常简单:

CREATE TABLE `new_table` LIKE `old_table`;
INSERT INTO `new_table` (SELECT * FROM `old_table`);

您可以使用。

如果您使用的是MyISAM,您可以复制磁盘上的物理文件。重新启动服务,您将拥有索引和所有内容都相同的新表。

复制一个大表是非常重要的;最终,数据库可能需要重建

在InnoDB中,唯一的方法是真正重建它,这意味着插入。。。但是,select或类似的方法,对于单个事务中将发生的1.2亿行,您可能会超过回滚区域的大小,这将导致插入失败

mysqldump然后重命名原始表,然后恢复转储应该可以工作,因为mysqldump可能会导致每行提交一次。但是它会很慢。

oracle:


从原始表格中选择*创建表格t。我有一个很大的表,逐行插入非常痛苦,我正在使用innodb。这是否适用?innodb将数据存储在一个大文件中(我相信您可以在my.cnf中更改此设置,但它很少打开),而MyISAM将每个表分隔为一组单独的文件。不,它不适用于innodb。另一个选项是使用mysqldump转储表和数据,然后在创建的文件中更改其名称并重新加载。它仍然是一次一行,但速度更快,因为它使用扩展的插入语法。不幸的是,这不会像@AvatarKava提供的答案那样有效,因为这不会复制像auto_increment…Mrh这样的属性?我们的答案是相同的,除了@AvatarKava提到了我只暗示过的create table行(这也是为什么我对它们投了更高的票),然后我又链接到了文档。否则我们说的是完全一样的话。o、 @;不幸的是,这不会像@AvatarKava提供的答案那样有效,因为这不会复制像auto_increment这样的属性……好吧,复制这些属性的唯一方法是重新创建它们。。但事实上,光靠这一点是不行的。
INSERT INTO TABLE2 SELECT * FROM TABLE1