Sobie machnąłem taką tabele na testowym serwerze
CREATE TABLE `missions` (`uid` INT UNSIGNED NOT NULL AUTO_INCREMENT , `desc` VARCHAR(32) NOT NULL , `goal` INT(1) UNSIGNED NOT NULL , `name` VARCHAR(32) NOT NULL , PRIMARY KEY (`uid`))
Dodałem do niego dwa rekordy
INSERT INTO `missions` (`uid`, `desc`, `goal`, `name`) VALUES (NULL, 'ASDF', '1', 'ASDF');
INSERT INTO `missions` (`uid`, `desc`, `goal`, `name`) VALUES (NULL, 'DUPA', '1', 'DUPA');
Sprawdziłem, jaki jest następny Następny Autoincrement
SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'XYZ' AND TABLE_NAME = 'missions';
Zwróciło mnie "3" - więcj jest ok.
Następnie podpytałem trochę ejaja co tu się dzieje (skoro ma zabrać moją pracę, to musi się znać na robocie, a ze jest darmowy i ostatnio zrobił progress to czemu nie) i mi zasugerował albo ON DUPLICATE KEY, albo procedurę. Na pytanie jak zapobiec aktualizacji autoincrement powiedział tak
Jeśli chcesz uniknąć aktualizacji kolumny id oznaczonej jako AUTO_INCREMENT podczas użycia INSERT ... ON DUPLICATE KEY UPDATE, musisz upewnić się, że ta kolumna nie jest uwzględniona w sekcji UPDATE. W sekcji UPDATE powinny być tylko te kolumny, które chcesz zaktualizować.
I dał mi przykład. zmodyfikowałem go pod moje testowe tabele.
INSERT INTO missions (uid, `desc`, `goal`, `name`) VALUES (2, 'example', 1, 'value1') ON DUPLICATE KEY UPDATE `desc` = VALUES(`desc`), `name` = VALUES(`name`);
O dziwo, rekordy zostały zaktualizowane, a `SELECT AUTOINCREMENT` który juz wcześniej zrobiłem nadal zwrócił mi 3.
Więc dodałem następne dwa rekordy, mam pięknie ajdiki 1,2,3,4, więc coś mnie tu nie pasuje
Swoją drogą, postarał się nasz ejaj, bardzo dużo treści wygenerował, łapcie link: https://chatgpt.com/...a1-0cae3b147fca