國產達夢數據庫與MySQL的區別


背景

由於項目上的需要,把項目實現國產化,把底層的MySQL數據庫替換為國產的達夢數據庫,花了一周的時間研究了國產的數據庫-達夢數據庫,它和MySQL有一定的區別,SQL的寫法也有一些區別。

介紹

以下介紹來自於達夢數據庫官網,相關的文檔在官網中也是可以下載的。

達夢數據庫管理系統是達夢公司推出的具有完全自主知識產權的高性能數據庫管理系統,簡稱DM,它具有如下特點:

   1、通用性
  達夢數據庫管理系統兼容多種硬件體系,可運行於X86、X64、SPARC、POWER等硬件體系之上。DM各種平台上的數據存儲結構和消息通信結構完全一致,使得DM各種組件在不同的硬件平台上具有一致的使用特性。
  達夢數據庫管理系統產品實現了平台無關性,支持Windows系列、各版本Linux(2.4及2.4以上內核)、Unix、Kylin、AIX、Solaris等各種主流操作系統。達夢數據庫的服務器、接口程序和管理工具均可在32位/64 位版本操作系統上使用。
  
 2、高性能
  支持列存儲、數據壓縮、物化視圖等面向聯機事務分析場景的優化選項;
  通過表級行存儲、列存儲選項技術,在同一產品中提供對聯機事務處理和聯機分析處理業務場景的支持;

 3、高可用
  可配置數據守護系統(主備),自動快速故障恢復,具有強大的容災處理能力。

 4、跨平台
  跨平台,支持主流軟硬件體系(支持windows、Linux、中標麒麟、銀河麒麟等操作系統),支持主流標准接口。

 5、高可擴展
  支持拓展軟件包和多種工具,實現海量數據分析處理、數據共享集群(DSC)和無共享數據庫集群(MPP)等擴展功能 

與MySQL的區別

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 代替。

總結

達夢數據庫和 oracle 數據庫比較像,如果找不到和 MySQL 對應的函數,可以看下 oracle 的相關函數。

它的使用文檔可以在官網下載到。

PS:本文首發於個人公眾號 “Java 技術大雜燴”,歡迎關注。

轉載於:https://my.oschina.net/mengyuankan/blog/3054270


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM