[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как получить все $mysqli->insert_id за раз.
Страницы: 1, 2, 3, 4
redreem
Игорь_Vasinsky
можно сделать и "по серъезному" smile.gif запилить целый менеджер, обслуживающий айдишники smile.gif с контролем целостности и прочего smile.gif
Игорь_Vasinsky
Цитата
лишний запрос? в файле в 100500 раз быстрее.


если речь идёт о 1 млн пользователей и алгоритме для них?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
redreem
Игорь_Vasinsky
1 млн онлайн? smile.gif
вопрос требует четких изысканий по возможным сценариям.
для рядового бложка-новостника-каталожика - все нормально.
GET
Подниму пост...

т.к. не могу найти ответ на вопрос, как MYSQL вставляет несколько строк внутрь INNODB, нашел похожую тему на другом форуме там тоже никто не знает.

Вставляя строки, он может пропустить строку из другого коннекта, другого процесса или в этот момент доступ монополен?

p.s. использую транзакции

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Игорь_Vasinsky
какая разница тот или другой процесс
$mysqli->insert_id вернёт последний id строки добавленной в этом процессе

но ты то будешь от этого id выше и выше плясать - а в это время там накидают строк.

как ты разделишь строки в таблицы добавленные в твоём процессе и в других?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
GET
Игорь_Vasinsky

Допустим я вставил 10 строк.
Id последней строки 100.
...пока я перегружал страницу вставили еще 50...

итак имеем id_last=100.

Текущий=150, но мне он не интересен.

Я просто беру и от 100 отнимаю 10. Получаю, что первая из 10 вставленных строк имеет id=90.

Не?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Игорь_Vasinsky
ты добавлял 3 строки , я в это время 5 строк


ты
я
я
ты
ты - last insert
я
я
я

забери свои 3 строки - как?

я не в курсе, у меня не было таких задач. хоть id коннекта привязывай в БД

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sergeiss
Я отвечу, но не совсем в тему smile.gif Если использовать Постгре, то там такой проблемы нету. Все айдишники легко получить сразу же. Даже если они будут идти не подряд - допустим, работают сразу 2 команды вставки (из разных скриптов), то всё равно получим корректные данные. Ну, типа того, как Игорь пример привел - разруливается очень легко и просто.

А в Мускуле... Вставляй по одной строке, наверное?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
GET
Игорь_Vasinsky
Вот я о чем и говорю...

Цитата
другого процесса или в этот момент доступ монополен?

может такое быть, как ты описал или нет? Или вот так происходит строго
пока

ты
ты
ты - last insert

не закончится

я
я
я
я
я

не произойдет.


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Вот здесь прочитал:

http://phpclub.ru/mysql/doc/ansi-diff-transactions.html

, что вроде как INSERT в MYSQL атомарен, как бы пока процесс не закончится другой не начнется, но до конца не уверен.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
Предлагают применять LOCK TABLES, но мне это не нужно.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
twin
Цитата (ABC @ 30.10.2013 - 08:43)
Вставляя строки, он может пропустить строку из другого  коннекта, другого процесса или в этот момент доступ монополен?

При обычных настройках последовательность автоинкрементных элементов не нарушается. Нарушить её можно только при режиме innodb_autoinc_lock_mode = 1 или 2, и то при использовании INSERT... SELECT, так как мускул не знает заранее, сколько зарезервировать элементов.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
GET
twin

Т.е. мульти вставка ну множественный INSERT INTO одним запросом, "заставит" ждать другой такой же запрос, как я понял? Да, вероятно так и должно быть.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
twin
Он не заставляет никого ждать. Он просто резервирует количество элементов, если знает заранее. При "мультивставке" знает.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Игорь_Vasinsky
ABC
я же говорю - я не в курсе - я только предположения высказал

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.