天天看點

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 的相關函數。

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

繼續閱讀