mysql数据迁移到teradata_Mysql迁移到达梦数据库-Mysql到DM的应用迁移-给自增列赋值-GroupBy语法不兼容...
現象描述
把基于Mysql
的應用移植到達夢數據庫,我們進程碰到下面兩個問題。
場景一:
在完成了數據和應用系統的移植后,應用一啟動,看到日志框框報錯:無法給自增列賦值。
【僅當指定列列表,且 SET_IDENTITY_INSERT
為ON
時,才能對自增列賦值】
場景二:
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
的自增列插入例子:
下面是DM
(或者Oracle
)上,通過序列值默認值替換自增列的一個例子【注意:并不完全等價】:
怎么修改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
總結
以上是生活随笔為你收集整理的mysql数据迁移到teradata_Mysql迁移到达梦数据库-Mysql到DM的应用迁移-给自增列赋值-GroupBy语法不兼容...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 使用不同引擎_mysql 不
- 下一篇: mysql聚集索引和二级索引_mysql