曲径通幽论坛

标题: LAST_INSERT_ID() [打印本页]

作者: beyes    时间: 2012-4-26 00:05
标题: LAST_INSERT_ID()
LAST_INSERT_ID()  函数(不带参数) 返回一个 BIGINT (64 位) 位值,该值是最近一次执行 INSERT 操作到被设置为 AUTO_INCREMENT 的列所自动产生的值。下面做一个试验说明:

有这么一个表:
mysql> desc books;
[attach]333[/attach]
它表示的是所售图书的相关信息。注意,上面的 book_id 是被设为 AUTO_INCREMENT 类型的。

假设 books 表中已经有了 1 条图书数据记录:
mysql> SELECT * from books;
[attach]334[/attach]

现在手动添加 1 条记录到该表中:
mysql> INSERT INTO books (book_id, title, author_id, publisher_id, pub_year, isbn) VALUES (10, 'X-Files', 2, '313842938', 'GNet', '2011');
Query OK, 1 row affected (0.66 sec)
注意,上面手动设置了 book_id 的值为 10 。
mysql> select book_id from books;
[attach]336[/attach]

然后再调用一下 LAST_INSERT_ID() 这个函数:
mysql> SELECT LAST_INSERT_ID();
[attach]335[/attach]
这里得到的值为 2 ,并不是 10。这是因为,10 这个值是我们手动设置的,而不是 AUTO_INCREMENT 自动增加的,因此 LAST_INSERT_ID() 函数不能返回 10 。为 2 的原因是之前曾经操作了另外一个表,而该表中也有一个 AUTO_INCREMENT 的字段,且操作之前的值为 1 ,在为该表中添加了数据后其值自动增加 1 。

现在再手动添加一条数据到 books 表,这次不再设置 book_id 这个字段了:
mysql> INSERT INTO books (title, author_id, publisher_id, pub_year, isbn) VALUES ('Love', 2, '32311312', 'GNet', '2010');
Query OK, 1 row affected (0.68 sec)
mysql> SELECT LAST_INSERT_ID();
[attach]337[/attach]
由上图看到,执行函数的结果的返回值是 11, 可以使用下面的语句查看 book_id 是不是也变成了 11 :
mysql> select book_id from books;
[attach]338[/attach]




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2