MySQL有很多存儲引擎,這裡並不過多介紹,今天主要是簡單說說CSV存儲引擎,個人認為CSV是MYSQL中相對比較簡單而且方便的存儲引擎了,說它簡單是因為其創建和使用簡單,說它方便,是因為它的數據存儲文件格式就是通用的CSV文件格式,這種格式很普遍,很多軟件都支持,當然應用的面也比較窄,主要用於方便輸出數據為通用的CSV報表格式的時候,通常情況下還是用的比較少。 1.MySQL對CSV存儲引擎的支持。
不是所有的MySQL版本都支持CSV存儲引擎,只有在MySQL 5.0及以上版本才支持,而且Windows下的版本在5.1版本才知道。
如果當前版本不支持CSV存儲引擎,而在創建使用CSV存儲引擎的表時,會提示如下錯誤:
MySQL> create table csv_test(id bigint not null,name varchar(100) not null)engine=csv
-> ;
ERROR 1289 (HY000): The 'CSV' feature is disabled; you need MySQL built with 'CSV' to have it working.
這是本人在windows 5.0.22版本下測試時遇到的錯誤信息。換個Windows下的5.1以上的版本就OK了。
另外,也可以通過show engines命令來檢查該版本是否支持CSV存儲引擎,也可以查看其支持哪些存儲引擎,如下:
1)Windows 下 MySQL 5.0.22版本的show engines命令執行情況:
mysql> show engines; | Engine | Support | Comment | | MyISAM | YES | Default engine as of MySQL 3.23 with great performance |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys |
| BerkeleyDB | NO | Supports transactions and page-level locking |
| BLACKHOLE | NO | /dev/null storage engine (anything you write to it disappears) |
| EXAMPLE | NO | Example storage engine |
| ARCHIVE | YES | Archive storage engine |
| CSV | NO | CSV storage engine |
| ndbcluster | NO | Clustered, fault-tolerant, memory-based tables |
| FEDERATED | NO | Federated MySQL storage engine |
| MRG_MYISAM | YES | Collection of identical MyISAM tables |
| ISAM | NO | Obsolete storage engine | 12 rows in set (0.00 sec)
測試結果發現,該版本並不支持CSV存儲引擎,而且,總共支持MyISAM,MEMORY,InnoDB,ARCHIVE,MRG_MYISAM這5種存儲引擎。
2)Windows 下 MySQL 5.4.3版本的show engines命令執行情況:
mysql> show engines; | Engine | Support | Comment | Transactions | XA | Savepoints | | MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | 8 rows in set (0.02 sec)
發現這個版本就支持CSV,而且支持MyISAM,CSV,MRG_MYISAM,BLACKHOLE,InnoDB,ARCHIVE,MEMORY這7種存儲引擎。
2.CSV存儲引擎的使用
1)先建一測試表,用CSV存儲引擎,如下:
MySQL> create table csv_table(id bigint not null,name varchar(100) not null)engine=csv;
Query OK, 0 rows affected (0.11 sec)
2)觀察生成的表相關文件:
發現生成了3個文件,如下:
csv_table.frm csv_table.csv csv_table.csm
csv_table.frm 這個文件很清楚,保存表的元數據信息,任何一個MySQL存儲引擎都有這個表文件。
csv_table.csv 這個是數據文件,保存表中的數據,用CSV格式保存。
csv_table.csm 這個文件究竟用途如何,還不太清楚,研究中。。。
3)向表中插入2條數據,代碼如下:
MySQL> insert into csv_table values(1,'aa');
Query OK, 1 row affected (0.05 sec)
MySQL> insert into csv_table values(2,'bb');
Query OK, 1 row affected (0.00 sec)
4)打開csv_table.csv,觀察其數據:
1,"aa"
2,"bb"
大家都知道,該文件可以直接用Excel打開。
3. 修改數據文件csv_table.csv
使用CSV存儲引擎的一個重要好處是,可以直接通過修改文件,向數據庫中添加更新數據。現在打開csv_table.csv文件,修改內容為如下:
1,"aa"
2,"bb"
3,"cc"
4,"dd"
點保存,卻發現無法保存,系統提示“另一程序正在使用此文件,進程無法訪問”,這個程序就是MYSQL,MYSQL在運行期間,鎖定了該文件, 因此必須停止了MySQL才能修改。
於是停止MySQL服務,然後編輯後保存,OK。
重新啟動MySQL服務,
通過select語句查看該表數據,如下:
MySQL> select * from csv_table; | id | name | | 1 | aa |
| 2 | bb |
| 3 | cc |
| 4 | dd | 4 rows in set (0.00 sec)
OK,數據已經更新,非常方便。
4.CSV存儲引擎的缺點
CSV存儲引擎實際上操作維護的是一個標准的CSV文件,因此不支持索引等功能。