2 Stimmen

Gibt es eine Möglichkeit, auto_increment für eine zweite Spalte in MySQL zu emulieren?

Ich denke, das ist klarer als meine letzte Version:

Ich habe eine Tabelle, die bereits ein PK-Feld hat, das mit 1 beginnt und bereits auf automatische Erhöhung eingestellt ist. Ich möchte ein neues Feld hinzufügen, das nicht mit 1 beginnt, sondern mit einer beliebigen Zahl (z. B. Rechnungsnummer) und ebenfalls automatisch erhöht wird. Anscheinend kann man nur eine Spalte pro Tabelle haben, die dieses Attribut hat. Gibt es eine Möglichkeit, MySQL in einer Abfrageoperation zu zwingen, den letzten (oder maximalen) Wert dieses Feldes um 1 als Wert für diese Spalte in der neuen Zeile zu erhöhen?

Update: Ich habe einfach die id-Spalte als Basis für den neuen Wert verwendet, den ich brauchte, und die nicht benötigte Spalte gelöscht. Meine Frage wurde eigentlich nie beantwortet, aber ich habe das als Hinweis genommen, den Ansatz zu überdenken, also danke!

1voto

davek Punkte 21771

Das ist nicht wirklich eine Antwort auf Ihre spezielle Frage (da Sie fragen, wie man Ihr Ziel mit einer einzigen SQL-Anweisung erreichen kann), aber Sie könnten einen Trigger für die Tabelle definieren, der die zweite Spalte auffüllt, indem er eine sequenzgenerierende Funktion aufruft. Dadurch wird sichergestellt, dass der Wert dieser Spalte wirklich eindeutig ist (was nicht der Fall ist, wenn Sie max(value) oder ähnliches verwenden), da die Aufrufe der Funktion in eine Warteschlange gestellt werden.

Oder wenn Sie wirklich zwei Spalten benötigen, die denselben Wert anzeigen, erstellen Sie eine Ansicht, die zweimal auf dieselbe Spalte mit unterschiedlichen Aliasen verweist.

1voto

maček Punkte 72991

Es scheint albern zu sein, zwei Spalten mit demselben Wert zu haben, aber so ist es.

create trigger foo_before_insert 
  before insert on my_table
  for each row set
  new.second_auto_column = first_auto_column
;

0voto

Davy Punkte 1043

Wenn es in der gleichen Tabelle ist, können Sie die Spalte, die Sie wollen, auf Ihre eindeutige Spalte setzen, aber sie würden den gleichen Wert haben, was sinnlos erscheint> Sind Sie sicher, dass Sie dies brauchen?

0voto

dkretz Punkte 36862

Diese Frage wäre leichter zu beantworten, wenn Sie uns sagen könnten, wofür das Feld gedacht ist. Normalerweise gibt es einen besseren Weg, um dieselbe Geschäftsanforderung zu erfüllen. Was auch immer Sie tun würden, wäre ein Hack, und Sie würden viel Zeit damit verbringen, sich mit den unbeabsichtigten Folgen zu befassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X