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();
未完待续……