Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Защита от дублирования записей  [new]
lkk
Member

Откуда:
Сообщений: 4
Здравствуйте!

У меня есть таблица с личными сообщениями пользователей, которая содержит следующие поля:

`id` int(11) NOT NULL,
`date` datetime NOT NULL,
`from_id` int(11) NOT NULL,
`to_id` int(11) NOT NULL,
`text` text NOT NULL

Проблема в том, что иногда одинаковые записи добавляются в таблицу несколько раз. Хочу защититься от этого сделав уникальный индекс по полям date, from_id, to_id. Проблема в том, что дата в полностью одинаковых записях может отличаться на несколько секунд и тогда всё равно не получается защититься от дублей подобным образом. Существует ли способ каким-то образом создать уникальный индекс чтобы для поля даты учитывалось значение до минут (без секунд)?
19 ноя 20, 13:34    [22235293]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Создайте вычисляемое поле (generated column) и используйте его в индексе.

Вот только между 12:23:59 и 12:24:00 - одна секунда, а минуты разные. Так что лучше создайте триггер.
19 ноя 20, 14:19    [22235356]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
lkk
Member

Откуда:
Сообщений: 4
Akina,

да, пока только такая идея была, но описанный вами момент с 1 секундой смущает.

триггер? Расскажите где почитать?
19 ноя 20, 14:24    [22235364]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
MySQL 8.0 Reference Manual / ... / Trigger Syntax and Examples

MySQL 8.0 Reference Manual / ... / SIGNAL Statement

Сообщение было отредактировано: 19 ноя 20, 14:23
19 ноя 20, 14:27    [22235368]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
lkk
Member

Откуда:
Сообщений: 4
Akina,

а можно пример как это можно в моём случае использовать? Не совсем понимаю.
19 ноя 20, 14:29    [22235370]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Пример.
19 ноя 20, 14:41    [22235379]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
lkk
Member

Откуда:
Сообщений: 4
Akina, большое спасибо!
19 ноя 20, 14:52    [22235388]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3399
Может проблема в БД, а фронте, когда юзверь не дождавшись тормозной реакции успевает нажать отправку формы дважды или когда срабатывает повторная отправка по иным причинам?

Если так, то лучше блокировать на стороне фронта и не пытаться писать в БД второй раз.
20 ноя 20, 23:01    [22236260]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3337
lkk,

Лучше отследить на клиенте ситуации и исправить такие повторные отправки
22 ноя 20, 23:54    [22236820]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Alex_Ustinov
Лучше отследить на клиенте ситуации и исправить такие повторные отправки
Я бы сказал - И на клиенте. Проверка на клиенте никак не отменяет необходимости контроля на стороне сервера.
23 ноя 20, 08:10    [22236919]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3337
Akina,

Да там же уник кей дт+фром достаточно
23 ноя 20, 17:11    [22237355]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
Alex_Ustinov
уник кей дт+фром достаточно
Да? с учётом девиации значения? интересно было бы увидеть...
23 ноя 20, 19:21    [22237435]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3337
Akina
Alex_Ustinov
уник кей дт+фром достаточно
Да? с учётом девиации значения? интересно было бы увидеть...
интересно увидеть девиацию в передаче сообщения между пользователями, даже когда оба пьяны...
В любом случае послать сообщение руками одному пользователю два раза в секунду это ненормальная ситуация.
Не хочется углубляться. Но это больше задача клиента- не отсылать уже отправленное.
Я почему то в этом окне не могу отправить - оно у меня закрывается, это так, к примеру
23 ноя 20, 21:31    [22237499]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Alex_Ustinov
Member

Откуда: Nickel
Сообщений: 3337
Alex_Ustinov
Akina,

Да там же уник кей дт+фром достаточно
дт+фром+ту выше крыши
23 ноя 20, 21:33    [22237502]     Ответить | Цитировать Сообщить модератору
 Re: Защита от дублирования записей  [new]
Arhat109
Member

Откуда: из СССР
Сообщений: 3399
Alex_Ustinov,

Вы просто не успеваете .. ;)
23 ноя 20, 21:59    [22237511]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить