[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запись уникальных значений
ЗлОй ПрОграММер
Здравствуйте, как проверять значение на уникальность перед записью?
Есть вариант делать выборку через SELECT по условию, если значение есть то не вставлять его в таблицу. Есть вариант лучше?
Значением является текст до 1000 символов.
sergeiss
Скорее всего, это "дефолтная БД". Поэтому гугли.
INSERT ... ON DUPLICATE KEY UPDATE ...


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
ЗлОй ПрОграММер
sergeiss
тут разве нет ограничения на 767 байт?
Valick
ЗлОй ПрОграММер, сделай уникальный столбец и храни там хеш текста, правда тексты отличающиеся даже на один символ будут уникальны.


_____________
Стимулятор ~yoomoney - 41001303250491
ЗлОй ПрОграММер
Valick
Мне кстати так и надо, если хоть на один символ отличаются то это разные тексты.
А может быть такое, что две разных записи могут иметь одинаковый хеш, если использовать md5 к примеру.
Записей в таблице ожидается очень много, поэтому нужно исключить возможности повторения хеша.
Valick
ЗлОй ПрОграММер, почитайте про коллизии хеширования
https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%...%BD%D0%B8%D0%B5

но лично я бы не стал себе забивать этим голову, тем более при тексте в 1000 символов

_____________
Стимулятор ~yoomoney - 41001303250491
ЗлОй ПрОграММер
Valick
я почитал, а есть вариант принудительной записи в таблицу уникального значения? например если попадётся один и тот же хеш, я проверяю исходные данные и если они разные я записываю их.
ЗлОй ПрОграММер
Я как вариант решил сделать уникальными 2 поля вместо одного, id группы к которой текст относится и хеш текста, думаю коллизии не страшны теперь и в пределах одной группы (которая насчитывает не более 10000 записей) они вряд ли будут
ЗлОй ПрОграММер
столкнулся с тем что INSERT ... ON DUPLICATE KEY UPDATE увеличивает автоинкремент постоянно, можно сделать так чтобы он только при вставке новой записи увеличивался?
Valick
ЗлОй ПрОграММер, а зачем UPDATE есть же INSERT IGNORE


_____________
Стимулятор ~yoomoney - 41001303250491
ЗлОй ПрОграММер
Valick
Спасибо, почитаю о нём
ЗлОй ПрОграММер
Valick
да при нём тоже автоинкрементится
буду копать в сторону innodb_autoinc_lock_mode, хотя пишут что при нём уменьшается производительность
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.