MySQL数据库移植总结

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 一、前言 MySQL是一个由瑞典MySQL AB公司开发的关系型数据库管理系统,目前归属Oracle公司旗下。

一、前言
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 -p'pwd' 

(其中,username是用户名,pwd是密码)
2)MySQL在其它机器上:

mysql -uusername -p'pwd' –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 -p'pwd' -DDbName<test.sql 

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

2) MySQL在其它机器上:

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
SQL Oracle Java
怎样写出可在各种数据库间移植的SQL
国际标准没有对这些函数做规定,这种 SQL 语句就会和数据库相关而无法移植了,而这些函数在应用开发中还特别常见。 Hibernate 能将包括这些函数的标准 HQL 语句转换成不同数据库的 SQL,但 HQL 支持的函数太少,碰到不认识的函数还是要分别注册,这就丧失了可移植性;而且 HQL 能生成的 SQL 本身也比较简单,覆盖面太窄了。
|
关系型数据库 MySQL Linux
在嵌入式 Linux 上移植 MySQL 数据库
MySQL 是一个流行的开源关系型数据库管理系统(RDBMS),它可以用于在各种应用程序中存储和管理数据。尽管 MySQL 在大型服务器上广泛使用,但它也可以在嵌入式 Linux 环境中运行,为嵌入式设备提供高效的数据库管理功能。本文将介绍如何在嵌入式 Linux 上移植 MySQL 数据库。
599 0
|
存储 SQL Linux
嵌入式Linux上移植SQLite数据库
SQLite是一种轻量级的嵌入式数据库引擎,适用于各种应用,包括嵌入式系统。在嵌入式Linux上移植SQLite数据库可以为嵌入式设备提供持久性数据存储和查询功能。本文将介绍如何在嵌入式Linux上移植SQLite数据库。
208 0
|
关系型数据库 MySQL
mysql如何把一张表的数据移植到另外一张和其结构一样的表中
mysql如何把一张表的数据移植到另外一张和其结构一样的表中
208 0
|
Web App开发 关系型数据库 MySQL
|
SQL 存储 关系型数据库
|
关系型数据库 MySQL 数据库
|
数据库 Android开发 C++
Cocos移植到Android的一些问题-SQLite3数据库移植问题
<span style="font-size:14px;">首选我们讨论一下SQLite3数据库移植问题。我们在第14章节介绍了在Win32平台使用SQLite3数据库,我们介绍了两种配置环境的方法:一种是使用Cocos2d-x提供的SQLite3库配置,另一种是从SQLite官网下载源代码拷贝的工程中。第一种方法配置起来比较麻烦,关键是Cocos2d-x提供的SQLite3库只是Win32没
1350 0
|
数据库管理 C语言
SQLite 移植(摘自老师课件)
交叉环境: armv4l-tools-2.95.2.tar.bz2 SQLite :sqlite-2.8.17.tar.gz(版本比较旧)可以用新的       0.交叉编译其,解压0.1 修改路经 export PATH=/opt/host/armv4l/bin/:$PATH------------------------------------------------------
1121 0