The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"MySQL:Не загружаются данные в базу из файла"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"MySQL:Не загружаются данные в базу из файла"  
Сообщение от andrystepa (ok) on 14-Июл-08, 13:58 
Операционная система: Fedora Core 8. Установленная версия MySQL - 5.0.45-6.fc8.i386. Создал тренировочную базу данных, с таблицей в виде телефонной книжки.

CREATE TABLE phonelist ( id INT PRIMARY KEY,  firstname VARCHAR(15),  lastname VARCHAR(15),  email VARCHAR(20),  phone VARCHAR(15) );

Таблица благополучно создалась. Вношу в нее запись:

mysql> INSERT INTO phonelist VALUES ( 0, 'Ivanov', 'Ivan', 'ivanov@mail.ru', '890571174403');
mysql>  SELECT * FROM phonelist;

Показывает, что запись внесена, никаких проблем нет. Далее создал файл записей, по одной записи в строке, поля разделены пробелами. Файл такой:
 
Petrov Sergey netuti@rambler.ru 84996969936
Sidorov Nikolay nic@hotmail.ru 4824870
Rjevsky Victor poruchik@rambler.ru 6240432

Добавляю файл в таблицу:

mysql> LOAD DATA LOCAL INFILE "/home/phones.txt" INTO TABLE phonelist;
Query OK, 0 rows affected, 7 warnings (0.00 sec)
Records: 3  Deleted: 0  Skipped: 3  Warnings: 4

Хрен чего добавилось! Ошибок нет, но есть какие-то предупреждения. Правда как их прочесть я не знаю. В логе вообще ничего - только сообщение о запуске mysqld.
Переделываю файл - разделителем полей делаю запятую. Загружаю в базу:

LOAD DATA LOCAL INFILE "/home/phones.txt" INTO TABLE phonelist FIELDS TERMINATED BY ','
    -> LINES TERMINATED BY '\n';
Query OK, 0 rows affected, 7 warnings (0.00 sec)
Records: 3  Deleted: 0  Skipped: 3  Warnings: 4

Все запросы, которые я делаю почерпнул из книжек по MySQL. Я довольно часто сталкивался с ошибками в книгах, но тут похоже ошибки нет - я просмотрел еще несколько статей в инете, там форма запроса указана такая-же! Где же тут ошибка? Что я делаю не так?
Подскажите пожалуйста!

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "MySQL:Не загружаются данные в базу из файла"  
Сообщение от angra (ok) on 14-Июл-08, 14:20 
Забить на книжки и читать родную документацию, пока не наступит просветление. Хотя возможно проблема не в книжках.
Внимание подсказки:
1. в файле 4 поля, а в таблице пять, причем первое целое, а не строка.
2. мускул телепатии не обучен и не знает, что вы бы хотели загружать данные только в последние четыре поля, а первое заполнять автоматически.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "MySQL:Не загружаются данные в базу из файла"  
Сообщение от andrystepa (ok) on 14-Июл-08, 20:23 
>Забить на книжки и читать родную документацию, пока не наступит просветление. Хотя
>возможно проблема не в книжках.
>Внимание подсказки:
>1. в файле 4 поля, а в таблице пять, причем первое целое,
>а не строка.
>2. мускул телепатии не обучен и не знает, что вы бы хотели
>загружать данные только в последние четыре поля, а первое заполнять автоматически.
>

А как сделать, чтобы заполнялось автоматически? В Access есть такой тип поля: Счетчик. А вот в тех материалах по MySQL, которые у меня есть я счетчика не нашел.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "MySQL:Не загружаются данные в базу из файла"  
Сообщение от ПитерПен on 14-Июл-08, 21:27 
А если так, стругаем файлег phonelis.sql:
-- создаем базу
DROP TABLE IF EXISTS `phonelist`;
CREATE TABLE `phonelist` (
  `id` int(11) NOT NULL auto_increment,
  `firstname` VARCHAR(15),
  `lastname` VARCHAR(15),
  `email` VARCHAR(20),
  `phone` VARCHAR(15)
  PRIMARY KEY  (`id`)
);
-- далее вносим в неё:
INSERT INTO `phonelist` (id,firstname,lastname,email,phone) VALUES('1','Petrov','Sergey','netuti@rambler.ru','84996969936');
INSERT INTO `phonelist` (id,firstname,lastname,email,phone) VALUES('2','Sidorov','Nikolay','nic@hotmail.ru','4824870');
INSERT INTO `phonelist` (id,firstname,lastname,email,phone) VALUES('3','Rjevsky','Victor','poruchik@rambler.ru','6240432');

