|
|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Alex Mikhajlichenko 2:5020/400 21 Feb 2001 13:35:47 To : All Subject : Re: mySQL вопрос (наверное дурацкий) -------------------------------------------------------------------------------- 21-Feb-01 08:28 Vova Aksionov (fraks@mail.nsk.ru) wrote : >>LAST_INSERT_ID([expr]) >> >>Returns the last automatically-generated value that was inserted into an >>AUTO_INCREMENT column. > Если эта штука действует вне контекста транзакции, а именно так мне и > представляется, то эффект аналогичен select max(), только побыстрее но > с теми же недостатками. > Если в контексте - это то что нужно. > Может я несколько не прав на счет транзакции но смысл такой - я должен > быть уверен что это Я вставлял эту запись, ID которой выдается. Если > такой уверенности не гарантируется - то см. выше. Согласно документации, эта штука работает в контексте текущей коннекции. И это действительно так. То есть это - действительно работоспособное средство работы с последней вставленной записью. Hижеприведенное грандиозное шоу демонстрирует это: Свыше дана пустая таблица: create table test1 (id int not null auto_increment primary key); ** Со своей консоли заходит ленивый User 1 ************* mysql> select * from test1; Empty set (0.00 sec) - хм, действительно пусто mysql> insert into test1 (id) values (NULL); - надо бы вставить! Query OK, 1 row affected (0.04 sec) mysql> select * from test1; - проверим +----+ | id | +----+ | 1 | +----+ 1 row in set (0.09 sec) - действительно что-то появилось mysql> select LAST_INSERT_ID(); - а что собственно мы вставили? +------------------+ | last_insert_id() | +------------------+ | 1 | +------------------+ 1 row in set (0.00 sec) - сомнений быть не может, id=1 Ленивый User1 пошел пить кофе, попутно замышляя что-то недоброе по отношению к вставленной записи. Она просто из головы не выходит! Hадо будет еще к ней вернуться... ** С другой консоли заходит шустрый User 2 *************** mysql> select * from test1; +----+ | id | +----+ | 1 | +----+ 1 row in set (0.00 sec) - здесь были люди! mysql> insert into test1 (id) values(NULL); - не проходите мимо! Query OK, 1 row affected (0.00 sec) mysql> insert into test1 (id) values(NULL); - оставьте след в жизни! Query OK, 1 row affected (0.15 sec) mysql> insert into test1 (id) values(NULL); - вот все удивятся! Query OK, 1 row affected (0.00 sec) mysql> select * from test1; - вот какой я молодец! +----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | +----+ 4 rows in set (0.07 sec) mysql> select LAST_INSERT_ID(); - последней я вставил запись 4 +------------------+ | last_insert_id() | +------------------+ | 4 | +------------------+ 1 row in set (0.20 sec) ** вернулся к своей консоли User 1 ************* mysql> select * from test1; +----+ | id | +----+ - ой сколько записей появилось | 1 | (изоляция транзакций отсутствует | 2 | по крайней мере в предпоследней версии 3.22 | 3 | в новой стабильной 3.23 они что-то хвастались про транзакции | 4 | но я еще не смотрел) +----+ 4 rows in set (0.00 sec) mysql> select LAST_INSERT_ID(); - вернемся к нашим баранам +------------------+ | last_insert_id() | +------------------+ | 1 | - это тебя я вставил!!!! +------------------+ 1 row in set (0.00 sec) -- * Alexey Mikhajlichenko Вначале было Слово , и Слово было два Байта. alex@rtax.sumy.ua --- ifmail v.2.15dev5 * Origin: Regional Tax Administration (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/65139b5f0319.html, оценка из 5, голосов 10
|