oracle遷移mysql總結(jié)

最近我處理了一個(gè)項(xiàng)目的數(shù)據(jù)庫遷移,從oracle 11g遷移至mysql 5.7癞尚,其中的一項(xiàng)主要工作就是對(duì)代碼中的sql進(jìn)行改寫禾乘。這里針對(duì)兩個(gè)庫的不同點(diǎn)做一下總結(jié),以備后查措近。

oracle與mysql之常用函數(shù)的區(qū)別:
nvl(xx, 0) ==> coalesce(xx, 0)
說明:返回第一個(gè)非空值溶弟。

to_char(xx) ==> cast(xx as char)
說明:轉(zhuǎn)換為char類型

to_char(xx,'yyyymmdd') ==> date_format(xx, '%Y%m%d')
說明:日期格式化,date_format具體參數(shù)查詢文檔

to_char(xx,'yyyyq') ==> concat(date_format(xx, '%Y'), quarter(xx))
說明:mysql date_format無法格式化季度瞭郑,需要借助quarter函數(shù)

to_number(xx) ==> cast(xx as unsigned integer)
說明:轉(zhuǎn)換為數(shù)字類類型辜御,unsigned integer為無符號(hào)整數(shù)

sysdate ==> now()
說明:獲取當(dāng)前時(shí)間

decode(cond, val1, res1, default) ==> case when cond = val1 then res1 else default end
說明:根據(jù)cond的值返回不同結(jié)果

trunc(xx, 2) ==> convert(xx, decimal(6,2))
說明:保留2位小數(shù)

wm_concat(xx) ==> group_concat(xx)
說明:列轉(zhuǎn)行

over() ==>
說明:別想了,mysql沒有開窗函數(shù)屈张,代碼實(shí)現(xiàn)吧

oracle與mysql之語法的區(qū)別:
connect by…start with ==>
說明:別想了擒权,mysql沒有遞歸查詢袱巨,代碼實(shí)現(xiàn)吧

rownum ==> limit
說明:分頁

'a'||'b' ==> concat('a', 'b')
說明:字符串拼接

select xx from (select xx from a) ==> select xx from (select xx from a) t1
說明:from后的子查詢必須有別名

nulls last ==>
說明:mysql排序時(shí),認(rèn)為null是最小值碳抄,升序時(shí)排在最前面愉老,降序時(shí)排在末尾

group by (a, b) ==> group by a, b
說明:mysql group by 字段不能加括號(hào)

begin end; ==> begin; commit;
說明:mysql事務(wù)控制begin后需要加分號(hào)執(zhí)行,提交使用commit剖效。P.S.禁止在sql中進(jìn)行事務(wù)控制

select 1, 1 from dual
union
select 1, 1 from dual
==>
select 1 as a, 1 as b from dual
union
select 1 as a, 1 as b from dual
說明:mysql的union查詢的每個(gè)字段名必須不同

mapper.xml:
<selectKey resultType="java.lang.Integer" keyProperty="id" order="BEFORE" >
select seq_VEM_ORG.nextval from dual
</selectKey>
insert into VEM_ORG (ID, NAME)
values (#{id,jdbcType=DECIMAL}, #{name,jdbcType=VARCHAR})
==>
<selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" >
SELECT LAST_INSERT_ID()
</selectKey>
insert into vem_org (NAME)
values (#{name,jdbcType=VARCHAR})
說明:oracle使用sequence嫉入,在插入新值前查詢下一個(gè)id。mysql使用自增主鍵璧尸,插入新值時(shí)無須顯示為id賦值咒林。在插入新值后通過SELECT LAST_INSERT_ID()可獲取最新插入的值的id

mysql 5.7新特性帶來的好處:
mysql 5.7新增了計(jì)算字段generated column,可以根據(jù)一般字段動(dòng)態(tài)地生成計(jì)算字段中的值逗宁。彌補(bǔ)了mysql沒有函數(shù)索引的缺憾映九。在我們這次遷移過程中,我們把order表加上了create_day(20171207), pay_day(20171207), pay_month(201712), pay_year(2017), pay_quarter(2017Q4)五個(gè)計(jì)算字段瞎颗,并且加上了索引件甥,如果有要根據(jù)這些時(shí)間粒度進(jìn)行匯總的sql可以直接使用這些字段進(jìn)行g(shù)roup by,通過走索引增加效率哼拔。這幾個(gè)字段的值并不需要人為插入引有,在插入create_datetime和pay_datetime的時(shí)候會(huì)自動(dòng)生成對(duì)應(yīng)的值,所以對(duì)現(xiàn)有代碼是透明的倦逐。

摘錄涉及到的建表語句如下:

CREATE TABLE ORDER
……
CREATE_DAY char(8) GENERATED ALWAYS AS (date_format(CREATE_DATETIME,'%Y%m%d')) STORED COMMENT '創(chuàng)建日譬正,格式:20171207',
PAY_DAY char(8) GENERATED ALWAYS AS (date_format(PAY_DATETIME,'%Y%m%d')) STORED COMMENT '支付日,格式:20171207',
PAY_MONTH char(6) GENERATED ALWAYS AS (date_format(PAY_DATETIME,'%Y%m')) STORED COMMENT '支付月檬姥,格式:201712',
PAY_QUARTER char(6) GENERATED ALWAYS AS (concat(year(PAY_DATETIME),'Q',quarter(CREATE_DATETIME))) STORED COMMENT '支付季度曾我,格式:2017Q4',
PAY_YEAR char(4) GENERATED ALWAYS AS (year(PAY_DATETIME)) STORED COMMENT '支付年,格式:2017'
……
KEY IDX_CREATE_DAY (CREATE_DAY),
KEY IDX_PAY_DAY (PAY_DAY),
KEY IDX_PAY_MONTH (PAY_MONTH),
KEY IDX_PAY_QUARTER (PAY_QUARTER),
KEY IDX_PAY_YEAR (PAY_YEAR)
……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末健民,一起剝皮案震驚了整個(gè)濱河市抒巢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秉犹,老刑警劉巖蛉谜,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異崇堵,居然都是意外死亡型诚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門鸳劳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狰贯,“玉大人,你說我怎么就攤上這事∧合郑” “怎么了还绘?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長栖袋。 經(jīng)常有香客問我拍顷,道長,這世上最難降的妖魔是什么塘幅? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任昔案,我火速辦了婚禮,結(jié)果婚禮上电媳,老公的妹妹穿的比我還像新娘踏揣。我一直安慰自己,他們只是感情好匾乓,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布捞稿。 她就那樣靜靜地躺著,像睡著了一般拼缝。 火紅的嫁衣襯著肌膚如雪娱局。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天咧七,我揣著相機(jī)與錄音衰齐,去河邊找鬼。 笑死继阻,一個(gè)胖子當(dāng)著我的面吹牛耻涛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瘟檩,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼抹缕,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了墨辛?” 一聲冷哼從身側(cè)響起卓研,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎背蟆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哮幢,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡带膀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了橙垢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垛叨。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗽元,到底是詐尸還是另有隱情敛纲,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布剂癌,位于F島的核電站淤翔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏佩谷。R本人自食惡果不足惜旁壮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谐檀。 院中可真熱鬧抡谐,春花似錦、人聲如沸桐猬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽溃肪。三九已至免胃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乍惊,已是汗流浹背杜秸。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留润绎,地道東北人撬碟。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像莉撇,于是被迫代替她去往敵國和親呢蛤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348