[MySQL] Возможно ли определить id вставленных записей с помощью Multi Insert

12
N
На сайте с 06.05.2007
Offline
419
#11

mysqli выглядит как бескостыльный.

ну разве что вам придется вместо insert into .. values (..), (..)

сформировать кучу отдельных операторов.

и, пожалуй, ожидать наличия mysqli на произвольном хостинге не стоит.

Еще можно ввести в таблицу "метку вставки" = значению функции connection_id() - она уникальна в рамках одного сервера.

а потом выбирать id вставленных строк по этой метке.

Кнопка вызова админа ()
lstaticl
На сайте с 07.02.2008
Offline
82
#12

Почитал повнимательнее, нашел, что для InnoDB можно повесить WRITE-блокировку, чтобы быть уверенным, что во время одного INSERT'a не начнет работать другой.

И тогда действительно для вычисления вставленных индексов хватит конструкции:


/**
* Возвращает список всех вставленных ID с помощью multiInsert()
**/
function get_all_insert_id($countLines) {
$arID = array();
for ($i = Mysql_insert_id(); $i <= (Mysql_insert_id() + $countLines); $i++) {
$arID[] = $i;
}

return $arID;
}

lstaticl добавил 24.01.2011 в 18:11

netwind:

и, пожалуй, ожидать наличия mysqli на произвольном хостинге не стоит.

Сервера все свои. Так что с этим проблем нету :)

Хочу выиграть MacBook (http://contest.adkeeper.ru)
N
На сайте с 06.05.2007
Offline
419
#13
lstaticl:
для InnoDB можно повесить WRITE-блокировку

Но глобальные блокировки таблицы замедлят сайт в целом, что, вероятно, противоречит вашим целям, из-за которых вы решили делать такую вставку.

lstaticl
На сайте с 07.02.2008
Offline
82
#14
netwind:
Но глобальные блокировки таблицы замедлят сайт в целом, что, вероятно, противоречит вашим целям, из-за которых вы решили делать такую вставку.

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

Будет свободное время, займусь. Потом отпишусь о результатах

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий