國產達夢資料庫與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 技術大雜燴”,歡