Autoinkrementacja MySQL (MariaDB)

0

Mam pytanie odnośnie rozwiązania problemu z autoinkrementacją klucza głównego, tzn. jeśli zostanie wykonany insert i się nie powiedzie z jakiegoś powodu to i tak zwiększy się wartość klucza głównego. Czy istnieje jakiś sposób żeby się przed tym zabezpieczyć lub rozwiązać to w inny sposób? Potrzebuję wiersza który będzie się automatycznie zwiększał wraz z dodaniem nowego rekordu do bazy. W Postgresie można manipulować numerami sekwencji za pomocą triggerów i funkcji, np tworząc sobie nr sekwencji , pobierając do funkcji i wykonując update na wartości klucza głównego. Niestety nie udało mi się wygooglać czy takie sekwencje można robić na bazie MariaDB. Za wszelkie podpowiedzi i pomysły z góry dziękuję.

3

Piszę to co jakiś czas i widzę, że co jakiś czas ktoś próbuje coś takiego zrobić. A więc

AUTOINCREMENT NIE SŁUŻY do numeracji wierszy, tworzeniu kolumn typu lp czy nadawaniu numerów dokumentom. AUTOINCREMENT ma zapewnić NIEPOWTARZALNE wartości w obrębie tabeli! Konie i kropka. Naturalnym jest, że autoinc ma dziury w numeracji. Nienaturalnym jest próba "załatania" tych dziur. https://mariadb.com/kb/en/mariadb/auto_increment/ , w szczególności rozdział Missing values i jeszcze to https://mariadb.com/kb/en/mariadb/auto_increment-faq/#how-do-i-renumber-rows-once-ive-deleted-some-in-the-middle

Skutecznie możesz to zrobić opakowywując dodawanie rekordu w stored proc i dodatkową tabelę z aktualnym numerem dla danej tabeli, która będzie robiła coś takiego

start transakcji
select aktualny_numer for update
aktualny_numer = aktualny_numer + 1
wstawienie rekordu
update tabeli z numerami
commit

z tym, że prawdopodobieństwo, że wstawianie rekordów będzie ci się zakleszczać. Tym większe im więcej insertów w jednostce czasu masz

1 użytkowników online, w tym zalogowanych: 0, gości: 1