同一个数据库服务器进行数据表间的数据迁移-MySQL

同一个数据库服务器进行数据表间的数据迁移

一、相同结构的表数据迁移/备份/导入到同一MySQL的某个库的某张表

实验目标:将t1.table_one的数据备份到migration_one.table_11(提醒:这两个表结构一致)

同一个MySQL中有很多库:

mysql 复制代码
SHOW DATABASES;

得到:

mysql 复制代码
Database            
--------------------
improvement         
information_schema  
migration_one       
mysql               
performance_schema  
sys                 
t1                  

创建数据库migration_one里的table_11表:

mysql 复制代码
CREATE TABLE `table_11` (                                                                                                                             
             `id` VARCHAR(200) NOT NULL,                                                                                                                          
             `name` VARCHAR(10) DEFAULT NULL,                                                                                                                     
             PRIMARY KEY (`id`)                                                                                                                                   
           ) ENGINE=INNODB DEFAULT CHARSET=utf8  

创建t1库的table_one语句和migration_one.table_11就除了表名不同其他一样。

于是这两张表结果完全一致

目前t1已存在数据:

mysql 复制代码
SELECT * FROM t1.`table_one`;
复制代码
id           name       
-----------  -----------
             hahahahah  
23t61832     xinqi2     
62361732198  xinqi      

目前查看下migration_one.table_11:

mysql 复制代码
SELECT COUNT(*) FROM migration_one.`table_11`;

得到:

复制代码
count(*)  
----------
         0

所以没有数据,另外这个表也是刚刚创建的,啥也没有。

将t1.table_one的数据迁移(也可以说是备份)到migration_one.table_11里面,于是:

执行:

mysql 复制代码
INSERT INTO migration_one.`table_11` SELECT * FROM t1.`table_one`;
复制代码
共 3 行受到影响

执行耗时   : 0.039 sec
传送时间   : 0.001 sec
总耗时      : 0.041 sec

查看migration_one.table_11表:

mysql 复制代码
SELECT * FROM migration_one.`table_11`;

得到:

复制代码
-- 1个结果:
id           name       
-----------  -----------
             hahahahah  
23t61832     xinqi2     
62361732198  xinqi      
-- 3条信息
返回了 3 行

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0 sec

二、清空数据表

如果想要清空migration_one.table_11应该怎么样清空才效率高?

这里分很多种情况的比如delete、truncate、drop那么哪种最好呢?其实需要基于不同的场景、要求来选择。

方式1-TRUNCATE

原理可自行探索,如果有误的地方敬请指正。

如果该表以后还会被用到,但是里面的数据不想要了,想将表结构保留以便以后可以插入数据,那么可以考虑TRUNCATE

mysql 复制代码
TRUNCATE migration_one.`table_11`;

结果:

复制代码
共 0 行受到影响

执行耗时   : 0.097 sec
传送时间   : 0.003 sec
总耗时      : 0.001 sec

查询:

mysql 复制代码
SELECT * FROM migration_one.`table_11`;

结果:

复制代码
id      name    
------  --------

三、部分字段相同的表之间的数据迁移

mysql 复制代码
SHOW CREATE TABLE t1.`table1`;

得到t1.table1的建表语句:

mysql 复制代码
CREATE TABLE `table1` (                                                                                                                                                                                                                                     
          `id` varchar(60) NOT NULL,                                                                                                                                                                                                                                
          `string1` varchar(20) DEFAULT NULL,                                                                                                                                                                                                                       
          `string2` varchar(20) DEFAULT NULL,                                                                                                                                                                                                                       
          `flag1` varchar(10) NOT NULL,                                                                                                                                                                                                                             
          `flag2` varchar(10) NOT NULL,                                                                                                                                                                                                                             
          PRIMARY KEY (`id`)                                                                                                                                                                                                                                        
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8

发现t1.table1的表结构基本和migration_one.table_11的一致。

但是想要将t1.table1的某些字段的数据迁移到migration_one.table_11里面,那么怎么迁移呢?

假如说t1.table1的string1和id的数据想要分别迁移到migration_one.table_11的name和id列里面:

迁移前先看下当前的环境:

mysql 复制代码
SELECT * FROM t1.`table1`;


-- result:
id      string1  string2  flag1   flag2   
------  -------  -------  ------  --------
12321   hehe     haha     CJB_A   CJB_A   
mysql 复制代码
SELECT * FROM migration_one.`table_11`;
-- result 
id      name    
------  --------

-- 3条信息
返回了 0 行

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0 sec

接下来就进行迁移吧:

mysql 复制代码
INSERT INTO migration_one.`table_11`(id,`name`) SELECT `id`,`string1` FROM t1.`table1`;

1条信息:

复制代码
共 1 行受到影响

执行耗时   : 0.039 sec
传送时间   : 0 sec
总耗时      : 0.039 sec

验证:

mysql 复制代码
SELECT * FROM migration_one.`table_11`;

执行结果:

复制代码
-- 1个结果:
id      name    
------  --------
12321   hehe    

-- 3条信息
返回了 1 行

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0 sec

参考:

MySQL数据库(表)的导入导出(备份和还原) mysql 根据一张表数据更新另一张表-腾讯云开发者社区-腾讯云 (tencent.com)

相关推荐
paopaokaka_luck1 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_32241428042 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis
ha_lydms4 小时前
AnalyticDB MySQL 技术架构
大数据·hadoop·mysql·adb·spark·dataworks·1024程序员节
JoePotter4 小时前
Restic 备份工具使用指南(Windows Server 2019 适配版)
powershell·数据备份·windows server·运维自动化·restic
Random Glow6 小时前
聚簇索引 vs 二级索引:回表、覆盖索引、索引下推
数据库·mysql·性能优化·innodb·1024程序员节·索引优化
要开心吖ZSH7 小时前
一次线上锁风暴复盘:号源表大范围 DELETE 的隐患与分批删除改造
数据库·mysql·行锁·1024程序员节·间隙锁·lockwaittimeout
John_Hui10 小时前
MySQL 进阶知识
数据库·sql·mysql·1024程序员节
Random Glow10 小时前
一条 SQL 从输入到返回,中间经历了什么
数据库·后端·mysql·性能优化·innodb·1024程序员节
何中应10 小时前
MySQL 连接驱动单独下载的两种方式
数据库·mysql·maven
余槐i10 小时前
开虚拟线程后接口反而更慢:JDK 21 synchronized 锁住载体线程的排查
java·spring boot·redis·mysql·性能优化