mssql和mysql项目转型遇到的所有区别,多年积累的经典!

来源:互联网 发布:梅西 过人 知乎 编辑:程序博客网 时间:2024/04/27 22:29

1.mysql自定义函数

A.show variables like '%func%';查看是否开启了,如果结果为off,则开启:

set global log_bin_trust_function_creators=1;

B.命名最好有前缀,不然很容易

a.mysql普通变量名没有mssql的@符号

b.mysql用concat连接字符串,mssql用+

c.创建的时候mssql里begin前面的as在mysql里面就丢掉吧

d.select查询结果集赋值:

          mssql是select @a=a,@b=b from tablename;

          mysql是select a,b into a,b from tablename;a,b默认就给解析为变量了

e.mysql每句话都要加分号  ;很贱的哦

f.mssql注释语句可以随便加哪里例如--这是注释,但是mysql注释只能--这是注释,--后面必须有个空格才能写中文

g:系统内置函数

cast和convert:只能手工翻译重写啊 mssql中cast(*** as varchar),convert(varchar,***),as后面的参数不能再用varchar,int这些了,要用以下这些值:

  • 二进制,同带binary前缀的效果 : BINARY    
  • 字符型,可带参数 : CHAR()     
  • 日期 : DATE     
  • 时间: TIME     
  • 日期时间型 : DATETIME     
  • 浮点数 : DECIMAL      
  • 整数 : SIGNED     
  • 无符号整数 : UNSIGNED

给结果集赋值并累计结果值(declare res='';select res=concat(res,usernmae) from users),mysql不支持在自定义函数,只能写在存储过程里面

h:mysql中没有表变量这一概念,只有临时表,详解看这里http://www.cnblogs.com/jinzhenshui/archive/2009/06/14/1503123.html

i:mssql中select @str=@str+username from users;等同于select group_concat(username) as  col  into str from users;,group_concat详细http://blog.csdn.net/lifuxiangcaohui/article/details/6132147

j:创建临时表语句也不同

mssql 只要在表名前面加#就可以了,mysql要声明temporary,并且自增和主键写法也不同

 create temporary table fun_table_forty_more(table_forty_more_id int auto_increment,id int,num int,primary key(table_forty_more_id)) ;
自定义函数和促发器不能使用这样的事务类语句drop table if exists fun_table_temp;

k:mysql中if语句只有后面end if要分号,其他都不要

if fun_records = 0 -- 无分号then   -- 无分号set fun_records = 150;-- 有分号<pre name="code" class="sql">                set fun_records = 150;

 end if;

h:语句中变量like concat('%',fun_classname,'%');like可以后面concat变量,limit等等就不行,要用动态执行的形式了

i: funsql是sql结果变量动态执行语句如下

set @pre_funsql=fun_sql; PREPARE execsql from @pre_funsql; EXECUTE execsql;      DEALLOCATE PREPARE execsql;

j:order by charindex不一样,参照http://blog.csdn.net/wendi_0506/article/details/38872731

k:MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误

    比如这样的语句是不能正确执行的。    select * from table where id in (select id from table limit 12);    但是,只要你再加一层就行。如:    select * from table where id in (select t.id from (select * from table limit 12)as t)    这样就可以绕开limit子查询的问题。    问题解决。
l:declare必须声明在最上面,不然语法报错




        


0 0
原创粉丝点击