当前位置: 首页 > 图文教程 > 数据库 > MYSQL > MySQL:MySQL对标准SQL的扩展

MYSQL
mysql Load Data InFile 的用法
MSSQL output使用
mysql 性能的检查和调优方法
mysql 的load data infile
MySQL 配置文件my.cnf 例子最详细翻译
MYSQL 随机 抽取实现方法及效率分析
mysql 存储过程的问题
Mysql my.ini 配置文件详解
mysql 控制台操作
mysql 服务完全卸载技巧
mysql 数据库设计
mysql 中文乱码 解决方法集锦
MYSQL 没有完全卸载将导致其安装不成功
mysql 教程 存储过程
asp.net 将图片上传到mysql数据库的方法
绿色版 mysql 安装配置
mysql root用户的密码修改和消除
MySQL 相关的环境变量
mysql 常用命令集锦[绝对精华]
linux mysql 安装与操作

MYSQL 中的 MySQL:MySQL对标准SQL的扩展


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 100 ::
收藏到网摘: n/a

MySQL服务器包含一些其他SQL DBMS中不具备的扩展。注意,如果使用了它们,将无法把代码移植到其他SQL服务器。在某些情况下,你可以编写包含MySQL扩展的代码,但仍保持其可移植性,方法是用“/*... */”注释掉这些扩展。MySQL服务器能够解析并执行注释中的代码,就像对待其他MySQL语句一样,但其他SQL服务器将忽略这些扩展。例如:

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

如果在字符“!”后添加了版本号,仅当MySQL的版本等于或高于指定的版本号时才会执行注释中的语法:

CREATE /*!32302 TEMPORARY */ TABLE t (a INT);

这意味着,如果你的版本号为3.23.02或更高,MySQL服务器将使用TEMPORARY关键字。

下面按类别介绍了各种MySQL扩展。

·         磁盘上的数据组织

MySQL服务器会将每个数据库映射到MySQL数据目录下的1个目录中,并将数据库中的表映射到数据库目录下的文件名。它具有下述含义:

o        如果操作系统的文件名区分大小写(如大多数Unix系统),当MySQL服务器运行在这类操作系统上时,数据库名和表名也区分大小写。

o        你可以使用标准的系统命令来备份、重命名、移动、删除、并拷贝由MyISAMISAM存储引擎管理的表。例如,要想重命名MyISAM表,可重命名表对应的.MYD.MYI、以及.frm文件。

数据库、表、索引、列或别名能够以数字开头(但或许不能全部由数字构成)。

·         通用语言语法

o        可以使用“””“’”括住字符串,而不仅是“’”

o        在字符串中使用“\”作为转义字符。

o        SQL语句中,可以使用db_name.tbl_name语法访问不同数据库中的表。某些SQL服务器提供了相同的功能,但调用该用户空间除外。MySQL服务器不支持表空间,如下述语句中使用的那样: CREATE TABLE ralph.my_table...IN my_tablespace.

·         SQL语句的语法

o        ANALYZE TABLECHECK TABLEOPTIMIZE TABLE,以及REPAIR TABLE语句。

o        CREATE DATABASEDROP DATABASE语句。

o        DO语句。

o        EXPLAIN SELECT获取如何联合表的介绍。

o        FLUSHRESET语句。

o        SET语句。

o        SHOW语句。

o        使用LOAD DATA INFILE。在很多情况下,该语法与OracleLOAD DATA INFILE兼容。

o        RENAME TABLE的使用。

o        使用REPLACE取代DELETE + INSERT

o        ALTER TABLE语句中使用CHANGE col_nameDROP col_name、或DROP INDEXIGNORERENAME。在ALTER TABLE语句中使用多个ADDALTERDROPCHANGE子句。

o        使用索引名,字段前缀上的索引,并在CREATE TABLE语句中使用INDEXKEY

o        CREATE TABLE一起使用TEMPORARYIF NOT EXISTS

o        DROP TABLE一起使用IF EXISTS

o        使用单个DROP TABLE语句,能够舍弃多个表。

o        UPDATEDELETE语句的ORDER BYLIMIT子句。

o        INSERT INTO ... SET col_name = ... syntax.

o        INSERTREPLACE语句的DELAYED子句。

o        INSERTREPLACEDELETEUPDATE语句的LOW_PRIORITY子句。

o        SELECT语句中使用INTO OUTFILESTRAIGHT_JOIN

o        SELECT语句中的SQL_SMALL_RESULT选项。

o        不需要在GROUP BY部分命名所有选择的列。对于某些十分特殊但相当正常的查询,它能提供更好的性能。

o        可以与GROUP BY一起指定ASCDESC

o        能够在带有“:=”赋值操作符的语句中设置变量。

o                     mysql> SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg

o                         -> FROM test_table;

o                     mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;

·         列类型

o        列类型MEDIUMINTSETENUM、以及不同的BLOBTEXT类型。

o        列属性AUTO_INCREMENTBINARYNULLUNSIGNED以及ZEROFILL

·         函数和操作符

o        为了使其他SQL环境下的用户更容易入手,MySQL服务器对很多函数均支持别名特性。例如,所有的字符串函数均支持标准SQL语法和ODBC语法。

o       MySQL服务器能够理解“||”“&&”操作符,将其当作逻辑ORAND,就像在C编程语言中那样。在MySQL服务器中,||OR是同义词,&&AND也是同义词。由于采用了该优异的语法体系,MySQL服务器不支持SQL针对字符串连接的“||”操作符,而采用了CONCAT()取而代之。由于CONCAT()能够接受任意数目的参量,很容易将使用“||”操作符的情况转换为MySQL服务器支持的类型。

o        请在有多于1个元素的场合下使用COUNT(DISTINCT list)

o        默认情况下,所有的字符串比较均区分大小写,其分类顺序由当前字符集确定(默认为cp1252 Latin1)。如果你不喜欢该点,应使用BINARY属性或BINARY cast声明列,这样,就会使用基本的字符代码值进行比较,而不是词汇顺序。

o        “%”操作符等同于MOD()。也就是说“N % M”等同于MOD(N,M)Cyuyan的程序员支持“%”,而且它也是为了兼容PostgreSQL而使用的。

o        在列比较中,可在SELECT语句的FROM左侧使用=<><=<>=><<>><=>ANDORLIKE操作符。例如:

o                     mysql> SELECT col1=1 AND col2=2 FROM tbl_name;

l                              返回最近AUTO_INCREMENT值的LAST_INSERT_ID()函数。

o        允许在数值列上使用LIKE

o        REGEXPNOT REGEXP扩展了常规的表达式操作符。

o        具有1个或2个以上参量的CONCAT()CHAR()。(在MySQL服务器中,这些函数可以有任意数目的参量)。

o        BIT_COUNT()CASEELT()FROM_DAYS()FORMAT()IF()PASSWORD()ENCRYPT()MD5()ENCODE()DECODE()PERIOD_ADD()PERIOD_DIFF()TO_DAYS()、以及WEEKDAY()函数。

o        使用TRIM()来调整子字符串。标准SQL仅支持单个字符的删除。

GROUP BY函数STD()BIT_OR()BIT_AND()BIT_XOR()、以及GROUP_CONCAT()