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

MYSQL
提高MySQL 查询效率的三个技巧
mysql同步复制搭建方法指南详细步骤
详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始
MySQL Replace INTO的使用
mysql 分页优化解析
同时运行多个MySQL服务器的方法
mysql主从服务器同步心得体会
删除mysql数据库中的重复数据记录
mysql忘记密码的解决方法
mysql替换表中的字符串的sql语句
Lost connection to MySQL server during query的解决
mysql出现Error performing load command的解决方法
mysql中的“money”类型说明
mysql常见错误集锦
MYSQL administrator 使用
MYSQL初学者命令行使用指南
MySQL的Query Cache原理分析
linux下改良版本mysqldump来备份MYSQL数据库
mysql删除表中某一字段重复的记录
log引起的mysql不能启动的解决方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 88 ::
收藏到网摘: 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()