Hej
Piszę aplikację w PHP z wykorzystaniem bazy postgresql.
Zastanawiam się jak powinien wyglądać proces dodania nowego użytkownika w mojej aplikacji, tak aby nie wystąpiła hipotetyczna sytuacja w której dwie osoby chciałyby stworzyć użytkownika o takiej samej nazwie w tym samym czasie. Oczywiście zakładam, że user_name jest unique. Nie chciałbym również doprowadzić do sytuacji w której polecenie insert spowoduje wyrzucenie wyjątku, bo ktoś mnie ubiegł.
- BEGIN TRANSACTION;
- SELECT COUNT(user_name) FROM users WHERE user_name = 'user_name_from_form';
- Sprawdzam w skrypcie PHP czy COUNT(user_name) == 0 jeżeli tak to robię inserta.
- COMMIT;
Zastanawiam się czy wrzucenie tego w transakcje zapewni że INSERT nigdy się nie wywali.
Baza danych pracuje w standardowym trybie read commited.
Czy aby zapobiec takiej sytuacji muszę zablokować całą tabelę poleceniem SELECT * FROM users FOR UPDATE?
Dzięki za pomoc :D i Wasze doświadczenie.