2022年数据库迁移及区别比较 3

上传人:沈*** 文档编号:119321607 上传时间:2022-07-14 格式:PDF 页数:7 大小:53.60KB
收藏 版权申诉 举报 下载
2022年数据库迁移及区别比较 3_第1页
第1页 / 共7页
2022年数据库迁移及区别比较 3_第2页
第2页 / 共7页
2022年数据库迁移及区别比较 3_第3页
第3页 / 共7页
资源描述:

《2022年数据库迁移及区别比较 3》由会员分享,可在线阅读,更多相关《2022年数据库迁移及区别比较 3(7页珍藏版)》请在装配图网上搜索。

1、数据库迁移及及区别(Oracle,MySQL,SQLServer)http:/ 徐亮,2011-4-1 导言:最近的数据超市项目需要从SQLServer 迁移到 MySql。在之前并没有很多数据库迁移方面的经验,所以也不知道迁移需要花费多久,都要做什么工作。通过几天的工作,项目已经顺利迁移到MySql 上。该文档总结了迁移的经验,同时也方便以后数据库迁移。1、数据库迁移需要做的工作1.1 建表脚本修改1.2 数据导入(编码、数据类型设置)1.3 项目中的SQL 修改1.4 数据库连接(驱动)1.5 连接项目中的程序,测试并修改程序2、常用数据库中在开发方面的不同2.1 数据类型2.2 自增2.

2、3 分页2.4 内置函数2.5 模糊查询3、ORM 工具与迁移使用 hibernate、ibatis,在数据库迁移中的不同效率4、各数据库的不同数据类型比较及参考资料4.1、MySQL 中的建表SQL 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -4.2、Java到 SQL 数据类型影射表4.3、MySql 与 Oracle 数据类型的相互转化4.4、ORACLE 与 SQLSERVER、MYSQL 的数据类型对照表1、数据库迁移需要做的工作1、1 数据库建表脚本的修改1.1.1 由于各种数据库的数据类型并不相同,需要更改部分数据类型。1.1.2 在 MySQL 脚本

3、里暂不能给日期数据设置当前时间,字段如:registertime(注册时间);需在程序中设置当前日期,再保存进数据库或将registertime 设置为时间戳(timestamp)1.1.3 在 MySQL 里的表和字段的注释,见【5】中的建表语句。1、2 将数据导入到目标数据库的中(其中可以需要修改数据类型)1.2.1 设置数据库的编码,防止中文乱码1)、最简单的修改方法,就是修改mysql 的 my.ini 文件中的字符集键值,如:default-character-set=utf8(character_set_server=utf8)修改完后,重启mysql 的服务,service my

4、sql restart 2)、还有一种修改字符集的方法,就是使用mysql 的命令,如:mysql SET character_set_client=utf8;mysql SET character_set_connection=utf8;mysql SET character_set_database=utf8;mysql SET character_set_results=utf8;mysql SET character_set_server=utf8;mysql SET collation_connection=utf8;mysql SET collation_database=utf8

5、;mysql SET collation_server=utf8;如果:没有设置前两条,可以通过以下方式实现编码:a 建数据库时设置数据库支持的编码:create database datmart charset=utf8;b 使用数据库datmart use datmart;c 插入中文数据时,需要先设置:set names utf8;d 将 数据导入source 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -d:datmart.sql(每个见表语句后加:ENGINE=MyISAM DEFAULT CHARSET=utf8;)1.2.2 数据类型即使 MySQL 中

6、有 bit,但 SQLServer 中的 bit 类型(取 0 或 1,分别对应了bool 的 true 和 false)的变量在MySQL 中,不能顺利导入。需要将其设置为tinyint(1),才能顺利导入。12.3 导入数据采用第三方工具,如 Navicat 8,通过微软提供的ODBC 连接数据源,并导入数据或者自己写一个通用程序,将全部数据读入在写进新的数据库中。1、3 修改项目中的SQL,使得 SQL 在目标数据库里也可以使用1.4 数据库连接(下载驱动)SQLServer 的数据库连接:datamart_driver=com.microsoft.sqlserver.jdbc.SQLS

7、erverDriver datamart_url=jdbc:sqlserver:/172.16.6.23:1433;DatabaseName=datamart MySql 的数据库连接:datamart_driver=com.mysql.jdbc.Driver datamart_url=jdbc:mysql:/172.16.6.23:3306/datamart Oracle 的数据库连接:datamart_driver=oracle.jdbc.driver.OracleDriver datamart_url=jdbc:oracle:thin:172.16.6.26:1521:datamart

