2014-02-24 12 views
0

我有兩臺數據庫具有相同的列,我們要移動,並從數據庫1替換所有值一些列數據庫數據庫A >>表2 2MySQL的 - 移動並更換列

table1的「用戶」,「用戶」在數據庫B

user表中有很多列,但我們想更換一些列‘的col1’,‘col2上’和‘COL3’

我怎樣才能做到這一點?

謝謝

編輯:我forgeted說了,我只想替換第100點的ID。

我的意思是每列有超過100個id,我想替換前100個。不是所有的

+0

它們是否具有相同的行數和相同的主鍵? – Leo

+0

是的,他們做 – Achilles

回答

1

當你不能夠從一個數據庫移動DATAS到另一個用一個連接,你不能用一個單一的查詢做到這一點,你需要做手工,或與第三方語言。

你需要:

  • 得到每一個數據庫連接
  • databaseA
  • 你的桌子上拿到PRIMARY KEYuser
  • 出口DATAS注入這些DATAS到databaseB

PHP/PDO示例:

// Create 2 connections 
try { 
    $dbA = new PDO('mysql:dbname=databaseA;host=localhost', 'root', ''); 
    $dbB = new PDO('mysql:dbname=databaseB;host=localhost', 'root', ''); 
} catch (PDOException $ex) { 
    echo 'Connection failed: ' . $ex->getMessage(); 
} 

// Get datas from databaseA 
$result = $dbA->query("SELECT id, col1, col2, col3 FROM user"); 

// Prepare REPLACE query for databaseB 
$query = "REPLACE INTO user (id, col1, col2, col3) VALUES"; 
$values = array(); 
foreach ($result as $row) { 
    array_push($values, '('.$row['id'].', "'.$row['col1'].'", "'.$row['col2'].'", "'.$row['col3'].'")'); 
} 
$query .= implode(',', $values); 

// Execute REPLACE query on databaseB 
$stmt = $dbB->prepare($query); 
$stmt->execute(); 
+0

謝謝你,它的工作原理,但現在我有另一個問題。我僞裝說。我只想替換前100列ID。我的意思是每個cloumns有超過100個id,我想替換前100個。不是所有的 – Achilles

+0

你能解釋一下嗎?你的目標是什麼?這些ID是什麼? – zessx

+0

當然,我加入了兩個數據庫用戶togeather,但前100名用戶應該改變一些值。對於前100名用戶,我在另一個數據庫中擁有相同列的正確信息。所以我想把這個正確的值替換成這個數據庫。但只適用於前100名用戶,不適用於超過100個id。這個ID保存在cloumns「userid」中,我需要移動並替換col1,col2,col3值,僅用於前100個用戶ID – Achilles

1

如果table1db1數據庫具有t1c1t1c2t1c3列,你想只t1c1,並t1c3數據被複制到數據庫db2table2與列t2c1t2c2然後

insert into db2.table2(t2c1, t2c2) select t1c1, t1c3 from db1.table1 

應該工作您。

並確保您具有設置爲從跨數據庫表或其他對象訪問數據所需的特權。如果有任何限制,您還應該檢查table2上的問題。

+0

謝謝,它適用於兩個表都在同一個數據庫上可用。謝謝 – Achilles