MySQL:如何将表A的数据复制到新的不存在的表B中?

时间:2019-02-11 22:50:36

标签: mysql sql

更新: 在SO中类似的问题中,与这种情况不同,已经创建了要复制数据的表。

我的表 A 几乎没有记录,希望将其数据复制到另一个不存在的表 B 中。寻找一些查询。

2 个答案:

答案 0 :(得分:2)

我不喜欢使用CREATE TABLE B AS SELECT * FROM A,因为它不会捕获:

  • 索引
  • 诸如PRIMARY KEY,UNIQUE KEY或FOREIGN KEY的约束
  • 表选项,例如ROW_FORMAT

至少它捕获了列级别的选项,例如NOT NULL和DEFAULT。

mysql> create table A ( i int primary key, x int default 123, unique key (x)) row_format=compressed;

mysql> create table b1 as select * from A;

mysql> show create table b1\G
*************************** 1. row ***************************
       Table: b1
Create Table: CREATE TABLE `b1` (
  `i` int(11) NOT NULL,
  `x` int(11) DEFAULT '123'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

它确实获得了ENGINE和DEFAULT CHARSET表选项,只是因为这些是全局默认值。如果我为这些表选项中的任何一个选择了非默认选项,它们将在克隆表中丢失。

尝试按以下两个步骤进行操作:

CREATE TABLE B LIKE A;
INSERT INTO B SELECT * FROM A;

表B的定义将与表A完全相同,包括索引,约束和表选项。

mysql> create table b2 like A;

mysql> show create table b2\G
*************************** 1. row ***************************
       Table: b2
Create Table: CREATE TABLE `b2` (
  `i` int(11) NOT NULL,
  `x` int(11) DEFAULT '123',
  PRIMARY KEY (`i`),
  UNIQUE KEY `x` (`x`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED

答案 1 :(得分:0)

快速创建表并在单个SQL查询中复制表中数据的方法。

CREATE TABLE B AS SELECT * FROM A;

工作示例:

http://sqlfiddle.com/#!9/da26e1/1