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 ![:krecka_dostal:](https://amxx.pl/public/style_emoticons/default/krecka_dostal.gif)
Swoją drogą, postarał się nasz ejaj, bardzo dużo treści wygenerował, łapcie link: https://chatgpt.com/...a1-0cae3b147fca