数据库会为具有AUTO INCREMENT 属性的列自动递增值。
默认地,AUTO_INCREMENT 的开始值是 1,每条新纪录递增 1。
可以使用函数LAST_INSERT_ID()来获取该值。
具体的说,将获取上一次insert语句第一次自动为AUTO_INCREMENT列产生的值。
注意:一个insert语句可以会插入多行,也即数据库会自动为AUTO INCREMENT行产生多个值。但是只有产生的第一个值才会影响LAST_INSERT_ID()的返回值。
另外,一个插入多行的语句里如果多次使用LAST_INSERT_ID()函数,该函数的返回值是不变的。之后在该insert语句结束后,LAST_INSERT_ID()函数的返回值才会更新。
最后还有两点要说明以下:
1. 如果最近的insert语句发生错误,LAST_INSERT_ID()的返回值将没有定义。
这句话的意思我想学过编程的应该都能想到,我写段伪码大家就清楚了。
如上:对于SQL语句执行错误时的情况并没有处理,这种情况下没有返回值。
不考虑失败的情况的原因可能是因为这种情况不太可能出现吧。。。
2. 对于事务回溯的情况
如果是因为发生错误自动回溯时,同上LAST_INSERT_ID()的返回值将没有定义。
如果是手动回溯,LAST_INSERT_ID()的返回值将保持ROLLBACK操作之前的值,并不会回溯。
int LAST_INSERT_ID()
{
if(succeed())
{
return xxx;
}
}