iT邦幫忙

0

關於SQL語言

各位大大們
最近小弟在學習SQL語言的指令
遇到一個問題想請教一下各位,在同一台server上有數個資料庫
我要將A資料庫的檔案複製到B資料庫裡
要如何下指令?(前提為兩個資料庫皆有相同資料表)
以下為小弟琢磨出來的指令
insert into B("欄位資料")
select"欄位資料"
from A
是這樣嗎

10
純真的人
iT邦高手 1 級 ‧ 2013-12-03 17:53:47
最佳解答
看更多先前的回應...收起先前的回應...

藍色小舖的解答1,就是敝人寫的.
不過我想發問者可能不是這種應用情境.

嗯~

不知道他的需求應用是怎樣~

也許只是練習練習...

bearchang iT邦新手 3 級 ‧ 2013-12-04 13:27:56 檢舉

大大感謝您的解答
我的需求其實跟大大您這方式有點類似
如我要將A資料庫裡的a資料表以及b資料表copy到B資料庫(A,B資料庫裡皆有a,b資料表格式)
不知道我這樣表達方式大大們懂不懂?哭

bearchang提到:
如我要將A資料庫裡的a資料表以及b資料表copy到B資料庫

若你的問題只是資料同步的話~這樣SQL應該可以達成你要的,只要A資料表沒有的~B資料就插進來~

<pre class="c" name="code">insert into A資料庫名稱.A資料表 select * from B資料庫名稱.B資料表
where not exists(select * from A資料庫名稱.A資料表 where A資料庫名稱.A資料表.ID = B資料庫名稱.B資料表.ID)

bearchang提到:
A,B資料庫裡皆有a,b資料表格式

我要先說清楚唷~我那段SQL碼是用ID流水號做判斷的~你的Primary key是那個欄位要對應好~

bearchang iT邦新手 3 級 ‧ 2013-12-06 13:19:01 檢舉

謝啦~大大的這方向非常有幫助~我解決了!!感恩

6
slime
iT邦大師 1 級 ‧ 2013-12-03 13:27:40

純技術

  1. select into 比較適合用在資料"表".
  2. 資料"庫"建議用 dump / backup&restore

想問一下是怎樣的資料"庫"要這樣用, 比如:

  1. 有數個相關企業, 資料庫內有些資料表要共用. (當初規劃以單一公司考量.)
  2. 純粹備份, 以便查詢用或備援用.
  3. 資料量太大, 將過期的資料搬移.
bearchang iT邦新手 3 級 ‧ 2013-12-03 13:40:20 檢舉

抱歉大大我可能沒打清楚
因該是說我要將A資料庫裡的資料表複製到B資料庫裡相同的資料表
這樣比喻好了,兩邊資料庫裡都有相同的資料表格
我一開始在A裡建立了資料表,現在想把A裡的資料表複製到B資料庫裡,讓兩邊皆有相同的資料表
並且不覆蓋過原本B資料表的資料
sorry~我是初學者 冏

bearchang提到:
抱歉大大我可能沒打清楚
因該是說我要將A資料庫裡的資料表複製到B資料庫裡相同的資料表
這樣比喻好了,兩邊資料庫裡都有相同的資料表格
我一開始在A裡建立了資料表,現在想把A裡的資料表複製到B資料庫裡,讓兩邊皆有相同的資料表
並且不覆蓋過原本B資料表的資料
sorry~我是初學者 冏

是"應該"不是"因該".
"想把A裡的資料表複製到B資料庫裡", 後面又說
"不覆蓋過原本B資料表的資料".
你的B 是 "資料表" 還是 "資料庫" ?
B 若是 資料庫,裡面的資料表有跟 A資料庫的資料表相同名稱的嗎??

你要不要先把情境自己整理好.
這是很簡單的事情,但是自己搞不清就很混亂了.

6
keelung0829
iT邦新手 4 級 ‧ 2013-12-03 14:23:55

我猜想應該是A庫的a表的資料想搬到B庫的b表,只是a跟b的schema是一樣的吧?!
不知道你用的資料庫是哪個?
就我知道的~簡單說一下好了!
SQL Server:可使用BCP作資料的匯出與匯入。
MySQL:匯出使用select ...outfile;匯入使用load data。
Postgre:可用copy to & copy from作資料的匯出與匯入。

6
月半車甫
iT邦研究生 3 級 ‧ 2013-12-03 14:27:08

bearchang提到:
insert into B("欄位資料")
select"欄位資料"
from A

純就上述SQL而言,是簡單的資料表內的資料複製,通常是沒有問題。
但是如果不考慮資料的重複性,那就可能變成是災難。

建議多考慮一下在B表增加Primary key的判斷,以免資料出現重複性。
或多加個條件,在這次的insert into 把已經存在B表的資料排除。

8
海綿寶寶
iT邦超人 1 級 ‧ 2013-12-03 16:42:14

假設
你的 A 資料庫叫 old_db, 資料表叫做 old_table
B 資料庫叫 new_db, 資料表叫做 new_table

<pre class="c" name="code">
'以下指令要在 new_db 執行

'1.如果還沒建立 B 資料表,就建立新資料表
CREATE TABLE new_table LIKE old_db.old_table;

'2.複製資料
INSERT new_table SELECT * FROM old_db.old_table;

參考資料:MySQL copy table

6
showjack
iT邦新手 1 級 ‧ 2013-12-04 12:10:45

想讓B 資料庫內資料表內擁有與A資料庫內資料表的鄉同內容?

應該考慮使用資料庫同步功能比較省事

除非是a 資料庫內的資料要傳給 b 資料庫, 而B 資料庫自己還另外會有修改,而這樣的修改並不想傳給a
雖然可以做a 到B 方向的單向同步, 但如同yafuu168 講的, 如果B資料庫內資料表的 RIMARY KEY OR UNIQ KEY 沒規劃好, 造成資料重複, 鵲實會是一個大災難

8
hisniper
iT邦新手 2 級 ‧ 2013-12-05 10:52:43

先釐清你的問題
若是有 A資訊庫中 Table1~10 都要匯入 B資料庫的 Table1~10
且 先前匯入 B資料庫的資料又不可覆蓋
ex. B.Table1 已匯入 55筆資料..這55筆資有可能在 B資料庫中自行異動(改、刪)
因此這55筆就不在受 A.Table1 所覆蓋..
所以你要的是若 A.Table1 若又有"新增" 56,57,58 ...筆資料時.
就要同步寫入 B.Table1...
以上的描述是你的需求嗎?

若是,你可以考慮在 A.Table1 中寫 insert tigger
並在其中寫程式碼,把本次新增(56,57,58..)當下同步匯入 B.Table1

另一個方法是在資料結構上多一個欄位來作辨識旗標..
沒匯過的是0(初始值), 當已匯過的 就寫 1
因此寫指令時判斷此旗標

以上想法不知道是否是你要的方向
參考、討論看看

我要發表回答

立即登入回答