Mysql通过sql导入表数据

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`;

你可能感兴趣的:(Mysql通过sql导入表数据)