Вставить запись или обновить если совпали значения в 2-х полях.

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
БД Mysql.
Таблица имеет поля (все поля с неуникальными значениями )
id_tov info price data

Когда вставляю данные мне нужно обновить запись, если данные по полям id_tov и data совпадают с уже имеющимися или добавить новую запись если они не совпадают или совпадение только по одному полю.

Т.е. например таблица имеет вид:
id_tov info price data
5 пр 12 11.06
3 ап 18 12.08
2 ип 10 19.08

Я вставляю данные:
3 ги 15 12.08
и у меня обновляется 2-я запись.

А если например вставляю
3 ги 15 15.08
или
7 ро 19 18.08
то добавляется новая запись.

Помогите составить SQL-запрос для таких случаев. Это что-то похоже на INSERT ... ON DUPLICATE KEY UPDATE только не для полей с уникальными ключами.
 
ну а комбинация id_tov и data будет уникальной или нет?
 
Используйте приведенный вами
INSERT ... ON DUPLICATE KEY UPDATE
только добавьте составной индекс UNIQUE на поля id_tov и data
имеется в виду индекс создайте один одновременно на два поля средствами SQL менеджера который Вы используете, либо запросом Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся tovar Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся (id_tov, data) (если не изменяет память)
 
Используйте приведенный вами
INSERT ... ON DUPLICATE KEY UPDATE
только добавьте составной индекс UNIQUE на поля id_tov и data
имеется в виду индекс создайте один одновременно на два поля средствами SQL менеджера который Вы используете, либо запросом Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся tovar Для просмотра ссылки Войди или Зарегистрируйся Для просмотра ссылки Войди или Зарегистрируйся (id_tov, data) (если не изменяет память)

ADD UNIQUE INDEX вроде как
 
А подойдет ли вариант использовать триггер бифоинсерт?
 
Так же инересно про тригер узнать?
И еще вопросик, а нельзя ли в базе функцию создать, которая бы искала вводимые данные и если нет таких, то сообщала, что нужно сделать Insert вместо Update?

Не смотрел в MySQL, но вот в PostgreSQL и Oracle можно свои функции и процедуры делать.
 
Последнее редактирование модератором:
либо делайте составной ключ по полям, которые апдейтите, либо делайте кастомную функцию.
пример тут: Для просмотра ссылки Войди или Зарегистрируйся
 
Назад
Сверху