线程安全地获取插入mysql的条目的id

在往mysql中插入条目时有时会但愿能获得该插入条目的id,一种方式是再执行一个select语句条件为max(id)来获取,但这种形式在并发环境里并非线程安全的,由于在你完成插入到再执行一个select获取最大id之间可能已经有另外一个条目被插入。mysql

一种线程安全的解决方式是采用select LAST_INSERT_ID()这个语句,它返回本次连接(每一个数据库连接由一个线程承担)中第一次插入的条目的idsql

eg.数据库

(1)、在链接1中向A表插入一条记录,A表包含一个auto_increment类型的id。
 
(2)、在链接2中向A表再插入一条记录。
 
(3)、结果:在链接1中执行select LAST_INSERT_ID()获得的结果和链接2中执行select LAST_INSERT_ID()的结果是不一样的;而在两个链接中执行select max(id)的结果是相同的。安全

此外,使用select last_insert_id()时要注意,当一次插入多条记录时,只是得到第一次插入的id值,务必注意!并发

相关文章
相关标签/搜索