generowanie nowego ID w firebird

0

Jak radzicie sobie z generowaniem nowego, unikalnego ID w tabeli firebird? Do tej pory korzystałem z generatora zwiększanego przez trigger. Problem pojawia się w momencie kiedy muszę znać ID przed dodaniem rekordu do tabeli. Do głowy przychodzi mi tylko to żeby pobrać największe ID z tabeli i zwiększyć o jeden, ale przecież w takim przypadku kilka osób może zrobić to samo w jednym czasie i program się sypnie. Jak można sobie z tym poradzić?

0

a jaki problem pobrać (i zwiększyć) wartość z generatora wtedy kiedy potrzebujesz?

0

Problem jest następujący:
Załóżmy, że w tym samy czasie 2 osoby dodają dane do bazy danych. Tak więc w tym samym czasie potrzebuję wygenerować nowe ID, jeśli zrobią to jednocześnie to dostaną takie same ID. Tylko jednemu uda się zapisać dane, a drugiemu już nie bo ID będzie zajęte.

0

jeśli masz na myśli pobranie przez gen_id(nazwa_generatora, 1) to nie ma takiej możliwości, żeby pobrane wartości się powtórzyły (pomijam przekręcenie się generatora)

0

A załóżmy taką sytuację:
Użytkownik A, dodaje rekord do bazy. Zdążył wygenerować za pomocą generatora nowe ID i wysiadł mu prąd ;) Nie dodał rekordu. Transakcja nie została zatwierdzona.
Sekundę po rozpoczęciu przez użytkownika A dodawania, także użytkownik B zaczął dodawać rekord. Dostał ID i 1 większe niż użytkownik B. Po zakończeniu całej "akcji" w generatorze zostanie "dziura" po użytkowniku A. Co firebird z nią zrobi? Wykorzysta przy następnej próbie generowania ID, czy tak zostawi?
Co do przekręcenia generatora... Do jakiej wartości może dojść generator żeby się przekręcił? :)

0

zostanie dizura (generatory nie są obejmowane transakcją - jak go zwiększysz to już każdy następny odczyt tą zmianę widzi) - generator to w żadnym wypadku NIE jest narzędzie do numerowania dokumentów BEZ dziur - generator to coś, co zapewnia Ci unikalność pobieranej wartości.

Generatory w FB są 64bitowe - mają zakres od -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807

do poduszki http://www.firebirdsql.org/manual/generatorguide.html

0

To mi wystarczy. Dzięki za pomoc!!

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