Чтобы быть справедливым, я видел некоторые подобные вопросы here и here, но я считаю, что эти вопросы в первую очередь задают вопрос об обновлениях одной строки, а также о том, что фактические данные не изменяются.Есть ли технические преимущества команд UPDATE или INSERT для DELETE ALL и INSERT?
В моем случае у меня есть набор продуктов, которые может предложить представитель по продаже. Эти общие продукты поддерживают с помощью главной таблицы, которая определяет их:
master_table
ID | Name | status
---------------------
1 | prod1 | 1
2 | prod2 | 1
3 | prod3 | 0
4 | prod4 | 1
, где состояние представляет собой активный (1) или неактивным (0). Неактивный продукт недоступен для любого представителя для продажи независимо от их настроек в таблице rep.
rep_table
ID | repID | status
------------------------
1 | rep1 | 1
2 | rep1 | 1
3 | rep1 | 1
1 | rep2 | 0
2 | rep2 | 1
3 | rep3 | 0
, где положение в этой таблице активно (1) или неактивный (0). Опять же, статус главной таблицы всегда переопределяет статус rep_table с точки зрения определения того, какие продукты может предложить представитель по продажам.
Основная проблема, с которой я столкнулся, заключается в том, когда мы вводим новые продукты для повторных продаж. На портале администрирования rep (s) он может активировать или деактивировать любой набор продуктов, которые они хотят предложить. Когда пользователь выбирает (формирует флажки) все товары, которые он/она хочет продать, и ударил, начнется серия проверок:
- Выбрал ли представитель набор продуктов?
- Являются ли продукты подбираются в лучшем формате?
- Отличается ли список выбранных продуктов от того, который они уже установили при входе в систему (если нет, то предупреждение о том, что обновление не произойдет)? ?
- ли все продукты, выбранные в форме существуют и настроены на «активные» в master_table
В этот момент логика затем переходит (в настоящее время) к следующему для каждого выбранного продукта:
- обновление всех продуктов rep_table в неактивное (для этого конкретного повторении)
- Если продукт существует в текущем наборе продуктов на входе и текущий статус был установлен в неактивное состояние, то в очередь идентификатор продукта для активного.
- Если переданный продукт не существовал в текущем наборе продуктов при входе в систему, вставьте новый продукт в rep_table и установите на активный.
Основная причина, по которой обновление всех продуктов для конкретной репутации неактивна в начале заявления «обновление», объясняется сложностью обнаружения того, какие продукты, которые были установлены «активными» при входе в систему, были изменен на «неактивный» в форме выбора продукта.
Мне интересно, если вместо того, чтобы пытаться выяснить статус текущего выбора продукта по сравнению с тем, который был зарегистрирован в реестре, не просто удалить сначала все идентификаторы продуктов для определенного реплива в rep_table затем вставьте все сразу. Я знаю, что в этом случае я запускаю 2 запроса, но в сценариях, где у меня есть обновления и вставки в одну и ту же команду, каждый раз я запускаю как минимум 2+ запросов.
Существуют ли «технические» последствия для удаления и вставки таким образом?
Примечания: моя таблица является InnoDB, и я бегу MySQL
Можете ли вы показать нам инструкцию create table с индексами? –