Вы можете просто зарегистрировать IP ($ _SERVER ['REMOTE_ADDR']) и запретить повторную валидацию с помощью этого IP-адреса в течение 1 минуты или, более точно, начать сеанс, предоставить идентификатор без вашего посетителя и запретить повторную проверку на 1 минута (или больше, но бот не любит ждать).
Чем короче замок, тем лучше. Длинные транзакции могут привести к снижению производительности (длительный ресурс ожидания) и взаимоблокировке. Если вы не планируете точно обрабатывать прохождение «трех» запросов, то лучше будет первый вариант.
Откат, если ошибка в одном из них
TRY
BEGIN
Begin Transaction;
Insert into Customers (name) values (Name1);
Insert into Customers (name) values (Name2);
Insert into Customers (name) values (Name3);
Commit;
END
CATCH
BEGIN
THROW;
ROLLBACK;
END
Операция SQL всегда выполняется в транзакции. Если вы не запускаете его явно, каждый оператор SQL будет выполняться в транзакции сам по себе.
Единственный выбор - объединить несколько операторов в одну транзакцию. Транзакции, охватывающие несколько операторов, оставляют блокировки, которые вредят параллелизму. Поэтому «всегда» создание транзакций - это не очень хорошая идея. Вы должны балансировать стоимость с выгодой.
Вы можете получить дополнительную информацию: https://dba.stackexchange.com/questions/43254/is-it-a-bad-practice- к-всегда-Create-A-сделки