2010-07-14 11 views
7

Wir wissen, dass die ID einer beliebigen Tabelle vom Integer-Typ ist und das Auto-Inkrement in dieser Tabelle in Ordnung ist. Aber mein Problem ist, dass ich eine Kombination von String und Integer erhöhen möchte. Zum Beispiel String: ABC ist der Startcode für die eindeutige ID.Automatisches Inkrementieren der Tabellen-ID unter Verwendung einer String-Kombination in der Datenbank

Erste Id meiner Tabelle sollte Primärschlüssel sein und

dh ABC10001, ABC10002, ..... und so weiter.

Ohne Verwendung eines anderen Schlüssels als Auto-Inkrement. Bitte verwenden Sie nicht zwei Arten von eindeutigen Schlüsseln.

+0

Warum benötigt der Primärschlüssel ein Präfix? Können Sie es bei der Abfrage oder Anzeige nicht in der Anwendungsebene hinzufügen? –

+0

Das sieht dieser Frage sehr ähnlich: [Wie fügt man eine Zeichenfolge in aufsteigender ID in eine Tabelle ein?] (Http://stackoverflow.com/questions/3228460/how-to-add-a-series-of- string-in-incrementing-id-in-any-table) Ein alphanumerischer Autoinkrement-Schlüssel in MySQL ist, soweit mir bekannt ist, nicht möglich. Sie müssten Ihren eigenen Sequenzgenerator schreiben, vielleicht in einem Trigger. Aber das scheint eine verrückte Lösung zu sein! – Mike

+0

Primärschlüssel ist selbst ein eindeutiger Schlüssel, aber auch ich möchte den eindeutigen Schlüssel in Form von Zeichenfolge verfolgen. Angenommen, eine Mitarbeiter-Tabelle enthält den Datensatz eines Mitarbeiters, beginnt bei 1, aber ich möchte es von EMP-0001 aus starten, so ... Um es wieder einzigartig und lesbar zu machen. – Rubyist

Antwort

8

Sie können es nicht in einer Spalte tun, außer Sie geben einen BEFORE INSERT Trigger an, der es vorfüllen würde. auto_increment kann nur für Integer- oder Gleitkommaspalten verwendet werden.

Meiner Meinung nach, 'erfordern' die PK ein bestimmtes Format, und 'nur, es automatisch zu erhöhen' schließen sich gegenseitig aus.

das bedeutet nicht, kann man nicht 'fake' es wählt auf:

SELECT CONCAT('ABC1',LPAD(id,5,'0')) FROM tablename; 
+0

Mann Sie sparen meine Zeit. Vielen Dank – Ivan

-1

Alternativ zu Wrikken Antwort, können Sie den 'next' Wert aus der db wählen:

SELECT LPAD(max(substr(id, 5)) +1, 4, '0') FROM tablename 

Und Verwenden Sie diesen Wert dann in Ihrer nächsten Insert-Anweisung.

+0

Was wäre keine akzeptable Lösung "wie es ist", viel mehr ist erforderlich, um Race-Bedingungen zu verhindern. – Wrikken

0

Es wäre eine schlechte Idee, dies zu implementieren. Sie müssen den nächsten Wert manuell ermitteln und unterliegen dann den Rennbedingungen. Dies kann zu schwerwiegenden Datenintegritätsproblemen führen, die nicht behoben werden können, wenn Sie dies nicht genau richtig machen. Wenn Sie jedoch nur die Nummer mit dem Client-Namen anzeigen möchten, ist dies möglich, aber die Nummern werden nicht nacheinander für einen Client angezeigt. (Ich benutze Client als Beispiel, ich weiß wirklich nicht, was Ihre Präfixe bedeuten), also, wenn ABC001, DEF002, ABC003 akzeptabel ist, dann verketten Sie einfach, um die Nummer von Ihrer automatisierten realen ID zu erhalten.

Verwandte Themen