`

项目移植或者转换经验交流

阅读更多
最近公司在做一个项目的数据库迁移(SqlServer2008->MySql5.5)
考虑一:
1.对人员的影响(包括DBA及相应IT人员),在技能培训和操作习惯上需要多久才能适应,是否需要增加新的DBA;
2.数据库系统迁移所要耗费的时间以及对业务系统正常运行的影响程度有多大;
3.包括在前后期准备和迁移期间,都希望能够多大减少对业务系统的影响;
  由于个人主要处理项目应用程序部分,因此从这方面出发:

1.调研分如下步骤:
    1.收集资料,了解MySql版本历史
    2.下载安装配置MYSql
   3.通过项目Sql代码分析相应语法之间的差异,数据类型,函数
    总结:

    1、在SQL Server中,如果表名以数字开头,在SQL语句中我们需要在用“[”和“]”将表名括起来,例如:select * from [account_info]。但在MySQL中,它是不需要任何处理的,如:select * from account_info,相反,这么做了反而会出错。

    2、在SQL Server中常用的 Select Top n 在MySQL中是不支持的,取而代之的是Limit n1,n2,但Limit在语法和功能上是与Top 有很大不同的:首先,limit n1,n2必须放在整个SQL语句的最后,其次,Limit n1,n2取的不仅仅是前多少条,它可以取得记录集中的任意一个区段,从n1(包括n1)开始,到n2(不包括n2)结束。如果我们要取前10条记录,在SQL Server中应该这么写:select top 10 * from [account_info],而在MySQL中我们应该这么写:select * from account_info limit 0,10。

    3、在多表联合查找时,我们经常要给表一个别名,如:select a.*,b.uid from account a,dealer d where a.uid=d.uid 。这是在SQL Server中的写法,如果在MySQL中,我就应该这么写:select a.*,b.uid from account_info as a,dealer as d where a.uid=d.uid。

    4、在MySQL中Group by 与 Order by 不能同时使用。
   
    5.收集的mysql与mssql的区别:
      1) SQL Server 和 MySql 语法和关键字的区别
       ——用于SQLServer到MySql的转换
     (1) mysql的ifnull()函数对应sql的isnull()函数;
    (2) mysql的存储过程中变量的定义去掉@;
    (3) mysql的每句结束要用";
    (4) SQLServer存储过程的AS在MySql中需要用begin .....end替换
     (5) 字符串连接用concat()函数;
     如 SQLServer: Temp=’select * from ’+’tablename’+…+…
  MySql:Temp=concat(’select * from’, ’tablecname’,…,…)
     (6) mysql的uuid()对应sql的GUID();
     (7) MySql的out对应SQLServer的output,且mysql 的out要放在变量的前面,SQLServer的output放在变量后面
MySql out,in,inout的区别——
MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。
MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。
MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。
(8)MySQL的if语句为
if  (条件)  then
end if;
或者
If  (条件) then
Else
End if
或者
If(条件)then
Elseif (注意不能写成 Else if )
Elseif

End if

(9)Mysql的Execute对应SqlServer的exec;
(注意:必须像下面这样调用)
Set @cnt=’select * from 表名’;
Prepare str from @cnt;
Execute str;

(10)MySql存储过程调用其他存储过程用call
Call 函数名(即SQLServer的存储过程名)(’参数1’,’参数2’,……)

(11) mysql的日期
○1获得当前日期函数:curdate(),current_date()
○2获得当前时间函数:curtime();
○3获得当前日期+时间:now();
○4MySQL dayof... 函数:dayofweek(), dayofmonth(), dayofyear()分别返回日期参数,在一周、一月、一年中的位置。
(注:周日=1,周一=2,周二=3,……)

○5返回本月的天数:select day(last_day(now()));

○6MySQL 为日期增加一个时间间隔:date_add()
select date_add(CURRENT_DATE(),interval ‘要增加的天数’ day) as Fdate
○7MySQL 为日期减去一个时间间隔:date_sub()
select date_sub('1998-01-01 00:00:00', interval '1 1:1:1' day_second);
○8MySQL 日期、时间相减函数:datediff(date1,date2), timediff(time1,time2)
○9MySQL 拼凑日期、时间函数:makdedate(year,dayofyear), maketime(hour,minute,second)
例:select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
○10本周时间(起始)
select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-2 day) as Fdate
○11本周时间(结束)
select date_add(CURRENT_DATE(),interval dayofweek(curdate())+3 day) as Fdate
○12上周时间(起始)
select date_sub(CURRENT_DATE(),interval dayofweek(curdate())+5 day) as Fdate
○13上周时间(结束)
select date_sub(CURRENT_DATE(),interval dayofweek(curdate())-1 day) as Fdate
○14本月时间(起始)
select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) as Fdate
○15本月时间(结束)
Select date_add(current_date(),interval day(last_day(CURDATE())) -day(CURDATE()) day) as Fdate
○16上月时间(起始)
select DATE_SUB(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY),interval day(last_day(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY)))-1 day) as Fdate
○17上月时间(结束)
select DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE()) DAY) as Fdate
○18今年时间(起始)
select makedate(year(curdate()),1) as FDate
○19今年时间(结束)
select DATE_SUB(makedate(year(curdate())+1,1) ,INTERVAL 1 day) as Fdate
○20去年时间(起始)
select makedate(year(curdate())-1,1) as Fdate
○21去年时间(结束)
select DATE_SUB(makedate(year(curdate()),1) ,INTERVAL 1 day) as FDate
○22DATE_FORMAT(date,format):根据format字符串格式化date值。下列修饰符可以被用在format字符串中
%M     月名字(January……December)      
  %W     星期名字(Sunday……Saturday)      
  %D     有英语前缀的月份的日期(1st,   2nd,   3rd,   等等。)    
  %Y     年,   数字,   4   位    
  %y     年,   数字,   2   位    
  %a     缩写的星期名字(Sun……Sat)      
  %d     月份中的天数,   数字(00……31)      
  %e     月份中的天数,   数字(0……31)      
  %m     月,   数字(01……12)      
  %c     月,   数字(1……12)      
  %b     缩写的月份名字(Jan……Dec)      
  %j     一年中的天数(001……366)      
  %H     小时(00……23)      
  %k     小时(0……23)      
  %h     小时(01……12)      
  %I     小时(01……12)      
  %l     小时(1……12)      
  %i     分钟,   数字(00……59)      
  %r     时间,12   小时(hh:mm:ss   [AP]M)      
  %T     时间,24   小时(hh:mm:ss)      
  %S     秒(00……59)      
  %s     秒(00……59)      
  %p     AM或PM      
%w     一个星期中的天数(0=Sunday   ……6=Saturday   )    
  %U     星期(0……52),   这里星期天是星期的第一天    
  %u     星期(0……52),   这里星期一是星期的第一天    
  %%     一个文字“%”。    
例:所有的其他字符不做解释被复制到结果中。   
  mysql> select   DATE_FORMAT('1997-10-04   22:23:00',   '%W   %M   %Y');  
->'Saturday   October   1997'  
  mysql>select   DATE_FORMAT('1997-10-04   22:23:00',   '%H:%i:%s');  
->   '22:23:00'  
mysql>select   DATE_FORMAT('1997-10-04   22:23:00',   '%D   %y   %a   %d   %m   %b   %j');  
->'4th   97   Sat   04   10   Oct   277'  
mysql>select   DATE_FORMAT('1997-10-04   22:23:00',   '%H   %k   %I   %r   %T   %S   %w');  
->'22   22   10   10:23:00   PM   22:23:00   00   6'  
(12)MySql存储过程中没有return函数,在MySql中可以用循环和out参数代替
If EXISTS(SELECT * FROM T_Chance WHERE FCustID=CostomerID)  return 0
改写为:
(在参数中定义一个out变量:out temp varchar(100);)
BEGIN
Loop1:loop
SELECT count(*) FROM T_Chance WHERE FCustID=CostomerID int @cnt
If @cnt>0 then
begin
set temp=0;
leave loop1;
end;
end if
end loop loop1;

(13) select @a=count(*) from VW_Action 在mySql中修改为:select count(*) from VW_Action into @a;

(14)MySQL中没有top关键字,需要用limit代替且放在后面
注意,在MySQL中的limit不能放在子查询内,limit不同与SQLServer,它可以规定范围 limit a,b——范围a-b
SQL SERVER : select   top   8   *   from   table1
MYSQL: select   *   from   table1   limit   5;
(15)即使存储过程没有参数也要写括号“()”
(16) 当一个存储过程中有创建临时表时
create procedure up_test
()
begin
drop table if exists tb1;
create TEMPORARY table tb1//注意添加TEMPORARY table
(
id int,
name varchar(20)
);//注意最后加分号
insert tb1 values('1','jim');
select * from tb1;
end
(17)建表中自增长问题:
create table user
(
  Id varchar(10)  primary key auto_increment  not null,
  Name varchar(20) not null,
  Password varchar(20),
  create_date datetime
);
auto_increment 自增长
(18) "Unable to convert MySQL date/time value to System.DateTime"这是因为在日期列中有"0000-00-00"数据值,要修正这个问题,你可以把这些数据设为null,或者在连接字符串中设置"Allow Zero Datetime=True" 。
(19) MySQL视图的FROM子句不允许存在子查询,因此对于SQL Server中FROM子句带有子查询的视图,需要手工进行迁移。可通过消除FROM子句中的子查询,或将FROM子句中的子查询重构为一个新的视图来进行迁移。
(20)类型转换:
text ----longtext
float  ----double
tinyint ---bit
int ---int
image --longblob






今天暂且做第一点,稍后继续更新,希望大侠能够给些建议

    4.把数据库从SQL Server 迁移到 MySQL,可以在My SQL中重新构建一个一模一样的空数据库,然后用程序代码把数据从SQL Server中读出再写入MySQL中。这种方法当然不会有错,然而有更方便的方法:SQL Server有导入导出功能,我们可以使用它的导出功能,将SQL Server中的数据完整的导出到MySQL中。

    5.初步尝试一个简单的设置,进行Web项目的移植,最先需要确认其对数据库访问的正确性。因此需要在安装的Jboss5.1先设置一个数据库连接池,以保证Web应用程序对数据库访问的可行性。需要注意的是需要在数据源中为该数据源设置一个J2EE 连接器体系结构(J2C)认证。在设置了连接数据源的用户名和密码以后,在数据源的组件管理的认证别名中选择刚才设置的认证。在以上配置工作完成以后就可以对该数据连接池进行连接测试了。
    在数据连接池测试成功以后,就需要考虑在Web应用程序如何取调用该数据连接池进行数据库连接了。访问应用服务器的数据连接池肯定是通过JNDI进行访问。[/size][/size][/size]
1
2
分享到:
评论

相关推荐

    影刀RPA中级证书-数据处理-列表计算价格

    影刀RPA致力于为各行业客户提供高效、灵活的自动化解决方案。能够实现PC、手机上任何软件的自动化操作,支持Windows、Linux等操作系统,以及桌面软件、Web程序和手机App的自动化。 影刀RPA的核心功能包括数据抓取、解析、校验和自动填表,还支持可视化流程设计器、Python和JavaScript脚本接入,以及流程录制等功能,帮助用户快速搭建自动化流程。影刀RPA结合AI技术,支持机器视觉、自然语言处理等高级功能,进一步提升自动化能力。影刀RPA广泛应用于电商、金融、制造等行业,帮助客户实现订单处理、客户数据录入、财务对账等任务的自动化。影刀实战,影刀证书快速获取,影刀功能定制

    cloud单点登录集成

    cloud单点登录集成

    JAVAFX开发的虚拟桌宠,禁止商用!!!!

    女朋友生日,突发奇想用她喜欢的表情包做了个虚拟桌宠 大家要用只需要替换一下GIF就行

    大学生创新创业大赛项目 - 仿 Envato 的电商项目.zip

    大学生创业项目源码

    open-vm-tools-11.0.5-3.el7-9.9.x64-86.rpm.tar.gz

    1、文件内容:open-vm-tools-11.0.5-3.el7_9.9.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf open-vm-tools-11.0.5-3.el7_9.9.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    华为网路设备学习-14 (web界面中复原防火墙实验)

    华为网路设备学习-14 (web界面中复原防火墙实验)

    基于springboot框架的Javaweb体育馆管理系统的设计与实现(完整源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip

    关键词:海滨体育馆管理,Java技术,MYSQL数据库,Spring Boot框架 1 引言 1 1.1 课题背景 1 1.2 设计原则 1 1.3 论文结构安排 2 2 系统关键技术 3 2.1 JAVA技术 3 2.2 B/S结构 3 2.3 MYSQL数据库 4 2.4 Spring Boot框架 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 经济可行性 5 3.1.3 运行可行性 5 3.1.4 法律可行性 5 3.2 系统性能分析 5 3.3 系统功能分析 6 3.4 系统流程分析 7 3.4.1 注册登录流程 7 3.4.2 添加信息流程 8 3.4.3 删除信息流程 8 4 系统设计 9 4.1 系统概要设计 9 4.2 系统结构设计 9 4.3 系统顺序图设计 10 4.4 数据库设计 10 4.4.1 数据库E-R图设计 10 4.4.2 数据库表设计 12 5 系统的实现 15 5.1 登录模块的实现 15 5.2 注册模块的实现 15 5.3 学生管理模块的实现 16 5.4 系统主界面模块的实现 16 5.5 器材管理模块

    Python实现基于IBES-ELM基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测 多指标的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档详细介绍了一个名为《Python实现基于IBES-ELM基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测》的项目。该项目旨在通过结合改进的秃鹰搜索优化算法(IBES-EO)和极限学习机(ELM),优化ELM模型以提高其预测精度,尤其针对多指标、高维数据以及噪声数据的处理进行了探讨。项目涵盖了从数据预处理到建模预测的一系列完整流程,并提供了代码案例和GUI界面设计思路。文档详细阐述了模型的工作机制、适用场景及其实现细节。 适合人群:对机器学习有兴趣,特别是对ELM、IBES-EO感兴趣的研究人员、开发人员和技术爱好者。 使用场景及目标:适用于各种回归预测问题,包括但不限于金融预测、气象预测、健康数据分析和智能交通系统等。目标在于提供一种高效的解决方案,提高在大规模复杂数据集中进行回归预测的能力,同时也展示了如何将生物启发式的优化算法运用于改进现有的机器学习模型,为实际应用提供更多可能。 阅读建议:文档按照章节顺序编排,从背景介绍到具体实现再到最终总结。初学者可以从头至尾通读,以掌握全流程概念和技能;有一定经验的读者可以直接跳转至自己感兴趣的环节,例如优化算法的具体设计或者代码实现部分。建议边学习边动手实验,以达到最佳的学习效果,并可通过提供的完整示例代码加深理解和记忆。此外,项目中有关于系统架构设计、API接口搭建等内容也可作为实际工程项目参考。

    智能海报设计助手:AI助力简易高效的海报制作解决方案

    内容概要:本文介绍了一款名为智能海报设计助手的应用程序,该应用程序是一款面向大众使用的AI工具,专注于解决普通人在设计高质量海报时遇到的问题。应用程序拥有强大的创意灵感库,可以根据用户提出的特定需求(例如主题、风格偏好等),快速推荐不同类型的海报设计方案,并配备智能化的一键素材筛选系统和自动排版功能,使得整个海报制作流程更为简化、高效,即使是无设计经验的用户也能独立完成高水平的作品。 适合人群:缺乏专业设计能力的广大非专业人士,如商家营销人员、活动策划者、个体创作者。 使用场景及目标:帮助需要短时间内完成海报宣传材料准备的工作人士提高工作效率,减少人力投入的同时获得媲美专业人士水准的成品。 阅读建议:文章旨在强调此智能海报设计器对普通用户的友好性和便捷性的特点,因此重点在于理解它是怎样利用先进技术来满足一般用户的实际应用需求的,而不仅仅关注具体的操作方法。这有助于潜在用户决定是否采用这一工具来进行海报创建工作。

    STL浅谈,从vector到map

    本文为C++ STL入门指南,详解vector、stack、map等核心容器的用法与底层原理,助你高效掌握标准模板库!

    大创项目驱动.zip

    大学生创业项目源码

    西门子S71511PLC实现PID程序控制阀门开度和模拟量转换:博途WinCC画面搭建完整演示,西门子S71511PLC实现PID程序控制阀门开度和模拟量转换:博途WinCC画面搭建完整演示,7自由度

    西门子S71511PLC实现PID程序控制阀门开度和模拟量转换:博途WinCC画面搭建完整演示,西门子S71511PLC实现PID程序控制阀门开度和模拟量转换:博途WinCC画面搭建完整演示,7自由度车辆动力学模型与联合仿真验证 软件使用:Carsim2020.0+Matlab Simulink2018b 适用场景:为了验证7自由度模型的正确性,与Carsim进行联合仿真验证,采用模块化建模方法,搭建了电机模型、参数计算、轮胎模型、7自由度动力学模型。 包含模块:电机模型模块1和2、参数计算模块、轮胎模型、7DOF模型、详细参考文献及说明文档。 包含:Matlab Simulink源码文件,详细建模说明文档,对应参考资料及相关文献, ,7自由度车辆动力学模型;联合仿真验证;Carsim2020.0;Matlab Simulink2018b;模块化建模方法;电机模型;参数计算模块;轮胎模型;详细参考文献;建模说明文档。,7自由度车辆模型联合仿真验证:Carsim2020.0与Matlab Simulink2018b应用实践

    【css酷炫效果】纯CSS实现立体纸张折叠动效

    对应博客地址:https://blog.csdn.net/u011561335/article/details/146313054

    大创项目前端.zip

    大学生创业项目源码

    大创项目_27.zip

    大学生创业项目源码

    【毕业设计】基于微信小程序的社区团购系统+ssm后端【源码+论文+答辩ppt+开题报告+任务书】.zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    iPhone8,1-12.3(16F156)-0002313038C3C3BA(617033133966266).shsh

    iPhone8,1-12.3(16F156)-0002313038C3C3BA(617033133966266).shsh

    org.eclipse.equinox.launcher.win32.win32.x86-64-1.2.700.v20221108-1024

    org.eclipse.equinox.launcher.win32.win32.x86-64-1.2.700.v20221108-1024

    基于在山地隧道采集到的数据情况,对车辆状态未来的碰撞预测【包含数据和代码、cnn-lstm-attention的类别预测】

    本项目的异常状态预测任务聚焦于基于车辆与周围环境的相对数据,预测未来每个网格的异常状态。 预测的目标是基于当前时刻的九宫格风险矩阵状态,预测下一时刻每个网格的风险等级。 九宫格共有9个网格,每个网格可能对应低、中、高不同的异常风险状态,每个时间点的输出是一个包含9个元素的矩阵,其中每个元素表示一个网格的异常状态。 如果某些网格当前没有车辆或没有风险,在输入矩阵中用0表示为无风险的状态。例如,当前时刻的九宫格异常状态为[0, 0, 高风险, 高风险, 0, 0, 0, 0, 0],预测后的下一时刻的九宫格异常状态为[0, 0, 中风险, 中风险, 0, 低风险, 0, 0, 0]。

Global site tag (gtag.js) - Google Analytics