本節說明 MySQL 如何與 ANSI/ISO SQL 標準相關。MySQL 伺服器對 SQL 標準進行了許多擴充,您可以在這裡了解它們是什麼以及如何使用它們。您也可以找到有關 MySQL 伺服器中缺少的功能,以及如何解決一些差異的資訊。
自 1986 年以來,SQL 標準一直在發展,並且存在多個版本。在本手冊中,「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 叢集 9.0。
我們實作的 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
選項也會設定交易隔離層級。