达梦与MySQL部分语法的区别
前言:
达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。达梦数据库管理系统的最新版本是8.0版本,简称DM8。
DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM8产品的品质。
DM_SQL 语言符合结构化查询语言 SQL 标准,是标准 SQL 的扩充。它集数据定义、数据查询、数据操纵和数据控制于一体,是一种统一的、综合的关系数据库语言。 它功能强大,使用简单方便、容易为用户掌握。
语法区别
在达梦中需注意:
达梦中有内置参数可进行兼容其他数据库的部分使用语法
内置达梦数据库参数
COMPATIBLE_MODE=4 可兼容MySQL部分语法使用
兼容MySQL语法中查询列不在group by表达式
兼容order by排序=ASC时空值在首行显示,在末尾显示的参数
- 创建表的时候,不支持在列的后面直接加 comment 注释,使用 COMMENT ON IS 代替,如:
COMMENT ON TABLE xxx IS xxx
COMMENT ON COLUMN xxx IS xxx
-
不支持 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;
-
不支持 if。
-
不支持 “”(双引号使用),只支持’’(单引号使用)
数据类型
1.不支持 longtext、TINYBLOB、MEDIUMBLOB、LONGBLOB类型,
可用 CLOB 代替
函数概括
- 不支持 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());
- 不支持 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
- 不支持 substring_index 函数, 使用 substr / substring 代替,
语法:
substr(char[,m[,n]])
substring(char[from m[ for n]])
- 不支持 group_concat 函数,使用 wm_concat 代替,
例子:select wm_concat(id) as idstr from persion ORDER BY id ;
- 不支持 from_unixtime 函数,使用 round 代替
语法:round(date[,format])
- current_timestamp 的返回值带有时区,
例子:
select current_timestamp();
2018-12-17 14:34:18.433839 +08:00
- convert(type, value) 函数,
与 mysql 的 convert 一样,但是参数是反过来的,mysql 是 convert(value, type)
- 不支持 on duplicate key update,
使用 merge into 代替
- 不支持 ignore,达梦使用方法如下
insert ignore into
- 不支持 replace into,
使用 merge into 代替
- 不支持 auto_increment, 使用 identity 代替
如: identity(1, 1),从 1 开始,每次增 1
- MySQL中REPEAT(str,count)函数使用上有区别在达梦中需要
REPEAT(char,n) /REPEATSTR(char,n)
达梦技术社区地址 https://eco.dameng.com