LINUX.ORG.RU
ФорумAdmin

данные из файла в MySQL


0

0

Подскажите, что не так. Пытаюсь загрузить данные из файла в MySQL таким макаром:

for i in `cat tel5`;do mysql -u root -e "insert into ad_out (tel) values ($i)" proba;done

После этого 95% записей дублированы. Файл с номерами тел. такого вида:

1412423
1234234
1234534
3453425

Так тоже не работает ...

mysql -u root -e "LOAD DATA INFILE "tel5" INTO TABLE ad_out" base

в файле около 8000 записей.

anonymous

1) вроде правильно. А записи _в_файле_ точно не дублированы?

cat tel5 | sort | uniq | while read a do ; <что сделать>;done

2) Разве существует ограничение на размер? К тому же, если мне не изменяет склероз, нужно

LOAD DATA LOCAL INFILE

router ★★★★★
()
Ответ на: комментарий от router

cat tel5 | sort | uniq -- Это было сделано до того как ... . Размер я дал для информации (вдруг на что то влияет :-) )

>LOAD DATA LOCAL INFILE

Это тоже не дает ни чего. Хотя сейчас гляну настройки сервака, может из за этого не работает ...
Но меня больше 1 вариант интересует - почему не работает???

anonymous
()
Ответ на: комментарий от anonymous

Кстати проверено на двух серверах. Под openSuse 10.2 и Ubuntu 6*. Тоже для информации.

anonymous
()
Ответ на: комментарий от anonymous

1) >cat tel5 | sort | uniq -- Это было сделано до того как

Тогда почему

>1412423 >1234234

? Должно быть наоборот, если sort отработал

2) Для проверки всегда можно сравнить количество строк в файле ( wc -l ) и записей в таблице ( count(*) )

router ★★★★★
()
Ответ на: комментарий от router

>1412423 >1234234

Это я просто для примера набрал, для отображения структуры файла.

2) Для проверки всегда можно сравнить количество строк в файле ( wc -l ) и записей в таблице ( count(*) )

Это тоже совпадает, только вместо прмерно 80%-90% номеров получается один и тот же номер ...???

anonymous
()
Ответ на: комментарий от anonymous

>Это тоже совпадает, только вместо прмерно 80%-90% номеров получается один и тот же номер ...???

Аааа... После прочтения вопроса решил, что некоторые строки оказываются добавленными несколько раз. =)

Тогда не знаю. Попробуйте что ли в команде перед mysql поставить echo и посмотреть, что отправляется на выполнение. Мало ли...

router ★★★★★
()
Ответ на: комментарий от router

Добавляю echo - смотрю, ни одной ошибки все ОК. В результате вот:

+----+------------+------+------+------+
| id | tel        | vol1 | vol2 | vol3 |
+----+------------+------+------+------+
|  1 | 2025808200 |    0 |    0 |    0 |
|  2 | 2122221653 |    0 |    0 |    0 |
|  3 | 2122227051 |    0 |    0 |    0 |
|  4 | 2122409065 |    0 |    0 |    0 |
|  5 | 2122802721 |    0 |    0 |    0 |
|  6 | 2122807461 |    0 |    0 |    0 |
|  7 | 2124268471 |    0 |    0 |    0 |
|  8 | 2125312679 |    0 |    0 |    0 |
|  9 | 2125331712 |    0 |    0 |    0 |
| 10 | 2125952385 |    0 |    0 |    0 |
| 11 | 2126665769 |    0 |    0 |    0 |
| 12 | 2126854745 |    0 |    0 |    0 |
| 13 | 2127722404 |    0 |    0 |    0 |
| 14 | 2128299167 |    0 |    0 |    0 |
| 15 | 2128661484 |    0 |    0 |    0 |
| 16 | 2128683728 |    0 |    0 |    0 |
| 17 | 2128766536 |    0 |    0 |    0 |
| 18 | 2129232188 |    0 |    0 |    0 |
| 19 | 2129329098 |    0 |    0 |    0 |
| 20 | 2129331053 |    0 |    0 |    0 |
| 21 | 2147483647 |    0 |    0 |    0 |
| 22 | 2147483647 |    0 |    0 |    0 |
| 23 | 2147483647 |    0 |    0 |    0 |
| 24 | 2147483647 |    0 |    0 |    0 |
| 25 | 2147483647 |    0 |    0 |    0 |
| 26 | 2147483647 |    0 |    0 |    0 |
| 27 | 2147483647 |    0 |    0 |    0 |
| 28 | 2147483647 |    0 |    0 |    0 |
| 29 | 2147483647 |    0 |    0 |    0 |
| 30 | 2147483647 |    0 |    0 |    0 |
+----+------------+------+------+------+

И так до конца вот этот номер "2147483647". Может таблицу не правильно создал? Вот опции:

CREATE TABLE `ad_out` (
  `id` int(11) NOT NULL auto_increment,
  `tel` int(11) default NULL,
  `vol1` int(11) NOT NULL,
  `vol2` int(11) NOT NULL,
  `vol3` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

anonymous
()
Ответ на: комментарий от router

Спасибо за участие. Допер. Нужно в поле tel использовать не int а varchar:

CREATE TABLE `ad_out` (
  `id` int(11) NOT NULL auto_increment,
  `tel`  varchar(11) default NULL,
  `vol1` int(11) NOT NULL,
  `vol2` int(11) NOT NULL,
  `vol3` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

anonymous
()
Ответ на: комментарий от router

mysql -u root -e "LOAD DATA LOCAL INFILE "tel5" INTO TABLE ad_out (tel)" base

mysql -u root -e "LOAD DATA INFILE "tel5" INTO TABLE ad_out (tel)" base

mysql -u root -e "LOAD DATA LOCAL INFILE "tel5" INTO TABLE ad_out1 (tel)" proba ERROR 1064 (42000) at line 1: 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 'tel5 INTO TABLE ad_out1 (tel)' at line 1

И все же почему это не работает ни с параметром "LOCAL", ни без него?

anonymous
()
Ответ на: комментарий от anonymous

Не обратил внимание, что кавычки экранируются

mysql -u root -e "LOAD DATA INFILE 'tel5' INTO TABLE ad_out (tel)" base

или

mysql -u root -e "LOAD DATA INFILE \"tel5\" INTO TABLE ad_out (tel)" base

router ★★★★★
()
Ответ на: комментарий от router

Блин ... Оказалось, что файл "ОБЯЗАТЕЛЬНО" нужно положить в каталог с базой, в данном случае "/var/lib/mysql/proba/tel5" ... Но с номерами та же байда, нужно создавать COLUMN VARCHAR() для данных из файла.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.