Mysql

Oracle 序列到 MySQL

  • August 13, 2015

從 Oracle 遷移到 MySQL,我們發現了許多不兼容問題。我們為其中的許多提供了一些解決方法,但我們仍然有一個:序列

我們有這張桌子

CREATE TABLE "HEADS"(   
   "HEAD_ID" NUMBER NOT NULL ENABLE,
   "COLUMN" NUMBER NOT NULL ENABLE,
   "ROW" NUMBER NOT NULL ENABLE,
   "VALUE" VARCHAR2(200),
   "CREATED_BY" VARCHAR2(40),
   "CREATED_DATE" DATE,
   "MODIFIED_BY" VARCHAR2(40),
   "MODIFIED_DATE" DATE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
  )

注意 HEAD_ID 不是主鍵,因此它不是唯一的。但是,在儲存過程中,我們有以下程式碼:

  declare var_id,sequences number;
  SELECT CRM_SEQ_GIS_FCEHEAD.NEXTVAL INTO sequences FROM DUAL;
  INSERT INTO HEADS (
           HEAD_ID,
           COLUMN,
           ROW,
           VALUE,
           CREATED_BY,
           CREATED_DATE
           ) ( SELECT
              sequences,
              COLUMN,
              ROW,
              VALUE,
              CREATED_BY,
              SYSDATE
              FROM HEADS
              WHERE HEAD_ID = var_id );

作為 var_id 任何給定的數值。

它使用一個序列來獲取 HEAD_ID 的下一個值。在 MySQL 中執行此操作的方法是什麼?

我們知道 MySQL 中等價的序列是 auto_increment 列。但是對於要成為 auto_increment 的列,它應該是主鍵並且是唯一的。oracle 中的列不是 PK 也不是 UNIQUE。它具有 HEAD_ID 的重複值。

您可以編寫自己的使用者定義函式來生成序列號。或者,您可以創建一個帶有單列的單獨表AUTO_INCREMENT來生成新 ID:在儲存過程中,您將在該表中插入一行,LAST_INSERT_ID()用於獲取生成的值,然後刪除插入的行。

引用自:https://dba.stackexchange.com/questions/110854