Есть ли способ автоматизировать DELETE и INSERT в MySQL при добавлении новых данных? - PullRequest
0 голосов
/ 19 октября 2018

Я новичок во всей игре по управлению базами данных, поэтому, если я совершенно не в курсе этого, и есть лучший способ сделать это, пожалуйста, дайте мне знать.

У меня есть сценарий Rчто я использую, чтобы объединить кучу еженедельных отчетов в одну таблицу.Я пытаюсь настроить хранилище данных в MySQL, но я не уверен, как заставить INSERT работать автоматически.

Таблица вывода из R - это данные за одну неделю.

Сейчас у меня есть две таблицы в MySQL, назовем их Main и NewWeek.

NewWeek - это то место, куда я отправляю выходные данные из R, и мне, по сути, нужно сделать:

/* delete any data already imported from NewWeek */
DELETE FROM Main
WHERE Main.`Date` = (SELECT max(Date) FROM NewWeek);

INSERT INTO Main Select * FROM NewWeek;

И мне нужно запускать этот запрос каждый раз, когда я изменяю NewWeek (т.е.каждый раз, когда я запускаю сценарий R), вставка может потребоваться запускать несколько раз в течение недели, так как мы получаем больше данных, отсюда необходимость в операторе DELETE, чтобы мы не создавали дубликаты.

Я использую MySQL через Amazon RDS, и я считаю, что это создает некоторые проблемы при использовании триггеров, и поэтому я не уверен, что это вариант.

1 Ответ

0 голосов
/ 20 октября 2018

Когда вы начинаете перемешивать (равные) данные между таблицами, скорее всего, что-то не так с вашей структурой базы данных.

В вашем случае я бы порекомендовал следующее:

  • Непосредственно вставьте свои записанные данные в вашу MAIN-таблицу, не имея "недельной таблицы".
  • Если вам нужно разделить эти записи, либо используйте динамическую минимальную / максимальную дату (как вы делаете) при запросе данных, либо, если речь идет об утверждении данных, используйте логический столбец (утверждено истина / ложь),

Таким образом, каждая «запись» будет добавляться с «утверждено = ложь» - и раз в неделю, когда вы довольны данными, вы просто обновляете этот столбец до «true».

...