Hom's Blog


MySQL转移数据(同一数据库表到表)

其实就是Insert和Select的复合应用了. Select的结果作为Insert的数据源. 注意表中的field要对号(尤其顺序)

这里table1是源表, table2是接收的表

1.将所有数据导入

首先两个表必须格式一致(数据field一致, 主要是列数和顺序要一致,最好数据格式数据名也一致)

INSERT INTO table2 SELECT * FROM table1;
# if you make sure the process is ok
TRUNCATE table1;
  • 如果同时想新建一个新表, 可以:
CREATE TABLE table3 
SELECT * FROM table1 ;
  • 如果想先复制一份该表的结构(不包含内容)
CREATE TABLE table3
SELECT * FROM table1 
WHERE 1=2 ;

这是通用型的复制表结构的方法, 1=2是永远不成立的, 所以没有数据被复制.

在MySQL5 以后, 可以用LIKE来只复制结构

CREATE TABLE table3
LIKE table1 ;
  • 复制数据后想删掉一些指定数据可以用DELETE完成
DELETE FROM table2
WHERE field=value ;

2.选择某些数据进行复制转移

这里’某些’ 有两个概念: 所有数据某些列; 某些行的数据; 甚至两者结合:

  • 某些行所有field, 其实就是WHERE一下就好了:
INSERT INTO table2 
SELECT * FROM table1 
WHERE primary=value;
  1. 所有行某些列, 注意这些列的顺序一定要对好:
INSERT INTO table2 (field1,filed2) 
SELECT field1,field2 FROM table1;

第三种情况就是前两者的结合了.

INSERT INTO table2 (field1,filed2) 
SELECT field1,field2 FROM table1 
WHERE primary=value;

3.只转移table2不存在的数据

可以参考之前的MySQL唯一键重复的处理类似的处理. 要么是IGNORE掉重复的 (如果是主键或者唯一键), 要么是用SELECT进行控制:

INSERT INTO table2 (field1,filed2)
SELECT field1,filed2 FROM table1
WHERE NOT EXISTS 
(SELECT * FROM table2 
WHERE table2.id=table1.id);

如果重复的是主键等唯一键:

INSERT IGNORE INTO table2 
SELECT * FROM table1;


◆ 本文地址: http://platinhom.github.io/2016/01/31/MySQL-transferdata/, 转载请注明 ◆

前一篇: MySQL唯一键重复的处理
后一篇: Python:MySQLdb模块操作数据库


Contact: Hom / 已阅读()
Source 类别: IT  标签: SQL