Мне нужно обновить / исправить систему, написанную аналогично тому, как вы пишете код, и я должен сказать вам, что я действительно ненавидел оригинального программиста.
Подумайте о том, что вы делаетев течение секунды, если другой пользователь создает учетную запись между тем, когда вы спрашиваете, является ли руководство действительным (и возвращаете да), и когда вы фактически вставляете строку, у вас все еще могут быть коллизии.Это за ужасно ...
Но парни, которые заставили программы баз данных задуматься над этим и предлагают вам безболезненную альтернативу: столбцы идентификации.Они обеспечивают 3 основных преимущества:
- гарантированно уникален (или вставка не удалась)
- они автоматически превращаются в первичный ключ
- база данных генерирует их для вас
Чтобы использовать их, сделайте ваш столбец идентификаторов столбцом идентификаторов, а когда вы сделаете вставку, напишите его так:
insert into users (name, passwordhash, extrastuff)
values (@name, @passwordhash, @extrastuff);
select @@identity -- or ident_current() for mysql
И вы получите сгенерированный для вас идентификатор пользователя для дальнейшей обработки.Все это делается одновременно, независимо от того, сколько пользователей пробуют это одновременно.