如何在MySQL中創建唯一的序列號?如何在mysql中創建唯一序列
這種情況是這樣的,即在table1
數據表示"A"
在第1行中可能會出現多次。
因此,當它第一次出現時,一個序列號將被分配給它,並且每當它再次出現時相同的將被分配給它。
但是數據"B"
(說輸入的下一個數據)將有下一個序列號。
所以我不能在這種情況下使用auto_increment。說,我必須檢查條件c1和c2這個獨特的序列號。
尋找一個存儲過程來實現這一點。希望我清楚自己的問題。
如何在MySQL中創建唯一的序列號?如何在mysql中創建唯一序列
這種情況是這樣的,即在table1
數據表示"A"
在第1行中可能會出現多次。
因此,當它第一次出現時,一個序列號將被分配給它,並且每當它再次出現時相同的將被分配給它。
但是數據"B"
(說輸入的下一個數據)將有下一個序列號。
所以我不能在這種情況下使用auto_increment。說,我必須檢查條件c1和c2這個獨特的序列號。
尋找一個存儲過程來實現這一點。希望我清楚自己的問題。
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。
在這樣的情況下,我做了兩個表格。一個用於描述類別(單個A,B等),另一個用於實例(根據需要可以有多個A,B)。 auto_sequence當然會進入前者,這些表格通過序列號或類別名稱連接起來。 – igelkott 2013-04-10 20:17:36
@igelkott ...這種想法...但它導致數據重新定位..並且當我想要訪問數據時也有問題...根據計數哪個表引用(導致更多複雜性)..所以與這種情況下,我想分開 – tamal 2013-04-10 20:31:59
通常是爲了避免冗餘。當然,我不知道你的數據,所以也許我誤解了,但在維基百科(例如)檢查「數據庫規範化」,看看它是否適用。 – igelkott 2013-04-10 22:27:37