SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.04.2011 13:24:05

Peroxide
Участник
Зарегистрирован: 08.04.2011
Сообщений: 6

Загрузка данных в таблицу через текстовый файл.

Здравствуйте. Я осваиваю MySQL.
При попытке загрузки данных через текстовый файл из приведённого в документации примера, возникакет ошибка:
mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
ERROR 2 (HY000): File 'pet.txt' not found (Errcode: 2)

Я скопировал этот файл также в директории \data и \data\mysql, результат не изменился.
В какой директории должен находиться файл, из которого будет происходить заполнение таблицы?
Спасибо.

Неактивен

 

#2 08.04.2011 13:42:36

ehill
Участник
Зарегистрирован: 23.03.2011
Сообщений: 10

Re: Загрузка данных в таблицу через текстовый файл.

Возможно явно указать откуда загружать файл
LOAD DATA INFILE 'C:\mysql\pet.txt' INTO TABLE pet;

Неактивен

 

#3 08.04.2011 14:16:03

Peroxide
Участник
Зарегистрирован: 08.04.2011
Сообщений: 6

Re: Загрузка данных в таблицу через текстовый файл.

Задал точное расположение файла. Почему-то программа его всё равно ищет по какому-то своему пути:

mysql> LOAD DATA INFILE 'C:\Program Files\MySQL\MySQL Server 5.5\data\pet.txt' I
NTO TABLE pet;
ERROR 29 (HY000): File 'C:\Documents and Settings\All Users\Application Data\MyS
QL\MySQL Server 5.5\Data\Program FilesMySQLMySQL Server 5.5datapet.txt' not foun
d (Errcode: 2)

Как задать по умолчанию пути поиска файлов?

Неактивен

 

#4 08.04.2011 16:19:57

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Загрузка данных в таблицу через текстовый файл.

Нужно экранировать символ "\" в путях в windows.

Попробуйте

LOAD DATA INFILE 'C:\\Program Files\\MySQL\\MySQL Server 5.5\\data\\pet.txt' INTO TABLE pet;
или
LOAD DATA INFILE 'C:/Program Files/MySQL/MySQL Server 5.5/data/pet.txt' INTO TABLE pet;

Отредактированно deadka (08.04.2011 16:21:34)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 08.04.2011 19:18:47

Peroxide
Участник
Зарегистрирован: 08.04.2011
Сообщений: 6

Re: Загрузка данных в таблицу через текстовый файл.

Спасибо, заработало.
Ещё небольшой вопрос: почему при загрузке из текстового файла нужно обязательно заполнять все строки и столбцы в этом файле?
При простановке на месте прочерка \N, \\N, NULL или просто пустого места, появляется ошибка:
' for column 'death' at row 1 date value: 'N ,
' for column 'death' at row 1 date value: '\N ,
' for column 'death' at row 1 date value: ',
или ' for column 'death' at row 1 date value: 'NULL.
соответственно. Как правильно задаётся прочерк в текстовом файле?

Неактивен

 

#6 08.04.2011 22:00:44

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Загрузка данных в таблицу через текстовый файл.

Что значит — прочерк в текстовом файле? Вы можете просто описать список столбцов,
которые есть в файле в скобках после LOAD DATA INFILE, остальные столбцы заполнят-
ся значениями по умолчанию (или NULL).

Неактивен

 

#7 08.04.2011 22:50:54

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Загрузка данных в таблицу через текстовый файл.

Если никто не против, на всякий случай приведу пример smile.

Допустим, у Вас есть таблица

CREATE TABLE `t_4087`
(
  `id` int(11) NOT NULL auto_increment primary key,
  `field_text` varchar(255) default NULL,
  `field_int`   int not NULL default 0,
  `field_int2` int not NULL default 0
);
 

Вы хотите вставить в нее данные из файла, при этом хотите заполнить все поля. Разделитель в файле пусть будет символ точка с запятой.

Содержимое файла:

1;some_text;3;4
2;some_another_text;33;34


Команда для загрузки данных:
load data infile "/tmp/d" into table t_4087 fields terminated by ";";

Отредактированно deadka (08.04.2011 22:51:11)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#8 11.04.2011 15:44:18

Peroxide
Участник
Зарегистрирован: 08.04.2011
Сообщений: 6

Re: Загрузка данных в таблицу через текстовый файл.

paulus, а как сделать, чтобы не весь столбец заполнился NULL, а только некоторые его ячейки?

deadka спасибо, с разделением таблицы проблем не возникло. Но вот когда программа видит в файле пустое текстовое поле на месте какой-либо ячейки (в формате даты), то отказывается загружать весь текст файла.

Отредактированно Peroxide (11.04.2011 15:45:05)

