2014-01-07 4 views
4

У меня есть сценарий, который я использую для переноса данных с одного db на другой. Я уже сделал это с использованием обычных скриптов вставки и обновления mysql. Это просто слишком долго.Как использовать LOAD DATA LOCAL INFILE REPLACE

В любом случае я сбросил все данные, которые я хочу обновить в новом db, на csv, я просто обеспокоен тем, что, если я запустил этот скрипт, я собираюсь получить повторяющиеся записи. Я не имею «id», который соответствует, поэтому я не могу выполнить сравнение по сценарию REPLACE, указанному ниже. Мне было интересно, может ли кто-нибудь дать мне понять, правильно ли этот сценарий выглядит.

В настоящее время у меня есть строки данных в новом db, я просто хочу переписать все поля в новом db с этими новыми данными в csv, если они совпадают. Поле «archived_id_number» является единственным полем, на котором я мог бы совпадать, но это не первичный ключ.

Может кто-то стрелять мне следующее:

Я хочу заменить какие-либо данные в полях с данными в CSV-если archived_id_number на CSV соответствует тому, что находится в новом дб. Если совпадения нет, я хочу вставить данные в новую строку.

$sql = ' 
LOAD DATA LOCAL INFILE "'.$theFile.'" 
REPLACE INTO TABLE Product 
FIELDS TERMINATED BY "|" 
LINES TERMINATED BY "\\n" 
(archived_id_number, sku, name, upc, account_id, shippingBox_id, unit_cost, supplier_id, description, productLength, productWidth, productHeight) 
;'; 

Благодарим за помощь!

+0

Хотя это не первичный ключ, я предполагаю, что есть '' UNIQUE' на archived_id_number'? – Wrikken

+0

Да, это правильно, и есть уникальный на sku – LargeTuna

+0

Тогда он должен работать, насколько я могу видеть, без оригинальной сборки таблицы и фрагмента csv. Сначала я запустил его на тестовой копии таблицы, но ... – Wrikken

ответ

2

Как разработка моего комментария, в то время как ваш запрос выглядит хорошо, я советую проверить это на копию текущей таблицы. Это позволит вам точно подтвердить, что произойдет, не рискуя вашими существующими данными. Вы можете добиться этого, выполнив следующие 3 запроса (очевидно, запустите php для выполнения $ sql).

$sql = ' 
    CREATE TABLE `_test_Product` LIKE Product; 
'; 

$sql = ' 
    INSERT `_test_Product` SELECT * FROM Product; 
'; 

$sql = ' 
    LOAD DATA LOCAL INFILE "'.$theFile.'" 
    REPLACE INTO TABLE `_test_Product` 
    FIELDS TERMINATED BY "|" 
    LINES TERMINATED BY "\\n" 
    (
     archived_id_number, 
     sku, name, upc, account_id, shippingBox_id, unit_cost, 
     supplier_id, description, productLength, productWidth, productHeight 
    ); 
'; 

(подробнее доступен в Duplicating a MySQL table, indexes and data)

Смежные вопросы