2010-08-11 59 views
7

我正在使用VARCHAR作爲我的主鍵。我想自動遞增它(基地62,小寫/大寫,數字),但是,下面的代碼失敗(原因很明顯):MySQL - 如何使用VARCHAR作爲AUTO INCREMENT主鍵

CREATE TABLE IF NOT EXISTS `campaign` (
    `account_id` BIGINT(20) NOT NULL, 
    `type` SMALLINT(5) NOT NULL, 
    `id` VARCHAR(16) NOT NULL AUTO_INCREMENT PRIMARY KEY 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

然而,這個工程:

CREATE TABLE IF NOT EXISTS `campaign` (
    `account_id` BIGINT(20) NOT NULL, 
    `type` SMALLINT(5) NOT NULL, 
    `id` VARCHAR(16) NOT NULL PRIMARY KEY 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

什麼跟蹤自己的id增加的最好方法是什麼? (由於auto_increment不起作用)。我是否需要製作另一張包含當前ID迭代的表格?還是有更好的方法來做到這一點?

編輯:我想澄清一點,我知道使用INT是一個auto_increment主鍵是合乎邏輯的路要走。這個問題是爲了迴應我之前看到的一些對話。由於

+0

Offtopic:你確定要使用MyISAM嗎?對於關係數據庫,您需要在MySQL中使用innoDB來創建外鍵。 – 2010-08-11 06:36:56

+1

不,我不確定。我一直在使用MySQL已經有一段時間了,但是,有人告訴我應該在大部分時間使用MyISAM,並且我只是用它來做:P – 2010-08-11 12:20:31

回答

5

,你必須使用一個INT領域
和選擇時間

+0

這在我的情況下是不可能的,因爲ID是作爲部分傳遞的的網址。 – 2010-08-11 06:05:33

+0

此外,我特別尋找手動增加ID的最佳方法。我知道Bit.ly和可能的Tiny URL做的事情非常相似。 – 2010-08-11 06:06:12

+0

@Kenny大聲笑一切都是可能的程序員:)轉換之前傳遞給查詢。沒什麼大不了的。正如我所說,這些網址縮寫符會這樣做。 – 2010-08-11 06:10:38

0

例如它翻譯成你想要的任何格式的解決你的問題:

創建一個文件,一個唯一的編號,然後增加一個功能。

文件名可以是前綴,文件二進制內容代表一個數字。

當你需要一個新的ID的REG invoque功能

String generateID(string A_PREFIX){ 
     int id_value = parsetoInt(readFile(A_PREFIX).getLine()) 
     int return_id_value = id_value++ 
     return return_id_value 
    } 

其中「A_PREFIX-」是文件名至極用來生成該字段的ID。