? 簡介
您還在使用“for”或“while”循環來迭代行并將它們插入數據庫嗎?您還在編寫單獨的代碼來讀取 .csv 文件并將其上傳到 mysql 數據庫嗎?
用mysql提供的“load data”語句對線性邏輯說“不”。準備好更改代碼以最大程度地減少代碼行并大幅提高性能。
mysql 提供了 load data 語句,這是一種非常高速的方法,可以用很少的代碼從文本文件中讀取數據并將其插入表中。
? 什么是 load data infile 語句?
根據 mysql 的官方文檔,load data 語句用于以非常快的方式從文件中讀取數據,您可以通過一個查詢將此數據插入表中,而不是多次訪問數據庫多次使用“insert into”查詢。
mysql還提供了一個語句-> “select…into outfile”,它的作用與”load data”的作用完全相反,就是從表中讀取數據到文件。
mysql提供的mysqlimport實用程序內部調用服務器上的load data語句來導入數據。
? 如何使用它?
github.com/elpidaguy/dcca2278391fea34dbc76e7f4ce03f4d.js”>
above gist snippet shows the generic load data statements. all the available options are mentioned in the code above.
lets now focus on a simple example of simply reading a .csv file and inserting it’s rows into a compatible table.
a simple example :
load data infile ‘data.csv’ into table db.my_table
登錄后復制登錄后復制
a birds-eye example with all essential options :
上面的要點片段顯示了通用負載數據語句。上面的代碼中提到了所有可用的選項。
現在讓我們關注一個簡??單的示例,簡單地讀取 .csv 文件并將其行插入到兼容的表中。
一個簡單的例子:
load data infile ‘data.csv’ into table db.my_table
登錄后復制登錄后復制
包含所有基本選項的鳥瞰示例:
不用說,您的 csv 文件應該正確格式化才能使此語句發揮作用。
瞧,使用上面的語句,你的超過 10 萬行的 .csv 將在幾秒鐘內導入到你的表中。
現在,一些重要的事情需要注意:
上述語句在mysql級別運行,因此源文件從客戶端復制到服務器以便導入它們。
這會帶來一些安全問題,我們需要確保使用此代碼時客戶端-服務器連接的安全。
在mysql 8.0中,使用local的能力默認設置為false。由于您的服務器和客戶端應配置為允許 local,因此有些人可能會遇到權限錯誤。
如果出現權限錯誤,我們需要通過啟用
local_infile
:
來覆蓋它
SET GLOBAL local_infile = true;
登錄后復制
注意:覆蓋此標志并不是安全解決方案,而是承認接受風險,您可以參考此文檔以獲取更多信息。
??? 結論
mysql load data 語句用于在非常短的時間內讀取文件。
您可以將此代碼與任何后端api一起使用來提供源文件。
源文件可以是任何文本文件,我們在本例中使用.csv。
load data local
通過mysql將源文件復制到您的服務器,因此需要在服務器端實施安全措施。
mysqlimport
實用程序內部使用load data語句。
您可以通過在語句中添加ignore 1 lines來忽略csv中的標頭。#??#
#??##??##??#
#??#
? 參考
#??#
#??#官方文檔#??#
#??#
#??#