SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.01.2022 17:09:45

Федосей
Участник
Зарегистрирован: 16.11.2021
Сообщений: 13

Как избежать повторное внесение в таблицу записи о прочтении новости?

В таблице регистрируется факт прочтения новости пользователем.

ID_новости    ID_пользователя    datetime_прочтения  (current_timestamp()) 

Надо сделать так, чтобы запись о факте прочтения в таблицу вносилась бы исключительно единожды.
Чтобы не было ни единого шанса внести в таблицу новую запись с теми же   ID_новости    и   ID_пользователя.

Стоит ли    ID_новости    или   ID_пользователя    сделать уникальным?

Отредактированно Федосей (31.01.2022 17:10:17)

Неактивен

 

#2 31.01.2022 20:17:55

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: Как избежать повторное внесение в таблицу записи о прочтении новости?

Если не нужно хранить данные про то, что пользователь Петя прочёл новость про Л. Куравлёва дважды - в 9 утра и в 10 утра, то да, логично добавить уникальный индекс на связку (ID_Новости, ID_пользователя) - тогда БД будет сама "следить" за тем, чтобы дублей не было и "даст по рукам", если попытаетесь вставить дубль.

С другой стороны, можно следить за этим на уровне кода - то есть при вставке проверять.

Зависит от того, насколько у Вас много мест, где вставляется эта запись в таблицу.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 01.02.2022 18:58:12

Федосей
Участник
Зарегистрирован: 16.11.2021
Сообщений: 13

Re: Как избежать повторное внесение в таблицу записи о прочтении новости?

Я так и поступил. Получилось.
Единственный изъян. Даже если таблица, при попытке внесения в неё записи, выявила дубль, то запись в таблицу не вносится, однако значение AUTO_INCREMENT увеличивается на единицу.
Как-то возможно избавиться от подобной особенности? Чтобы значение AUTO_INCREMENT не изменялось, если таблица воспротивилась внесению новой записи из-за дубля.

Неактивен

 

#4 01.02.2022 19:39:52

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Как избежать повторное внесение в таблицу записи о прочтении новости?

А каким образом значение AUTO_INCREMENT вас беспокоит? Если это для вас имеет значение, то, скорее всего, у вас проблемы с архитектурой приложения. Ищите и исправляйте причину почему AUTO_INCREMENT влияет на работу приложения.

Неактивен

 

#5 01.02.2022 23:16:33

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: Как избежать повторное внесение в таблицу записи о прочтении новости?

Даже если таблица, при попытке внесения в неё записи, выявила дубль, то запись в таблицу не вносится, однако значение AUTO_INCREMENT увеличивается на единицу.

А как вставляете? Через insert on duplicate key? Покажите запрос.

Для того, чтобы такого увеличения не происходило - можно выставить глобальную переменную mysql
innodb_autoinc_lock_mode в 2 (http://dev.mysql.com/doc/refman/5.6/en/ … _lock_mode).

А лучше поставить у autoincrement-значения такой тип, чтобы Вас это не беспокоило - bigint, например :-).


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson