Значи искате да позволите на една колона да използва функцията auto_increment, но да направите друга колона в същата таблица също да има същата стойност?
Не мога да измисля причина да се нуждаете от тази функция. Може би бихте могли да обясните какво се опитвате да постигнете и аз мога да предложа различно решение?
Спусъкът няма да работи за това. Това е проблем с пиле и яйце:
- Не можете да промените стойността на нито една колона в
AFTER
задействане. - Но стойността на автоматично увеличение все още не е зададена, когато
BEFORE
тригерът се изпълнява.
Също така няма да работи да използвате MySQL 5.7 GENERATED
колона:
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.
Не можете да го направите с един SQL израз. Трябва да INSERT
реда и след това незабавно направете UPDATE
за да настроите втората колона на същата стойност.
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();
Като алтернатива можете да генерирате стойността на идентификатора, като използвате някакъв друг механизъм освен AUTO_INCREMENT
(например инкрементиращ ключ Memcached). След това можете да вмъкнете новата стойност и в двете колони:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);