Для автоматического заполнения id и нужно auto_increment (я для примера показал как залить с id (потом выкинуть нафик))
То есть можно/нужно вливать данные без указания id (mysql сама разберется)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "MySQL:Не загружаются данные в базу из файла"  
Сообщение от andrystepa (ok) on 15-Июл-08, 16:17 
>[оверквотинг удален]
>  PRIMARY KEY  (`id`)
>);
>-- далее вносим в неё:
>INSERT INTO `phonelist` (id,firstname,lastname,email,phone) VALUES('1','Petrov','Sergey','netuti@rambler.ru','84996969936');
>INSERT INTO `phonelist` (id,firstname,lastname,email,phone) VALUES('2','Sidorov','Nikolay','nic@hotmail.ru','4824870');
>INSERT INTO `phonelist` (id,firstname,lastname,email,phone) VALUES('3','Rjevsky','Victor','poruchik@rambler.ru','6240432');
>
>Для автоматического заполнения id и нужно auto_increment (я для примера показал как
>залить с id (потом выкинуть нафик))
>То есть можно/нужно вливать данные без указания id (mysql сама разберется)

На такой скрипт выдается ошибка:


RROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('id')
)' at line 7

Работает такой:

DROP TABLE IF EXISTS phonelist;
CREATE TABLE phonelist (
id INT(11) NOT NULL auto_increment PRIMARY KEY,
firstname VARCHAR(15),
lastname VARCHAR(15),
email VARCHAR(25),
phone VARCHAR(15)
);

Но и при этом, в файл данных все равно надо добавлять номера записей, иначе MySQL на место номера попытается вписать фамилию. Вся таблица сдвигается.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "MySQL:Не загружаются данные в базу из файла"  
Сообщение от alex_hunt (ok) on 15-Июл-08, 21:02 
>[оверквотинг удален]
>id INT(11) NOT NULL auto_increment PRIMARY KEY,
>firstname VARCHAR(15),
>lastname VARCHAR(15),
>email VARCHAR(25),
>phone VARCHAR(15)
>);
>
>Но и при этом, в файл данных все равно надо добавлять номера
>записей, иначе MySQL на место номера попытается вписать фамилию. Вся таблица
>сдвигается.

Если я правильно понял тебя интересует ввод данных в таблицу без указания индекса id.
ПитерПен пропустил запятую, поэтому и выпала такая ошибка. Такой код должен пройти:


-- создаем базу
DROP TABLE IF EXISTS `phonelist`;
CREATE TABLE `phonelist` (
  `id` int(11) NOT NULL auto_increment,
  `firstname` VARCHAR(15),
  `lastname` VARCHAR(15),
  `email` VARCHAR(20),
  `phone` VARCHAR(15),
  PRIMARY KEY  (`id`)
);
-- далее вносим в неё:
INSERT INTO `phonelist` (firstname,lastname,email,phone) VALUES('Petrov','Sergey','netuti@rambler.ru','84996969936');
INSERT INTO `phonelist` (firstname,lastname,email,phone) VALUES('Sidorov','Nikolay','nic@hotmail.ru','4824870');
INSERT INTO `phonelist` (firstname,lastname,email,phone) VALUES('Rjevsky','Victor','poruchik@rambler.ru','6240432');

поле `id` заполняется автоматически.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "MySQL:Не загружаются данные в базу из файла"  
Сообщение от angra (ok) on 15-Июл-08, 23:34 
Ну неужели так трудно открыть раздел доки по LOAD DATA? Или прочитать пару страничек это за гранью ваших возможностей? При желании поля можно пропускать, дублировать, создавать на ходу итд. Там даже примеры есть.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "MySQL:Не загружаются данные в базу из файла"  
Сообщение от andrystepa (ok) on 16-Июл-08, 11:30 
>Ну неужели так трудно открыть раздел доки по LOAD DATA? Или прочитать
>пару страничек это за гранью ваших возможностей? При желании поля можно
>пропускать, дублировать, создавать на ходу итд. Там даже примеры есть.

Прочитал:

LOAD DATA INFILE

СИНТАКСИС:

