|
|
|
Как узнать и использовать id только что прошедшей операции?
|
|||
|---|---|---|---|
|
#18+
Как узнать и использовать id только что прошедшей операции? Делаю запись в таблицу, её назначается первичный ключ и мне нужно этот первичный ключ узнать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 16:18:44 |
|
||
|
Как узнать и использовать id только что прошедшей операции?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 16:20:41 |
|
||
|
Как узнать и использовать id только что прошедшей операции?
|
|||
|---|---|---|---|
|
#18+
miksoft LAST_INSERT_ID() а мне почему-то кажется что это довольно опасная процедура, потому что между вставкой и вызовом этого last_insert_id() какой-нибудь другой процесс может успеть вставить что-то ещё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 21:19:03 |
|
||
|
Как узнать и использовать id только что прошедшей операции?
|
|||
|---|---|---|---|
|
#18+
Lumixmiksoft LAST_INSERT_ID() а мне почему-то кажется что это довольно опасная процедура, потому что между вставкой и вызовом этого last_insert_id() какой-нибудь другой процесс может успеть вставить что-то ещё...Ну Вы то хоть не позорьтесь, в доку не заглянувши :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 21:28:15 |
|
||
|
Как узнать и использовать id только что прошедшей операции?
|
|||
|---|---|---|---|
|
#18+
Lumixmiksoft LAST_INSERT_ID() а мне почему-то кажется что это довольно опасная процедура, потому что между вставкой и вызовом этого last_insert_id() какой-нибудь другой процесс может успеть вставить что-то ещё... чтоб не беспокоиться - делай всё в хранимке, можешь в транзакции, чтоб на 200% спалось спокойно :) http://www.mysql.ru/docs/man/Miscellaneous_functions.html LAST_INSERT_ID([expr]) Возвращает последнюю автоматически сгенерированную величину, которая была внесена в столбец AUTO_INCREMENT. See section 8.4.3.126 mysql_insert_id(). mysql> SELECT LAST_INSERT_ID(); -> 195 Значение последнего сгенерированного ID сохраняется на сервере для данного конкретного соединения и не будет изменено другим клиентом. Оно не будет изменено даже при обновлении другого столбца AUTO_INCREMENT конкретной величиной (то есть, которая не равна NULL и не равна 0). При внесении большого количества строк с помощью одной команды INSERT функция LAST_INSERT_ID() возвращает значение для первой внесенной строки. Причина этого заключается в том, что можно легко воспроизвести точно такую же команду INSERT на другом сервере. Если задано значение аргумента expr в функции LAST_INSERT_ID(), то величина аргумента возвращается функцией и устанавливается в качестве следующего значения, которое будет возвращено функцией LAST_INSERT_ID(). Это можно использовать для моделирования последовательностей: Вначале создается таблица: mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES (0); Затем данную таблицу можно использовать для генерации чисел последовательности как показано ниже: mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1); Можно генерировать последовательности без вызова LAST_INSERT_ID(): полезность применения данной функции состоит в том, что данное значение ID поддерживается на сервере как последняя автоматически сгенерированная величина (защищенная от других пользователей), и вы можете извлекать новый ID так же, как и любое другое нормальное значение AUTO_INCREMENT в MySQL. Например, функция LAST_INSERT_ID() (без аргумента) возвратит новое значение ID. Функцию C API mysql_insert_id() также можно использовать для получения этой величины. Следует учитывать, что, поскольку функция mysql_insert_id() обновляется только после команд INSERT и UPDATE, то нельзя использовать эту функцию C API для извлечения значения ID для LAST_INSERT_ID(expr) после выполнения других команд SQL, таких как SELECT или SET. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 21:29:41 |
|
||
|
Как узнать и использовать id только что прошедшей операции?
|
|||
|---|---|---|---|
|
#18+
вадячтоб не беспокоиться - делай всё в хранимке, можешь в транзакцииНи хранимки, ни транзакции тут ничем не помогут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 21:31:27 |
|
||
|
Как узнать и использовать id только что прошедшей операции?
|
|||
|---|---|---|---|
|
#18+
я понимаю, что Значение последнего сгенерированного ID сохраняется на сервере для данного конкретного соединения и не будет изменено другим клиентом. Оно не будет изменено даже при обновлении другого столбца AUTO_INCREMENT конкретной величиной этим снимаются все опасения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 21:44:47 |
|
||
|
Как узнать и использовать id только что прошедшей операции?
|
|||
|---|---|---|---|
|
#18+
вадяя понимаю, что Значение последнего сгенерированного ID сохраняется на сервере для данного конкретного соединения и не будет изменено другим клиентом. Оно не будет изменено даже при обновлении другого столбца AUTO_INCREMENT конкретной величиной этим снимаются все опасения?Опасения относительно влияния других сессий - да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2014, 22:07:46 |
|
||
|
|

start [/forum/search_topic.php?author=VitalkaN&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
get settings: |
7ms |
get forum list: |
10ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 1106ms |
| total: | 1312ms |

| 0 / 0 |
