Итак, у меня есть эта хранимая процедура для вставки сообщения в мою базу данных.Я хотел запретить пользователям публиковать повторяющиеся сообщения в течение короткого периода времени, будь то случайно или специально (либо медленное соединение, либо спамер).
Вот как выглядит оператор вставки:
IF NOT EXISTS (SELECT * FROM tblMessages WHERE message = @message and ip = @ip and datediff(minute,timestamp, getdate()) < 10)
BEGIN
INSERT INTO tblMessages (ip, message, votes, latitude, longitude, location, timestamp, flags, deleted, username, parentId)
VALUES (@ip, @message, 0, @latitude, @longitude, @location, GETDATE(), 0, 0, @username, @parentId)
END
Вы видите, я проверяю, отправил ли один и тот же пользователь одно и то же сообщение в течение 10 минут, и если нет, я его отправляю.Я все еще видел, как одна тупица прошла вчера.Когда я проверил метку времени обоих сообщений в базе данных, они были абсолютно одинаковыми, с точностью до секунды, поэтому я предполагаю, что когда эта проверка «существует» выполнялась при каждой вставке, оба возвращались пустыми, поэтому они оба вставлены нормально (в основном в одно и то же время).
Как я могу предотвратить это правильно?