同一个数据库服务器进行数据表间的数据迁移
一、相同结构的表数据迁移/备份/导入到同一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)