程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql分歧數據庫分歧數據表導入數據

mysql分歧數據庫分歧數據表導入數據

編輯:MySQL綜合教程

mysql分歧數據庫分歧數據表導入數據。本站提示廣大學習愛好者:(mysql分歧數據庫分歧數據表導入數據)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql分歧數據庫分歧數據表導入數據正文


配景

如今我有這麼一個需求:

數據庫A的user表須要導入到數據庫B的account表
user表字段:uid,username,email,password,regdate,salt
account表字段:id,name,email,password,type,salt
導入的字段只要username,email,password,salt,而且regdate須要相符某個前提
上面分幾種情形來寫sql,重要辨別insert into和replace into

情形

導入的數據在B庫的表中完整不存在

直接insert into就好,應用replace into後果一樣

INSERT INTO `B`.`account`(NAME,PASSWORD,email,salt)
SELECT username,PASSWORD,email,salt
FROM `A`.`users`
WHERE regdate>1418313600

導入的數據部門存在

數據部門存在為了辨別須要在兩個表添加獨一索引,這個獨一索引(UNIQUE)必需是導入的字段外面的值
我在兩個表平分別為username和name字段添加獨一索引
直代替換

replace into在操作的時刻假如兩表數據反復(必需界說UNIQUE),會先刪失落那一行(留意是一整行),然後再履行insert into

形成的效果就是,account表中的type字段假如本來有值,會直接刪失落,偏重新拔出,即釀成默許值了

REPLACE INTO `B`.`account`(NAME,PASSWORD,email,salt)
SELECT username,PASSWORD,email,salt
FROM `A`.`users`
WHERE regdate>1418313600

疏忽反復

用IGNORE症結字,假如碰到反復,不會操作以後行

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)

總結

replace into比擬暴力,網上也有說鄭重應用的,最好用insert into取代

疑問

以上的操作是兩個數據庫在統一台辦事器上的,直接一條sql便可以弄定
假設要導的兩個庫在分歧的兩個辦事器上要怎樣做啊?
今朝臨時的方法:
將A庫中的user表導入到B庫地點的另外一台辦事器上,然後寫一條sql弄定
或許查詢出指定命據,導出sql,在sql中將insert into調換為insert ignore into(有局限性)

以上所述就是本文的全體內容了,願望年夜家可以或許愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved