MySQL数据库移植总结

一、前言

淮上网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联公司公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

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) 对类似存储过程输入输出参数作如下修改:

 
 
  1. createprocedure pr_xxx 
  2.     @aaa        varchar(40), 
  3.     @bbb        varchar(10), 
  4.     @ccc        varchar(20), 
  5.     @ddd        int  out 

修改为:

 
 
  1. createprocedure pr_ xxx 
  2.        in   p_ aaa         varchar(40), 
  3.        in   p_ bbb         varchar(10), 
  4.        in   p_ ccc         varchar(20), 
  5.        out   p_ ddd        int 

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

 
 
  1. declare 
  2.         @aaa             int, 
  3.         @bbb             varchar(20),     
  4.         @ccc             int,          
  5.         @ddd             int,  

修改为:

 
 
  1. declare p_aaa         int; 
  2.        declare p_bbb         varchar(20); 
  3.        declare p_ccc         int; 
  4.        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语句修改如下:

 
 
  1. if xxx 
  2. begin 
  3.  
  4. end 
  5. else 
  6. begin 
  7.  
  8. end 

修改为:

 
 
  1. if xxx then 
  2. begin 
  3.  
  4. end; 
  5. else 
  6. begin 
  7.  
  8. end; 
  9. 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语句作如下修改:

 
 
  1. end 

修改为;

 
 
  1. end; 
  2. // 
  3. delimiter ; 

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

 
 
  1. print 'create procedure:pr_xxx ok!' 

修改为:

 
 
  1. select 'create procedure pr_ xxx ok!'; 

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

 
 
  1. if xxx 
  2. begin 
  3.  
  4. end 
  5. else if yyy 
  6. begin    
  7.  
  8. end 
  9. else if zzz 
  10. begin    
  11.  
  12. end 
  13. else 
  14. begin 
  15.  
  16. end 

修改为:

 
 
  1. if xxx then 
  2. begin 
  3.  
  4. end; 
  5. elseif yyy then 
  6. begin    
  7.  
  8. end; 
  9. elseif zzz then 
  10. begin    
  11.  
  12. end; 
  13. else 
  14. begin 
  15.  
  16. end; 
  17. 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

 
 
  1. xpecdmoni 

2.停止MySQL

 
 
  1. xsuperstop 

3.登录MySQL

1)MySQL位于本机之上:

 
 
  1. mysql -uusername -p'pwd'  

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

2)MySQL在其它机器上:

 
 
  1. mysql -uusername -p'pwd' –h0.1.1.1-P3306 

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

4.切换数据库

 
 
  1. use DbName; 

(其中,DbName是数据库名)

5.退出MySQL

 
 
  1. quit;

6.执行SQL脚本

1) MySQL位于本机之上:

 
 
  1. mysql -uusername -p'pwd' -DDbName

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

2) MySQL在其它机器上:

 
 
  1. mysql -uusername -p'pwd' –h0.1.1.1 -P3306 -DDbName

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

四、总结

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

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

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

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

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

网页题目:MySQL数据库移植总结
网站URL:http://www.shufengxianlan.com/qtweb/news25/407725.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联