![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| nextzi0 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 28.5.2008 Где: о. Корсика Репутация: нет Всего: нет |
Возможно ли в MySQL (5.0) одним запросом проверить, есть ли определенная запись в базе (по полю `column` например) и если есть, то обновить это поле, если нету - то вставить новую запись?
--------------------
Не бойся начинать что-то новое, помни, что ковчег построили любители - профессионалы построили "Титаник" |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
я так надеюсь, речь идет о поиску по полю с уникальными значениями? и с ключом unique по ним? тогда можно использовать конструкцию
|
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 7 Всего: 67 |
А еще есть оператор REPLACE
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
solenko, однако delete + insert изменит значение автоинкрементного поля. потому все возможные логические свзи нарушатся(если нет FK) или удалятся все связанные объекты(если есть FK). Так ведь?
|
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
интересная тема, немного не догнал
у меня к примеру есть таблица, в которой есть колонка с уникальными идентификаторами заказов (комбинация букв и цифр) мне надо вставить запись туда, но я заранее не знаю, а есть ли запись уже с таким идентификатором, приходится лишний раз проверять, а хотелось бы чтобы выполнялся запрос вставки с проверкой на существование и обновление, если обнаружится я так понимаю, этот же вопрос и у nextzi0 а обязательно ли назначать ключ им? у меня стоит стандартный уникальный id автоинкремент, но ориентироваться в данном случае нужно по другому полю |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
в данном случае это - главный ключ. т.е. ты хочешь, чтоб у тебя не было дубликатов значений в некоторых полях, но назначит unique index по ним тебе...эээ... лениво? да, обязательно должен быть уникальный индекс. посмотри на синтаксис:
и скажи, как по-твоему, для работы конструкции необходимо совпадение значения уникального ключа или нет? |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
||||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 7 Всего: 67 |
REPLACE не выполняет операции удаления. Он делает в точности то же что и insert ... on duplicate key update, но только по первичному ключу. -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| skyboy |
|
||||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
solenko, да, наверное я просто неверно понял
и
кстати, как раз по данной тобой ссылке. Добавлено через 7 минут и 30 секунд
вернет
что показывает: запись была удалена и вставлена. |
||||||||
|
|||||||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 7 Всего: 67 |
skyboy, читаем мой предидущий пост и видим "только по первичному ключу"
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
solenko, ну, так правильно. то, что запись была удалена не возымеет никакого эффекта на значение автоинкрементного поля: мы же указываем явно значене для вставки. однако, это не означает, что запись не удаляется.
соответственно, можешь провести эксперимент с внешними ключами: просто ли replace "заменит" значение, или все же запись будет удалена и вставлена, что вызовет: а)удаление всех записей в таблицах, имеющих внешний ключ на данную таблицу б) вызов триггеров on before delete, on after delete, on before insert, on after insert Добавлено через 44 секунды или, думаешь, есть разница для replace - если дублируется первичный ключ, то удаление не происходит, а если просто по уникаьлному - то происходит? |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 7 Всего: 67 |
чтот я тут недочитал ответ Сейчас будем ставить эксперементы
Это сообщение отредактировал(а) solenko - 5.10.2008, 12:34 -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| XAKEPEHOK |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 18.10.2006 Где: Matrix Репутация: нет Всего: 0 |
Так вот все-таки, у меня есть таблица статистики, где нет уникальных полей. Есть дата, id пользователя, количество действий #1 и количество действий #2.
Т.е. мне например, надо добавить +1 к количеству действий #2 за определенную дату, но я не знаю, может быть уже за эту дату было выполнено действие #1 Можно ли это реализовать одним запросом без введения уникальных полей? |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |