当前位置: 首页 > 科技观察

MySQL数据库移植总结

时间:2023-03-13 11:54:27 科技观察

一、前言MySQL是瑞典MySQLAB公司开发的关系型数据库管理系统,目前为Oracle公司所有。MySQL是一种关系型数据库管理系统,它将数据保存在不同的表中,而不是将所有数据放在一个大仓库中,这样可以提高速度和灵活性。由于其体积小、速度快、总体拥有成本低,尤其是开源的特点,一般选择MySQL作为中小型网站开发的网站数据库。考虑到MySQL的诸多优势,很多通讯软件都开始使用MySQL作为业务数据库,而早期使用Oracle或Sybase的软件也开始了向MySQL数据库移植的工作。本文结合笔者近期将Sybase数据库移植到MySQL数据库的工作,总结了移植过程中需要修改的主要数据库语法和操作MySQL的一些基本命令。2.需要修改的数据库语法1.基本语法1)将类似selectxxxfrom%s..tb_xxxwherexxx的语法修改为selectxxxfrom%s.tb_xxxwherexxx。2)将类似于selecttopN*fromtb_xxx(查询前N条记录)的语法改为select*fromtb_xxxlimitN。3)将语句convert(varchar(10),getdate(),102)+''+将(varchar(10),getdate(),108))转换为date_format(now(),'%Y)以获取当前时间.%m.%d%T')。4)将SQL语句exec%s..pr_xxx'%s'改为类似于执行无输出参数的存储过程调用%s.pr_xxx('%s')。5)将SQL语句exec%s..pr_xxx1,'%s',0,0,%d,'',%d,0,0改为调用%s.pr_xxx类似于执行带输出参数的存储过程(1,'%s',0,0,%d,'',%d,0,0,@1,@2,@3,@4,@5,@6);选择@1,@2,@3,@4,@5,@6。2、存储过程中1)将类似dropprocedurepr_xxx的语句修改为dropprocedureifexistspr_xxx;陈述。2)在类似于dropprocedureifexistspr_xxx的语句后添加一个分隔符//语句;3)修改类似存储过程的输入输出参数如下:将createprocedurepr_xxx@aaavarchar(40),@bbbvarchar(10),@cccvarchar(20),@dddintout改为:createprocedurepr_xxx(inp_aaavarchar(40),inp_bbbvarchar(10),inp_cccvarchar(20),outp_dddint)4)修改类似定义的参数如下:修改declare@aaaint,@bbbvarchar(20),@cccint,@dddint为:declarep_aaaint;declarep_bbbvarchar(20);declarep_cccint;declarep_dddint;5)将if@aaa=x之类的语句更改为ifp_aaa=xthen语句。6)将select@aaa=x之类的初始化语句更改为setp_aaa=x;。7)将语句select@aaa=bbbfromtb_xxxwhereccc=yyy更改为selectbbbintop_aaafromtb_xxxwhereccc=yyy;。8)修改类似的if语句如下:修改ifxxxbeginendelsebginend为:ifxxxthenbeginend;elsebeginend;endif;9)同样获取当前时间select@curtime=convert(varchar(50),getdate(),102)+''+convert(varchar(50),getdate(),108)语句更改为设置p_curtime=date_format(now(),'%Y.%m.%d%T');。10)将类似select@curdatetime=dateadd(minute,@tzonemin,@curdatetime)的语句改为setp_curdatetime=date_add(p_curdatetime,intervalp_tzoneminminute);。11)将return语句改为leavepr_xxx_label;。12)修改存储过程***的结束语句如下:将end改为;end;//delimiter;13)修改存储过程***的打印语句如下:修改print'createprocedure:pr_xxxok!'是:选择'createprocedurepr_xxxok!';14)修改类似if语句如下:将ifxxxbeginendelseifyyybeginendelseifzzzbeginendelsebeginend修改为:ifxxxthenbeginend;elseifyyythenbeginend;elseifzzzthenbeginend;elsebeginend;endif;15)修改类似select@maxcnt,convertstrint(statement)修改为设置p_maxcnt=convert(p_tmpstr,signed);陈述。16)将类似select@boxnumber=convert(varchar,@tmpstr)的语句改为setp_boxnumber=convert(p_tmpstr,char(20));陈述。17)将lasttime<=dateadd(day,0-convert(int,dayvalue),getdate())语句改为lasttime<=concat(date_format(date_sub(now(),intervalconvert(dayvalue,signed)day),'%Y.%m.%d'),'',date_format(now(),'%T'))语句。3、操作MySQL的一些基本命令笔者使用的数据库位于Linux下,所以本节中使用的命令都是在Linux下运行的。1、启动MySQLxpecdmoni2、停止MySQLxsuperstop3、登录MySQL1)MySQL在本机:mysql-uusername-p'pwd'(其中username为用户名,pwd为密码)2)MySQL在othermachines:mysql-uusername-p'pwd'–h0.1.1.1-P3306(其中username为用户名,pwd为密码,0.1.1.1为MySQL数据库IP,3306为端口号)4.切换数据库useDbName;(其中DbName是数据库名称)5.退出MySQLquit;6、执行SQL脚本1)MySQL位于本机:mysql-uusername-p'pwd'-DDbName