Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zwei Autoinkrement-Spalten oder Autoinkrement und derselbe Wert in einer anderen Spalte

Sie möchten also, dass eine Spalte die auto_increment-Funktion verwendet, aber eine andere Spalte in derselben Tabelle auch denselben Wert hat?

Ich kann mir keinen Grund vorstellen, warum Sie diese Funktion benötigen würden. Vielleicht könnten Sie erklären, was Sie zu erreichen versuchen, und ich kann eine andere Lösung vorschlagen?

Ein Trigger funktioniert dafür nicht. Es ist ein Henne-Ei-Problem:

  • Sie können den Wert einer Spalte in einem AFTER nicht ändern Abzug.
  • Aber der Auto-Increment-Wert ist noch nicht gesetzt, wenn ein BEFORE Trigger wird ausgeführt.

Es funktioniert auch nicht, MySQL 5.7 GENERATED zu verwenden Spalte:

CREATE TABLE MyTable (
  id INT AUTO_INCREMENT PRIMARY KEY,
  why_would_you_want_this INT GENERATED ALWAYS AS (id)
);

ERROR 3109 (HY000): Generated column 'why_would_you_want_this' 
cannot refer to auto-increment column.

Sie können dies nicht in einer einzigen SQL-Anweisung tun. Sie müssen INSERT die Zeile, und führen Sie dann sofort ein UPDATE durch um Ihre zweite Spalte auf denselben Wert zu setzen.

CREATE TABLE MyTable (
  id INT AUTO_INCREMENT PRIMARY KEY,
  why_would_you_want_this INT
);

INSERT INTO MyTable () VALUES ();

UPDATE MyTable SET why_would_you_want_this = LAST_INSERT_ID() 
WHERE id = LAST_INSERT_ID();

Alternativ können Sie den ID-Wert auch mit einem anderen Mechanismus als AUTO_INCREMENT generieren (z. B. ein inkrementierender Memcache-Schlüssel). Dann könnten Sie den neuen Wert in beide Spalten einfügen:

INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);