Неактивен

 

#9 11.04.2011 15:57:01

Peroxide
Участник
Зарегистрирован: 08.04.2011
Сообщений: 6

Re: Загрузка данных в таблицу через текстовый файл.

Прочерк в текстовом файле - имеется в виду, такая комбинация символов, при которой в таблице в нужной ячейке (в формате даты) будет NULL.

Неактивен

 

#10 11.04.2011 16:47:06

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Загрузка данных в таблицу через текстовый файл.

Peroxide написал:

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

А по какой причине отказывается? Приведите текст ошибки, а тажк приведите пожалуйста результат запроса

show create table pet;
и приложите пример файла, который Вы пытаетесь загрузить в базу.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#11 11.04.2011 18:59:48

Peroxide
Участник
Зарегистрирован: 08.04.2011
Сообщений: 6

Re: Загрузка данных в таблицу через текстовый файл.

Текст запроса:
mysql> load data infile "C:\\pet.txt" into table pet fields terminated by ";";
' for column 'death' at row 1 date value: '/N
Вторая строчка - результат. Текст в базу не добавился.



результат запроса
show create table pet;
:

| Table | Create Table


                          |
+-------+---------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------
--------------------------+
| pet   | CREATE TABLE `pet` (
  `name` varchar(20) DEFAULT NULL,
  `owner` varchar(20) DEFAULT NULL,
  `species` varchar(20) DEFAULT NULL,
  `sex` char(1) DEFAULT NULL,
  `birth` date DEFAULT NULL,
  `death` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------
------------------------------------------------------------
------------------------------------------------------------
--------------------------+



Загружался обычный файл формата txt с текстом:
"Fluffy;Harold;cat;f;1993-02-04;/N
Claws ;Gwen;cat;m;1994-03-17;/N
Buffy;Harold;dog;f;1989-05-13;/N
Fang ;Benny;dog;m;1990-08-27;/N
Bowser;Diane;dog;m;1998-08-31;1995-07-29
Chirpy;Gwen;bird;f;1998-09-11;/N
Whistler;\N;Gwen;bird;1997-12-09;/N
Slim;Benny;snake;m;1996-04-29;/N"

Варианты с подстановкой вместо /N, //N и NULL приводили к аналогичным результатам.

Неактивен

 

#12 12.04.2011 11:46:55

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Загрузка данных в таблицу через текстовый файл.

Вы пробуете вставить вместо даты значение /N, вот он и ругается.

Отредактированная версия файла:

Fluffy;Harold;cat;f;1993-02-04;
Claws ;Gwen;cat;m;1994-03-17;
Buffy;Harold;dog;f;1989-05-13;
Fang ;Benny;dog;m;1990-08-27;
Bowser;Diane;dog;m;1998-08-31;1995-07-29
Chirpy;Gwen;bird;f;1998-09-11;
Whistler;\N;Gwen;bird;1997-12-09;
Slim;Benny;snake;m;1996-04-29;


mysql> CREATE TABLE `t_4087_pet` (
    ->   `name` varchar(20) DEFAULT NULL,
    ->   `owner` varchar(20) DEFAULT NULL,
    ->   `species` varchar(20) DEFAULT NULL,
    ->   `sex` char(1) DEFAULT NULL,
    ->   `birth` date DEFAULT NULL,
    ->   `death` date DEFAULT NULL
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.24 sec)

mysql> load data infile "/tmp/pet.txt" into table t_4087_pet fields terminated by ";";
Query OK, 8 rows affected, 8 warnings (0.00 sec)
Records: 8  Deleted: 0  Skipped: 0  Warnings: 8

mysql> select * from t_4087_pet;
+----------+--------+---------+------+------------+------------+
| name     | owner  | species | sex  | birth      | death      |
+----------+--------+---------+------+------------+------------+
| Fluffy   | Harold | cat     | f    | 1993-02-04 | 0000-00-00 |
| Claws    | Gwen   | cat     | m    | 1994-03-17 | 0000-00-00 |
| Buffy    | Harold | dog     | f    | 1989-05-13 | 0000-00-00 |
| Fang     | Benny  | dog     | m    | 1990-08-27 | 0000-00-00 |
| Bowser   | Diane  | dog     | m    | 1998-08-31 | 1995-07-29 |
| Chirpy   | Gwen   | bird    | f    | 1998-09-11 | 0000-00-00 |
| Whistler | NULL   | Gwen    | b    | 1997-12-09 | 0000-00-00 |
| Slim     | Benny  | snake   | m    | 1996-04-29 | NULL       |
+----------+--------+---------+------+------------+------------+
8 rows in set (0.00 sec)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson