oracle和mysql几点差异对比

数据库   发布日期:2025年07月17日   浏览次数:133

Oraclemysql差异性总结

之前有个项目是用oracle数据库进行开发,需要把数据库改成mysql,遇到了一些地方需要注意的,就简单记了下来。

备注:

再把oracle转成mysql的时候,表中字段的类型转换是比较头疼的,比如oracle中的number转成mysql的时候,你要从“FLOATDOUBLETINYINT SMALLINTMEDIUMINTINTBIGINT”中选择一个合适的,其他数据类型同理;工具转的话经常就会把你带进坑里了。。坑爹,一不小心就报错了,这个错误排查起来还比较麻烦,只有细心应对。

 


 

 

  1. 一、
  2. WM_CONCAT对应GROUP_CONCAT;
  3. 二、
  4. ronum可用limit代替;
  5. 三、
  6. sys_guid()用uuid()代替
  7. 四、
  8. add_months(t2.maxTime,-12)用date_add(t2.maxTime,interval -12 month)代替;
  9. date_format(date,'%Y-%m-%d')-->oracle中的to_char();
  10. str_to_date(date,'%Y-%m-%d')-->oracle中的to_date();
  11. %Y:代表4位的年份
  12. %y:代表2为的年份
  13. %m:代表月, 格式为(01……12)
  14. %c:代表月, 格式为(1……12)
  15. %d:代表月份中的天数,格式为(00……31)
  16. %e:代表月份中的天数, 格式为(0……31)
  17. %H:代表小时,格式为(00……23)
  18. %k:代表 小时,格式为(0……23)
  19. %h 代表小时,格式为(01……12)
  20. %I 代表小时,格式为(01……12)
  21. %l :代表小时,格式为(1……12)
  22. %i 代表分钟, 格式为(00……59)
  23. %r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)
  24. %T:代表 时间,格式为24 小时(hh:mm:ss)
  25. %S:代表 秒,格式为(00……59)
  26. %s:代表 秒,格式为(00……59)
  27. 例子:
  28. 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
  29. 转为:
  30. 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
  31. 五、
  32. oracle中:to_char(number)把number转成varchar2,在mysql中用concat(number)
  33. 六、
  34. oracle中:to_numbermysql中可以用cast或者convert
  35. 七、
  36. Oracle中记录行号用Rownum RN
  37. mysql中:Select UID,(@rowNum:=@rowNum+1) as rowNo From a,(Select (@rowNum :=0) ) b Order by a.Money Desc
  38. 八、
  39. SmRappfucauthEntityMapper.xml中的insertmerge into
  40. 九、
  41. mapper.xml中,oracle语法:
  42. AND rolename like '%'||#{rolename}||'%'
  43. Mysql语法:
  44. AND rolename like CONCAT(CONCAT('%',#{rolename ,jdbcType=VARCHAR}),'%')
  45. 十、
  46. mysql报错:mysqlYou can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。
  47. 例如下面这个sql:
  48. delete from tbl where id in
  49. (
  50. select max(id) from tbl a where EXISTS
  51. (
  52. select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
  53. )
  54. group by tac
  55. )
  56. 改成:
  57. delete from tbl where id in
  58. (
  59. select a.id from
  60. (
  61. select max(id) id from tbl a where EXISTS
  62. (
  63. select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
  64. )
  65. group by tac
  66. ) a
  67. )
  68. 也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。注意,这个问题只出现于mysql,mssql和oracle不会出现此问题。
  69. 十一、
  70. Oracle中:to_date(#{createtime ,jdbcType=VARCHAR },'yyyy-MM-dd hh24:mi:ss')
  71. Mysql中:
  72. str_to_date(#{createtime ,jdbcType=VARCHAR },'%Y-%m-%d %T')
  73. 十二、
  74. Oracle中有递归:start with ...connect by prior;
  75. 在mysql中没有写个方法,但可以用函数来实现mysql递归;
  76. 例如:
  77. Oracle递归:
  78. 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
  79. Mysql递归:
  80. select s.sysfuncid from T_SM_SYSFUNC s where s.sysfuncid!=t.sysfuncid and FIND_IN_SET(s.sysfuncid,FOO3(t.sysfuncid))
  81. mysql函数FOO3:
  82. DROP FUNCTION IF EXISTS FOO3;
  83. CREATE FUNCTION `FOO3` (userid varchar(255))
  84. RETURNS VARCHAR(4000)
  85. BEGIN
  86. DECLARE sTemp VARCHAR(4000);
  87. DECLARE sTempChd VARCHAR(4000);
  88. SET sTemp = '$';
  89. SET sTempChd = areaId;
  90. WHILE sTempChd is not NULL DO
  91. SET sTemp = CONCAT(sTemp,',',sTempChd);
  92. SELECT group_concat(sysfunccode) INTO sTempChd FROM T_SM_SYSFUNC where FIND_IN_SET(psysfuncid,sTempChd)>0;
  93. END WHILE;
  94. return sTemp;
  95. END

 

以上就是oracle和mysql几点差异对比的详细内容,更多关于oracle和mysql几点差异对比的资料请关注九品源码其它相关文章!