Chcesz, aby jedna kolumna korzystała z funkcji auto_increment, ale aby inna kolumna w tej samej tabeli również miała tę samą wartość?
Nie mogę wymyślić powodu, dla którego ta funkcja byłaby potrzebna. Może mógłbyś wyjaśnić, co chcesz osiągnąć, a ja zasugeruję inne rozwiązanie?
Spust nie zadziała w tym przypadku. To problem z kurczakiem i jajkiem:
- Nie możesz zmienić wartości żadnej kolumny w
AFTER
cyngiel. - Ale wartość automatycznego przyrostu nie jest jeszcze ustawiona, gdy
BEFORE
wyzwalacz jest wykonywany.
Nie zadziała również użycie MySQL 5.7 GENERATED
kolumna:
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.
Nie da się tego zrobić w jednej instrukcji SQL. Musisz INSERT
wiersz, a następnie natychmiast wykonaj UPDATE
aby ustawić drugą kolumnę na tę samą wartość.
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();
Możesz alternatywnie wygenerować wartość identyfikatora za pomocą innego mechanizmu niż AUTO_INCREMENT
(na przykład klucz inkrementacyjny Memcached). Następnie możesz wstawić nową wartość w obu kolumnach:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);