mysql数据迁移到teradata_Mysql迁移到达梦数据库-Mysql到DM的应用迁移-给自增列赋值-GroupBy语法不兼容...

现象描述

把基于Mysql

的应用移植到达梦数据库,我们进程碰到下面两个问题。

场景一:

在完成了数据和应用系统的移植后,应用一启动,看到日志框框报错:无法给自增列赋值。

【仅当指定列列表,且 SET_IDENTITY_INSERT

为ON

时,才能对自增列赋值】

f91458a055a0d88e1558e11e5f880324.png

场景二:

SQL

写法不支持,应用执行遇到报错:【无效的ORDER BY

字句】【不是GROUP BY

表达式】

select v1 from test group by v1 order by v2;--err

无效的ORDER BY

子句

select v1,v2 from test group by v1 order by v2; --err

不是 GROUP BY

表达式

处理方法

这是Mysql

迁移到达梦数据库,需要知道的基础知识点第二篇:总结三句话。

-

达梦数据库和Oracle

一样,无法直接对自增列赋值,Mysql

的自增列语法,建议改成取序列值,依然可以保持default

属性。

-

达梦数据库对Mysql

的不符合SQL

标准的Group

和Order

,已经提供了兼容,但是要修改数据库配置文件COMPATIBLE_MODE

为4

怎么设置可以赋值的自增列属性

我们可以用序列作为默认值,来实现自增列的可插入性,但是要注意,业务逻辑并不等价,需要自己考量。(注:本来给自增列赋值这个特性,是用的不太合理的)

下面是Mysql5.6

的自增列插入例子:

a031bfdd9d136789c4df76d3f2293063.png

下面是DM

(或者Oracle

)上,通过序列值默认值替换自增列的一个例子【注意:并不完全等价】:

38417afef7f46882f66f20338a968702.png

怎么修改COMPATIBLE_MODE

为4

登录数据库,执行这个SQL:  sp_set_para_value(2,'COMPATIBLE_MODE',4);

执行成功后,重启数据库即可。

修改为4

后,关于group

和order

之前不兼容的语法报错,就会变得正常,下面是一个简单的例子:

--

当兼容模式为4

时,也就是执行了sp_set_para_value(2,'COMPATIBLE_MODE',4);

后,并重启了达梦数据库服务之后

drop table  if exists test;

create table test(v1 int,v2 int,v3 int);

insert into test select level,level,level from dual connect by level<=100;

select v1 from test group by v1 order by v2;--ok

select v1,v2 from test group by v1 order by v2; --ok

--

但是当该参数是0

的时候,两个目标语句,均报错

-- modify COMPATIBLE_MODE 0

select v1 from test group by v1 order by v2;--err

无效的ORDER BY

子句

select v1,v2 from test group by v1 order by v2; --err

不是 GROUP BY

表达式

COMPATIBLE_MODE

默认值为 0

静态参数

是否兼容其他数据库模式。 0

:不兼容, 1

:兼容 SQL92

标准, 2

部分兼容 ORACLE

, 3

部分兼容 MS SQL SERVER

, 4

部分兼容 MYSQL

,5

:兼容 DM6

, 6

部分兼容 TERADATA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值