Mysql Отлавливание дубликатов на вставке в базу

На сайте организую "лайки", база данных выглядит так:

id_post | id_user 1 | 2 2 | 2

Как сделать проверку на уникальность записи по двум поля таблицы, чтобы не было дублирующихся "лайков", можно ли это сделать одним запросом, без проверки SELECT'ом?

Заранее спасибо!
 

MiksIr

miksir@home:~$
Ключ + ловим эксепшены с кодом ошибки "дублирующийся ключ"
 

MiksIr

miksir@home:~$
А нафига делать апдейт в базу когда его можно не делать?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
MiksIr
а делать лишний запрос, чтобы получить эксепшн - нормально?)
 

Фанат

oncle terrible
Команда форума
А нафига плодить ошибки на пустом месте?
Вопрос задан в разделе по mysql.
В которой можно ещё сделать INSERT IGNORE, кстати.
Возможно, правильнее будет
 
  • Like
Реакции: Maus

MiksIr

miksir@home:~$
А нафига плодить ошибки на пустом месте?
Вопрос задан в разделе по mysql.
В которой можно ещё сделать INSERT IGNORE, кстати.
Возможно, правильнее будет
INSERT IGNORE правильнее будет. По сути тоже решение - плодим ошибки, перехватываем и подавляем, только на уровне базы и только для mysql. Зачем нужно использовать mysql-only решения, когда можно сделать нормально, включая стандартизированные коды ошибок - я не понимаю. Так боитесь слова эксепшн?
 

Фанат

oncle terrible
Команда форума
Апдейта в данном случае тоже не будет.
В общем, если ты любитель вместо инструмента использовать кастрированный обрубок, и ради этого городить вокруг кучу ненужного ода с отловом ошибок - флаг тебе в руки.
 

MiksIr

miksir@home:~$
Кастрированный обрубок - это стандарт SQL и все СУБД ему следующие? ;) нуну
А расскажите, как вы будете решать точно такую же задачу, но если еще нужно будет узнать - была ли запись в базе или нет? Ну что бы сказать пользователю - "извини, чувак, уже было"?
 

Фанат

oncle terrible
Команда форума
очередной теоретик.
ну-ну, собака лает - ветер носит.
давай, бухти про большой театр, а я пока вздремну.
 

Вурдалак

Продвинутый новичок
Через INSERT + exception — нормально.

Между прочим, наблюдается аналогия с unlink. Там я тоже утверждал, что обернуть unlink try-catch'ем лучше, чем if (file_exists()) + unlink, но Фанат'у это по религиозным соображением не понравилось.
 

Baton

Новичок
Вопрос в студию, а REPLACE не сильно медленнее чем UPDATE при условии что записи в таблице уже есть? Никто не замерял?
 

Ragazzo

TDD interested
Baton
Вот куда ты лезешь... тем более replace заменяет строку, значит теряется pk.
 

Baton

Новичок
Помоему вопрос имеет право на существование, т.к. insert значительно медленнее чем update. Я вот совсем недавно узнал что replace это всегда delete-insert вместо select-(insert|update) что мне казалось более логичным.
 

MiksIr

miksir@home:~$
Через INSERT + exception — нормально.

Между прочим, наблюдается аналогия с unlink. Там я тоже утверждал, что обернуть unlink try-catch'ем лучше, чем if (file_exists()) + unlink, но Фанат'у это по религиозным соображением не понравилось.
Ну тут эти два решения равноценны... кстати, а unlink генерит исключение?
 

Вурдалак

Продвинутый новичок
Ну тут эти два решения равноценны... кстати, а unlink генерит исключение?
Конечно не равноценны. Если мы там боремся за теорию, то надо понимать, что между проверкой и unlink'ом файл может быть удалён. Бросает, если оно выбрасывается из error_handler'а. Это уже вроде как стандарт де-факто.
 
Сверху