[dql & sql] Zwracanie id lub tworzenie obiektu i zwracan

0

Witam czy jest możliwość stworzenia w dql (/sql-u) zapytania sprawdzającego czy istnieje pole z określoną wartością (możemy założyć że pole to jest kluczem kandydującym) i zwrócenia jego id. Lub jeśli pole nie istnieje utworzenia go i zwrócenia jego id??

0
ktosi napisał(a)

Witam czy jest możliwość stworzenia w dql (/sql-u) zapytania sprawdzającego czy istnieje pole z określoną wartością (możemy założyć że pole to jest kluczem kandydującym) i zwrócenia jego id. Lub jeśli pole nie istnieje utworzenia go i zwrócenia jego id??

Nie wiem czy to jest dobre podejście. Może zajść sytuacja, że z odczytu wyniknie że takiego klucza głównego nie ma, ale zanim go utworzysz, ktoś inny utworzy go jednocześnie w innej transakcji. Ja stosuję inne podejście. W miarę możliwości korzystam z unikalnych wartości pobieranych przez generator z bazy danych a jeśli nie można tego stosować, to po prostu obsługuję błąd pojawienia się drugiego rekordu z takim samym kluczem. Jeśli pole ma mieć unikalną wartość, to jest kluczem głównym albo można na nim zrobić indeks typu unique. Wtedy ponowne wstawienie tej samej wartości da wyjątek bazy danych z komunikatem "key violation", który obsłużysz w aplikacji przez try...except.

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