MySQL Server支持某些您可能在其他SQL DBMS中找不到的扩展。请注意,如果使用它们,您的代码将无法移植到其他SQL Server。在某些情况下,可以使用以下形式的注释编写包含MySQL扩展但仍可移植的代码:
/*! MySQL-specific code */
在这种情况下,MySQL服务器将像其他任何SQL语句一样解析并执行注释中的代码,但是其他SQL Server将忽略这些扩展。例如,MySQL Server可以STRAIGHT_JOIN
在以下语句中识别关键字,而其他服务器则不能:
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...
如果在!
字符后添加版本号,则仅当MySQL版本大于或等于指定的版本号时,才会执行注释中的语法。KEY_BLOCK_SIZE
以下注释中的子句仅由MySQL 5.1.10或更高版本的服务器执行:
CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;
以下描述列出了按类别组织的MySQL扩展。
-
磁盘上数据的组织
MySQL Server将每个数据库映射到MySQL数据目录下的目录,并将数据库内的表映射到数据库目录中的文件名。因此,数据库和表名在具有区分大小写的文件名的操作系统(例如大多数Unix系统)上的MySQL Server中是区分大小写的。请参见 第9.2.3节“标识符区分大小写”。
-
通用语言语法
-
默认情况下,字符串可以被封闭
"
以及'
。如果ANSI_QUOTES
启用了SQL模式,则只能用括住字符串,'
并且服务器将用括起来的字符串解释"
为标识符。 -
是字符串中的转义字符。
-
在SQL语句中,可以使用
db_name.tbl_name
语法从不同数据库访问表 。某些SQL Server提供相同的功能,但称之为User space
。MySQL Server不支持诸如以下语句中使用的表空间CREATE TABLE ralph.my_table ... IN my_tablespace
。
-
-
SQL语句语法
-
在
ANALYZE TABLE
,CHECK TABLE
,OPTIMIZE TABLE
,和REPAIR TABLE
语句。 -
的
CREATE DATABASE
,DROP DATABASE
和ALTER DATABASE
语句。请参见第13.1.12节“ CREATE DATABASE语句”, 第13.1.24节“ DROP DATABASE语句”和 第13.1.2节“ ALTER DATABASE语句”。 -
该
DO
声明。 -
EXPLAIN SELECT
获取有关查询优化器如何处理表的描述。 -
该
SET
声明。请参见第13.7.6.1节“变量分配的SET语法”。 -
该
SHOW
声明。请参见 第13.7.7节“ SHOW语句”。SHOW
通过使用SELECT
query, 可以更标准的方式获得许多特定于MySQL的语句 产生的信息INFORMATION_SCHEMA
。请参阅 第25章,INFORMATION_SCHEMA表。 -
使用
LOAD DATA
。在许多情况下,此语法与Oracle兼容LOAD DATA
。请参见 第13.2.7节“ LOAD DATA语句”。 -
用
REPLACE
代替DELETE
加号INSERT
。请参见 第13.2.9节“ REPLACE语句”。 -
使用的, 或者 , 或者 在 声明。使用多个的, ,,或 在条款 声明。请参见第13.1.9节“ ALTER TABLE语句”。
CHANGE
col_name
DROP
col_name
DROP INDEX
IGNORE
RENAME
ALTER TABLE
ADD
ALTER
DROP
CHANGE
ALTER TABLE
-
索引名称的使用,列前缀的索引以及
INDEX
或KEY
inCREATE TABLE
语句的使用。请参见 第13.1.20节“ CREATE TABLE语句”。 -
使用的
TEMPORARY
或IF NOT EXISTS
与CREATE TABLE
。 -
IF EXISTS
与DROP TABLE
和 一起 使用DROP DATABASE
。 -
使用单个
DROP TABLE
语句删除多个表的功能 。 -
INSERT INTO
句法。tbl_name
SETcol_name
= ... -
在 语句中 使用
INTO OUTFILE
或。请参见 第13.2.10节“ SELECT语句”。INTO DUMPFILE
SELECT
-
选项,例如
STRAIGHT_JOIN
或SQL_SMALL_RESULT
inSELECT
语句。 -
您无需在
GROUP BY
子句中命名所有选定的列 。对于某些非常特定但非常普通的查询,这可以提供更好的性能。请参见 第12.20节“集合函数”。 -
您可以指定
ASC
并DESC
用GROUP BY
,不仅仅是ORDER BY
。 -
使用
:=
赋值运算符在语句中设置变量的能力 。请参见 第9.4节“用户定义的变量”。
-
-
资料类型
-
功能和运算符
-
为了使从其他SQL环境迁移的用户更容易,MySQL Server支持许多功能的别名。例如,所有字符串函数都支持标准SQL语法和ODBC语法。
-
与C语言一样, MySQL Server将
||
and&&
运算符理解为 逻辑OR和AND。在MySQL服务器,||
并且OR
是同义词,因为是&&
和AND
。由于这种漂亮的语法,MySQL Server不支持||
用于字符串连接的标准SQL 运算符。使用CONCAT()
代替。由于CONCAT()
采用任意数量的参数,因此很容易将||
运算符的使用转换 为MySQL Server。 -
使用where 具有多个元素。
COUNT(DISTINCT
value_list
)value_list
-
字符串比较默认情况下不区分大小写,排序顺序由当前字符集的排序规则确定
utf8mb4
(默认情况下)。要执行区分大小写的比较,您应该BINARY
使用属性声明列 或使用BINARY
强制转换,这将导致使用基本字符代码值而不是词法顺序来完成比较。 -
该
%
运营商的代名词MOD()
。即 等于 。 支持C程序员并与PostgreSQL兼容。N
%M
MOD(
N
,M
)%
-
的
=
,<>
,<=
,<
,>=
,>
,<<
,>>
,<=>
,AND
,OR
,或LIKE
运营商可以在输出列列表中的表达式用(向左的FROM
)的SELECT
语句。例如:mysql> SELECT col1=1 AND col2=2 FROM my_table;
-
该
LAST_INSERT_ID()
函数返回最新AUTO_INCREMENT
值。请参见 第12.16节“信息功能”。 -
LIKE
允许使用数值。 -
的
REGEXP
和NOT REGEXP
扩展正则表达式运算符。 -
CONCAT()
或CHAR()
带有一个或两个以上参数。(在MySQL Server中,这些函数可以使用可变数量的参数。) -
的
BIT_COUNT()
,CASE
,ELT()
,FROM_DAYS()
,FORMAT()
,IF()
,MD5()
,PERIOD_ADD()
,PERIOD_DIFF()
,TO_DAYS()
,和WEEKDAY()
功能。 -
使用的
TRIM()
修剪子。标准SQL仅支持删除单个字符。 -
该
GROUP BY
功能STD()
,BIT_OR()
,BIT_AND()
,BIT_XOR()
,和GROUP_CONCAT()
。请参见 第12.20节“集合函数”。 -
-