2010-08-11 4 views
7

Sto utilizzando un VARCHAR come chiave primaria. Voglio incremento automatico esso (base 62, inferiore/maiuscole, numeri), tuttavia, il codice qui sotto non riesce (per ovvie ragioni):MySQL: come utilizzare VARCHAR come chiave primaria 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; 

tuttavia, questo funziona:

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; 

Cosa è il modo migliore per tenere traccia dell'avanzamento di "id" da solo? (Poiché auto_increment non funziona). Devo creare un'altra tabella che contenga l'iterazione corrente dell'ID? O c'è un modo migliore per farlo?

MODIFICA: Desidero chiarire che so che l'utilizzo di INT è una chiave primaria autoincremento è la via logica da percorrere. Questa domanda è in risposta ad alcuni dialoghi precedenti che ho visto. Grazie

+0

Offtopic: Sei sicuro di voler utilizzare MyISAM? Per un database relazionale, è necessario innoDB in MySQL per creare chiavi esterne. –

+1

No, non ne sono affatto sicuro. Ho usato MySQL per un po 'di tempo, tuttavia, mi è stato detto che MyISAM dovrebbe essere usato la maggior parte del tempo e sono andato con quello: P –

risposta

5

è necessario utilizzare un campo INT
e tradurlo in qualsiasi formato che si desidera a selezionare Ora

+0

Questo non è possibile nel mio caso in quanto l'ID viene passato in giro come parte dell'URL. –

+0

Inoltre, sto specificatamente cercando il modo migliore per aumentare manualmente l'ID. Conosco Bit.ly e forse l'URL di Tiny fa qualcosa di molto simile. –

+0

@Kenny lol tutto è possibile per il programmatore :) convertirlo prima di passare alla query. non un grande affare. Questi abbreviazioni di url lo fanno come ho detto. –

0

esempio di una soluzione al vostro problema:

creare un file con un numero univoco e quindi incrementare con una funzione.

il nome file può essere il prefisso e il contenuto binario del file rappresenta un numero.

quando avete bisogno di un nuovo ID al reg invoque la funzione

Esempio

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

dove "A_PREFIX-" è il nome del file wich si utilizza per generare l'ID per il campo.