# 1.7.1 标准 SQL 的 MySQL 扩展
MySQL 服务器支持一些您在其他 SQL DBMS 中不太可能找到的扩展。请注意,如果您使用它们,您的代码很可能无法移植到其他 SQL 服务器。在某些情况下,您可以使用以下形式的注释编写包含 MySQL 扩展但仍可移植的代码:
/*! MySQL-specific code */
在这种情况下,MySQL 服务器解析并执行注释中的代码,就像任何其他 SQL 语句一样,但其他 SQL 服务器应该忽略扩展。例如,MySQL 服务器识别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 服务器提供相同的功能,但称之为用户空间
.MySQL Server 不支持在如下语句中使用的表空间:创建表 ralph.my_table ... 在 my_tablespace
.
SQL 语句语法
这
创建数据库
,删除数据库
, 和更改数据库
陈述。看第 13.1.12 节,“CREATE DATABASE 语句”,第 13.1.24 节,“DROP DATABASE 语句”, 和第 13.1.2 节,“ALTER DATABASE 语句”.这
做
陈述。解释选择
获取查询优化器如何处理表的描述。这
显示
陈述。看第 13.7.7 节,“显示语句”.由许多 MySQL 特定的信息产生的显示
可以通过使用以更标准的方式获得语句选择
查询INFORMATION_SCHEMA
.看第 26 章,信息_SCHEMA 表.用于
加载数据
.在许多情况下,此语法与 Oracle 兼容加载数据
.看第 13.2.7 节,“加载数据语句”.用于
代替
代替删除
加插入
.看第 13.2.9 节,“REPLACE 语句”.用于
改变 *
col_name*
,降低 *
col_name*
, 要么删除索引
,忽视
要么改名
在更改表
陈述。使用多个添加
,改变
,降低
, 要么改变
中的从句更改表
陈述。看第 13.1.9 节,“ALTER TABLE 语句”.索引名称的使用、列前缀的索引以及
指数
要么钥匙
在创建表
陈述。看第 13.1.20 节,“CREATE TABLE 语句”.用于
暂时的
要么如果不存在
和创建表
.一个删除多个表的能力
删除表
陈述。插入 *
tbl_name* 放 *
col_name* = ...
句法。用于
进入档案
要么转储文件
在选择
陈述。看第 13.2.10 节,“SELECT 语句”.选项如
STRAIGHT_JOIN
要么SQL_SMALL_RESULT
在选择
陈述。您无需在
通过...分组
条款。这为一些非常具体但非常正常的查询提供了更好的性能。看第 12.20 节,“聚合函数”.您可以指定
ASC
和DESC
和通过...分组
,不只是与订购方式
.在语句中设置变量的能力
:=
赋值运算符。看第 9.4 节,“用户定义的变量”.
数据类型
函数和运算符
为了方便从其他 SQL 环境迁移的用户,MySQL Server 支持许多函数的别名。例如,所有字符串函数都支持标准 SQL 语法和 ODBC 语法。
MySQL 服务器理解
||
和&&
运算符表示逻辑 OR 和 AND,就像在 C 编程语言中一样。在 MySQL 服务器中,||
和要么
是同义词&&
和和
.由于这种漂亮的语法,MySQL Server 不支持标准 SQL||
字符串连接运算符;采用连接()
反而。因为连接()
接受任意数量的参数,很容易转换使用||
运算符到 MySQL 服务器。用于
计数(不同 *
价值清单*)
在哪里*价值清单
*有不止一种元素。默认情况下,字符串比较不区分大小写,排序顺序由当前字符集的排序规则确定,即
utf8mb4
默认。要改为执行区分大小写的比较,您应该使用二进制
属性或使用二进制
cast,这会导致使用底层字符代码值而不是词法顺序进行比较。这
%
运算符是的同义词模组()
.那是,*
ñ* % *
米*
相当于模组(*
ñ*,*
米*)
.%
支持 C 程序员并与 PostgreSQL 兼容。这
=
,<>
,<=
,<
,>=
,>
,<<
,>>
,<=>
,和
,要么
, 要么喜欢
运算符可用于输出列列表中的表达式(在从
) 在选择
陈述。例如:mysql> SELECT col1=1 AND col2=2 FROM my_table;
这
LAST_INSERT_ID()
函数返回最近的自动递增
价值。看第 12.16 节,“信息功能”.喜欢
在数值上是允许的。这
BIT_COUNT()
,案子
,埃尔特()
,FROM_DAYS()
,格式()
,如果()
,MD5()
,PERIOD_ADD()
,PERIOD_DIFF()
,TO_DAYS()
, 和平日()
职能。用于
修剪()
修剪子字符串。标准 SQL 仅支持删除单个字符。这
通过...分组
职能性病()
,位或()
,位与()
,BIT_XOR()
, 和GROUP_CONCAT()
.看第 12.20 节,“聚合函数”.