您好,登錄后才能下訂單哦!
把基于Mysql 的應(yīng)用移植到達夢數(shù)據(jù)庫,我們進程碰到下面兩個問題。
場景一:
在完成了數(shù)據(jù)和應(yīng)用系統(tǒng)的移植后,應(yīng)用一啟動,看到日志框框報錯:無法給自增列賦值。
【僅當(dāng)指定列列表,且 SET_IDENTITY_INSERT 為ON 時,才能對自增列賦值】
場景二:
SQL 寫法不支持,應(yīng)用執(zhí)行遇到報錯:【無效的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 遷移到達夢數(shù)據(jù)庫,需要知道的基礎(chǔ)知識點第二篇:總結(jié)三句話。
- 達夢數(shù)據(jù)庫和Oracle 一樣,無法直接對自增列賦值,Mysql 的自增列語法,建議改成取序列值,依然可以保持default 屬性。
- 達夢數(shù)據(jù)庫對Mysql 的不符合SQL 標(biāo)準(zhǔn)的Group 和Order ,已經(jīng)提供了兼容,但是要修改數(shù)據(jù)庫配置文件COMPATIBLE_MODE 為4 。
怎么設(shè)置可以賦值的自增列屬性
我們可以用序列作為默認值,來實現(xiàn)自增列的可插入性,但是要注意,業(yè)務(wù)邏輯并不等價,需要自己考量。(注:本來給自增列賦值這個特性,是用的不太合理的)
下面是Mysql5.6 的自增列插入例子:
下面是DM (或者Oracle )上,通過序列值默認值替換自增列的一個例子【注意:并不完全等價】:
怎么修改COMPATIBLE_MODE 為4
登錄數(shù)據(jù)庫,執(zhí)行這個SQL: sp_set_para_value(2,'COMPATIBLE_MODE',4);
執(zhí)行成功后,重啟數(shù)據(jù)庫即可。
修改為4 后,關(guān)于group 和order 之前不兼容的語法報錯,就會變得正常,下面是一個簡單的例子:
-- 當(dāng)兼容模式為4 時,也就是執(zhí)行了sp_set_para_value(2,'COMPATIBLE_MODE',4); 后,并重啟了達夢數(shù)據(jù)庫服務(wù)之后
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
-- 但是當(dāng)該參數(shù)是0 的時候,兩個目標(biāo)語句,均報錯
-- 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 靜態(tài)參數(shù) 是否兼容其他數(shù)據(jù)庫模式。 0 :不兼容, 1 :兼容 SQL92 標(biāo)準(zhǔn), 2 : 部分兼容 ORACLE , 3 : 部分兼容 MS SQL SERVER , 4 : 部分兼容 MYSQL ,5 :兼容 DM6 , 6 : 部分兼容 TERADATA |
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。