取得 MySQL 最后插入的 id
转载
如果有个自增长的 id 字段,如果取得最后一次 INSERT 的行的 id(比方说论坛发新贴后要跳转到那页),用了好几年 MySQL 了,这个问题一直没找到最完美的解决办法,[url=http://blog.sunmast.com/sunmast/]Sunmast[/url]这小子刚接触两天 MySQL,摆平了。
最初以为 INSERT 的时候会有个返回值之类的东西,无果,到处询问,无果,最后只能用最农民的办法,SHOW TABLE STATUS LIKE 'table_name'; ……然后取 Auto_increment 字段,这当然不好,理论上 INSERT 和 SHOW TABLE 的间隔时间再短,还是有机会再 INSERT 的,结果自然要不准了。结果 Sunmast 轻而易举在 MySQL 手册里找到了解决方法:[url=http://www.phpe.net/mysql_manual/06-1.html]查询会话变量[/url](官方手册的[url=http://dev.mysql.com/doc/mysql/en/system-variables.html]这里[/url]和[url=http://dev.mysql.com/doc/mysql/en/dynamic-system-variables.html]这里[/url]),简单的说,就在 INSERT 之后再来个这个就可以了:
[quote]
SELECT @@session.identity;
[/quote]
查当前会话的最后插入 id,不受其它会话干扰,问题就解决了。
当得知这个问题被这么容易摆平了之后大惊失色,没打算记在 blog 上现眼,可又一想,连 phpMyAdmin 都没有用这种方法(更可能的原因是人家为了保持兼容性),我不知道应该也不算太丢人吧。另外奇怪的是,我按手册里给出的另一种查询格式“SHOW SESSION VARIABLES like 'identity';”却不行,必须是 @@ 的那种。
[hr]
[b]Update in 2005.04.27[/b]
查手册的时候又顺便看到了这个,该死,怎么以前就一直没注意到?
[url]http://www.phpe.net/mysql_manual/06-1.html[/url]
[quote]
SELECT LAST_INSERT_ID();
[/quote]