mysql不同數(shù)據(jù)庫(kù)不同數(shù)據(jù)表導(dǎo)入數(shù)據(jù)
背景
現(xiàn)在我有這么一個(gè)需求:
數(shù)據(jù)庫(kù)A的user表需要導(dǎo)入到數(shù)據(jù)庫(kù)B的account表
user表字段:uid,username,email,password,regdate,salt
account表字段:id,name,email,password,type,salt
導(dǎo)入的字段只有username,email,password,salt,并且regdate需要符合某個(gè)條件
下面分幾種情況來(lái)寫(xiě)sql,主要區(qū)分insert into和replace into
情況
導(dǎo)入的數(shù)據(jù)在B庫(kù)的表中完全不存在
直接insert into就好,使用replace into效果一樣
INSERT INTO `B`.`account`(NAME,PASSWORD,email,salt) SELECT username,PASSWORD,email,salt FROM `A`.`users` WHERE regdate>1418313600
導(dǎo)入的數(shù)據(jù)部分存在
數(shù)據(jù)部分存在為了區(qū)分需要在兩個(gè)表添加唯一索引,這個(gè)唯一索引(UNIQUE)必須是導(dǎo)入的字段里面的值
我在兩個(gè)表中分別為username和name字段添加唯一索引
直接替換
replace into在操作的時(shí)候如果兩表數(shù)據(jù)重復(fù)(必須定義UNIQUE),會(huì)先刪掉那一行(注意是一整行),然后再執(zhí)行insert into
造成的后果就是,account表中的type字段如果原來(lái)有值,會(huì)直接刪掉,并重新插入,即變成默認(rèn)值了
REPLACE INTO `B`.`account`(NAME,PASSWORD,email,salt) SELECT username,PASSWORD,email,salt FROM `A`.`users` WHERE regdate>1418313600
忽略重復(fù)
用IGNORE關(guān)鍵字,如果遇到重復(fù),不會(huì)操作當(dāng)前行
INSERT IGNORE INTO `B`.`account`(NAME,PASSWORD,email,salt) SELECT username,PASSWORD,email,salt FROM `A`.`users` WHERE regdate>1418313600
部分更新
比如果只想更新password和salt字段,可以用ON DUPLICATE KEY UPDATE
INSERT INTO `B`.`u_account`(NAME,PASSWORD,email,salt) SELECT username,PASSWORD,email,salt FROM `A`.`bbs_ucenter_members` WHERE regdate>1418313600 ON DUPLICATE KEY UPDATE PASSWORD=VALUES(PASSWORD),salt=VALUES(salt)
總結(jié)
replace into比較暴力,網(wǎng)上也有說(shuō)慎重使用的,最好用insert into代替
疑問(wèn)
以上的操作是兩個(gè)數(shù)據(jù)庫(kù)在同一臺(tái)服務(wù)器上的,直接一條sql就可以搞定
假如要導(dǎo)的兩個(gè)庫(kù)在不同的兩個(gè)服務(wù)器上要怎么做?。?br />
目前暫時(shí)的辦法:
將A庫(kù)中的user表導(dǎo)入到B庫(kù)所在的另一臺(tái)服務(wù)器上,然后寫(xiě)一條sql搞定
或者查詢出指定數(shù)據(jù),導(dǎo)出sql,在sql中將insert into替換為insert ignore into(有局限性)
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- mysql mysqldump只導(dǎo)出表結(jié)構(gòu)或只導(dǎo)出數(shù)據(jù)的實(shí)現(xiàn)方法
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)、數(shù)據(jù)表的方法
- 一次非法關(guān)機(jī)導(dǎo)致mysql數(shù)據(jù)表?yè)p壞的實(shí)例解決
- 詳解 linux mysqldump 導(dǎo)出數(shù)據(jù)庫(kù)、數(shù)據(jù)、表結(jié)構(gòu)
- 詳解MySQL導(dǎo)出指定表中的數(shù)據(jù)的實(shí)例
- 由于mysql運(yùn)行權(quán)限導(dǎo)致無(wú)法找到 Discuz! 論壇數(shù)據(jù)表! 的解決方法
- MySQL刪除表數(shù)據(jù)的方法
- MySQL實(shí)現(xiàn)兩張表數(shù)據(jù)的同步
- Mysql 根據(jù)一個(gè)表數(shù)據(jù)更新另一個(gè)表的某些字段(sql語(yǔ)句)
- MySQL多表數(shù)據(jù)記錄查詢?cè)斀?/a>
- MySQL 表數(shù)據(jù)的導(dǎo)入導(dǎo)出操作示例
相關(guān)文章
MySQL創(chuàng)建索引/判斷索引是否生效的問(wèn)題
這篇文章主要介紹了MySQL創(chuàng)建索引/判斷索引是否生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Mysql row number()排序函數(shù)的用法和注意
這篇文章主要介紹了Mysql row number()排序函數(shù)的用法和注意 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
MySql數(shù)據(jù)庫(kù)分布式存儲(chǔ)配置實(shí)操步驟
這篇文章主要為大家介紹了MySql數(shù)據(jù)庫(kù)分布式存儲(chǔ)配置實(shí)操步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
MySQL中的case?when中對(duì)于NULL值判斷的坑及解決
這篇文章主要介紹了MySQL中的case?when中對(duì)于NULL值判斷的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
mysql間隙鎖加鎖11個(gè)規(guī)則(案例分析)
這篇文章主要介紹了mysql間隙鎖加鎖11個(gè)規(guī)則?,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03

