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

Тема в разделе "Базы данных", создана пользователем verfaa, 20 июн 2013.

Модераторы: latteo
  1. verfaa

    verfaa

    Регистр.:
    29 янв 2007
    Сообщения:
    375
    Симпатии:
    41
    БД 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 только не для полей с уникальными ключами.
     
  2. Cosmologist

    Cosmologist Писатель

    Регистр.:
    22 мар 2013
    Сообщения:
    2
    Симпатии:
    0
    ну а комбинация id_tov и data будет уникальной или нет?
     
  3. APXOH

    APXOH Создатель

    Регистр.:
    16 янв 2013
    Сообщения:
    36
    Симпатии:
    6
    Используйте приведенный вами
    INSERT ... ON DUPLICATE KEY UPDATE
    только добавьте составной индекс UNIQUE на поля id_tov и data
    имеется в виду индекс создайте один одновременно на два поля средствами SQL менеджера который Вы используете, либо запросом ALTER TABLE tovar ADD UNIQUE (id_tov, data) (если не изменяет память)
     
    verfaa нравится это.
  4. Cosmologist

    Cosmologist Писатель

    Регистр.:
    22 мар 2013
    Сообщения:
    2
    Симпатии:
    0
    ADD UNIQUE INDEX вроде как
     
  5. newminer

    newminer Создатель

    Регистр.:
    21 апр 2015
    Сообщения:
    13
    Симпатии:
    4
    А подойдет ли вариант использовать триггер бифоинсерт?
     
  6. cerberix

    cerberix Создатель

    Регистр.:
    6 июл 2015
    Сообщения:
    19
    Симпатии:
    2
    Так же инересно про тригер узнать?
    И еще вопросик, а нельзя ли в базе функцию создать, которая бы искала вводимые данные и если нет таких, то сообщала, что нужно сделать Insert вместо Update?

    Не смотрел в MySQL, но вот в PostgreSQL и Oracle можно свои функции и процедуры делать.
     
    Последнее редактирование модератором: 23 сен 2015
  7. XaHDpE

    XaHDpE Создатель

    Регистр.:
    30 сен 2007
    Сообщения:
    10
    Симпатии:
    0