Ни LOAD DATA LOCAL..REPLACE, ни INSERT..ON DUPLICATE не работают.Что-то не так с моей структурой таблицы? - PullRequest
0 голосов
/ 10 июля 2010

Я загружаю файлы в таблицу с помощью php. Я создаю таблицу, как это:

CREATE TABLE IF NOT EXISTS $table (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`order` INT DEFAULT 0,
`data` VARCHAR(200) UNIQUE KEY,
`cur_timestamp` TIMESTAMP DEFAULT NOW())"

И заполните его из текстового файла следующим образом:

LOAD DATA LOCAL 
INFILE '".$file ."' 
REPLACE INTO TABLE $table 
FIELDS TERMINATED BY '^' 
(`order`,`data`)"

Я также попытался прочитать файл в массив и просто использовать INSERT .. ON DUPLICATE KEY

INSERT INTO $table (`order`,`data`)
VALUES ($parts[0],'$parts[1]') 
ON DUPLICATE KEY UPDATE `order` = '$parts[0]'

В обоих случаях, если данные совпадают в новой и старой записи, но порядок отличается, они ВСТАВЛЯЮТ. Я ожидаю ОБНОВЛЕНИЕ, если данные одинаковы. Я ожидаю, что мои таблицы не настроены должным образом, но не вижу, в чем проблема. Может кто-нибудь сказать мне, почему он не обновляется, когда данные совпадают?

1 Ответ

0 голосов
/ 10 июля 2010
  1. Вы должны вставить данные, включая первичный ключ - здесь идентификатор.В этом случае, если старый и новый идентификатор совпадают, данные будут заменены, в противном случае нет.Но ваш PK - AUTO_INC, так что вы можете использовать уникальный индексный столбец, например order или что-то еще.Для справки см. - Заменить

  2. Для печати содержимого массива необходимо использовать {} like

    "INSERT INTO $ table (order, data) ЗНАЧЕНИЯ ({$ parts [0]}, '{$ parts 1 }') ON DUPLICATE KEY UPDATE order = '{$ parts [0]}' "

    или конкатенация

Надеюсь, это может помочь вам

Садат

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