本節說明 MySQL 與 ANSI/ISO SQL 標準的關係。MySQL 伺服器對 SQL 標準有許多擴充功能,您可以在此處找到這些擴充功能及其使用方式。您也可以找到有關 MySQL 伺服器中缺少的功能,以及如何解決一些差異的資訊。
SQL 標準自 1986 年以來不斷發展,並且存在多個版本。在本手冊中,「SQL-92」指的是 1992 年發布的標準。「SQL:1999」、「SQL:2003」、「SQL:2008」和「SQL:2011」指的是在對應年份發布的標準版本,其中最後一個是最新版本。我們使用短語「SQL 標準」或「標準 SQL」來表示任何時間的 SQL 標準的目前版本。
我們產品的主要目標之一是繼續努力符合 SQL 標準,但同時不犧牲速度或可靠性。如果這樣做能夠大幅提高 MySQL 伺服器對我們廣大用戶群的可用性,我們不害怕向 SQL 新增擴充功能或支援非 SQL 功能。HANDLER
介面就是這個策略的例子。請參閱第 15.2.5 節「HANDLER 語句」。
我們繼續支援事務性資料庫和非事務性資料庫,以滿足關鍵任務型 24/7 使用和繁重的 Web 或記錄使用。
MySQL 伺服器最初設計用於在小型電腦系統上處理中型資料庫(1000 萬到 1 億行,或每個表格約 100MB)。如今,MySQL 伺服器可以處理 TB 級的資料庫。
我們並未針對即時支援,儘管 MySQL 複製功能提供了重要的功能。
MySQL 支援 ODBC 0 到 3.51 級別。
MySQL 使用 NDBCLUSTER
儲存引擎支援高可用性資料庫叢集。請參閱第 25 章MySQL NDB 叢集 8.4。
我們實作了 XML 功能,支援大多數的 W3C XPath 標準。請參閱第 14.11 節「XML 函數」。
MySQL 支援 RFC 7159 定義的,並以 ECMAScript 標準 (ECMA-262) 為基礎的原生 JSON 資料類型。請參閱第 13.5 節「JSON 資料類型」。MySQL 還實作了 SQL:2016 標準的預發布草案中指定的 SQL/JSON 函數子集;請參閱第 14.17 節「JSON 函數」,以取得更多資訊。
選取 SQL 模式
MySQL 伺服器可以在不同的 SQL 模式下運作,並且可以根據 sql_mode
系統變數的值,針對不同的用戶端以不同的方式套用這些模式。DBA 可以設定全域 SQL 模式,以符合網站伺服器運作需求,並且每個應用程式都可以將其工作階段 SQL 模式設定為自己的需求。
模式會影響 MySQL 支援的 SQL 語法及其執行的資料驗證檢查。這讓 MySQL 更容易在不同的環境中使用,並將 MySQL 與其他資料庫伺服器一起使用。
如需設定 SQL 模式的詳細資訊,請參閱第 7.1.11 節「伺服器 SQL 模式」。
在 ANSI 模式下執行 MySQL
若要在 ANSI 模式下執行 MySQL 伺服器,請使用 --ansi
選項啟動mysqld。在 ANSI 模式下執行伺服器與使用下列選項啟動伺服器相同
--transaction-isolation=SERIALIZABLE --sql-mode=ANSI
若要在執行階段達到相同的效果,請執行這兩個陳述式
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET GLOBAL sql_mode = 'ANSI';
您可以看到,將 sql_mode
系統變數設定為 'ANSI'
會啟用與 ANSI 模式相關的所有 SQL 模式選項,如下所示
mysql> SET GLOBAL sql_mode='ANSI';
mysql> SELECT @@GLOBAL.sql_mode;
-> 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI'
使用 --ansi
在 ANSI 模式下執行伺服器與將 SQL 模式設定為 'ANSI'
並不完全相同,因為 --ansi
選項也會設定交易隔離層級。