MySQL和标准的兼容性
2008-02-23 07:42:01来源:互联网 阅读 ()
MySQL包含了一些可能在其他SQL数据库很难找到的扩充。要注意假如您使用他们,您的代码将不和其他SQL服务器兼容。在一些情况下,您能够编写包括MySQL扩展的代码,但是仍然是可移植的,通过使用/*! ... */形式的注释。在这种情况下,MySQL将进行词法分析并且执行在注释内的代码,似乎他是任何其他MySQL语句,但是其他SQL服务器将忽略扩展。例如:
SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
假如您在'!'后增加一个版本数字,该语法将仅在MySQL版本是等于或比使用的版本数字新时才执行:
CREATE /*!32302 TEMPORARY */ TABLE (a int);
上面的意思是假如您有3.23.02或更新,那么MySQL将使用TEMPORARY关键词。
MySQL扩展被列在下面:
字段类型MEDIUMINT、SET、ENUM和不同的BLOB和TEXT类型。
字段属性AUTO_INCREMENT、BINARY、UNSIGNED和ZEROFILL。
缺省地,任何的字符串比较是忽略大小写的,由当前的字符集决定了(缺省为ISO-8859-1 Latin1)排序顺序。假如您不喜欢这样,您应该用BINARY属性或使用BINARY强制符声明列,他导致根据MySQL服务器主机的ASCII顺序进行排序。
MySQL将每个数据库映射一个MySQL数据目录下面的目录,将数据库表映射到数据库目录下的数据库文档名。这有2个含意:
在区分大小写文档名的操作系统(象大多数 Unix 系统相同)上的MySQL中数据库名字和表名是区分大小写的。假如您有困难记得表名,接受一个一致的约定,例如总是用小写名字创建数据库和表。
数据库、表、索引、列或别名能够以数字开始(但是不能仅由数字组成)。
您能够使用标准的系统命令备份、重命名、移动、删除和拷贝表。例如,重命名一个表,重命名“.MYD”、“.MYI”和“.frm”文档为相应的表。
在SQL语句中,您能够用db_name.tbl_name语法访问不同数据库中的表。一些SQL服务器提供同样的功能但是称他们为这User space(用户空间)。MySQL不支持类似在create table ralph.my_table...IN my_tablespace中的表空间。
LIKE在数字列上被允许。
在一SELECT语句里面使用INTO OUTFILE和STRAIGHT_JOIN。见7.12 SELECT句法.
在一个SELECT语句中SQL_SMALL_RESULT选项。
EXPLAIN SELECT得到如何联结表的描述。
在一个CREATE TABLE语句里面使用索引、在字段前缀上的索引和使用INDEX或KEY。见7.7 CREATE TABLE 句法。
CREATE TABLE使用TEMPORARY或IF NOT EXISTS。
使用COUNT(DISTINCT list),这里“list”超过一个元素。
在一个ALTER TABLE语句里面使用CHANGE col_name、DROP col_name或DROP INDEX。见7.8 ALTER TABLE句法。
在一个ALTER TABLE里面语句使用IGNORE。
在一个ALTER TABLE语句中使用多重ADD、ALTER、DROP或CHANGE子句。
使用带关键词IF EXISTS的DROP TABLE。
您能用单个DROP TABLE语句抛弃多个表。
DELETE语句的LIMIT子句。
INSERT和REPLACE语句的DELAYED子句。
INSERT, REPLACE, DELETE和UPDATE语句的LOW_PRIORITY子句。
使用LOAD DATA INFILE。在多数情况下,这句法和Oracle的LOAD DATA INFILE兼容。见7.16 LOAD DATA INFILE 句法。
OPTIMIZE TABLE语句。。
SHOW语句。见7.21 SHOW句法(得到表、列等的信息)。
字符串能够被“"”或“'”包围,而不只是“'”。
使用“\”转义字符。
SET OPTION语句。见7.25 SET OPTION句法。
您无需命名任何在GROUP BY部分的被选择的列。这为一些很特定的情况给出更好的性能,而不是一般的查询。
为了方便来自于SQL环境其他为用户,MySQL对许多函数支持别名。例如,任何的字符串功能都支持ANSI SQL句法和 ODBC句法。
MySQL理解||和&&意味着逻辑的OR和AND,就像在C程式语言中。在MySQL中,||和OR是同义词,&&和AND是同义词。正因为这个好的句法,MySQL对字符串并置的不支持ANSI SQL ||操作符;相反使用CONCAT(),因为CONCAT()接受任何数量的参数,很容易把||操作符使用变换到MySQL。
CREATE DATABASE或DROP DATABASE。见7.5 CREATE DATABASE句法。
%操作符是MOD()一个同义词,即,N % M等价于MOD(N,M)。%支持C程式员并和PostgreSQL兼容。
=, <>, <=,<, >=,>, <<, >>, <=>, AND, OR或LIKE操作符能够放在SELECT语句的FROM左边用于比较列。例如:
mysql> SELECT col1=1 AND col2=2 FROM tbl_name;
LAST_INSERT_ID()函数。见20.4.29 mysql_insert_id()。
扩展的正则表达式操作符REGEXP和NOT REGEXP。
CONCAT()或CHAR()有一个参数或超过2个参数。(在MySQL中,这些函数可取任何数量的参数。)
BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), md5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS(),或WEEKDAY()函数。
使用TRIM()整修子串。ANSI SQL 只支持单个字符的删除。
GROUP BY函数STD(), BIT_OR()和BIT_AND()。
使用REPLACE而不是DELETE INSERT。见7.15 REPLACE句法。
FLUSH flush_option语句。
在一个语句用:=配置变量的可能性:
SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg FROM test_table;
SELECT @t1:=(@t2:=1) @t3:=4,@t1,@t2,@t3;
以ANSI模式运行MySQL
假如您用--ansi选项启动mysqld,MySQL的下列行为改变。
||是字符串并置而不是OR。
可在一个函数名字之间和“(”有任何数量的空格。这也使任何的功能名字成为保留词。
"将是个标识符引号字符(象MySQL `引号字符相同)而不是个字符串引号字符。
REAL将是FLOAT一个同义词,不是DOUBLE一个同义词。
5.3 MySQL相比ANSI SQL92的差别
我们尝试使得MySQL遵照ANSI SQL标准和ODBC SQL标准,但是在一些情况下,MySQL做一些不同的事情:
--只是个注释,假如后面跟一个白空字符。`--'作为一个注释的开始。
对于VARCHAR列,当值被存储时,拖后的空格被删除。见E MySQL已知的错误和设计缺限。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: MySQL5
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash