Oracle轉(zhuǎn)Mysql總結(jié)

參考文檔

從Oracle轉(zhuǎn)到Mysql前需了解的50件事

MySQL與Oracle 差異比較之一 數(shù)據(jù)類型

MySQL與Oracle 差異比較之二 基本語法

MySQL與Oracle 差異比較之三 函數(shù)

MySQL與Oracle 差異比較之四 條件循環(huán)語句

MySQL與Oracle 差異比較之五存儲(chǔ)過程&Function

MySQL與Oracle 差異比較之六觸發(fā)器

MySQL與Oracle 差異比較之七用戶權(quán)限

MySQL與Oracle 差異比較之七其它

Oracle中的decode與mysql中的if

  • Oracle中 decode(Emergency,1,'緊急','普通')

  • mysql中

    select a.title,if(a.Emergency=1,'緊急','普通')emergency from already_sign a

    Select title,case Emergency when 1 then '緊急' else '普通' End as emergency from already_sign

字符串拼接

oracle:Oralce只支持兩個(gè)字符串的拼接,若想拼接多個(gè)字符串可以嵌套使用concat, CONCAT(str1,str2)

Mysql支持多個(gè)字符串拼接: CONCAT(str1,str2,…)

日期處理

mysql : DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')

oracle: TO_CHAR(SYSDATE,'YYYY-MM-DD hh24:mi:ss')

nvl函數(shù)

mysql: ifnull(A.USER_KPI,0)

oracle: NVL(A.USER_KPI,0)

to_number

oracle的to_number

mysql不需要

字符串格式化

mysql:CONCAT
oracle:TO_CHAR

關(guān)鍵字、保留字

涉及到關(guān)鍵字,mysql關(guān)鍵字需要加上``號(hào)

mysql: PARA_VALUE as KEY
oracle : PARA_VALUE as KEY

rownum

oracle自定義sql中如果使用了rownum=1
mysql中可以寫成limit 1

大小寫問題

在oracle中一般情況下不區(qū)分大小寫

但在MySQL中,所使用操作系統(tǒng)的大小寫敏感性決定了數(shù)據(jù)庫名和表名的大小寫敏感性。

解決的辦法是把mysql的數(shù)據(jù)庫名和oracle的大小寫保持一致,
表名與應(yīng)用程序中sql字符串中的表名保持一致,

如果應(yīng)用程序中字段名用了雙引號(hào),那請(qǐng)把sql中的字段名大小寫與雙引號(hào)里的字符保持一致。

如果你的應(yīng)用程序所引用的表名、字段沒有統(tǒng)一大小寫,那麻煩就大了。

字符串截取

  • mysql

截取log_data從逗號(hào)開始之后的字符:
SELECT substring_index(log_data,',',-1)
FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';

截取log_data從逗號(hào)開始之前的字符:
SELECT substring_index(log_data,',',1)
FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';

  • oracle

截取log_data從逗號(hào)開始之后的字符:
SELECT SUBSTR(log_data, INSTR(log_data, ',', 1, 1) +1) AS app_ver_id
FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';

截取log_data從逗號(hào)開始之前的字符:
SELECT SUBSTR(log_data,0,INSTR(log_data, ',', 1, 1) - 1) AS app_ver_id

FROM nbts.log where event_id='150002' and log_id ='a2a421734c7e47dd8a8b';

主鍵生成策略

創(chuàng)建一個(gè)專門記錄序列的表sequence,記錄有當(dāng)前序列號(hào),序列的間隔如+1

創(chuàng)建記錄當(dāng)前序列的表

DROP TABLE
IF EXISTS sequence;

CREATE TABLE sequence (
    NAME VARCHAR (50) NOT NULL,
    current_value INT NOT NULL,
    increment INT NOT NULL DEFAULT 1,
    PRIMARY KEY (NAME)
) ENGINE = INNODB;

INSERT INTO sequence VALUES ('MovieSeq',3,5);

創(chuàng)建一個(gè)獲取當(dāng)前序列的function


DROP FUNCTION IF EXISTS currval;
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
CONTAINS SQL
BEGIN
  DECLARE value INTEGER;
  SET value = 0;
  SELECT current_value INTO value
  FROM sequence
  WHERE name = seq_name;
  RETURN value;
END;

獲取下一個(gè)數(shù)值..先在sequence里面調(diào)用update當(dāng)前最大數(shù)值+1然后再調(diào)用currval獲得當(dāng)前數(shù)值

DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS INTEGER
CONTAINS SQL
BEGIN
   UPDATE sequence
   SET          current_value = current_value + increment
   WHERE name = seq_name;
   RETURN currval(seq_name);
END$
DELIMITER ;
DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
RETURNS INTEGER
CONTAINS SQL
BEGIN
   UPDATE sequence
   SET          current_value = value
   WHERE name = seq_name;
   RETURN currval(seq_name);
END$
DELIMITER ;

如果以上語句執(zhí)行有異常請(qǐng)先執(zhí)行這句:set global logbintrustfunctioncreators=TRUE;

插入時(shí)的主鍵生成:

mysql: SELECT MMC.NEXTVAL('SEQ_MD_ENTITY_ATTRIBUTE')
oracle: select MMC.SEQ_MD_ENTITY_ATTRIBUTE.nextval from dual

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二進(jìn)制和源碼安裝 1.1BLOG文檔結(jié)構(gòu)圖 ...
    小麥苗DB寶閱讀 10,878評(píng)論 0 31
  • 背景: 閱讀新聞 12C CDB模式下RMAN備份與恢復(fù) [日期:2016-11-29] 來源:Linux社區(qū) 作...
    陽屯okyepd閱讀 3,838評(píng)論 0 7
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,687評(píng)論 18 399
  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個(gè)數(shù)據(jù)庫具有一個(gè)或多個(gè)不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,143評(píng)論 0 19
  • 沒有花香,沒有樹高,我是一棵無人知道的小草!這或許是我以前觀自己的畫面感。記得以前做催眠時(shí),我基本進(jìn)入不了...
    芷凡bonita閱讀 372評(píng)論 0 2

友情鏈接更多精彩內(nèi)容