Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2012, 15:33   #1
kilogram
Форумчанин
 
Регистрация: 04.03.2012
Сообщений: 144
По умолчанию load data

Читаю здесь http://phpclub.ru/mysql/doc/load-data.html про LOAD DATA. Пишу так:
PHP код:
load data infile '1.txt' into table cat
Выдает такую ошибку на фото:

Что может быть?
Содержимое файла 1.txt
Код:
Андрей Пупкин 85

Таблица такая:
Код:
| cat   | CREATE TABLE `cat` (
  `number` int(11) NOT NULL AUTO_INCREMENT,
  `name1` varchar(20) DEFAULT NULL,
  `surname` char(12) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`number`),
  UNIQUE KEY `name1` (`name1`,`surname`,`age`)
) ENGINE=MyISAM AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 |
kilogram вне форума Ответить с цитированием
Старый 05.07.2012, 15:59   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

никогда не видел (и не знаю) про команду LOAD DATA,
но, судя по скриншоту ошибки, загрузка данных предполагает наличия данных по всем полям. в т.ч. и по автоинкрементному полю Number
попробуйте задать 1-е поле в текстовом файле
это раз.

а второе. обычно при импорте подобных тексовых данных настраивается разделитель полей (ну чем имя у Вас в файле отделяется от фамилии, или чем отделяется возраст и т.д.). пробел, имхо, не очень удачный разделитель.. впрочем, это уже совсем другая история..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.07.2012, 21:09   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что может быть?
Возможно в поле текстовика, которое соответствует number цифр, в числе более чем 11. Длины поля не хватает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.07.2012, 21:19   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

TC, не мешало бы дочитать статью по ссылке до конца и понять, что ожидает от текстового файла load data при вашем способе задания параметров
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.07.2012, 21:33   #5
kilogram
Форумчанин
 
Регистрация: 04.03.2012
Сообщений: 144
По умолчанию

Сохранил ЮТФ-8 без БОМ, сработало вроде.
Попробывал написать в файле 1.txt:

Код:
38,Василий,Дятлов,91
39,Пол,Андерсон,91
Вот моя таблица:

Код:
------------------------------------------------------------
| cat   | CREATE TABLE `cat` (
  `number` int(11) NOT NULL AUTO_INCREMENT,
  `name1` varchar(20) DEFAULT NULL,
  `surname` char(12) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`number`),
  UNIQUE KEY `name1` (`name1`,`surname`,`age`)
) ENGINE=MyISAM AUTO_INCREMENT=41 DEFAULT CHARSET=utf8 |

Ведь здесь стоит уникальный ключ на каждое поле чтобы не повторялось. Почему вставились 2 записи, ведь в последнем поле age 2 раза повторяется 91? Почему уникальный ключ не сработал?*
kilogram вне форума Ответить с цитированием
Старый 05.07.2012, 21:55   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ведь в последнем поле age 2 раза повторяется 91?
Потому что ключ у тебя не конкретно по age а составной по `name1`,`surname`,`age`.
повторы будут отсекаться только если в файле есть две одинаковые строки от и до.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.07.2012, 23:51   #7
kilogram
Форумчанин
 
Регистрация: 04.03.2012
Сообщений: 144
По умолчанию

Создал для теста таблицу dog:
Код:
| dog   | CREATE TABLE `dog` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 |

Как вставлять записи из файла в базу данных в которой содержится первичный ключ с автоинкрементом, так чтобы не писать над каждой записью в файле - номер вставляемой записи, а так чтобы в таблице этот номер вставлялся сам?

Код:
1 Василий 91 
2 Андерсон 18
Вот так работает, но приходится в файле нумеровать каждую вставляемую запись: 1, 2, 3, 4....

Код:
load data infile '1.txt' into table dog fields terminated by ' ';
Один нюанс заметил. При вставке в базу после этой строки, добавляются пробелы из-за terminated by ' ' , но парадокс, без неё не вставляется, а с ней вставляются пробелы. Как вставлять без пробелов?
Код:
load data infile '1.txt' into table dog fields terminated by '  ' (name,age)

Последний раз редактировалось Stilet; 06.07.2012 в 07:30.
kilogram вне форума Ответить с цитированием
Старый 07.07.2012, 12:40   #8
kilogram
Форумчанин
 
Регистрация: 04.03.2012
Сообщений: 144
По умолчанию

Вот мой файл 1.txt



Проблемма что добавляются в базу данных пробелы, а мне нужно их убрать. Как написать так чтобы не добавлялись пробелы?

Если написать так запрос:
Код:
load data infile '1.txt' into table dog (name, age);
получится ошибка:

А если написать так:

Код:
load data infile '1.txt' into table dog fields terminated by  '  '(name,age);
добавляет с пробелом, фото ниже.



Как написать чтобы не добавляло пробелы в базу?
kilogram вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
missing data provider or data packet Dexes БД в Delphi 3 06.01.2012 11:58
Jquery load в div Delphinchik JavaScript, Ajax 2 17.02.2011 16:27
Could not load file or assembly... Stilet Общие вопросы .NET 3 08.02.2010 18:03
Запуск Load.dll (бывшая Load.exe) в дереве проц-ов, Как запустить прогой на C# .dll-ку kapustin Общие вопросы .NET 10 23.09.2009 22:20