MySQL与MSSQL的一些语法差异(持续更新中)

分号不能少;分号不能少;分号不能少;重要的事情说3遍

Insert或者Update的数据包含反斜杠\的时候需要进行转义\\,例:insert into tablename(id,name) values(1,'刘\\一哥'); -- 保存到数据库后就是 1 刘\一哥

 

一、变量申明(非常重要)

1.带@的变量不需要申明直接使用

select columnname into @V_ColumnName from tablename Limit 0,1;

select @V_ColumnName;

2.变量申明必须放在最前面,包括申明游标(如果游标是基于临时表的循环也是一样的,先申明游标,在后面创建循环的临时表);

3.存储过程中的变量申明不能使用@

例:Declare V_ID1,V_ID2 INT Default 0;

4.变量的命名千万不要和字段名称一致,否则MySQL数据库会把字段当成是变量;比如可以在前面加上V_,例:V_ColumnName

 

二、MySQL不支持匿名块

例如:

DECLARE V_ColumnName varchar(50);
select columnname into V_ColumnName from tablename LIMIT 0,1;

select V_ColumnName; -- 会报错,是不是很奇怪?明明没有语法错误吧,新手会这些问题搞得郁闷到死

这种语句在MySQL中是不能执行的,如果要执行就必须放到存储过程或函数中;

 

三、存储过程的调用

call procedure_name(参数1,参数2……);

如果有OUT参数,例如:Create Procedure SP_TEST(IN Param1 int, OUT Param2 int)

call SP_TEST(1,@Param2);

select @Param2;

 

四、临时表

不需要#号,#在MySQL是单行注释符,在存储过程中使用临时表必须先判断是否存在,否则同一进程中第二次执行存储过程就会提示表已经存在了

例:DROP TEMPORARY TABLE IF EXISTS tmptable;

Create TEMPORARY TABLE tmptable(……);

 

五、IF语句

IF ... THEN ... ELSEIF ... THEN ... ELSE ... END IF;

记住千万不要闲得蛋疼给它加BEGIN END就对了;

 

六、视图

不能在视图中使用子查询,例:select * from (select * from xxx) as x;  --会报错的

如果实在需要这样做,就创建2个视图进行嵌套;

 

七、数据库内部函数

1.类型转换函数:MySQL和MSSQL的类型转换函数名称都是CAST和CONVERT,但CONVERT函数的参数有些不太一致;

MSSQL的语法如下:

CAST ( expression AS data_type [ ( length ) ] )

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

 

 

 

MySQL的语法如下:

CAST ( expression AS data_type ( length ) );

CONVERT ( expression , data_type ( length ) );

 

 

 

但MYSQL中的类型转换函数有一些限制,type只能是以下几种类型:

  • BINARY[(N)]
  • CHAR[(N)]
  • DATE
  • DATETIME
  • DECIMAL[(M[,D])]
  • SIGNED [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

使用的时候需要注意,诸如:SELECT CAST(0 AS INT); -- 这种写法是行不通的,给我乖乖改成--> SELECT CAST(0 AS SIGNED);

 

2.获取字符串长度函数

MYSQL中的CHAR_LENGTH()等同MSSQL中的LEN();

MYSQL中的LENGTH()等同MSSQL中的DATA_LENGTH();

 

未完待续……

posted @ 2016-09-22 16:21  帅被盗版  阅读(2120)  评论(0编辑  收藏  举报