mysql迁移到DM数据库时sql语句的修改

最近,在进行一个项目的迁移工作,数据库原来采用的mysql,现在想改为国产数据库达梦(DM)。说起mysql,很多人都不陌生,作为一个开源的关系型数据库,mysql有着极为广泛的使用群体,而且,很多以前的中小型项目都是使用免费的mysql数据库。但是,对国产数据库DM,了解的人远没有mysql那么广泛,并且社区和论坛较少,在网上查到的可参考资料也寥寥无几,不过,值得庆幸的是,DM在很多功能上都与oracle数据库比较相近,并且采用sql92标准。

首先,说一下关键字问题。

DM的关键字真多,这是我第一次接触DM时的真实感受。在一些sql语句中,如果使用了某些关键字,那么对不起,直接报错。在建表时最好要使用非关键字,当然,大部分关键字可以作为列名,但是在执行一些增删改查的sql时(尤其是update时),会出现很多问题。具体的关键字有很多,像stat、begin、last、date、value、timestamp等,这些字作为列出现时,sql执行会出现一些问题。毕竟是迁移原有项目,原来把这些关键字作为表的列名的,应该做适当的修改,如加下划线。

其次,说一下函数问题。

在mysql中的很多加密函数,在DM中不存在,或者是无法找到替代函数,比如sha1();还有就是一些跟ip的转换相关的函数也没有找到,比如mysql的inet6_ntoa()和inet6_aton();一些日期函数无法使用,如,mysql的utc_timestamp();一些进制转换函数也无法使用,如:mysql的hex()和unhex(),不过,在DM中,可以用rawtohex()和hextoraw()代替,同时,这两个函数也是oracle的进制转换函数。

最后,说一下对mysql的扩展用法的修改。

在mysql中,你使用group by进行分组查询很自由,在select部分,你可以选择除了group by 和聚合函数以外的任何存在的字段,执行时不会报错,但是这样的sql语句不是标准的sql语句,而是mysql对标准sql的一种拓展,在oracle和DM中,在select部分,你只能可以选择group by 和聚合函数作为查询列,否则会报错。那么这样的sql语句怎么改造,我没找到好的方法,目前,采用聚合函数把非分组字段进行聚合。

mysql的插入语句也很“自由”,不仅可以采用insert into,还可以采用replace into、insert ignore into、 insert into...on duplicate key update,但后面所列这些语句 都不是标准sql,DM都不支持,oracle貌似也不支持,替换方式是用merge重新组织sql。

一点小心得,有不当地方,请大家指正。





ON DUPLICATE KEY UPDATE

你可能感兴趣的:(mysql迁移到DM数据库时sql语句的修改)