8、用户名和密码都是:datamart_username=root datamart_password=sd100301 2、常用数据库中在开发方面的不同名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -2.1 分页、2.2 内置函数、2.3 自增2.4 存储过程2.5 模糊查询2.1 分页Oracle 中的分页:可以采用rownumber 实现;SQLServer 中的分页,采用内容函数row_number()实现;MySQL 中采用 limit。Oracle 中的 SQL:select rn,first_name,salary from(select rownum as

9、rn,frist_name,salary from(select first_name,salary from s_emp order by salary)where rn between 11 and 20 SQLServer 中的 SQL:select*from(select row_number()over(order by salary desc)as rownumber,*from s_emp where salary3000)as tb where rownumber between 11 and 20 MySQL 中基本的SQL:select*from apiinfo where

10、 id41 order by enname desc limit 5,200 2.2 内置函数数据库中有许多内置函数,不少是用于处理字符串、日期等的。SQLServer 的 len(),相当于 MySQL 的 length(),相当于 Oracle 的 Len().2.3 自增2.3.1 自增关键字名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 7 页 -Oralce:SQLServer:identity MySQL:auto_increment 2.3.2 Oracle 中的自增(序列号):定义:CREATE SEQUENCE emp_sequence INCREMENT BY

11、 1-每次加几个START WITH 1-从 1 开始计数NOMAXV ALUE-不设置最大值NOCYCLE-一直累加,不循环CACHE 10;使用:emp_sequence.CURRV AL emp_sequence.NEXTVAL 2.3.3 自增带来的问题及其解决问题:(oracle 中的自增字段,如果它的值不是连续的,并且您将其做为主键,那么迁移到其它数据库时候,那些不连续的值发生了改变。而其它表是与该字段关联的,这样程序就会出错)解决方式:在目标数据库中建立统一的表,并有同样的字段但不自增;导入数据后,再修改表的结构,使得该字段自增。2.3.4 自己实现id 字段的自增的SQL 语句

12、insert into orderApi(id,ordernumber,apiid)select distinct IFNULL(select max(id)+1 from orderApi),1),#ordernumber#,#apiid#from orderApi group by id 2.4 存储过程不同的数据库存储过程相差的比SQL 间的差异到大,所以项目中的存储过程需要改不少地方。或者,如果对性能影响不大,可以不用存储过程。2.5 模糊查询在 SQLServer 中,模糊查询可以使用select*from apiinfo where cnname like#key#+%;名师资料总

13、结-精品资料欢迎下载-名师精心整理-第 5 页,共 7 页 -但在 MySql 中,则需改为:select*from apiinfo where cnname like%$key$%or select*from apiinfo where cnname REGEXP+#key#+注:#key#,是方法中传入的值;MySQL 中的 SQL 使用了 REGEXP,是正则表达式3、ORM 工具与迁移使用 hibernate、ibatis,在数据库迁移中的不同效率ibatis:sql 需要自己写hibernate:sql 自动生成;Hibernate 的特点:Hibernate 功能强大,数据库无关性

14、好,O/R 映射能力强,如果你对Hibernate 相当精通,而且对Hibernate 进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快。iBATIS 的特点:iBATIS 入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL 使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。易迁移行比较:对于数据库迁移来说,常用的数据库操作,如增删改查等,在hibern

15、ate 中基本不需要改动;而ibatis 中是自己写的针对特定数据库类型的SQL,所以需要改不少内容。4、各数据库的不同数据类型比较及参考资料4.1 MySQL 中的建表SQL:CREATE TABLE apiindicator(id int(11)NOT NULL,apiid int(11)DEFAULT NULL COMMENT 关联 api 信息表(apiinfo)id,名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 7 页 -cnname varchar(100)DEFAULT NULL COMMENT 指标中文名,enname varchar(60)DEFAULT NU

16、LL COMMENT 指标英文名,description varchar(1000)DEFAULT NULL,datatype varchar(15)DEFAULT NULL,isout bit DEFAULT 1 COMMENT 是否必须输出,默认为输出;0:不输出1:输出,state int(11)DEFAULT 0,isdelete bit DEFAULT 0 COMMENT 删除标记:0 未删除;1 已删除,PRIMARY KEY(id)ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=Api指标表;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 7 页 -

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!