1.8.1 MySQL 对标准 SQL 的扩展

MySQL Server 支持某些您可能在其他 SQL DBMS 中找不到的扩展。请注意,如果使用它们,您的代码将无法移植到其他 SQL Server。在某些情况下,可以使用以下形式的 Comments 编写包含 MySQL 扩展但仍可移植的代码:

/*! MySQL-specific code */

在这种情况下,MySQL 服务器将像其他任何 SQL 语句一样解析并执行 Comments 中的代码,但是其他 SQL Server 将忽略这些扩展。例如,MySQL 服务器在以下语句中识别出STRAIGHT_JOIN关键字,而其他服务器则不能:

SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...

如果在!字符后添加版本号,则仅当 MySQL 版本大于或等于指定的版本号时,才会执行 Comments 中的语法。以下 Comments 中的KEY_BLOCK_SIZE子句仅由 MySQL 5.1.10 或更高版本的服务器执行:

CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;

以下描述列出了按类别组织的 MySQL 扩展。

  • 磁盘上数据的组织

MySQL Server 将每个数据库 Map 到 MySQL 数据目录下的目录,并将数据库内的 tableMap 到数据库目录中的文件名。这有一些含义:

mysql> SELECT col1=1 AND col2=2 FROM my_table;