parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Misha v.3 03.09.2005 13:17

-1. по моему ваш коллега вас мягко говоря обманул (или вы недопоняли его). select достающий last_insert_id() должен следовать ЗА insert. между ними не должно быть других insert-ов.

0. все делают иначе: добавляют запись в родительскую таблицу, берут значение last_insert_id() и в дочерние таблицы добавляют записи, где в качестве идентификатора используется это значение.

1. select max испольовать нельзя, надо использовать last_insert_id(). почему - прочитайте в доке по mysql

2. вероятность не считал, но если она есть, и если создателями sql серверов предлагаются механизмы, которые позволяют избежать этого - не вижу причин не пользоваться этим.

3. при использовании last_insert_id() в простейших случаях использовать commit не надо, хотя все зависит от вашей задачи. ведь возможно при добавлении связи в дочернюю таблицу произойдет что-то, что не позволит добавить запись (например вы добавили там какой-нить уникальный costraint), и в этом случае ваша задача будет требовать наличия отката добавленной записи в родительскую таблицу. при подобном раскладе commit нужен (commin - он немного из другой оперы).

4. даже при использовании нескольких connect на страницу парсер кеширует соединения, и это для sql сервера выглядит как один сеанс. далее опять читаем доку про last_insert_id().

5. считаю что вы пытаетесь придумать велосипед, тем самым создавая проблему на пустом месте. возможно можно придумать иной работающий механизм, но не вижу причин не пользоваться готовым, который прекрасно работает.