Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
В таблице регистрируется факт прочтения новости пользователем.
ID_новости ID_пользователя datetime_прочтения (current_timestamp())
Надо сделать так, чтобы запись о факте прочтения в таблицу вносилась бы исключительно единожды.
Чтобы не было ни единого шанса внести в таблицу новую запись с теми же ID_новости и ID_пользователя.
Стоит ли ID_новости или ID_пользователя сделать уникальным?
Отредактированно Федосей (31.01.2022 17:10:17)
Неактивен
Если не нужно хранить данные про то, что пользователь Петя прочёл новость про Л. Куравлёва дважды - в 9 утра и в 10 утра, то да, логично добавить уникальный индекс на связку (ID_Новости, ID_пользователя) - тогда БД будет сама "следить" за тем, чтобы дублей не было и "даст по рукам", если попытаетесь вставить дубль.
С другой стороны, можно следить за этим на уровне кода - то есть при вставке проверять.
Зависит от того, насколько у Вас много мест, где вставляется эта запись в таблицу.
Неактивен
Я так и поступил. Получилось.
Единственный изъян. Даже если таблица, при попытке внесения в неё записи, выявила дубль, то запись в таблицу не вносится, однако значение AUTO_INCREMENT увеличивается на единицу.
Как-то возможно избавиться от подобной особенности? Чтобы значение AUTO_INCREMENT не изменялось, если таблица воспротивилась внесению новой записи из-за дубля.
Неактивен
А каким образом значение AUTO_INCREMENT вас беспокоит? Если это для вас имеет значение, то, скорее всего, у вас проблемы с архитектурой приложения. Ищите и исправляйте причину почему AUTO_INCREMENT влияет на работу приложения.
Неактивен
Даже если таблица, при попытке внесения в неё записи, выявила дубль, то запись в таблицу не вносится, однако значение 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, например :-).
Неактивен
Страниц: 1