« 冷笑话回到首页话说新浪抗日投票 »

March 23, 2005

取得 MySQL 最后插入的 id  

调整阅读文字: 代码 Coding

如果有个自增长的 id 字段,如果取得最后一次 INSERT 的行的 id(比方说论坛发新贴后要跳转到那页),用了好几年 MySQL 了,这个问题一直没找到最完美的解决办法,Sunmast这小子刚接触两天 MySQL,摆平了。

最初以为 INSERT 的时候会有个返回值之类的东西,无果,到处询问,无果,最后只能用最农民的办法,SHOW TABLE STATUS LIKE 'table_name'; ……然后取 Auto_increment 字段,这当然不好,理论上 INSERT 和 SHOW TABLE 的间隔时间再短,还是有机会再 INSERT 的,结果自然要不准了。结果 Sunmast 轻而易举在 MySQL 手册里找到了解决方法:查询会话变量(官方手册的这里这里),简单的说,就在 INSERT 之后再来个这个就可以了:

SELECT @@session.identity;

查当前会话的最后插入 id,不受其它会话干扰,问题就解决了。

当得知这个问题被这么容易摆平了之后大惊失色,没打算记在 blog 上现眼,可又一想,连 phpMyAdmin 都没有用这种方法(更可能的原因是人家为了保持兼容性),我不知道应该也不算太丢人吧。另外奇怪的是,我按手册里给出的另一种查询格式“SHOW SESSION VARIABLES like 'identity';”却不行,必须是 @@ 的那种。


Update in 2005.04.27

查手册的时候又顺便看到了这个,该死,怎么以前就一直没注意到?

http://www.phpe.net/mysql_manual/06-1.html

SELECT LAST_INSERT_ID();

Posted by Platinum at March 23, 2005 11:36 PM | Comments (4)

两周内本页反向链接: