MySQL
ЗАГРУЗКА ДАННЫХ
Поиск…
Синтаксис
- LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'имя_файла'
- INTO TABLE tbl_name
- [CHARACTER SET charset]
- [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char']]
- [LINES [STARTING BY 'string]] [TERMINATED by' string ']]
- [Номер IGNORE {LINES | ЧСТРОК}]
- [(Col_name_or_user_var, ...)]
- [SET col_name = expr, ...]
используя LOAD DATA INFILE для загрузки большого количества данных в базу данных
Рассмотрим следующий пример, предполагая, что для загрузки в вашу базу данных имеется CS;
1;max;male;manager;12-7-1985
2;jack;male;executive;21-8-1990
.
.
.
1000000;marta;female;accountant;15-6-1992
Создайте таблицу для вставки.
CREATE TABLE `employee` ( `id` INT NOT NULL ,
`name` VARCHAR NOT NULL,
`sex` VARCHAR NOT NULL ,
`designation` VARCHAR NOT NULL ,
`dob` VARCHAR NOT NULL );
Используйте следующий запрос, чтобы вставить значения в эту таблицу.
LOAD DATA INFILE 'path of the file/file_name.txt'
INTO TABLE employee
FIELDS TERMINATED BY ';' //specify the delimiter separating the values
LINES TERMINATED BY '\r\n'
(id,name,sex,designation,dob)
Рассмотрим случай, когда формат даты является нестандартным.
1;max;male;manager;17-Jan-1985
2;jack;male;executive;01-Feb-1992
.
.
.
1000000;marta;female;accountant;25-Apr-1993
В этом случае вы можете изменить формат столбца dob
прежде чем вставлять это.
LOAD DATA INFILE 'path of the file/file_name.txt'
INTO TABLE employee
FIELDS TERMINATED BY ';' //specify the delimiter separating the values
LINES TERMINATED BY '\r\n'
(id,name,sex,designation,@dob)
SET date = STR_TO_DATE(@date, '%d-%b-%Y');
В этом примере LOAD DATA INFILE не указаны все доступные функции.
Вы можете увидеть больше ссылок на LOAD DATA INFILE здесь .
Импорт CSV-файла в таблицу MySQL
Следующая команда импортирует CSV-файлы в таблицу MySQL с одинаковыми столбцами при соблюдении правил цитирования и экранирования CSV.
load data infile '/tmp/file.csv'
into table my_table
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\n'
ignore 1 lines; -- skip the header row
Загружать данные с помощью дубликатов
Если вы используете команду LOAD DATA INFILE
для заполнения таблицы существующими данными, вы часто обнаружите, что импорт LOAD DATA INFILE
неудачно из-за дубликатов. Существует несколько возможных путей преодоления этой проблемы.
ЛОКАЛЬНЫЕ ДАННЫЕ
Если этот параметр включен на вашем сервере, его можно использовать для загрузки файла, который существует на клиентском компьютере, а не на сервере. Побочным эффектом является то, что повторяющиеся строки для уникальных значений игнорируются.
LOAD DATA LOCAL INFILE 'path of the file/file_name.txt'
INTO TABLE employee
LOAD DATA INFILE 'fname' REPLACE
Когда используется ключевое слово replace, дубликаты уникальных или первичных ключей приведут к замене существующей строки на новые
LOAD DATA INFILE 'path of the file/file_name.txt'
REPLACE INTO TABLE employee
LOAD DATA INFILE 'fname' IGNORE
Противоположность REPLACE
, существующие строки будут сохранены и новые игнорируются. Такое поведение аналогично LOCAL
описанному выше. Однако файл не должен существовать на клиентском компьютере.
LOAD DATA INFILE 'path of the file/file_name.txt'
IGNORE INTO TABLE employee
Загрузка через посреднический стол
Иногда игнорирование или замена всех дубликатов не может быть идеальным вариантом. Возможно, вам придется принимать решения на основе содержимого других столбцов. В этом случае лучшим вариантом является загрузка в промежуточную таблицу и перенос оттуда.
INSERT INTO employee SELECT * FROM intermediary WHERE ...
импорт Экспорт
Импортировать
SELECT a,b,c INTO OUTFILE 'result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM table;
экспорт
LOAD DATA INFILE 'result.txt' INTO TABLE table;