|
|
|
| Всем привет!
Есть такая проблема. Две таблицы табл1 и табл2. В табл1 поле ИД - primary index, в табл2 есть поле ид_табл1 с которым соеденено ИД табл1 по принципу 1 ко многим. Создается накладная. В табл1 пишется ее номер, от кого, кому, дата и всякая общая инфо. В табл 2 создается спецификация этой накладной, т.е. перечисляются все товары для этой накладной. Когда я создаю такой скрипт:
mysql_query("insert в табл1 значения");
для того чтобы узнать ИД последней записи табл1 я воспользовался mysql_insert_id()
mysql_query("insert в табл2 значения");
у меня возникает несколько вопросов. А что если кто-то между первым и вторым операторами сделает еще одну запись ва табл1 (много пользователей в системе), что мне покажет mysql_insert_id(), чей ИД, мой или того другого юзера??? Ведь это существенно для целостности БД.
Тип используемых табл пока MyIsam. Думаю, что здесь помогут транакции, переведу тип табл в InnoDB и вставлю несолько SQL- опрераторов в самое начало (BEGIN), затем те строки которые выше и в конец (COMMIT), но и тут у меня возникает этот вопрос какой ИД покажет мне фун-ция mysql_insert_id()???
Смоделировать такую систуацию с одноврем вставкой очень трудно, поэтому может кто-то читал и знает, прошу помочь? | |
|
|
|
|
|
|
|
для: maxnag
(20.08.2006 в 07:47)
| | mysql_insert_id() работает только в пределах текущей сесиии - т.е. они никогда не вернёт идентификатор, который вставил другой пользователь - она об нём просто не может узнать. Она всегда возвращает id, последней записи, которую вставил текущий клиент. Поэтому можете использовать её без опасений. | |
|
|
|
|
|
|
|
для: cheops
(20.08.2006 в 11:32)
| | Вы знаете cheops, я так и думал, что идентификатор который возникает при открытии соед БД присутствует везде, во всех вопросах в рамках этого соединения и соответ во всех операторах (ф-циях) касающ. работы с данными БД, но мне нужно было подтверждение моих мыслей.
Спасибо Вам.
ЗЫ Все переделал, все работает :-) | |
|
|
|