SHOW ENGINES 中 Support=YES 才可用。CREATE TABLE csv_table (
id BIGINT NOT NULL,
name VARCHAR(100) NOT NULL
) ENGINE=CSV;
生成三個文件(數據目錄下):
csv_table.frm:表元數據(結構定義),所有引擎通用。csv_table.csv:數據文件,標準 CSV 格式,可直接用 Excel 打開。csv_table.CSM:狀態/元信息文件(內部使用,勿手動修改)。-- 插入
INSERT INTO csv_table VALUES (1, 'aa'), (2, 'bb');
-- 查看 CSV 文件內容
1,"aa"
2,"bb"
-- 查詢
SELECT * FROM csv_table;
csv_table.csv。SELECT * FROM csv_table; 即可見新數據。優勢:批量導入百萬行無需 SQL 解析,極快;風險:繞過 SQL 層無約束檢查,數據質量自擔風險。
| 限制 | 影響 | 應對 |
|---|---|---|
| 不支持索引 | 全表掃描,大表查詢極慢 | 僅作導出/交換,勿用於線上查詢 |
| 不支持事務 | 無法回滾,崩潰可能損壞文件 | 重要數據先入 InnoDB,再導出 CSV |
| 不支持主鍵/唯一約束 | 可重複數據 | 應用層保證唯一性 |
| 不支持分區 | 無法水平拆分 | 應用層分表 |
| 字段長度限制 | 單行 ≤ 65KB(受 CSV 格式限制) | 大字段用 TEXT/BLOB 存 InnoDB |
| 并發寫入鎖表 | MyISAM 級表鎖,寫入串行 | 單寫入進程、批量導入 |
CREATE TABLE rpt_tmp ENGINE=CSV SELECT ... FROM business_table;rpt_tmp.csv 發給業務/上傳 BI。LOAD DATA INFILE 入 InnoDB。RENAME TABLE 歸檔,舊文件直接壓縮存 S3。CSV 引擎是「數據交換格式」在數據庫層的原生映射,**不適合線上業務查詢**,但在**報表導出、數據遷移、日誌歸檔**等場景極具性價比。善用「停庫改文件」技巧,可實現百萬級秒級導入。