2013-04-10 23 views
1

如何在MySQL中創建唯一的序列號?如何在mysql中創建唯一序列

這種情況是這樣的,即在table1數據表示"A"在第1行中可能會出現多次。

因此,當它第一次出現時,一個序列號將被分配給它,並且每當它再次出現時相同的將被分配給它。

但是數據"B"(說輸入的下一個數據)將有下一個序列號。

所以我不能在這種情況下使用auto_increment。說,我必須檢查條件c1和c2這個獨特的序列號。

尋找一個存儲過程來實現這一點。希望我清楚自己的問題。

+1

在這樣的情況下,我做了兩個表格。一個用於描述類別(單個A,B等),另一個用於實例(根據需要可以有多個A,B)。 auto_sequence當然會進入前者,這些表格通過序列號或類別名稱連接起來。 – igelkott 2013-04-10 20:17:36

+0

@igelkott ...這種想法...但它導致數據重新定位..並且當我想要訪問數據時也有問題...根據計數哪個表引用(導致更多複雜性)..所以與這種情況下,我想分開 – tamal 2013-04-10 20:31:59

+0

通常是爲了避免冗餘。當然,我不知道你的數據,所以也許我誤解了,但在維基百科(例如)檢查「數據庫規範化」,看看它是否適用。 – igelkott 2013-04-10 22:27:37

回答

4
CREATE TABLE `seq` (
    `n` BIGINT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`n`) 
); 

DELIMITER $$ 

DROP PROCEDURE IF EXISTS getseq$$ 

CREATE FUNCTION getseq() RETURN BIGINT 
BEGIN 
DECLARE r BIGINT; 
    INSERT INTO `seq` (`n`) VALUES (NULL); 
    SELECT MAX(`n`) INTO r FROM `seq`; 
    COMMIT; 
    RETURN r; 
END$$ 

DELIMITER ; 

併發事務應予以修訂,但我認爲這是可行的,因爲自動遞增的確實標記跨事務共享,而不是從你進入表進行插入產生的ID。

+1

@sebas ...謝謝。工作正常 – tamal 2013-04-11 14:14:37

+0

很高興幫助!我將接受你的贊成和答覆作爲獎勵 – Sebas 2013-04-11 16:16:48