MySQL数据库移植总结

开发 开发工具
MySQL是一种关联数据库管理系统,它将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

[[180166]]

一、前言

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<test.sql  

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

2) MySQL在其它机器上:

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

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

四、总结

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

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

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

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

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

 

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

责任编辑:武晓燕 来源: csdn博客
相关推荐

2019-01-02 11:10:40

MySQL数据库数据库设计

2017-07-12 09:20:42

SQLite数据库移植

2019-07-11 08:45:00

MySQL数据库缓存

2010-05-13 09:59:50

MySQL数据库

2010-05-19 17:35:35

2012-06-20 11:17:02

MemSQL

2010-05-31 15:12:44

MySQL数据库

2017-11-08 10:20:10

2011-08-05 14:02:17

MySQL数据库异常处理

2010-05-20 17:31:17

MySQL数据库

2010-05-24 18:05:12

MySQL数据库

2019-11-07 15:39:36

数据库MySQL文章

2011-07-19 16:36:25

Audit插件MySQL数据库

2019-09-26 10:41:21

MySQL数据库计数器

2019-09-16 08:28:17

Mysql数据库binlog

2010-05-24 17:42:44

MySQL数据库

2019-05-29 09:38:44

MySQL字符编码数据库

2011-05-12 13:48:07

MySql数据库本地移植

2009-01-06 11:31:34

SybaseSQL Server数据库

2011-08-01 16:31:29

MySQL数据库外键
点赞
收藏

51CTO技术栈公众号