2008-09-16 82 views

回答

3

如果您要導入的數據格式合理(例如逗號分隔),並且數據庫服務器具有合理的命令行實用程序,則這應該不成問題。 MySQL的有「mysqlimport的」命令行工具,將接受描述文件的格式的各種參數:

mysqlimport \ 
    --fields-terminated-by=, \ 
    --ignore-lines=1 \ 
    --fields-optionally-enclosed-by='"' < datafile.txt 

通過傳遞數據的Perl/SED/AWK單行可以得到它在正確的格式幫助,並且shell腳本可以輕鬆處理文件名提示,處理參數等。

使用Unix提供的各種命令行工具是bash腳本的完整點。 Perl,mysql等都是該工具包的一部分。

0

現在不能測試,但這樣的:

echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" | 
    mysql -u user -psecret -h host database 

在shell腳本應該工作。不知道如何獲取數據雖然

2

它是可能的: 使用您的UNIX腳本,生成一個SQL腳本,並使用CLI到數據庫執行SQL腳本。

如果信息量足夠小,您可以在內存中構建SQL,但是我建議您不要這樣做,因爲您永遠不知道未來會發生什麼(並且數據量可能非常大)。每個請求使用一個呼叫不允許您從有時可用的批量操作中受益。

2

可以,但如果你使用MySQL它可能是一個有點難看,例如和假設你已經存儲在$ SQL

echo $sql | mysql -u[user] -p[password] -h[host] 

附:SQL字符串這可能是一個好主意,告訴我們什麼數據庫您使用的,所以我們可以提供更具體的幫助:P

編輯:改變的例子線所以它的實際工作

-2

殼牌腳本(bash或類似)主意圖不是處理數據庫。選擇Java甚至更好,藉此機會學習Python或Ruby等腳本語言的基礎知識。

+0

unix shell是一種腳本語言,您並不總是有更好的腳本語言可用。 Java不會那麼容易,並且可能不如 (woohoo評論現在在IE6中工作) – Jean 2008-09-16 12:48:44

1

管是你的朋友。

例如,在MySQL:

echo 'load data infile /path/to/the/file into table table_name ...' | 
    mysql -u mysql_user_id -p 

應該做的工作。

如果您的文件以某種結構構建,例如逗號/製表符分隔等。

有關詳細信息,請查看數據庫手冊。

+0

格式化提示:所有行以至少3個空格開頭的段落將被格式化爲「代碼」。我建議用你的例子來做這件事,因此它更加突出。這是一個很好的答案! – 2008-09-16 14:58:17

2

當然,你可以,假設你有一個命令行SQL客戶端方便!我已經用Sybase和isql命令行客戶端完成了它。你甚至可以聰明地通過awk發送東西,併發送腳本來即時生成命令。它可能並不是最有效的方法,但是有很多機會來展示你的Unix黑客魔咒。

0

這取決於您的數據庫管理系統。他們中的大多數具有強大的shell工具來導入數據,甚至可以完成一些ETL功能。如果這些工具支持批量加載,那麼這些工具甚至可能非常高效 - 通常Java JDBC不能那麼容易地完成。