当前位置: 首页 > 科技观察

mysql不同数据库不同数据表导入数据

时间:2023-03-13 08:13:29 科技观察

今天,在数据库中,我只知道一种方法可以将两个表的数据相互传递:INSERTINTOASELECT*FROMB;该方法的意思是将表b中的数据全部导入到表a中。注:表a和表b中的数据数据结构相同;相当于把b表的数据复制到a表,这样就可以轻松完成功能,但是当需求变成这样的时候:a表和b表的数据结构是不一样的;或者只需要导入部分数据或重复导入的数据。SQL无能为力,说说各种情况吧。首先有一张表,结构如下:CREATETABLE`table_a`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主键,长整型,自增',`user_id`varchar(32)DEFAULTNULLCOMMENT'用户id',`name`varchar(50)DEFAULTNULLCOMMENT'name',`email`varchar(30)NOTNULLCOMMENT'mailbox',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;然后表b,结构如下,CREATETABLE`table_b`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主键,长整型,自增',`user_id`varchar(32)DEFAULTNULLCOMMENT'用户id',`user_name`varchar(50)DEFAULTNULLCOMMENT'name',`email`varchar(30)NOTNULLCOMMENT'mailbox',`course`varchar(30)NOTNULLCOMMENT'course',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;情况如下:(1)导入的数据在表a中不存在INSERTINTOtable_a(id,user_id,name,email)SELECTid,user_id,user_name,emailFROMtable_b;或者如果不需要id,INSERTINTTOtable_a(user_id,name,email)SELECTuser_id,user_name,emailFROMtable_b;如果有重复,你可以使用替换成这个,但请谨慎使用replace,确保您对replace有足够的了解!(2)导入数据部分存在,数据部分存在。为了区分两张表,需要在两张表的user_name和name字段上添加唯一索引。第一种情况,使用replaceinto方法导入数据(这里根据唯一索引判断,如果不加唯一索引,除了id主键,其他情况同理)。第二种情况,忽略重复,即如果发现重复的行,则跳过这一行数据的插入,必须使用ignore关键字,INSERTIGNOREINTOtable_a(id,user_id,name,email)SELECTid,user_id,user_name,emailFROMtable_b;