| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Проверка наличия записи |
| Автор: nextzi0 3.10.2008, 15:54 |
| Возможно ли в MySQL (5.0) одним запросом проверить, есть ли определенная запись в базе (по полю `column` например) и если есть, то обновить это поле, если нету - то вставить новую запись? |
| Автор: skyboy 3.10.2008, 16:33 | ||
я так надеюсь, речь идет о поиску по полю с уникальными значениями? и с ключом unique по ним? тогда можно использовать http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
|
| Автор: solenko 3.10.2008, 17:14 |
| А еще есть оператор REPLACE |
| Автор: skyboy 3.10.2008, 22:00 |
| solenko, однако delete + insert изменит значение автоинкрементного поля. потому все возможные логические свзи нарушатся(если нет FK) или удалятся все связанные объекты(если есть FK). Так ведь? |
| Автор: bars80080 3.10.2008, 22:49 |
| интересная тема, немного не догнал у меня к примеру есть таблица, в которой есть колонка с уникальными идентификаторами заказов (комбинация букв и цифр) мне надо вставить запись туда, но я заранее не знаю, а есть ли запись уже с таким идентификатором, приходится лишний раз проверять, а хотелось бы чтобы выполнялся запрос вставки с проверкой на существование и обновление, если обнаружится я так понимаю, этот же вопрос и у nextzi0 а обязательно ли назначать ключ им? у меня стоит стандартный уникальный id автоинкремент, но ориентироваться в данном случае нужно по другому полю |
| Автор: skyboy 4.10.2008, 14:09 | ||
в данном случае это - главный ключ. т.е. ты хочешь, чтоб у тебя не было дубликатов значений в некоторых полях, но назначит unique index по ним тебе...эээ... лениво? да, обязательно должен быть уникальный индекс. посмотри на синтаксис:
и скажи, как по-твоему, для работы конструкции необходимо совпадение значения уникального ключа или нет? |
| Автор: bars80080 4.10.2008, 19:52 |
ну почему лениво. долго читать документацию, которую я открою только может завтра, а может и через неделю, как со временем будет. оттого и спросил. потому на вопрос в конце, я могу ответить только: э-э-э-э... |
| Автор: skyboy 4.10.2008, 22:25 | ||||||||
solenko, да, наверное я просто неверно понял
и
кстати, как раз по данной тобой ссылке. Добавлено через 7 минут и 30 секунд
вернет
что показывает: запись была удалена и вставлена. |
| Автор: solenko 5.10.2008, 11:14 | ||
skyboy, читаем мой предидущий пост и видим "только по первичному ключу"
|
| Автор: skyboy 5.10.2008, 11:58 |
| solenko, ну, так правильно. то, что запись была удалена не возымеет никакого эффекта на значение автоинкрементного поля: мы же указываем явно значене для вставки. однако, это не означает, что запись не удаляется. соответственно, можешь провести эксперимент с внешними ключами: просто ли replace "заменит" значение, или все же запись будет удалена и вставлена, что вызовет: а)удаление всех записей в таблицах, имеющих внешний ключ на данную таблицу б) вызов триггеров on before delete, on after delete, on before insert, on after insert Добавлено через 44 секунды или, думаешь, есть разница для replace - если дублируется первичный ключ, то удаление не происходит, а если просто по уникаьлному - то происходит? |
| Автор: solenko 5.10.2008, 12:29 |
| чтот я тут недочитал ответ Сейчас будем ставить эксперементы |
| Автор: XAKEPEHOK 24.3.2012, 11:05 |
| Так вот все-таки, у меня есть таблица статистики, где нет уникальных полей. Есть дата, id пользователя, количество действий #1 и количество действий #2. Т.е. мне например, надо добавить +1 к количеству действий #2 за определенную дату, но я не знаю, может быть уже за эту дату было выполнено действие #1 Можно ли это реализовать одним запросом без введения уникальных полей? |