gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:34:18 25 4
gpt4 key购买 nike

更新:在SO中的类似问题中,与本例不同的是,要复制数据的表已经创建。

我的表A中记录很少,并且希望将其数据复制到另一个不存在的表B。正在寻找一些查询。

最佳答案

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

  • 索引
  • 主键、唯一键或外键等约束
  • 表选项,例如 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

关于MySQL:如何将表A的数据复制到新的不存在的表B?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54640341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com