添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
2021 年 3 月 3 日 ,由 Robert Gravelle 撰寫

最近,我寫了一個 node.js 指令碼,每天逐一查看數百萬個檔案,並將其內容插入 MySQL 資料庫。該指令碼不是一次處理一筆記錄,而是將檔案內容儲存在記憶體中,然後每 1000 個檔案執行一次 INSERT 陳述式。為此,我使用了 INSERT 陳述式的大量插入形式。你可以根據你的特定需求選擇使用其他方案。在今天的文章中,我們將介紹一些替代方案。

大量插入資料的 INSERT 陳述式變化

INSERT 陳述式支援多種語法變化,其中之一是用於同時插入多列。為此,我們只需要將每個值列表括在括號中並使用逗號將它們分開:

INSERT INTO table_name (column_list) VALUES (value_list_1), (value_list_2), (value_list_n);

很簡單。以下是在 Navicat for MySQL 顯示的範例陳述式:

上面的陳述式經過格式化以提高可讀性,所以在動態產生 SQL 時你不必擔心陳述式的可讀性。只要語法在語義上正確,它就可以正常工作。最後,請注意,使用 INSERT 陳述式一次只能插入最多 1000 列。

LOAD DATA INFILE

對於不希望撰寫指令碼的人來說,另一種選擇是使用如 LOAD DATA INFILE 之類。這是一個 MySQL 特定的命令,但是大多數其他資料庫系統(DBMS)也支援類似的命令。它可以匯入各種分隔的檔案格式,包括逗號(CSV)、定位字元(TDV)等。

以下是將「c:\tmp\discounts.csv」檔案的資料匯入 discounts 資料表的陳述式:

LOAD DATA INFILE 'c:/tmp/discounts.csv' INTO TABLE discounts FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;

上面的陳述式使用了 IGNORE 1 ROWS 選項來略過標題。

我本來想使用這種方法來匯入資料,但是我們要匯入的檔案採用了高度專業化和複雜的格式,需要大量的前端邏輯。

使用匯入公用程式

還有一種方法是使用匯入公用程式,例如 Navicat 的「匯入精靈」。你能想像的任何格式它幾乎都可以支援,包括 CSV、Excel、HTML、XML、JSON 和許多其他格式:

這個畫面可以選擇記錄分隔字元、欄位分隔字元和文字辨識符號:

Navicat 即時顯示進度:

完成匯入後,你可以儲存所有設定以便日後使用,這不僅方便你定期執行該設定,而且還允許你設定自動化執行,無需你任何額外干預即可匯入資料。

在今天的文章中,我們介紹了一些用於在 MySQL 和其他 DBMS 執行大量插入的方法。

如果你對 Navicat for MySQL 感興趣,可以免費試用 14 天!

部落格封存檔