首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MySQL 遷移 Oracle 八大關鍵差異與應對策略

     編輯:關於SqlServer

遷移背景

專案早期用 MySQL,隨用戶增長出現效能瓶頸,決定遷移至 Oracle。應用程式需同步修改,以下為八大關鍵差異處理:

1. 自動遞增欄位

MySQL: AUTO_INCREMENT。Oracle: 建立 Sequence,INSERT 時用 SEQ.NEXTVAL。

CREATE SEQUENCE seq_table INCREMENT BY 1 START WITH 1 MAXVALUE 999999 NOCACHE;
INSERT INTO table (id, ...) VALUES (seq_table.NEXTVAL, ...);

2. 字串引號

MySQL 支援雙引號,Oracle 僅單引號。插入/更新前必須將單引號轉義為雙單引號。

3. 分頁查詢

MySQL: LIMIT offset, count。Oracle 需用 ROWNUM 子查詢:

-- 寫法一
SELECT * FROM (
    SELECT ROWNUM rn, t.* FROM (
        SELECT * FROM table WHERE cond ORDER BY col
    ) t WHERE ROWNUM <= 100
) WHERE rn > 80;

-- 寫法二 (效能較佳)
SELECT * FROM (
    SELECT ROWNUM rn, c.* FROM (
        SELECT cols FROM table WHERE cond ORDER BY col
    ) c
) WHERE rn > 80 AND rn <= 100;

4. 長字串 (CLOB)

Oracle INSERT/UPDATE 單字節上限 4000。超過需用 CLOB + DBMS_LOB 套件。必須先做非空與長度檢查。

5. 日期型別

MySQL 有 DATE/TIME,Oracle 僅 DATE(含時分秒)。當前時間 SYSDATE。轉換函數 TO_DATE/TO_CHAR。日期運算:MySQL DATE_SUB(NOW(), INTERVAL 7 DAY),Oracle SYSDATE - 7。

6. 空值處理

MySQL NOT NULL 欄位可存空字串,Oracle NOT NULL 禁止 NULL。匯入前需將空值轉為空格字串。

7. 模糊查詢效能

LIKE 無法使用索引。改用 INSTR(col, 'str') > 0 可利用索引加速。

8. 游標與結果集釋放

程序/函數結束時務必釋放結果集與游標,避免資源洩漏。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved