1.7.1标准SQL的MySQL扩展
MySQL服务器支持您可能在其他SQL DBMS中找不到的一些扩展。请注意,如果您使用它们,您的代码将不能移植到其他SQL服务器。在某些情况下,您可以使用以下形式的注释编写包含MySQL扩展名的代码,但仍可移植。
/ *!MySQL-specific code* /
在这种情况下,MySQL Server解析并执行注释中的代码,就像其他SQL语句一样,但其他SQL服务器将忽略这些扩展。例如,MySQL ServerSTRAIGHT_JOIN在以下语句中识别关键字,但其他服务器将不会:
选择 /*!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.2节“识别符大小写敏感度”。
您可以使用标准系统命令备份,重命名,移动,删除和复制由
MyISAM存储引擎管理的表。例如,有可能重命名MyISAM通过重命名表.MYD,.MYI和.frm文件,其中表对应。(不过,最好使用RENAME TABLE或ALTER TABLE ... RENAME让服务器重命名文件。)
一般语言语法
默认情况下,字符串可以通过封闭
"和'。如果ANSI_QUOTES启用了SQL模式,字符串只能被包围,'并且服务器解释由"标识符包围的字符串。\是字符串中的转义字符。在SQL语句中,您可以使用
db_name.tbl_name语法访问来自不同数据库的表。一些SQL服务器提供相同的功能,但称之为User space。MySQL Server不支持像这样的语句中使用的表空间:CREATE TABLE ralph.my_table ... IN my_tablespace。
SQL语句语法
的
CREATE DATABASE,DROP DATABASE和ALTER DATABASE语句。请参见第13.1.10节“CREATE DATABASE语法”,第13.1.21节“DROP DATABASE语法”和第13.1.1节“ALTER DATABASE语法”。该
DO声明。EXPLAIN SELECT以获取关于表如何由查询优化器处理的描述。该
SET声明。请参见第13.7.4.1节“变量赋值的设置语法”。该
SHOW声明。请参见第13.7.5节“显示语法”。许多MySQL特定SHOW语句产生的信息可以通过使用SELECT查询以更标准的方式获得INFORMATION_SCHEMA。请参见第21章INFORMATION_SCHEMA表。使用
LOAD DATA INFILE。在很多情况下,这种语法与Oracle兼容LOAD DATA INFILE。请参见第13.2.6节“加载数据INFILE语法”。使用
REPLACE而不是DELETE加号INSERT。请参见第13.2.8节“REPLACE语法”。使用的,或者,或者在声明。使用多个的,,,或在条款声明。请参见第13.1.7节“ALTER TABLE语法”。
CHANGEcol_nameDROPcol_nameDROP INDEXIGNORERENAMEALTER TABLEADDALTERDROPCHANGEALTER TABLE使用索引名称,索引在列的前缀上,以及使用
INDEX或KEY在CREATE TABLE语句中。请参见第13.1.17节“CREATE TABLE语法”。使用
TEMPORARY或IF NOT EXISTS与CREATE TABLE。使用
IF EXISTS与DROP TABLE和DROP DATABASE。使用单个
DROP TABLE语句删除多个表的功能。INSERT INTOtbl_name_SETcol_name_= ...句法。使用
INTO OUTFILE或INTO DUMPFILE在SELECT声明中。请参见第13.2.9节“选择语法”。诸如
STRAIGHT_JOIN或SQL_SMALL_RESULT在SELECT语句中的选项。您不需要在
GROUP BY子句中列出所有选定的列。这为一些非常具体但相当正常的查询提供了更好的性能。参见第12.18节“聚合(GROUP BY)功能”。您可以指定
ASC和DESC使用GROUP BY,而不仅仅是与ORDER BY。在
:=赋值运算符的语句中设置变量的能力。请参见第9.4节“用户定义的变量”。
数据类型
功能和运算符
为了使从其他SQL环境迁移的用户更容易,MySQL Server支持许多功能的别名。例如,所有字符串函数都支持标准SQL语法和ODBC语法。
MySQL服务器了解
||和操作&&符意味着逻辑OR和AND,如C编程语言。在MySQL服务器,||并且OR是同义词,因为是&&和AND。由于这个很好的语法,MySQL Server不支持||用于字符串连接的标准SQL运算符;使用CONCAT()代替。因为CONCAT()需要任意数量的参数,所以很容易将||运算符的使用转换为MySQL Server。使用哪里有多个元素。
COUNT(DISTINCTvalue_list)value_list字符串比较默认情况下不区分大小写,排序顺序由当前字符集的排序确定,
latin1默认为(cp1252西欧)。要执行区分大小写的比较,您应该BINARY使用属性声明列或使用BINARY转换,这样可以使用底层字符代码值而不是词法排序来完成比较。的
=,<>,<=,<,>=,>,<<,>>,<=>,AND,OR,或LIKE操作者可以在输出列列表中的表达式中使用(到的左侧FROM)的SELECT语句。例如:mysql> SELECT col1=1 AND col2=2 FROM my_table;该
LAST_INSERT_ID()函数返回最近的AUTO_INCREMENT值。请参见第12.14节“信息功能”。LIKE允许使用数值。的
REGEXP和NOT REGEXP扩展正则表达式运算符。的
BIT_COUNT(),CASE,ELT(),FROM_DAYS(),FORMAT(),IF(),PASSWORD(),ENCRYPT(),MD5(),ENCODE(),DECODE(),PERIOD_ADD(),PERIOD_DIFF(),TO_DAYS(),和WEEKDAY()功能。使用
TRIM()修剪子串。标准SQL仅支持删除单个字符。该
GROUP BY功能STD(),BIT_OR(),BIT_AND(),BIT_XOR(),和GROUP_CONCAT()。参见第12.18节“聚合(GROUP BY)功能”。