当前位置:首页 > 域名

MySQL数据库移植总结

一、据库前言

MySQL是移植一个由瑞典MySQL AB公司开发的关系型数据库管理系统,目前归属Oracle公司旗下。总结MySQL是据库一种关联数据库管理系统,它将数据保存在不同的移植表中,而不是总结将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。据库由于其体积小、移植速度快、总结总体拥有成本低,据库尤其是移植开放源码这一特点,一般中小型网站的总结开发都选择MySQL作为网站数据库。

考虑到MySQL的据库诸多优点,很多通讯类软件都开始采用MySQL作为其业务数据库,移植前期采用Oracle或Sybase的总结软件也启动了向MySQL数据库移植的工作。本文基于作者近期将Sybase数据库移植为MySQL数据库的工作,总结了在移植过程中需要修改的主要数据库语法及一些基本的操作MySQL的命令。

二、需要修改的数据库语法

1.基本语法

1) 将类似select xxx from %s..tb_xxx where xxx的云服务器语法修改为select xxx from %s.tb_xxx where xxx。

2) 将类似select top N * from tb_xxx的语法(查询前N条记录)修改为select * from tb_xxx limit N。

3) 将获取当前时间的语句convert(varchar(10),getdate(),102)+ +convert(varchar(10),getdate(),108))修改为date_format(now(),%Y.%m.%d %T)。

4) 将类似执行没有输出参数的存储过程的SQL语句exec %s..pr_xxx %s修改为call %s.pr_xxx (%s)。

5) 将类似执行有输出参数的存储过程的SQL语句exec %s..pr_xxx 1, %s, 0, 0, %d, , %d, 0, 0修改为call %s.pr_xxx(1,%s,0,0,%d,,%d,0,0,@1,@2,@3,@4,@5,@6);select@1,@2,@3,@4,@5,@6。

2.在存储过程中

1) 将类似drop procedure pr_xxx语句修改为drop procedure if exists pr_ xxx;语句。

2) 在类似drop procedure if exists pr_ xxx;语句之后要添加delimiter //语句。

3) 对类似存储过程输入输出参数作如下修改:

createprocedure pr_xxx     @aaa        varchar(40),     @bbb        varchar(10),     @ccc        varchar(20),     @ddd        int  out 

修改为:

createprocedure pr_ xxx (        in   p_ aaa         varchar(40),        in   p_ bbb         varchar(10),        in   p_ ccc         varchar(20),        out   p_ ddd        int ) 

4) 将类似定义的参数作如下修改:

declare         @aaa             int,         @bbb             varchar(20),             @ccc             int,                  @ddd             int,  

修改为:

declare p_aaa         int;        declare p_bbb         varchar(20);        declare p_ccc         int;        declare p_ddd         int; 

5) 将类似if @aaa = x语句修改为if p_aaa = x then语句。

6) 将类似select @aaa = x的初始化语句修改为set p_aaa = x;。

7) 将类似select @aaa=bbb from tb_xxx where ccc=yyy的语句修改为select bbb int op_aaa from tb_xxx where ccc=yyy;。

8) 将类似if语句修改如下:

if xxx begin end else begin end 

修改为:

if xxx then begin end; else begin end; end if; 

9) 将类似获取当前时间的select @curtime=convert(varchar(50),getdate(),102)++convert(varchar(50),getdate(),108)语句修改为set p_curtime=date_format(now(),%Y.%m.%d %T);。

10) 将类似select @curdatetime = dateadd(minute, @tzonemin, @curdatetime)语句修改为set p_curdatetime=date_add(p_curdatetime,interval p_tzonemin minute);。

11) 将return语句修改为leave pr_xxx_label;。

12) 对存储过程***的end语句作如下修改:

end 

修改为;

end; // delimiter ; 

13) 将存储过程***的print语句作如下修改:

print create procedure:pr_xxx ok! 

修改为:

select create procedure pr_ xxx ok!; 

14) 将类似的if语句作如下修改:

if xxx begin end else if yyy begin    end else if zzz begin    end else begin end 

修改为:

if xxx then begin end; elseif yyy then begin    end; elseif zzz then begin    end; else begin end; end if; 

15) 将类似select @maxcnt = convert(int,@tmpstr)语句修改为set p_maxcnt=convert(p_tmpstr,signed);语句。

16) 将类似select @boxnumber = convert(varchar,@tmpstr)语句修改为set p_boxnumber=convert(p_tmpstr, char(20));语句。

17) 将类似lasttime<=dateadd(day, 0-convert(int,dayvalue), getdate())语句修改为lasttime<=concat(date_format(date_sub(now(),interval convert(dayvalue,signed) day),%Y.%m.%d), ,date_format(now(),%T))语句。

三、一些基本的操作MySQL的命令

作者所使用的香港云服务器数据库位于Linux之下,因此,本节所使用的命令均是在Linux之下运行的。

1.启动MySQL

xpecdmoni 

2.停止MySQL

xsuperstop 

3.登录MySQL

1)MySQL位于本机之上:

mysql -uusername -ppwd  

(其中,username是用户名,pwd是密码)

2)MySQL在其它机器上:

mysql -uusername -ppwd –h0.1.1.1-P3306 

(其中,username是用户名,pwd是密码,0.1.1.1是MySQL数据库的IP,3306是端口号)

4.切换数据库

use DbName; 

(其中,DbName是数据库名)

5.退出MySQL

quit;

6.执行SQL脚本

1) MySQL位于本机之上:

mysql -uusername -ppwd -DDbName<test.sql  

(其中,username是用户名,pwd是密码,DbName是数据库名,test.sql是SQL脚本名)

2) MySQL在其它机器上:

mysql -uusername -ppwd –h0.1.1.1 -P3306 -DDbName<test.sql   

(其中,username是用户名,pwd是站群服务器密码,0.1.1.1是MySQL数据库的IP,3306是端口号,DbName是数据库名,test.sql是SQL脚本名)

四、总结

在进行数据库移植的过程中,我们需要注意以下问题:

1.只修改必须要修改的代码,不能更改业务逻辑。要将修改之后的代码与修改之前的代码进行反复的对比,确保代码修改的正确性。

2.要对修改之后的代码和脚本等进行全方位的测试,确保业务逻辑的正确性。

3.如果有某段代码或存储过程是公用的,那么只需要指定某个人修改就可以了,这样也可以防止重复劳动。

【本文是专栏作者周兆熊的原创文章,作者微信公众号:周氏逻辑(logiczhou)】

戳这里,看该作者更多好文

分享到:

滇ICP备2023006006号-16