同一个数据库服务器进行数据表间的数据迁移
一、相同结构的表数据迁移/备份/导入到同一MySQL的某个库的某张表
实验目标:将t1.table_one的数据备份到migration_one.table_11(提醒:这两个表结构一致)
同一个MySQL中有很多库:
SHOW DATABASES;得到:
Database
--------------------
improvement
information_schema
migration_one
mysql
performance_schema
sys
t1创建数据库migration_one里的table_11表:
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已存在数据:
SELECT * FROM t1.`table_one`;id name
----------- -----------
hahahahah
23t61832 xinqi2
62361732198 xinqi目前查看下migration_one.table_11:
SELECT COUNT(*) FROM migration_one.`table_11`;得到:
count(*)
----------
0所以没有数据,另外这个表也是刚刚创建的,啥也没有。
将t1.table_one的数据迁移(也可以说是备份)到migration_one.table_11里面,于是:
执行:
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表:
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
TRUNCATE migration_one.`table_11`;结果:
共 0 行受到影响
执行耗时 : 0.097 sec
传送时间 : 0.003 sec
总耗时 : 0.001 sec查询:
SELECT * FROM migration_one.`table_11`;结果:
id name
------ --------三、部分字段相同的表之间的数据迁移
SHOW CREATE TABLE t1.`table1`;得到t1.table1的建表语句:
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列里面:
迁移前先看下当前的环境:
SELECT * FROM t1.`table1`;
-- result:
id string1 string2 flag1 flag2
------ ------- ------- ------ --------
12321 hehe haha CJB_A CJB_ASELECT * FROM migration_one.`table_11`;
-- result
id name
------ --------
-- 3条信息
返回了 0 行
执行耗时 : 0 sec
传送时间 : 0 sec
总耗时 : 0 sec接下来就进行迁移吧:
INSERT INTO migration_one.`table_11`(id,`name`) SELECT `id`,`string1` FROM t1.`table1`;1条信息:
共 1 行受到影响
执行耗时 : 0.039 sec
传送时间 : 0 sec
总耗时 : 0.039 sec验证:
SELECT * FROM migration_one.`table_11`;执行结果:
-- 1个结果:
id name
------ --------
12321 hehe
-- 3条信息
返回了 1 行
执行耗时 : 0 sec
传送时间 : 0 sec
总耗时 : 0 sec参考:
MySQL数据库(表)的导入导出(备份和还原) mysql 根据一张表数据更新另一张表-腾讯云开发者社区-腾讯云 ()
















