MySQL從開發人員手中的“玩具”變為如今的“世界上最流行的開源數據庫”,其中的過程伴隨著產品版本升級,以及一些新功能特別是企業數據庫功能)的增加。現在,隨著MySQL 5.0被完美地開發出來,已經很少有人將MySQL稱為“玩具數據庫”了。MySQL的豐富功能滿足了許多用戶的需求,Oracle最近的動作表明了他們對待MySQL非常重視——Oracle曾幾次三番的表示有意收購MySQL。
MySQL的產品路線圖
讓我們先從MySQL的較有影響的版本產品開始,看一下MySQL的更新換代。
MySQL 4.0
MySQL 4.0是在2003年3月發布的,該版本使新的基於MySQL的應用程序獲得了更廣泛的應用。但是在4.0版中,MySQL不支持存儲過程、觸發程序、服務器端指針或視圖。MySQL 4.0是從3.23發展而來,較之3.23版本有了很大的提高,主要適用於Web站點,這時候的MySQL還不是一個企業級數據庫。
以下是MySQL 4.0的主要新特性:
FULLTEXT索引:最值得用戶期待的可能就是FULLTEXT索引。
FULLTEXT在文本字段創建索引,為對該索引執行布爾搜索提供了一個強大而靈活的機制。依照一般的開發經驗,開發人員通常必須創建索引並訪問文本數據,而FULLTEXT索引比想象中的還要好得多。
許多解決方案僅限於全字索引,FULLTEXT索引沒有這種限制,允許開發人員添加或拆分詞組。
ANSI SQL UNION:支持ANSI SQL UNION語句,該語句將詢問結果匯集到一個結果集。
多表操作:可以執行多表UPDATE和DELETE。
新語句:增加了其他DBMS用戶所熟悉的一些非標准的新語句如IDENTITY和TRUNCATE TABLE),以及FOUND_ROWS()等新功能,這些功能可以返回無需LIMIT子句就能返回的紀錄的編號。
InnoDB存儲引擎:InnoDB存儲引擎在當時作為服務器的標准特性,在4.0版本中成為一個附加選項。InnoDb是允許ACID兼容事務的表類型,而非默認的MyISAM表類型,它可以加快一般性使用的速度,但對於關鍵操作不是十分有用。
InnoDB表使用行級別鎖定特性,這意味著對一個記錄的更新只鎖定該記錄,而不是整個表。當選擇訪問大量的數據庫時對於大多數Web站點而言),鎖定整個表相當快,但是當插入和更新的數量接近於選項的數量時,則速度較慢。長期以來,對MySQL的批評一直集中在MyISAM表的安全性和一致性問題,兼容ACID的InnoDB表在解決這些問題上走過了很長一段路。
查詢緩存:MySQL 4.0在某些情況下可以更快捷。這主要通過查詢緩存得以實現,它將重復的查詢結果存儲起來,使速度得以提高,盡管許多成熟的應用程序在某個代碼級別上執行自己的查詢緩存功能。某些語句在速度上也有所提高。
Embededded Server:MySQL 4.0附帶了一個Embededded Server庫,允許應用程序以MySQL作為底層數據庫。
latin1_de :MySQL 4.0支持一個額外字符集latin1_de,它可確保正確存儲德語單詞。
MyISAM:MySQL 4.0中的MyISAM表目前在表級別上支持符號鏈接,所以Windows用戶可以在表級別上創建符號鏈接這對於Unix用戶始終有效)。
安全模型:MySQL 4.0的安全模型得到了增強,允許管理員更加細致地授權許可。新的權限允許用戶創建臨時表、鎖定表、執行某些復制任務、查看所有現有的數據庫,甚至在達到最大連接限度時還能進行連接——對於DBA執行緊急任務非常有用,甚至允許運行存儲過程在MySQL 5中實現了此功能)。DBA依靠增強的安全模式也可以限制用戶每小時的連接、更新或查詢次數。
MySQL 4設計運行在Novell Netware 6.0之上。另外,MySQL服務器變量中有不少可以在不重新啟動服務器的情況下進行更改,由於重新啟動會恢復舊的設置,因此這個特性非常有用。
MySQL 4.1
MySQL 4.1推出之後,對於某些用戶而言,4.1比MySQL 4.0具有更激動人心的升級可能:
MySQL 4.1支持子查詢
不使用子查詢時,許多查詢可以更有效地編寫,但是會有例外。子查詢是標准ANSI SQL特性。
支持Unicode (UTF-8),允許更廣泛地進行國際化。
每個列、表或數據庫都可以設置不同的字符集,如果以多種語言存儲數據,這就很有必要了。
支持地理數據OpenGIS)
增強的警告發送。如果一個不夠,MySQL 4.1可以將多個警告發送到客戶端,這樣就對於整體數據處理十分有用。
提高了一些速度。但這些速度提高可能被MySQL 4.1所承擔的所有額外部分抵消。
盡管MySQL手冊是發布的最好手冊之一,MySQL 4.1還是附帶了僅適用於該版本的HELP命令。
支持派生表,例如:
SELECT table1.field1 FROM table, (SELECT * FROM table2) table3 WHERE table1.field1=table3.field1
支持多行查詢,允許運行多個查詢,然後讀取最終結果。
各種維護語句將存入二進制日志中,在復制時您可以簡化維護任務。
CREATE...LIKE允許開發人員按現有表的精確結構輕松地創建新表。
另外,MySQL 4.1的三個顯著功能包括:穩定的OpenSSL支持、更多的測試准備語句、更多的測試一個表的多個字符集。
MySQL 4.1或許是第一個實際“長大成人”的MySQL版本。由於4.1版本中一些新增加的特性和功能例如地理數據、子選擇語句、派生表),Oracle第一次開始真正關注MySQL。
MySQL 5.0
支持存儲過程。存儲過程是一個開發人員在其他數據庫環境最常用的ANSI SQL標准,對於MySQL來說,這已經姗姗來遲了。MySQL 5.0所支持的存儲過程的語法類似於Oracle PL/SQL和T-SQL。
觸發程序發生某個事件時所稱的存儲過程)
支持指針
真正支持VARCHAR數據類型,解決了一個長期存在的MySQL VARCHAR bug。
在MyISAM表中對RTREE索引的支持,將使訪問地理數據變得很容易。
MySQL 5.1
相對於5.0版本,MySQL 5.1實現了一些新的功能:
聯機備份允許添加replication slave,而不必關閉主服務器)。
BIT類型,實際占用1位,而不是1個字符。
失敗保護failsafe)復制
(