MySQL - 將資料表匯出為 CSV 檔案

你好,未來的資料庫魔法師們!今天,我們將踏上一段令人興奮的旅程,進入 MySQL 的世界,並學習如何將我們珍貴的數據匯出為 CSV 檔案。別擔心如果你是新手;我會一步一步引導你,就像我們坐在我的教室旁一樣。讓我們開始吧!

MySQL - Export Table into CSV File

CSV 檔案是什麼?

在我們開始匯出之前,讓我們先了解 CSV 檔案是什麼。CSV 的意思是逗號分隔值。它是一種用來存儲表格數據的簡單檔案格式,例如試算表或資料庫。檔案中的每一行代表表格的一列,而每行中的值則用逗號分隔。

例如,一個 CSV 檔案可能看起來像這樣:

Name,Age,City
John,25,New York
Sarah,30,London
Mike,28,Tokyo

這種格式因為簡單且容易匯入各種應用程序,包括試算表軟件和其他資料庫而被廣泛使用。

將 MySQL 資料表匯出為 CSV 檔案

現在,讓我們來深入我們課程的核心:將 MySQL 資料表匯出為 CSV 檔案。有幾種方法可以做到這一點,我們將詳細探討每一種。

方法 1:使用 SELECT ... INTO OUTFILE 語句

這是最直接的方法來將數據從 MySQL 匯出到 CSV 檔案。這裡是基本語法:

SELECT * FROM table_name
INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

讓我們分解這個語句:

  • SELECT * FROM table_name:這會選擇你的表的所有列。
  • INTO OUTFILE '/path/to/file.csv':這指定了輸出檔案的路徑。
  • FIELDS TERMINATED BY ',':這告訴 MySQL 用逗號分隔字段。
  • ENCLOSED BY '"':這將字段用雙引號包起來(如果你的數據中包含逗號,這很有用)。
  • LINES TERMINATED BY '\n':這將每行的結尾設為換行符。

方法 2:使用 mysqldump 指令

如果你喜歡在命令行中工作,mysqldump 是你的好夥伴。這樣使用它:

mysqldump -u username -p --tab=/path/to/output/directory database_name table_name

這個命令將在指定目錄中創建兩個檔案:

  1. 一個 .sql 檔案,包含表的結構。
  2. 一個 .txt 檔案,包含以制表符分隔的數據。

要得到 CSV 格式,你可以添加一些選項:

mysqldump -u username -p --tab=/path/to/output/directory --fields-terminated-by=, --fields-enclosed-by='"' --lines-terminated-by=0x0d0a database_name table_name

匯出 .csv 檔案的存儲位置

在匯出檔案時,了解它們被保存在哪裡是至關重要的。默認情況下,MySQL 將匯出的檔案保存在其數據目錄中。然而,出於安全原因,你可能沒有在那裡寫入的權限。

要找出 MySQL 試圖將檔案保存到哪裡,你可以運行:

SHOW VARIABLES LIKE "secure_file_priv";

這將顯示 MySQL 被允許讀/寫檔案的目錄。如果它返回 NULL,這意味著沒有限制。

匯出 MySQL 數據為 CSV 格式

現在,讓我們看看一些特定情況以及如何處理它們。

匯出表數據以及列標題

如果你想在你的 CSV 檔案中包含列名,你可以使用 UNION 查詢:

(SELECT 'id', 'name', 'age', 'city')
UNION
(SELECT * FROM users)
INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

這會先添加一行列名,然後與實際數據聯合。

匯出表數據而不指定列名

如果你不需要列名,你可以簡單使用:

SELECT * FROM users
INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

替換 NULL 值

有時候,你可能想要在 CSV 中將 NULL 值替換為其他內容。你可以使用 IFNULL() 函數來做到這一點:

SELECT
id,
IFNULL(name, 'Unknown') AS name,
IFNULL(age, 0) AS age,
IFNULL(city, 'N/A') AS city
FROM users
INTO OUTFILE '/path/to/file.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

這會將 NULL 名稱替換為 'Unknown',NULL 年齡替換為 0,NULL 城市替換為 'N/A'。

使用客戶端程序

如果你正在使用像 MySQL Workbench 或 phpMyAdmin 這樣的 MySQL 客戶端程序,你通常會有內置的匯出功能。這些 GUI 可以使過程對初學者來說更加容易。

例如,在 MySQL Workbench 中:

  1. 右鍵單擊你的表。
  2. 選擇 "Table Data Export Wizard"。
  3. 按照提示將你的數據匯出為 CSV。

記住,熟能生巧!不要害怕嘗試這些方法。在你意識到之前,你將會像專業人士一樣匯出 CSV 檔案。

這裡是我們討論過的方法的總結表:

方法 優點 缺點
SELECT ... INTO OUTFILE 快速,靈活 需要文件系統訪問權
mysqldump 命令行友好,處理大量數據集 語法更複雜
客戶端 GUI 程序 用戶友好,視覺界面 與直接 SQL 相比可能有限制

祝你在匯出的路上一切順利,未來的數據大師!記住,每個偉大的數據科學家都是從你現在的位置開始的。持續練習,保持好奇心,很快你將會與數據庫共舞,無人能及!

Credits: Image by storyset