LOAD DATA INFILE syntax

ОПИСАНИЕ:

Команды, для чтения данных из текстового файла.

ПРИМЕР:

LOAD DATA INFILE 'customer.tab' [REPLACE | IGNORE] INTO TABLE Customer [fields [terminated by ',' [optionally] enclosed by '"' escaped by '\\' ]] [lines terminated by '\n'] [(field list)]

Для записи в текстовый файл используйте:
SELECT ... INTO OUTFILE 'customer.tab' fields terminated by ',' enclosed by '"' escaped by '\\' lines terminated by '\n' .

"fields terminated by"     Имеет значение по умолчанию \t.
"fields [optionally] enclosed by"     Имеет значение по умолчанию ".
"fields escaped by"     Имеет значение по умолчанию '\\'.
"lines terminated by"     Имеет значение по умолчанию '\n'.

"fields terminated by" и "lines terminated by" могут быть больше, чем 1 символом.

Если "fields terminated by" и "fields enclosed by" являются пустыми строками, то размер строки будет фиксированным. То есть, будет производиться чтение полей одной длины.

С фиксированными значениями NULL для размера строки будут выводиться пустые строки.

Если указаны "optionally" в "enclosed by" и Вы не используете фиксированный размер строк, только строки с этим символом будут включены в команду SELECT ... INTO.

Если "escaped by" не пусто, то следующие символы будут снабжены префиксом: "escaped by", ASCII 0, и первый символ из "fields terminated by", "fields enclosed by" и "lines terminated by".

Если использован REPLACE, новая строка заменит все строки, которые имеют тот же самый уникальный ключ. Если использован IGNORE, строки будут пропущен, если там уже существует запись с идентичным уникальным ключом. Если ни один из вышеупомянутых параметров не используется, будет выдана ошибка, и остальная часть textfile будет игнорироваться, если найден дублирующий ключ.

Некоторые ситуации, которые не поддерживаются LOAD DATA INFILE:

    * Фиксированные размеры строк ("FIELDS TERMINATED BY" и "FIELDS ENCLOSED BY" являются пустыми) и поля BLOB.
    * Разделитель, являющийся префиксом другого разделителя.
    * "FIELDS ESCAPED BY" пустое и данные содержат один или несколько разделителей.

Все строки читаются в таблицу. Если строка имеет слишком мало полей, остальная часть полей в таблице устанавливается в значения по умолчанию.

По соображениям безопасности textfile должен находиться в каталоге баз данных или быть читаемым всеми.

Если "FIELDS ENCLOSED BY" не пустое, то NULL читается как значение NULL. Если "FIELDS ESCAPED" не пустое, то \N тоже читается как значение NULL. Note Обратите внимание, что это БОЛЬШАЯ N, верхний регистр!

Когда запрос LOAD DATA выполнен, Вы можете получить следующую строку информации, используя функцию C API mysql_info().

@result{Records: 1 Deleted: 0 Skiped: 0 Warnings: 0}

Переменная Warnings увеличивается с каждым столбцом, который не может быть сохранен без потери точности, для каждого столбца, который не получал значение из строки текста при чтении (это случается, если строка слишком короткая) и для каждой строки, которая имеет большее количество данных чем может вписываться в данные столбцы.

Вы должны иметь права доступа select и insert таблице user для использования этой команды.


И где тут написано, как вводить данные в автоматически инкрементируемые поля?! Может у меня глюки - но я не вижу!
Этот док взят с этого же сайта. Возможно есть другие доки - к сожалению я пока плохо знаком с MySQL и просто не знаю, где их взять! Я знаю лишь 5-6 команд - практически все что я знаю я привел в примере.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "MySQL:Не загружаются данные в базу из файла"  
Сообщение от andrystepa (ok) on 16-Июл-08, 12:26 
Ага! Все-таки нашел! За то, в какие поля вписывать данные отвечает опция
(field list). В скобках перечисляются имена полей, в которые следует
записывать данные из файла. В остальные поля, по-видимому, будут записаны
значения по умолчанию.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "MySQL:Не загружаются данные в базу из файла"  
Сообщение от angra (ok) on 16-Июл-08, 22:16 
В принципе верно. Вот только не используйте учебники как справочники, в приведенном вами тексте ряд неточностей и упущений. Используйте родную доку, она значительно лучше, а главное актуальней :)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру