sq将一张表的数据导入到另外一张表数据需要考虑几种情况
1. 将一张表的全部数据导入到新表:
create table
新表
(select * from来源表
);
create table `new_table` (select * from `origin_table`);
2.将一张表数据根据需要的字段导入到新表,注意:这里新创建的表只有源表指定的字段,并不是源表的表结构中所有字段
create table
新表
(select字段1
,字段2
from来源表
);
create table `new_table` (select `id`, `name` from `origin_table`);
3.两张表结构完全一致,将表1全部数据导入到表2中
insert into
目标表
select * from来源表
;
insert into `target_table` select * from `origin_table`;
4.两张表结构完全一致,将表1指定字段数据导入到表2指定字段中
insert into
目标表
(字段1
,字段2
)select字段1
,字段2
from来源表
;
insert into `target_table` (`id`, `name`) select `id`, `name` from `origin_table`;
5.根据筛选条件导入数据
- create table '新表' (select * from '来源表' where 1 = 1 and '字段1' = '值' and '字段2' = '值');
create table `new_table` (select * from 'origin_table' where 1 = 1 and 'able_status' = 'ABLE' and `delete_status` = 'UNDELETE');
- insert into '目标表' select * from '来源表' where 1 = 1 and '字段1' = '值' and '字段2' = '值');
insert into `target_table` select * from `origin_table` where 1 = 1 'able_status' = 'ABLE' and `delete_status` = 'UNDELETE';
6.两张表结构一致,两张表数据互相导,使两张表数据一致或者将多张相同表结构相同的数据导入到新表
导数据的时候需要考虑重复数据:
- 考虑两张表或者多张表本身存在重复的数据。比如member表数据是相同,可能有的状态是删除,有的记录状态是未删除的状态
- 考虑两张或多张表数数据不重复,但是数据在两张或多张表同时存在的情况
处理步骤如下:
1.创建临时表,表结构与需要互相导的表结构或者是需要合并的表结构一致
2.为临时表创建组合唯一索引,通过索引去重
3.将需要互相导数据的表或者需要合并的表都插入到临时表当中(合并表到这里就结束)
4.将临时表中的数据分别导入到需要互相导数据的表中
演示流程如下:
- create table
temp_table
(......) 省略表创建流程- 为临时表创建索引 1.png
- insert ignore into 'temp_table' select * from 'origin_table';
- insert into 'member' select * from 'temp_table';
操作示例:
/* 删除临时表数据m_temp_table */
drop table if exists `m_temp_table`;
/* 创建临时表m_temp_table */
CREATE TABLE `m_temp_table` (
`id` varchar(63) NOT NULL DEFAULT '' COMMENT '会员ID',
`account` varchar(63) NOT NULL DEFAULT '' COMMENT '会员账号',
`phone` varchar(13) NOT NULL DEFAULT '' COMMENT '会员手机',
`name` varchar(120) NOT NULL DEFAULT '' COMMENT '会员名称',
`realname` varchar(63) NOT NULL DEFAULT '' COMMENT '会员真实姓名',
`password` varchar(63) NOT NULL DEFAULT '' COMMENT '会员密码',
`nickname` varchar(120) NOT NULL DEFAULT '' COMMENT '会员昵称',
`descript` varchar(511) NOT NULL DEFAULT '' COMMENT '会员简介',
`last_login_time` varchar(24) NOT NULL DEFAULT '' COMMENT '最近登录时间',
`last_login_ip` varchar(63) NOT NULL DEFAULT '' COMMENT '最近登录IP',
`login_count` bigint(20) NOT NULL DEFAULT '0' COMMENT '登录次数',
`status_auth` varchar(20) NOT NULL DEFAULT 'UNAUTH' COMMENT '认证状态 AUTHED:已认证;UNAUTH:未认证;SAVE:保存;PASS:通过;LOSS:未通过',
`head_url` varchar(255) NOT NULL DEFAULT '' COMMENT '会员头像',
`sex` varchar(20) NOT NULL COMMENT '性别 MALE: 男;FEMALE:女;SECRECY:保密',
`member_type` varchar(20) NOT NULL DEFAULT 'NORMAL' COMMENT '会员类型 NORMAL:通常用户;COMPANY:企业用户;MERCHANT:商户;',
`reg_client` varchar(20) NOT NULL DEFAULT '' COMMENT '注册来源设备 PC: PC端; MOBILE:H5手机端;WECHAT:微信小程序;IOS:苹果;ANDRIOD:安卓',
`reg_time` varchar(24) NOT NULL COMMENT '注册时间',
`sort` bigint(20) NOT NULL DEFAULT '0' COMMENT '排序',
`status_delete` varchar(20) NOT NULL DEFAULT 'UNDELETE' COMMENT '删除状态 DELETED:已删除; UNDELETE:未删除',
`status_disable` varchar(20) NOT NULL DEFAULT 'UNDISABLE' COMMENT '禁用状态 DISABLED:已禁用;UNDISABLE:未禁用',
`create_by` varchar(63) NOT NULL DEFAULT '' COMMENT '创建人',
`update_by` varchar(63) NOT NULL DEFAULT '' COMMENT '更新人',
`create_time` varchar(24) NOT NULL DEFAULT '' COMMENT '创建时间',
`update_time` varchar(24) NOT NULL DEFAULT '' COMMENT '更新时间',
`b2b_create_time` int(11) NOT NULL DEFAULT '0' COMMENT 'B2B创建时间',
`last_login_client` varchar(20) NOT NULL DEFAULT '' COMMENT '最近登录设备 PC: PC端; MOBILE:H5手机端;WECHAT:微信小程序;IOS:苹果;ANDRIOD:安卓',
PRIMARY KEY (`id`) USING BTREE,
/* 临时表通过索引去重 */
UNIQUE KEY `ACCOUNT_STATUS_DELETE_UNIQUE` (`account`,`status_delete`) USING BTREE COMMENT '账号、删除状态组合去重',
UNIQUE KEY `PHONE_STATUS_DELETE_UNIQUE` (`phone`, `status_delete`) USING BTREE COMMENT '手机号、删除状态组合去重'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='临时数据表';
/* 将m_merchant表数据插入到临时表中,根据索引条件去重 */
insert ignore into m_temp_table select * from m_merchant;
/* 将m_member表数据插入到临时表中,根据索引条件去重 */
insert ignore into m_temp_table select * from m_member;
/* 删除原来m_merchant表旧数据 */
delete from m_member;
/* 删除原来m_member表旧数据 */
delete from m_merchant;
/* 将去重后的临时表数据插入到原来m_merchant表 */
insert into m_merchant select * from m_temp_table;
/* 将去重后的临时表数据插入到原来的m_member表 */
insert into m_member select * from m_temp_table;
/* 查询数据是否相同 */
select count(0) from m_temp_table;
select count(0) from m_merchant;
select count(0) from m_member;
/* 删除临时表 */
drop table if exists `m_temp_table`;
网友评论