Mysql
Oracle 序列到 MySQL
從 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()
用於獲取生成的值,然後刪除插入的行。