
- MySQL 基礎
- MySQL - 首頁
- MySQL - 簡介
- MySQL - 特性
- MySQL - 版本
- MySQL - 變數
- MySQL - 安裝
- MySQL - 管理
- MySQL - PHP 語法
- MySQL - Node.js 語法
- MySQL - Java 語法
- MySQL - Python 語法
- MySQL - 連線
- MySQL - Workbench
- MySQL 資料庫
- MySQL - 建立資料庫
- MySQL - 刪除資料庫
- MySQL - 選擇資料庫
- MySQL - 顯示資料庫
- MySQL - 複製資料庫
- MySQL - 資料庫匯出
- MySQL - 資料庫匯入
- MySQL - 資料庫資訊
- MySQL 使用者
- MySQL - 建立使用者
- MySQL - 刪除使用者
- MySQL - 顯示使用者
- MySQL - 修改密碼
- MySQL - 授予許可權
- MySQL - 顯示許可權
- MySQL - 收回許可權
- MySQL - 鎖定使用者帳戶
- MySQL - 解鎖使用者帳戶
- MySQL 表
- MySQL - 建立表
- MySQL - 顯示錶
- MySQL - 修改表
- MySQL - 重命名錶
- MySQL - 克隆表
- MySQL - 截斷表
- MySQL - 臨時表
- MySQL - 修復表
- MySQL - 描述表
- MySQL - 新增/刪除列
- MySQL - 顯示列
- MySQL - 重新命名列
- MySQL - 表鎖定
- MySQL - 刪除表
- MySQL - 派生表
- MySQL 查詢
- MySQL - 查詢
- MySQL - 約束
- MySQL - INSERT 查詢
- MySQL - SELECT 查詢
- MySQL - UPDATE 查詢
- MySQL - DELETE 查詢
- MySQL - REPLACE 查詢
- MySQL - INSERT IGNORE
- MySQL - INSERT ON DUPLICATE KEY UPDATE
- MySQL - INSERT INTO SELECT
- MySQL 運算子和子句
- MySQL - WHERE 子句
- MySQL - LIMIT 子句
- MySQL - DISTINCT 子句
- MySQL - ORDER BY 子句
- MySQL - GROUP BY 子句
- MySQL - HAVING 子句
- MySQL - AND 運算子
- MySQL - OR 運算子
- MySQL - LIKE 運算子
- MySQL - IN 運算子
- MySQL - ANY 運算子
- MySQL - EXISTS 運算子
- MySQL - NOT 運算子
- MySQL - 不等於運算子
- MySQL - IS NULL 運算子
- MySQL - IS NOT NULL 運算子
- MySQL - BETWEEN 運算子
- MySQL - UNION 運算子
- MySQL - UNION vs UNION ALL
- MySQL - MINUS 運算子
- MySQL - INTERSECT 運算子
- MySQL - INTERVAL 運算子
- MySQL 連線
- MySQL - 使用連線
- MySQL - INNER JOIN
- MySQL - LEFT JOIN
- MySQL - RIGHT JOIN
- MySQL - CROSS JOIN
- MySQL - FULL JOIN
- MySQL - 自連線
- MySQL - DELETE JOIN
- MySQL - UPDATE JOIN
- MySQL - UNION vs JOIN
- MySQL 觸發器
- MySQL - 觸發器
- MySQL - 建立觸發器
- MySQL - 顯示觸發器
- MySQL - 刪除觸發器
- MySQL - BEFORE INSERT 觸發器
- MySQL - AFTER INSERT 觸發器
- MySQL - BEFORE UPDATE 觸發器
- MySQL - AFTER UPDATE 觸發器
- MySQL - BEFORE DELETE 觸發器
- MySQL - AFTER DELETE 觸發器
- MySQL 資料型別
- MySQL - 資料型別
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL 正則表示式
- MySQL - 正則表示式
- MySQL - RLIKE 運算子
- MySQL - NOT LIKE 運算子
- MySQL - NOT REGEXP 運算子
- MySQL - regexp_instr() 函式
- MySQL - regexp_like() 函式
- MySQL - regexp_replace() 函式
- MySQL - regexp_substr() 函式
- MySQL 函式和運算子
- MySQL - 日期和時間函式
- MySQL - 算術運算子
- MySQL - 數值函式
- MySQL - 字串函式
- MySQL - 聚合函式
- MySQL 其他概念
- MySQL - NULL 值
- MySQL - 事務
- MySQL - 使用序列
- MySQL - 處理重複項
- MySQL - SQL 注入
- MySQL - 子查詢
- MySQL - 註釋
- MySQL - CHECK 約束
- MySQL - 儲存引擎
- MySQL - 將表匯出到 CSV 檔案
- MySQL - 將 CSV 檔案匯入資料庫
- MySQL - UUID
- MySQL - 通用表表達式
- MySQL - ON DELETE CASCADE
- MySQL - Upsert
- MySQL - 水平分割槽
- MySQL - 垂直分割槽
- MySQL - 遊標
- MySQL - 儲存函式
- MySQL - SIGNAL
- MySQL - RESIGNAL
- MySQL - 字元集
- MySQL - 排序規則
- MySQL - 萬用字元
- MySQL - 別名
- MySQL - ROLLUP
- MySQL - 今日日期
- MySQL - 字面量
- MySQL - 儲存過程
- MySQL - EXPLAIN
- MySQL - JSON
- MySQL - 標準差
- MySQL - 查詢重複記錄
- MySQL - 刪除重複記錄
- MySQL - 選擇隨機記錄
- MySQL - SHOW PROCESSLIST
- MySQL - 更改列型別
- MySQL - 重置自動遞增
- MySQL - COALESCE() 函式
- MySQL 有用資源
- MySQL - 有用函式
- MySQL - 語句參考
- MySQL - 快速指南
- MySQL - 有用資源
- MySQL - 討論
MySQL - 將表匯出到 CSV 檔案
MySQL 是一個開源的關係資料庫管理系統,允許我們儲存和管理大量資料。其關鍵特性之一是從表中匯出資料到各種格式,CSV 就是其中之一。CSV 代表 **“逗號分隔值”** 檔案。
這允許使用者以結構化格式從表中提取資料,可以使用 Microsoft Excel、Google 文件、OpenOffice 等其他工具輕鬆地操作和分析這些資料。
將 MySQL 表匯出到 CSV 檔案
要將 MySQL 表資料匯出到 CSV 檔案,可以使用 MySQL 的 **“SELECT INTO ... OUTFILE”** 語句。在將資料庫伺服器中的任何表資料匯出到 CSV 檔案之前,必須確保以下事項:
MySQL 伺服器的程序必須對指定的 CSV 檔案將要建立的目標資料夾具有讀/寫許可權。
指定的 CSV 檔案應該已經存在於系統中(無重複檔案)。
匯出的 CSV 檔案可以包含來自一個或多個表的資料,並且可以修改為僅包含特定列或行。
語法
以下是 SELECT INTO ... OUTFILE 語句的語法:
SELECT column_name1, column_name2,... INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file_name.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
其中:
**INTO OUTFILE** 是我們要將表資料匯出到的 CSV 檔案的路徑和名稱。
**FIELDS TERMINATED BY** 是分隔匯出 CSV 檔案中欄位的分隔符。
**LINES TERMINATED BY** 是匯出 CSV 檔案的行終止符。
匯出 .csv 檔案的儲存位置
在 MySQL 中,當匯出檔案(例如 .csv 檔案)時,匯出檔案的預設儲存位置由“secure_file_priv”變數確定。
要查詢匯出檔案的預設路徑,可以使用以下 SQL 查詢:
SHOW VARIABLES LIKE "secure_file_priv";
我們將得到以下輸出:
變數名 | 值 |
---|---|
secure_file_priv | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ |
在將資料匯出到 .csv 檔案之前,需要在 MySQL 資料庫中至少有一個表。讓我們使用以下 SQL 查詢建立一個名為“CUSTOMERS”的表:
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
現在,我們正在將資料插入到上面建立的表中,如下所示:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ), (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, NULL, 2000.00 ), (4, 'Chaitali', NULL, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 ), (6, 'Komal', 22, NULL, 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
獲得的 **CUSTOMERS** 表如下所示:
ID | 姓名 | 年齡 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | NULL | 2000.00 |
4 | Chaitali | NULL | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | NULL | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
以 CSV 格式匯出 MySQL 資料
您可以使用 SELECT INTO ... OUTFILE 語句將 MySQL 資料匯出到 CSV 檔案。在這裡,我們使用以下查詢將 CUSTOMERS 表的資料匯出到名為“CUSTOMERS_BACKUP”的 CSV 檔案中:
SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
執行上述查詢後,將在指定路徑建立 CSV 格式檔案。以下是執行上述查詢後獲得的輸出:
Query OK, 7 rows affected (0.01 sec)
以下是開啟 **“CUSTOMERS_BACKUP.csv”** 檔案後的影像:

處理檔案已存在錯誤:
如果嘗試將資料匯出到已存在的檔案,MySQL 將生成錯誤:
SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
以下是獲得的錯誤:
ERROR 1086 (HY000): File 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv' already exists
為避免此錯誤,可以在執行匯出查詢之前選擇不同的檔名或刪除現有檔案。
刪除數值記錄的引號:
預設情況下,CSV 檔案中的所有記錄都將用雙引號括起來,包括數值。如果要刪除數值記錄的引號,可以在 ENCLOSED BY 子句之前使用 OPTIONALLY 子句,如下所示:
SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
以下是執行上述查詢後獲得的輸出:
Query OK, 7 rows affected (0.00 sec)
如下圖所示的 CSV 檔案影像,數值記錄的雙引號 (“”) 已被刪除。

匯出表資料以及列標題
要匯出表資料及其各自的列標題,可以使用 UNION ALL 語句。這允許您建立包含列名稱的行,然後附加資料行。這是一個示例查詢:
SELECT 'ID', 'NAME', 'EMAIL', 'PHONE', 'CITY' UNION ALL SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
輸出
獲得的輸出如下:
Query OK, 8 rows affected (0.01 sec)
驗證
如果我們驗證 .csv 檔案,我們可以看到添加了相應的列名稱:

匯出表資料而不指定列名
您還可以將表資料匯出到 CSV 檔案,而無需指定列名。
語法
以下是將表資料匯出到 CSV 檔案而不指定列名的語法:
TABLE table_name ORDER BY column_name LIMIT 100 INTO OUTFILE '/path/filename.txt' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';;
示例
在以下查詢中,我們將 CUSTOMERS 表資料匯出到“CUSTOMERS_BACKUP.csv”檔案,而不指定其列名:
TABLE CUSTOMERS ORDER BY NAME LIMIT 100 INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
輸出
生成的結果如下:
Query OK, 7 rows affected (0.01 sec)
驗證
如“CUSTOMERS_BACKUP.csv”檔案所示,表資料已匯出:

替換NULL值
如果您的表包含NULL值,您可以使用IFNULL()函式在將資料匯出到CSV檔案之前用特定值替換它們。
示例
在下面的查詢中,IFNULL()函式用於在匯出資料之前將“ADDRESS”列中的NULL值替換為“NULL_VALUE”,如下所示:
SELECT ID, NAME, AGE, IFNULL(ADDRESS, 'NULL_VALUE') FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
輸出
獲得的結果如下所示:
Query OK, 7 rows affected (0.00 sec)
驗證
NULL值 (N) 已被替換為“NULL_VALUE”。

使用客戶端程式
我們也可以使用客戶端程式將表匯出到CSV檔案。
語法
要透過PHP程式將表匯出到CSV檔案,我們必須傳遞原始檔路徑,並需要使用mysqli函式query()執行“SELECT”語句,如下所示:
$sql = "SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP_new.csv' FIELDS ENCLOSED BY '' TERMINATED BY '; ' ESCAPED BY '' LINES TERMINATED BY '\r\n'"; $mysqli->query($sql);
要透過JavaScript程式將表匯出到CSV檔案,我們必須傳遞原始檔路徑,並需要使用mysql2庫的query()函式執行“SELECT”語句,如下所示:
sql = `SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP_new1.csv' FIELDS ENCLOSED BY '"' TERMINATED BY '; ' ESCAPED BY '"' LINES TERMINATED BY '\r\n'`; con.query(sql);
要透過Java程式將表匯出到CSV檔案,我們必須傳遞原始檔路徑,並需要使用JDBC函式execute()執行“SELECT”語句,如下所示:
String sql = "SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP_new.csv' FIELDS ENCLOSED BY '' TERMINATED BY '; ' ESCAPED BY '' LINES TERMINATED BY '\\r\\n'"; statement.execute(sql);
要透過Python程式將表匯出到CSV檔案,我們必須傳遞原始檔路徑,並需要使用MySQL Connector/Python的execute()函式執行“SELECT”語句,如下所示:
sql = "SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv'FIELDS ENCLOSED BY '"'TERMINATED BY ' ' ESCAPED BY '"'LINES TERMINATED BY '\r\n'" cursorObj.execute(sql)
示例
以下是程式:
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $db = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db); if ($mysqli->connect_errno) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } //printf('Connected successfully.
'); $sql = "SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP_new.csv' FIELDS ENCLOSED BY '' TERMINATED BY ';' ESCAPED BY '' LINES TERMINATED BY '\r\n'"; if($result = $mysqli->query($sql)){ printf("Table data exported successfully....!\n"); print_r($result); } if($mysqli->error){ printf("Error message: ", $mysqli->error); } $mysqli->close();
輸出
獲得的輸出結果如下所示:
Table data exported successfully....! 1
var mysql = require('mysql2'); var con = mysql.createConnection({ host:"localhost", user:"root", password:"password" }); //Connecting to MySQL con.connect(function(err) { if (err) throw err; // console.log("Connected successfully...!"); // console.log("--------------------------"); sql = "USE TUTORIALS"; con.query(sql); sql = `SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP_new1.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n'`; con.query(sql, function(err, result){ console.log("Table data exported successfully...!"); console.log("Data: ") if (err) throw err; console.log(result); }); });
輸出
獲得的輸出結果如下所示:
Table data exported successfully...! Data: ResultSetHeader { fieldCount: 0, affectedRows: 7, insertId: 0, info: '', serverStatus: 34, warningStatus: 0, changedRows: 0 }
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class ExportTableToCSVFile { public static void main(String[] args) { String url = "jdbc:mysql://:3306/TUTORIALS"; String user = "root"; String password = "password"; ResultSet rs; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection con = DriverManager.getConnection(url, user, password); Statement st = con.createStatement(); //System.out.println("Database connected successfully...!"); String sql = "SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP_new.csv' FIELDS ENCLOSED BY '' TERMINATED BY ';' ESCAPED BY '' LINES TERMINATED BY '\\r\\n'"; st.execute(sql); System.out.println("Successfully...! table exported into CSV file.."); }catch(Exception e) { e.printStackTrace(); } } }
輸出
獲得的輸出結果如下所示:
Successfully...! table exported into CSV file..
import mysql.connector #establishing the connection connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) cursorObj = connection.cursor() # Query to export table into csv file sql = """ SELECT ID, NAME, AGE, ADDRESS, SALARY FROM CUSTOMERS INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n'; """ cursorObj.execute(sql) print("Table data expoted successfully") # Reading and displaying the exported CSV file with open('C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/CUSTOMERS_BACKUP.csv', 'r') as csvfile: for row in csvfile: # Use strip() to remove extra newlines print(row.strip()) # Closing the cursor and connection cursorObj.close() connection.close()
輸出
獲得的輸出結果如下所示:
Table data expoted successfully "1";"Ramesh";"32";"Ahmedabad";"2000.00" "2";"Khilan";"25";"Delhi";"1500.00" "3";"kaushik";"23";"Kota";"2000.00" "4";"Chaitali";"25";"Mumbai";"6500.00" "5";"Hardik";"27";"Bhopal";"8500.00" "6";"Komal";"22";"MP";"4500.00" "7";"Muffy";"24";"Indore";"10000.00"