注册
MySQL与达梦数据库的感想
培训园地/ 文章详情 /

MySQL与达梦数据库的感想

行云流水 2023/02/16 4005 2 0

本人作为从事DBA工作快8年了,期间接触过sysbase,oracle,MySQL,postgresql等,主要是MySQL;有幸参与达梦数据库培训,第一次接触国产数据库,还是非常不习惯的,尤其是达梦图形界面这块做的十分完善,手册也是偏向图形界面化操作,这对于喜欢后台敲命令操作一时难以适应,不过图形界面化大大简化繁琐步骤,降低了学习门槛。在三天DCA学习中,也让我初步了解达梦,并与MySQL进行一些对比:都是一个典型的 C/S 架构,由服务器和客户端两部分构成,单进程多线程的架构,实例有一个进程和一组线程+共享内存组成;DM一个实例管理一个数据库,就叫单机环境,多个实例管理一个数据库,就是 DMDSC,DM8 最多支持 8 个节点的 DSC;MySQL一个mysqld进程即是一个实例;语法和数据类型上也不同,例如:

  1. 创建表的时候,不支持在列的后面直接加 comment 注释,使用 COMMENT ON IS 代替,如:

    COMMENT ON TABLE xxx IS xxx
    COMMENT ON COLUMN xxx IS xxx

  2. 不支持 date_sub 函数,使用 *dateadd(datepart,n,date) *代替,

    其中,datepart可以为:year(yy,yyyy),quarter(qq,q),month(mm,m),dayofyear(dy,y),day(dd,d),week(wk,ww),weekday(dw),hour(hh), minute(mi,n), second(ss,s), millisecond(ms)
    例子:
    select dateadd(month, -6, now());
    select dateadd(month, 2, now());

  3. 不支持 date_format 函数,它有三种代替方法:

    a: 使用 datepart 代替:语法:datepart(datepart, date),返回代表日期的指定部分的整数,

     datepart可以为:year(yy,yyyy),quarter(qq,q),month(mm,m),dayofyear(dy,y),day(dd,d),week(wk,ww),weekday(dw),hour(hh),                   minute(mi,n),second(ss,s), millisecond(ms)
      例子:
      select datepart(year, '2018-12-13 08:45:00'); --2018
      select datepart(month, '2018-12-13 08:45:00'); --12
    

    b: 使用 date_part 代替,功能和 datepart 一样,写法不同,参数顺序颠倒,且都要加引号,

    例子:
    select date_part('2018-12-13 08:45:00', 'year');--2018
    select date_part('2018-12-13 08:45:00', 'mm'); -- 12
    

    c: 使用 extract 代替,语法:extract(dtfield from date),从日期类型date中抽取dtfield对应的值
    dtfield 可以是 year,month,day,hour,minute,second
    例子:
    select extract(year from ‘2018-12-13 08:45:00’); --2018
    select extract(month from ‘2018-12-13 08:45:00’); --12

  4. 不支持 substring_index 函数, 使用 substr / substring 代替,

    语法:
    substr(char[,m[,n]])
    substring(char[from m[ for n]])

  5. 不支持 group_concat 函数,使用 wm_concat 代替,

    例子:
    select wm_concat(id) as idstr from persion ORDER BY id ;

  6. 不支持 from_unixtime 函数,使用 round 代替

    语法:round(date[,format])

  7. 不支持 case-when-then-else ,

    例如:
    select case when id = 2 then “aaa” when id = 3 then “bbb” else “ccc” end as test
    from (select id from person) tt;

  8. current_timestamp 的返回值带有时区,

    例子:
    select current_timestamp();
    2018-12-17 14:34:18.433839 +08:00

  9. convert(type, value) 函数,

    与 mysql 的 convert 一样,但是参数是反过来的,mysql 是 convert(value, type)

  10. 不支持 on duplicate key update,

    使用 merge into 代替

  11. 不支持 ignore,即 insert ignore into

  12. 不支持 replace into,

    使用 merge into 代替

  13. 不支持 if。

  14. 不支持 “”,只支持’’

  15. 不支持 auto_increment, 使用 identity 代替

    如: identity(1, 1),从 1 开始,每次增 1

  16. 不支持 longtext 类型,

    可用 CLOB 代替。
    最后,祝达梦越来越好,借信创的浪潮,让国产数据库早日腾飞。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服