Dus je wilt één kolom de functie auto_increment laten gebruiken, maar een andere kolom in dezelfde tabel ook dezelfde waarde laten hebben?
Ik kan geen reden bedenken waarom je deze functie nodig zou hebben. Misschien kun je uitleggen wat je probeert te bereiken, en kan ik een andere oplossing voorstellen?
Hiervoor werkt een trigger niet. Het is een kip-en-ei-probleem:
- U kunt de waarde van een kolom niet wijzigen in een
AFTER
trekker. - Maar de waarde voor automatisch verhogen is nog niet ingesteld wanneer een
BEFORE
trigger wordt uitgevoerd.
Het zal ook niet werken om een MySQL 5.7 GENERATED
te gebruiken kolom:
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.
Je kunt het niet in een enkele SQL-instructie doen. Je moet INSERT
de rij, en doe dan onmiddellijk een UPDATE
om uw tweede kolom op dezelfde waarde in te stellen.
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();
U kunt de ID-waarde ook genereren met een ander mechanisme dan AUTO_INCREMENT
(bijvoorbeeld een Memcached oplopende sleutel). Dan zou je de nieuwe waarde in beide kolommen kunnen invoegen:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);