Лучший метод обновления для БД MySQL

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

Таким образом, пользователь загружает CSV данных на следующей неделе. Он вставляется в БД, без проблем.

НО

через час он получает отзывы от всех и должен внести соответствующие изменения. Он обновляет csv и идет загружать его в БД.

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

Очевидно, что намного проще просто стереть его и повторно ввести данные, но это не лучший метод, особенно если есть много изменений или тонны данных. Но я должен знать, КАКИЕ изменения были внесены для отправки предупреждений. Но мне не нужен журнал транзакций, так как предупреждения нужно отправлять только один раз, и после этого старые данные бесполезны.

Так!

Есть ли умный способ сравнить новые данные с уже существующими данными, получить только те строки, которые были изменены / удалены / добавлены, и внести эти изменения? Прямо сейчас кажется, что я могу сделать обновление, но тогда я не получу никакого ответа о том, что изменилось ...

Спасибо!

Быстрое редактирование:

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

Речь идет о графике работы каждого. Так что было бы неплохо (для конкретных приложений этого расписания, помимо простого вывода) для каждой смены иметь ключ. Но проблема в том, что допустим, что user1 опоздал в понедельник. Опоздание фиксируется в отдельной таблице и привязано к смене клавишей Shift. Но если во вторник возникнет необходимость внести некоторые изменения в уже текущую неделю, я опасаюсь, что будет слишком сложно обеспечить, чтобы все записи в БД, которые уже произошли (и, следовательно, могут иметь ассоциации, которые не должны будет сломан) будет повторно введен в процессе. К сожалению, это не так просто, как обновление всех событий, происходящих ПОСЛЕ текущего времени, так как это добавит работы (и, следовательно, сделает ее менее востребованной) для людей, выполняющих загрузку. По сути, они составляют расписание для одной программы, экспортируют его в CSV, а затем загружают на веб-страницу для всех веб-приложений, которым требуются эти данные. Таким образом, им намного проще (и менее напряженно для всех участников) выполнять одну и ту же процедуру каждый раз, экспортируя всю неделю и загружая ее.

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

Вот связанный с этим вопрос:

Suppose Joe User was schedule to wash dishes from 7:00 PM to 8:00 PM, but the new
data has him working 6:45 PM to 8:30 PM.  Has the shift been changed? Or has the old
one been deleted and a new one added?

И еще один:

Say Jane was schedule to work 1:00 PM to 3:00 PM, but now everyone has a mandatory
staff meeting at 2:00 to 3:00. Has she lost one shift and gained two? Or has one
shift changed and she gained one?

Мне действительно интересно знать, как обычно обрабатываются / обрабатываются такие данные, а не только конкретные ответы на вышеизложенное.

Еще раз спасибо.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
175
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если у вас есть уникальный ключ в одном из полей, вы можете использовать:

LOAD DATA LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name

Я бы рекомендовал проверить, использует ли LOAD DATA (...) REPLACE ту же семантику, что и команда MySQL REPLACE. REPLACE выполняет DELETE, а затем INSERT, но вызывает вызов триггеров ON DELETE и выполнение проверки внешних ключей, а ON DELETE CASCADE удаляет внешние ключи ...

Abgan 02.01.2009 18:39
Ответ принят как подходящий

Right now, the system I'm using checks to see if the data for that week is already there, and if it is, pulls all of that data from the DB, a script finds the differences and sends them out, and after all of this, the data the old data is deleted and replaced with the new data.

Значит, ваш сценарий знает различия, верно? И вы же не хотите использовать какие-то дополнительные инструменты, кроме вашего скрипта и MySQL, верно?

Я совершенно убежден, что MySQL сам по себе не предлагает никакого инструмента сравнения, поэтому лучшее, что вы можете достичь, - это создать новый файл CSV только для обновлений. То есть - он должен содержать только измененные строки. Обновление будет быстрее, и все измененные данные будут легко доступны.

Другие вопросы по теме