mysql不同資料庫不同資料表匯入資料

2022-09-29 05:24:10 字數 1716 閱讀 1439

背景

現在我有這麼乙個需求:

資料庫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資料庫,並...