Проверить существующие записи в базе данных или воссоздать таблицу? - PullRequest
1 голос
/ 26 мая 2011

У меня есть PHP-скрипт, который извлекает файл с сервера и вставляет значения в него в базу данных каждые 4 часа.

Этот файл может и, скорее всего, измениться в течение 4 часов (или любого другого периодаЯ наконец выбрал).Это список свойств и их владельцев.

Было бы лучше проверить файл и сравнить его с каждой записью БД и обновить любые, если они им нужны, или создать временную таблицу и затем сравнить их, используяSQL-запрос?

Ответы [ 3 ]

1 голос
/ 26 мая 2011

Отсутствует.

Что бы я лично сделал, это запустил команду INSERT, используя ON DUPLICATE KEY UPDATE (при условии, что ваша таблица правильно спроектирована и вы используете по крайней мере один фрагмент информации из вашего файла в качестве ключа UNIQUE, который вы должны основывать на ваш комментарий).

Причины

Создание временной таблицы - это хлопотно. Сравнивать тоже хлопотно. Вам нужно выбрать запись, сравнить запись, если не равно обновить запись и т. Д. - это просто огромная трата времени, чтобы сравнить кусок информации, и есть лучший способ сделать это.

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

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

0 голосов
/ 26 мая 2011

Предположительно, у вас есть список столбцов, которые должны будут совпадать, чтобы вы могли решить, что эти две вещи совпадают.

Если вы создаете УНИКАЛЬНЫЙ индекс для этих столбцов, то вы можете использовать либо INSERT ... ON DUPLICATE KEY UPDATE( руководство ) или REPLACE INTO ... ( руководство )

0 голосов
/ 26 мая 2011

Я думаю, что было бы лучше загрузить файл и обновить существующую таблицу, возможно, используя REPLACE или REPLACE INTO. «REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для PRIMARY KEY или UNIQUE индекса, старая строка удаляется перед вставкой новой строки». http://dev.mysql.com/doc/refman/5.0/en/replace.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...