LAST_INSERT_ID в транзакции
Есть вот такая конструкция (упрощено для лучшего понимания):
Код:
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");
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");
Внимание, знатоки, вопрос! Верна ли данная конструкция и что вернёт LAST_ISERT_ID() в данном случае?
P.S. Гуглил - не нагуглил. Потестить не могу, ибо до компа далековато.
Код:
<?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");
?>
//кусок тестового примера
$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");
?>
Цитата: Reebka
Путём ненаучного эксперимента было выяснено, что LAST_INSERT_ID в данном случае возвращает именно последнее автоинкрементное значение. Таким образом, конструкция верна.
в чем все же суть эксперимента? Не очень понятно - ожидалось что LAST_INSERT_ID вернет не последнее вставленное?
Цитата: kot_
в чем все же суть эксперимента? Не очень понятно - ожидалось что LAST_INSERT_ID вернет не последнее вставленное?
Да, именно так и ожидалось. Думал, что возможно LAST_INSERT_ID вернет последнее вставленное значение после завершения транзакции.