更新: 在SO中类似的问题中,与这种情况不同,已经创建了要复制数据的表。
我的表 A 几乎没有记录,希望将其数据复制到另一个不存在的表 B 中。寻找一些查询。
答案 0 :(得分:2)
我不喜欢使用CREATE TABLE B AS SELECT * FROM A
,因为它不会捕获:
至少它捕获了列级别的选项,例如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;
工作示例: