背景
現在我有這麼乙個需求:
資料庫a的user表需要匯入到資料庫b的account表
user表字段:uid,username,e
account表字段:id,name,email,password,type,salt
匯入的字段只有username,email,p並且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 upwww.cppcns.comdate
insert into `b`.`u_account`(name,password,email,salt)
select username,password,email,salt
from `a`.`bbs_u
where regdate>14程式設計客棧18313600 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(有侷限性)
本文標題: mysql不同資料庫不同資料表匯入資料
本文位址:
MySQL不同表查詢,不同資料庫查詢
內容比較弱 歡迎大神們指點 在mysql中 要實現不同表的查詢和不同資料庫的查詢,首先得有地方查吧 1 建立資料庫 create databaes test use test create table pet id int,name varchar 20 create table user id i...
SQLserver不同資料庫不同表之間的複製
1.將eems庫中的dec towninfo表中的資料 複製到oem庫的c towninfo中 c towninfo表事先存在 先要將表的主鍵設為自增長型別,且列出列名 set identity insert oem dbo c towninfo oninsert into oem dbo c to...
MySQL 資料庫 資料表
1 檢視原始資料庫information schema中的表,並顯示出views表的字段結構屬性資訊 第一步 檢視所有的資料庫 show databases 如圖一 第二步 檢視information schema 內容 如圖二 第三步 檢視views 結構 如圖三 2 建立乙個offcn資料庫,並...