oracle和mysql几点差异对比
Oracle与mysql差异性总结
之前有个项目是用oracle数据库进行开发,需要把数据库改成mysql,遇到了一些地方需要注意的,就简单记了下来。
备注:
再把oracle转成mysql的时候,表中字段的类型转换是比较头疼的,比如oracle中的number转成mysql的时候,你要从“FLOAT、DOUBLE、TINYINT、 SMALLINT、MEDIUMINT、INT、BIGINT”中选择一个合适的,其他数据类型同理;工具转的话经常就会把你带进坑里了。。坑爹,一不小心就报错了,这个错误排查起来还比较麻烦,只有细心应对。
一、
WM_CONCAT对应GROUP_CONCAT;
二、
ronum可用limit代替;
三、
sys_guid()用uuid()代替
四、
add_months(t2.maxTime,-12)用date_add(t2.maxTime,interval -12 month)代替;
date_format(date,'%Y-%m-%d')-->oracle中的to_char();
str_to_date(date,'%Y-%m-%d')-->oracle中的to_date();
%Y:代表4位的年份
%y:代表2为的年份
%m:代表月, 格式为(01……12)
%c:代表月, 格式为(1……12)
%d:代表月份中的天数,格式为(00……31)
%e:代表月份中的天数, 格式为(0……31)
%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)
例子:
select case when add_months(t2.maxTime,-12)>t1.minTime then to_char(add_months(t2.maxTime,-12),'yyyy-MM') else to_char(t1.minTime,'yyyy-MM') end as startTime,to_char(t2.maxTime,'yyyy-MM') as endTime from(select min(t.log_time) as minTime from t_lm_operlog t) t1,(select max(t.log_time) as maxTime from t_lm_operlog t)t2
转为:
select case when date_add(t2.maxTime,interval -12 month)>t1.minTime then date_format(date_add(t2.maxTime,interval -12 month),'%Y-%m') else date_format(t1.minTime,'%Y-%m') end as startTime,date_format(t2.maxTime,'%Y-%m') as endTime from(select min(t.log_time) as minTime from t_lm_operlog t) t1,(select max(t.log_time) as maxTime from t_lm_operlog t)t2
五、
oracle中:to_char(number)把number转成varchar2,在mysql中用concat(number)
六、
oracle中:to_number在mysql中可以用cast或者convert
七、
Oracle中记录行号用Rownum RN;
在mysql中:Select UID,(@rowNum:=@rowNum+1) as rowNo From a,(Select (@rowNum :=0) ) b Order by a.Money Desc;
八、
SmRappfucauthEntityMapper.xml中的insert:merge into
九、
在mapper.xml中,oracle语法:
AND rolename like '%'||#{rolename}||'%'
Mysql语法:
AND rolename like CONCAT(CONCAT('%',#{rolename ,jdbcType=VARCHAR}),'%')
十、
mysql报错:mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。
例如下面这个sql:
delete from tbl where id in
(
select max(id) from tbl a where
EXISTS
(
select 1
from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
)
group by tac
)
改成:
delete from tbl where id
in
(
select a.id from
(
select max(id) id from tbl a where
EXISTS
(
select 1
from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
)
group by tac
) a
)
也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。注意,这个问题只出现于mysql,mssql和oracle不会出现此问题。
十一、
Oracle中:to_date(#{createtime ,jdbcType=VARCHAR },'yyyy-MM-dd
hh24:mi:ss')
Mysql中:
str_to_date(#{createtime
,jdbcType=VARCHAR },'%Y-%m-%d %T')
十二、
Oracle中有递归:start with ...connect by prior;
在mysql中没有写个方法,但可以用函数来实现mysql递归;
例如:
Oracle递归:
select
s.sysfuncid from T_SM_SYSFUNC s where s.sysfuncid!=t.sysfuncid start with
s.sysfuncid = t.sysfuncid connect by prior s.sysfunccode=s.psysfuncid
Mysql递归:
select s.sysfuncid from
T_SM_SYSFUNC s where s.sysfuncid!=t.sysfuncid and
FIND_IN_SET(s.sysfuncid,FOO3(t.sysfuncid))
mysql函数FOO3:
DROP
FUNCTION IF EXISTS FOO3;
CREATE
FUNCTION `FOO3` (userid varchar(255))
RETURNS
VARCHAR(4000)
BEGIN
DECLARE
sTemp VARCHAR(4000);
DECLARE
sTempChd VARCHAR(4000);
SET
sTemp = '$';
SET
sTempChd = areaId;
WHILE
sTempChd is not NULL DO
SET
sTemp = CONCAT(sTemp,',',sTempChd);
SELECT
group_concat(sysfunccode) INTO sTempChd FROM T_SM_SYSFUNC where FIND_IN_SET(psysfuncid,sTempChd)>0;
END
WHILE;
return
sTemp;
END
oracle和mysql几点差异对比的更多相关文章
- Oracle与MySQL的转化差异
1.nvl函数. Oracle 中 : nvl (join_count , 0) MySQL中:if(join_count is null,'0',join_count) ...
- Oracle与MySQL的区别对比
本文对数据库Oracle与MySQL进行了区别对比,其中从并发性.一致性.事务.数据持久性等十三方面进行了对比. 本文摘自 51cto 一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源 ...
- Oracle和MySQL的高可用方案对比【转】
关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...
- 【转】SQL Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 1. 绝对值 S:select abs(-1) valu ...
- Oracle和MySQL的对比
一.概述 1.1 Oracle 1.1.1 优点 开放性:Oracle 能所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持: 可伸缩 ...
- Vertica的这些事(二)——SQL-Server、Oracle、MySQL和Vertica数据库常用函数对比
SQL Server.Oracle.MySQL和Vertica数据库常用函数对比 Vertica数据库是HP公司新收购的用于BI方面的数据库. 绝对值 S:select abs(-1) value O ...
- oracle和mysql批量合并对比
orm框架采用mybatis,本博客介绍一下批量合并merge用oracle和mysql来做的区别, oracle merge合并更新函数的详细介绍可以参考我以前的博客:https://blog.cs ...
- Oracle和Mysql获取uuid的方法对比
场景:orm框架用mybatis,需要往数据库新增一条数据,用Oracle和mysql数据库分别需要怎么实现? mysql方法,用mysql提供的uuid函数 <insert id=" ...
- Mysql 和 Postgresql(PGSQL) 对比
Mysql 和 Postgresql(PGSQL) 对比 转载自:http://www.oschina.net/question/96003_13994 PostgreSQL与MySQL比较 MySQ ...
随机推荐
- 你真的懂offset与scroll吗?
背景 身为一个前端工程师,每次在做关于滚动或者定位之类的交互时,或多或少都会用到offset.scroll之类的元素属性值来计算距离,但是每次都是现用现百度,从来没有真正系统地弄明白其中的原理及用法: ...
- 版本控制之三:SVN合并及解决冲突(转)
转自 http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2408089.html 接下来,试试用TortoiseSVN修改文件,添加文件,删除 ...
- 将本地web服务映射到公网访问
本文始发于我的个人博客,如需转载请注明出处. 为了更好的阅读体验,可以直接进去我的个人博客看. 项目部署 之前在学习前端的时候项目都只是在本地测试,永远的都是类似 http://localhost/x ...
- python web框架篇:views视图函数
Django请求的生命周期是怎样的? 简单地说,通过URL对应关系匹配 ->找到对应的函数(或者类)->返回字符串(或者读取Html之后返回渲染的字符串) 解剖起来如下: 1. 当用户在浏 ...
- 基于winsocket的框体Server和Client
前面学了一点Winsock的知识,会编写简单的Server和Client,现在就想通过VS2008编写框体的Server和Client,而不是在控制台上的操作了,毕竟学编程就是要多加练习,在实践中发现 ...
- Tomcat请求头过大
今天开发反应Tomcat的请求头过大 <Connector port="8280" protocol="HTTP/1.1" connectionTimeo ...
- eclipse中删除多余的tomcat server
在eclipse菜单中选择Window--Show View--Server--Servers,打开这个服务窗口,将多余的服务删除即可. 如果每次启动中太卡没反应,那就是服务没选择好,或是端口冲突的原 ...
- form 表单处理
submit相关 当使用 submit 按钮或者 image 或者button type="submit" 来提交表单时,会触发 submit 事件,但是直接javascri ...
- Problem B: 大整数的加法运算
Problem B: 大整数的加法运算 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 112 Solved: 57[Submit][Status][W ...
- 【1】maven来管理我的SSM项目
新建个maven项目,第一步当然是配置好自己需要的jar包,maven使用pom.xml管理 并不是每一个都有用,但是都是常见jar,方便以后自己调用来查找 <project xmlns=&qu ...