Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

LAST_INSERT_ID в транзакции

75K
10 сентября 2012 года
Reebka
9 / / 26.01.2012
День добрый! Возникла маленькая проблемка.

Есть вот такая конструкция (упрощено для лучшего понимания):

 
Код:
mysql_query("SET AUTOCOMMIT=0");
mysql_query("BEGIN");
mysql_query("INSERT INTO `one`(name) VALUES('Jack')");
mysql_query("INSERT INTO `two`(id) VALUES(LAST_INSERT_ID())");
mysql_query("COMMIT");
mysql_query("SET AUTOCOMMIT=1");
В таблице one есть поле с автоинкрементом.
Внимание, знатоки, вопрос! Верна ли данная конструкция и что вернёт LAST_ISERT_ID() в данном случае?

P.S. Гуглил - не нагуглил. Потестить не могу, ибо до компа далековато.
75K
11 сентября 2012 года
Reebka
9 / / 26.01.2012
Путём ненаучного эксперимента было выяснено, что LAST_INSERT_ID в данном случае возвращает именно последнее автоинкрементное значение. Таким образом, конструкция верна.


Код:
<?php

//кусок тестового примера

$q1 = mysql_query("SET AUTOCOMMIT=0");
$q2 = mysql_query("BEGIN");
$q3 = mysql_query("INSERT INTO `test`(name) VALUES('name')"); // имеет поле id с auto_increment

echo mysql_insert_id(); // вернула последний id

$q4 = mysql_query("INSERT INTO `test2`(id,name) VALUES(LAST_INSERT_ID(),'name')"); // не имеет полей с автоинкрементом
$q5 = mysql_query("COMMIT");
$q6 = mysql_query("SET AUTOCOMMIT=1");

?>
1
12 сентября 2012 года
kot_
7.3K / / 20.01.2000
Цитата: Reebka
Путём ненаучного эксперимента было выяснено, что LAST_INSERT_ID в данном случае возвращает именно последнее автоинкрементное значение. Таким образом, конструкция верна.


в чем все же суть эксперимента? Не очень понятно - ожидалось что LAST_INSERT_ID вернет не последнее вставленное?

75K
13 сентября 2012 года
Reebka
9 / / 26.01.2012
Цитата: kot_

в чем все же суть эксперимента? Не очень понятно - ожидалось что LAST_INSERT_ID вернет не последнее вставленное?



Да, именно так и ожидалось. Думал, что возможно LAST_INSERT_ID вернет последнее вставленное значение после завершения транзакции.

1
13 сентября 2012 года
kot_
7.3K / / 20.01.2000
Нет. LAST_INSERT_ID - зависит от коннекта, а не от транзакции.
Об єтом пишется здесь а хорошо иллюстрируется здесь
т.е. смысл в том - что выполнив вставку ты гарантированно получишь ид последней тобой вставленной записи.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог