2010-08-11 5 views
7

Ich verwende einen VARCHAR als Primärschlüssel. Ich mag Autoinkrement es (Basis 62, Groß-/Kleinschreibung, Zahlen), jedoch der folgende Code fehlschlägt (aus offensichtlichen Gründen):MySQL - Verwendung von VARCHAR als AUTO INCREMENT Primärschlüssel

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; 

aber dies funktioniert:

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; 

Was ist der beste Weg, um die Inkrementierung von 'ID' selbst zu verfolgen? (Da auto_increment nicht funktioniert). Muss ich eine andere Tabelle erstellen, die die aktuelle Iteration der ID enthält? Oder gibt es einen besseren Weg, dies zu tun?

EDIT: Ich möchte klarstellen, dass ich weiß, dass die Verwendung von INT ist ein Auto_increment Primärschlüssel ist der logische Weg zu gehen. Diese Frage ist eine Antwort auf einige frühere Dialoge, die ich gesehen habe. Dank

+0

Offtopic: Sind Sie sicher, dass Sie MyISAM verwenden möchten? Für eine relationale Datenbank benötigen Sie innoDB in MySQL, um Fremdschlüssel zu erstellen. –

+1

Nein, ich bin mir überhaupt nicht sicher. Ich benutze MySQL schon eine ganze Weile, aber mir wurde gesagt, dass MyISAM die meiste Zeit benutzt werden sollte und ich ging einfach damit: P –

Antwort

5

Sie haben ein INT-Feld es
und übersetzen zu verwenden, was auch immer Format möchten Sie wählen Zeit

+0

Das ist in meinem Fall nicht möglich, da die ID als Teil weitergegeben wird der URL. –

+0

Ich bin auch speziell auf der Suche nach dem besten Weg, um die ID manuell zu erhöhen. Ich weiß, dass Bit.ly und möglicherweise Tiny URL etwas sehr ähnliches tun. –

+0

@Kenny lol alles ist möglich für den Programmierer :) konvertieren Sie es vor der Abfrage übergeben. keine große Sache. Diese URL-Verkürzer tun es wie gesagt. –

0

Beispiel einer Lösung für Ihr Problem:

eine Datei mit einer eindeutigen Nummer erstellen und dann mit einer Funktion erhöhen.

Der Dateiname kann das Präfix sein und der binäre Inhalt der Datei ist eine Zahl.

, wenn Sie eine neue ID an der reg invoque die Funktion

Beispiel

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

wo „A_PREFIX-“ ist der Dateiname weichen Sie die ID für das Feld zu erzeugen, verwenden.

Verwandte Themen