mysql不同數(shù)據(jù)庫(kù)不同數(shù)據(jù)表導(dǎo)入數(shù)據(jù)
今天在一個(gè)庫(kù)里面相互到兩張表的數(shù)據(jù),我之前只會(huì)一種方法:
- INSERT INTO A SELECT * FROM B;
 
這個(gè)方法的意思是將b表的所有數(shù)據(jù)全部導(dǎo)入到a表中,注意:
a、b表的數(shù)據(jù)結(jié)構(gòu)相同;
相當(dāng)于復(fù)制了b表數(shù)據(jù)到a表
這樣可以簡(jiǎn)單完成功能,但是當(dāng)需求變成這樣:
a、b表數(shù)據(jù)結(jié)構(gòu)不一樣;
或者只需導(dǎo)一部分?jǐn)?shù)據(jù)
或者導(dǎo)入數(shù)據(jù)是有重復(fù)的
這個(gè)sql就無(wú)能為力了,我們以各種情況來(lái)說(shuō)。
首先有a表,結(jié)構(gòu)如下:
- CREATE TABLE `table_a` (
 - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵,長(zhǎng)整型,自增',
 - `user_id` varchar(32) DEFAULT NULL COMMENT '用戶id',
 - `name` varchar(50) DEFAULT NULL COMMENT '名字',
 - `email` varchar(30) NOT NULL COMMENT '郵箱',
 - PRIMARY KEY (`id`)
 - ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
然后是b表,結(jié)構(gòu)如下,
- CREATE TABLE `table_b` (
 - `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵,長(zhǎng)整型,自增',
 - `user_id` varchar(32) DEFAULT NULL COMMENT '用戶id',
 - `user_name` varchar(50) DEFAULT NULL COMMENT '名字',
 - `email` varchar(30) NOT NULL COMMENT '郵箱',
 - `course` varchar(30) NOT NULL COMMENT '課程',
 - PRIMARY KEY (`id`)
 - ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
情形如下:
(1)導(dǎo)入的數(shù)據(jù)在a表中完全不存在
- INSERT INTO table_a (id,user_id,name,email) SELECT id,user_id,user_name,email FROM table_b;
 
或者不需要id的情況,
- INSERT INTO table_a (user_id,name,email) SELECT user_id,user_name,email FROM table_b;
 
如果有重復(fù)的可以使用replace into 這個(gè),但是請(qǐng)慎重使用replace,保證你對(duì)replace有足夠的了解!
(2)導(dǎo)入的數(shù)據(jù)部分存在
數(shù)據(jù)部分存在為了區(qū)分需要在兩個(gè)表添加唯一索引
兩個(gè)表中分別為user_name和name字段添加唯一索引
第一種情形,
使用replace into的方式進(jìn)行導(dǎo)入數(shù)據(jù)(這里根據(jù)唯一索引進(jìn)行判斷,如果不添加唯一索引的方式,除了id主鍵不同外,其他均相同的情況下也視為相同)
第二種情形,
忽略重復(fù)的,即如果有發(fā)現(xiàn)重復(fù)的行,則跳過(guò)此行數(shù)據(jù)的插入,必須使用ignore關(guān)鍵字,
- INSERT IGNORE INTO table_a (id,user_id,name,email) SELECT id,user_id,user_name,email FROM table_b;
 
















 
 
 


 
 
 
 