|
|
|
Вставить новую строку и получить значение автоинкрементного поля одним запросом.
|
|||
|---|---|---|---|
|
#18+
Я далеко не специалист в mysql но столкнулс с необходимостью решить следущую задачу. Пишу скрипт для www в котором должен выписываться счет на оплату. Скажем есть таблица с полями Код: plaintext 1. Мне необходимо, чтобы пользователь по одному запросу создавал новую строку в этой таблице и сразу получал id только что созданной строки. Конечно можно использовать select MAX(id) что явно не корректно, так как в это же время другой процесс мог создать слудещее значение id что приведет к тому, что один и тот же id будет возвращен 2м или более клиентам. Использую mysql 4.1. Понимаю что подобная задача классически должна рашаться с ипользованием хранимых процедур (и)или блокировок. Нужен Ваш совет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2005, 20:07:36 |
|
||
|
Вставить новую строку и получить значение автоинкрементного поля одним запросом.
|
|||
|---|---|---|---|
|
#18+
mysql_insert_id([int $link_identifier]) Функция возвращает непосредственно перед ее вызовом сгенерированный идентификатор записи для автоинкрементного поля после выполнения команды insert. Вызывать ее разумно только сразу после выполнения инструкции insert, например, в таком контексте: mysql_query("insert into Таблица(поле 1, поле 2) values("aa","bb")"); $id=mysql_insert_id(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2005, 20:18:25 |
|
||
|
Вставить новую строку и получить значение автоинкрементного поля одним запросом.
|
|||
|---|---|---|---|
|
#18+
2 Village почему вы решили, что автору топика нужны API РНР??? 2 samon RTFM ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2005, 10:24:14 |
|
||
|
Вставить новую строку и получить значение автоинкрементного поля одним запросом.
|
|||
|---|---|---|---|
|
#18+
Одним запросом не получится в 4.1 и вообще не получится ни в каком сервере БД, и знакомство с MySQL тут не при чем. Делается 2-мя запросами, табличка для примера такая Код: plaintext 1. 2. 3. 4. Запросы такие Код: plaintext 1. Для 5.0 это можно положить в процедуру, тогда из клиента это будет 1 запрос - вызов хранимой процедуры, в 4.1 нельзя, т.к. хранимок нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2005, 11:28:34 |
|
||
|
Вставить новую строку и получить значение автоинкрементного поля одним запросом.
|
|||
|---|---|---|---|
|
#18+
Валентин КОдним запросом не получится в 4.1 и вообще не получится ни в каком сервере БД, и знакомство с MySQL тут не при чем. Делается 2-мя запросами, табличка для примера такая Код: plaintext 1. 2. 3. 4. Запросы такие Код: plaintext 1. Для 5.0 это можно положить в процедуру, тогда из клиента это будет 1 запрос - вызов хранимой процедуры, в 4.1 нельзя, т.к. хранимок нет. Спасибо всем ответившим. то Валентин. Я именно таким способом и делаю. Но нет никаких гарантий, что другой сеанс не вставит новую строку между выполнением Код: plaintext Код: plaintext Именно поэтому я и спрашиваю, если мы не можем использовать хранимую процедуру (а это основной правильный вариант), то как еще можно перестраховаться от ввода новой строки до момента получения id только что введенной этим процессом? Я так понимаю что остаются блокировки. Может есть более правильные решения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2005, 11:55:56 |
|
||
|
Вставить новую строку и получить значение автоинкрементного поля одним запросом.
|
|||
|---|---|---|---|
|
#18+
авторИменно поэтому я и спрашиваю, если мы не можем использовать хранимую процедуру (а это основной правильный вариант), то как еще можно перестраховаться от ввода новой строки до момента получения id только что введенной этим процессом? Я так понимаю что остаются блокировки. Может есть более правильные решения? Моя ссылка не была прочитана, в следствие чего начинает изборетаться велосипед. ---------------------------------------- Артисты не приехали, приехали цыгане ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2005, 12:04:18 |
|
||
|
Вставить новую строку и получить значение автоинкрементного поля одним запросом.
|
|||
|---|---|---|---|
|
#18+
You can retrieve the most recent AUTO_INCREMENT value with the LAST_INSERT_ID() SQL function or the mysql_insert_id() C API function. These functions are connection-specific, so their return values are not affected by another connection which is also performing inserts. Note: For a multiple-row insert, LAST_INSERT_ID() and mysql_insert_id() actually return the AUTO_INCREMENT key from the first of the inserted rows. This allows multiple-row inserts to be reproduced correctly on other servers in a replication setup. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2005, 12:20:31 |
|
||
|
|

start [/forum/search_topic.php?author=alexanderkryvda&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 698ms |
| total: | 866ms |

| 0 / 0 |
