За последние 24 часа нас посетили 18273 программиста и 1275 роботов. Сейчас ищет 1721 программист ...

Офигительный DELETE

Тема в разделе "MySQL", создана пользователем Виктор Зотов, 18 дек 2017.

Метки:
  1. Виктор Зотов

    Виктор Зотов Новичок

    С нами с:
    5 май 2016
    Сообщения:
    7
    Симпатии:
    0
    Приветствую, господа.
    Разбирается json и заполняется таблица. Цикл: DELETE, следом INSERT (про UPDATE знаю).

    "DELETE FROM comments WHERE oldid={$v->id} OR modified={$v->modified}"
    "INSERT INTO comments SET oldid = {$v->id}, ..., modified = {$v->modified}, ..."

    oldid и modified - целые.
    У меня на локалке вставляется три записи, у хостера - две.
    1-я: id = 72116484, modified = 1511286715180
    2-я: id = 72116485, modified = 1511288098029
    3-я: id = 72587596, modified = 1512653514301
    На второй итерации у хостера срабатывает DELETE и убивает первую запись. Почему?
    Повторю: у меня на локалке всё хорошо, это у хостера так. В чем м.б. дело, подскажите, пожалуйста.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.331
    Адрес:
    Лень
    Ошибки включи, посмотри
    --- Добавлено ---
    + лог бд
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    1. insert on duplicate key update
    2. если так сильно хочется делать в несколько запросов - то привет транзакции. но это снижает производительность.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    я нихрена не понял, но 99% что дело в неправильном выборе условия OR/AND.
    --- Добавлено ---
    не зная что именно означают эти oldid и modified никак нельзя сказать правильно удаляется запись или нет.
     
    voral нравится это.
  5. uri

    uri Активный пользователь

    С нами с:
    3 сен 2009
    Сообщения:
    43
    Симпатии:
    1
    Проверить ключи\констрейнты\триггеры на табличке comments .
    В предположении, что локальные json-данные идентичны хостеровским, интересно, 1-й DELETE сколько раз отрабатывает? Возможно не завершается транзакция для 1-го INSERT. Проверять SELECTами после каждого шага.
    Попробуйте переписать вставку
    Код (Text):
    1. "INSERT INTO comments (oldid, modified) VALUES ({$v->id},  {$v->modified})"
    для Вашего варианта есть какие-то доп. опции LOW_PRIORITY\DELAYED, о которых, увы, ничего Вам поведать не могу.
     
  6. voral

    voral Активный пользователь

    С нами с:
    30 ноя 2017
    Сообщения:
    646
    Симпатии:
    104
    смотрели реальный текст всех 6 (?) запросов?
     
  7. uri

    uri Активный пользователь

    С нами с:
    3 сен 2009
    Сообщения:
    43
    Симпатии:
    1
    Не, я не об этом. У конструкции
    Код (Text):
    1. INSERT INTO .. SET ..
    есть некие доп опции. А какая из них используется по умолчанию - я не знаю. Поэтому и предлагаю переписать текст вставки.