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);