我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

现象描述

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

场景一:

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

【仅当指定列列表,且 SET_IDENTITY_INSERT 为ON 时,才能对自增列赋值】

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

场景二:

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 的自增列插入例子:

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

下面是DM (或者Oracle )上,通过序列值默认值替换自增列的一个例子【注意:并不完全等价】:

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

怎么修改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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录