Подтвердить что ты не робот

MYSQL LOAD DATA INFILE игнорирует повторяющиеся строки (автоинкремент в качестве первичного ключа)

Я столкнулся с некоторыми проблемами с использованием команды LOAD DATA INFILE, поскольку я хотел игнорировать строки, которые уже были в базе данных. Если у меня есть таблица с данными следующим образом,

id  |name   |age
--------------------
1   |aaaa   |22
2   |bbbb   |21
3   |bbaa   |20
4   |abbb   |22
5   |aacc   |22

Где id - значение автоматического увеличения. файл csv я содержит следующие данные,

"cccc","14"
"ssee","33"
"dddd","22"
"aaaa","22"
"abbb","22"
"dhgg","34"
"aacc","22"

Я хочу игнорировать строки,

    "aaaa","22"
    "abbb","22"
    "aacc","22"

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

    LOAD DATA INFILE 'member.csv'
    INTO TABLE tbl_member
    FIELDS TERMINATED BY ','
           ENCLOSED BY '"'
           ESCAPED BY '"'
           LINES TERMINATED BY '\n'
    (name, age);

ПОЖАЛУЙСТА, помогите мне в этой задаче.. Будет очень благодарен. Я пробовал много ссылок, но не помогал: (

4b9b3361

Ответ 1

Создайте индекс UNIQUE в столбце возраста, затем:

LOAD DATA INFILE 'member.csv'
IGNORE INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);

Ответ 2

Один из подходов - использовать временную таблицу. Загрузите это и используйте SQL для обновления tbl_member из таблицы temp.

INSERT INTO tbl_member
SELECT Field1,Field2,Field3,... 
FROM temp_table
WHERE NOT EXISTS(SELECT * 
             FROM tbl_member 
             WHERE (temp_table.Field1=tbl_member.Field1 and
                   temp_table.Field2=tbl_member.Field2...etc.)
            )

Ответ 3

Вы можете создать уникальный индекс для нескольких столбцов. LOAD DATA не будет вставлять строки, которые соответствуют существующим строкам во всех этих столбцах.

например, ALTER TABLE tbl_member ADD UNIQUE unique_index (имя, возраст)