Автор Тема: Много insert / update  (Прочитано 8590 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Много insert / update
« : 10 Октября 2007, 12:19:11 »
Для insert можно обрабатывать много запросов, типа:
$d=$dbh->prepare("INSERT INTO table (id, podr) VALUES (\'1\', \'$u[1]\'), (\'2\', \'$u[2]\'), (\'3\', \'$u[2]\')");
$d->execute or die $DBI::errstr;


Для update в доке ничего не нашел :(
Запрос типа:
$d=$dbh->prepare("UPDATE SET table pole=\'1\', podr=\'$podr\' WHERE niv4=\'$code\'");
$d->execute or die $DBI::errstr;


Можно ли много запросов в одну строку запихнуть?
« Последнее редактирование: 12 Октября 2007, 13:38:21 от NAS »
Если ты не один, значит... ты ноль!

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Много insert / update
« Ответ #1 : 10 Октября 2007, 15:33:34 »
Harvester
можно...
And no religion too...

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Много insert / update
« Ответ #2 : 10 Октября 2007, 15:34:14 »
Harvester
и ещё...
зачем тебе prepare когда есть do?
And no religion too...

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Много insert / update
« Ответ #3 : 10 Октября 2007, 17:24:49 »
мну интересует синтаксис этой длиНННой строки:rolleyes:

ps
можно и do.
Если ты не один, значит... ты ноль!

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Много insert / update
« Ответ #4 : 11 Октября 2007, 02:36:05 »
Для sql команд которые ничего, кроме статуса, не возвращают используется do.


foreach () {
   $dbh->do( "INSERT INTO $tableName VALUES ($data)" ) or print "INSERT INTO $tableName VALUES ($data)\\nThe query can\'t be executed: $DBI::errstr\\n";
}

аналогично с UPDATE
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Много insert / update
« Ответ #5 : 11 Октября 2007, 14:50:47 »
Пасиб:)
Разницу с do и prepare я знаю, просто копирую из одного в другое, вот и забылваю...

Наверно вопрос не так задал :(

foreach () {} был до этого... там и делается переменная  $all в которой формируется - "(\'1\', \'$u[1]\'), (\'2\', \'$u[2]\'), (\'3\', \'$u[2]\')"..............................)

чтобы потом вставить вместо переменной $all в
$d=$dbh->do("INSERT INTO table (id, podr) VALUES $all ");


Так вот, интересует подобная ерунда для UPDATE с WHERE. Как оно пишется? Чтобы do не стояло внутри foreach.
Если ты не один, значит... ты ноль!

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Много insert / update
« Ответ #6 : 12 Октября 2007, 02:18:30 »
Цитировать
Harvester:
Так вот, интересует подобная ерунда для UPDATE с WHERE. Как оно пишется? Чтобы do не стояло внутри foreach.


Даже если подобное есть использовать не буду и Вам не советую, а настоятельно рекомендую делать и UPDATE и INSERT внутри цикла по одной команде за проход, причины: читабельность, контроль (особенно при отлове ошибок).

[OFF]
>Если ты не один, значит... ты ноль!
ЖЕЛЕЗНАЯ логика :)
[/OFF]
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Много insert / update
« Ответ #7 : 12 Октября 2007, 11:49:25 »
vladsu, по одной оч. долго... Тут производительность нужна;)
Обработку более 10 миллионов записей будете ждать полдня... :(

Сейчас экспериментирую кусками, уже почти нащупал решение:D  Для сравнения, по инсертам разница в "по одной" и "по нескольку" - 220 и 30 сек!!!
Если ты не один, значит... ты ноль!

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Много insert / update
« Ответ #8 : 14 Октября 2007, 00:44:42 »
Harvester
если тебе нужна производетельность... причем тут вообще тогда перл?

используем С++, пишем функции для БД, в концче концов приводим исходный код БД в нужный тебе вид (это конечно только для особо больных)

но блин.. жаловатся на скорость и пользовать Перл - тупость!

Ложка хороша для супа... !
And no religion too...

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Много insert / update
« Ответ #9 : 14 Октября 2007, 14:16:01 »
Захотелось попробовать пооперировать большими данными. Никто не жалуется, пробую на что он способен вот и все:insane:

А на сколько перл медленнее с++ в данной области?
Если ты не один, значит... ты ноль!

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Много insert / update
« Ответ #10 : 15 Октября 2007, 20:11:30 »
Harvester
значительнее... поройся... где-то на форуме были бейчмарки..
And no religion too...

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Много insert / update
« Ответ #11 : 05 Ноября 2007, 14:52:02 »
может я не так понял, но "Можно ли много запросов в одну строку запихнуть?"
$dbh->do("UPDATE user SET login=".$dbh->quote($login).", mail=".$dbh->quote($mail).", pass=". $dbh->quote($pass).", code=".$dbh->quote($code)." WHERE login=".$dbh->quote($login)." OR mail=".$dbh->quote($mail));
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн WebZ

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://webz.ru
Много insert / update
« Ответ #12 : 24 Ноября 2007, 22:51:22 »
По поводу prepare и do скажу, что если передаются данные от пользователя, куда лучше делать через prepare и переменные втаскивать в execute для исключения возможных sql-инжектов + это не требует дополнительных проверок на все это дело

По поводу update-  нужно пояснить, то должен делать скрипт. INSERT по умолчанию добавляет одну строку, а update в то время обновляет все строки по "WHERE", т е уже работает со всеми даннами в условиями.
Что является целью?
Обновить разные данные в разных таблицах? (сделать несколько разных update запросов)
Или заменить разные поля с совершенно разными условиями?
Или что-то еще?
« Последнее редактирование: 24 Ноября 2007, 23:03:05 от WebZ »
WebZ.Ru - разработка сайтов.
Мы за Perl.

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Много insert / update
« Ответ #13 : 29 Ноября 2007, 17:40:09 »
согласен с Webz. вопрос *зачем это нужно?* весьма актуальный.
Если Вы конешно не человек-тестер.
 
и Примите во внимание, что таблица будет заблокирована на период обновлений

в зависимости от задачи можно было бы продумать и использовать внутреннии утилиты или сервисы репликации бд

а кстати какая бд используется?
множественный инсерт в Мускуле есть. по апдейту тоже согласен с Webz
убили кенни, сволочи

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Много insert / update
« Ответ #14 : 29 Ноября 2007, 23:10:45 »
Решение было найдено, просто надобность пока отпала... вернусь к этому вопросу когда будет время :(  
Меня здесь главным образом интересовала скорость update/insert. База - мускл.

По поводу "зачем это"? Затем, чтобы попробовать загрузить базу - более десятка миллионов записей в табличку под 50 полей. Чтобы потом оперировать данными;) Чисто проверить практику, посомтреть время и тд, чтобы понять стоит ли возиться с такими объемами и какие ресурсы это будет кушать :insane:

2 Yaroslav
см. мой первый пост первый запрос. Там в одном prepare/do "виртуально" формируется несколько update.
Если ты не один, значит... ты ноль!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28