MySQL数据库移植总结
来源:互联网 发布:java事务的传播特性 编辑:程序博客网 时间:2024/06/11 13:16
一、前言
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 xxxbeginendelsebeginend
修改为:
if xxx thenbeginend;elsebeginend;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 xxxbeginendelse if yyybegin endelse if zzzbegin endelsebeginend
修改为:
if xxx thenbeginend;elseif yyy thenbegin end;elseif zzz thenbegin end;elsebeginend;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数据库
- 【数据库】mysql移植
- 简单方法移植MySQL数据库
- 数据库移植: 从Oracle移植到MySQL 注意databasePlatform
- Oracle数据库移植到MySQL实战
- 如何将MySQL数据库移植为PostgreSQL
- 讲解Oracle数据库移植到MySQL
- 移植oracle数据库表结构到mysql
- Oracle数据库移植到MySQL实战
- Oracle数据库移植到MySQL实战
- Oracle数据库移植到MySQL实战
- pentaho5.0.1将数据库移植成mysql
- 讲解Oracle数据库移植到MySQL
- 把Oracle数据库移植到Mysql
- pentaho7.0将数据库移植成mysql
- MySql数据库操作总结
- MySQL数据库索引总结
- luci之how to write modules
- Python-Scrapy 个人兴趣教程(二):没错,从代理IP开始
- php导出excel (thinkphp框架)
- Windows环境下Android Studio v1.0安装教程
- Python实现欧拉计划16题
- MySQL数据库移植总结
- java数组排序
- iOS 本地推送
- 四种IO模型的解释
- 仿微信联系人列表字母侧滑控件
- SpringMVC controller的几种形态
- 解决jsp乱码的各种方案
- 解题报告:HDU1695(欧拉+容斥)
- iOS 自定义UIPickerView地区选择器视图 —— HERO博客