mysql - MySQL:如何将表 A 的数据复制到新的不存在的表 B?
问题描述
更新: 在 SO 中的类似问题中,与这种情况不同,已经创建了要复制数据的表。
我的表A记录很少,并希望将其数据复制到另一个不存在的表B。寻找一些查询。
解决方案
我不喜欢使用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
推荐阅读
- python - 当我使用 plotly 绘图时什么都没有出现
- vb.net - 寻找 lambda 调用速记文档
- android - 在Android中清理资源的最佳方法是什么?
- laravel - Laravel 5.8 ajax 内部服务器错误
- logging - JBoss 服务器日志中的错误日志问题
- google-cloud-platform - BigQuery 表压缩
- python - 如何自定义热图的颜色条
- c# - 如何从 ViewModel 中删除方法的执行 - Xamarin.Forms - MVVM
- java - Java中加载的共享库可以调用Java方法吗?
- sql-server - 将 CSV 导入 SQL Server 数据库,保留 ID 列值