在spring+ibatis中使用LAST_INSERT_ID()能否安全?

J2EE 码拜 9年前 (2015-10-22) 1008次浏览
项目数据库要从oracle转为mysql。
为了获取插入数据的id,oracle中有sequence ,对mysql不是很熟悉,google得知一般都用自增字段去实现。
ibatis中这样写的:

<insert id="insertIssue" parameterClass="Issue">
         insert into issue (name,issue_user,status)
          values (#name#,#issueUser#,#status#)
    <selectKey resultClass="int" keyProperty="id"> 
            SELECT LAST_INSERT_ID() AS ID  
        </selectKey> 
</insert>

关于LAST_INSERT_ID() 看到文档提到是:
“产生的ID 每次连接后保存在服务器中。这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMENT值的。这个值不能被其它客户端影响,即使它们产生它们本人的 AUTO_INCREMENT值。这个行为保证了你能够找回本人的 ID 而不用担心其它客户端的活动,而且不需要加锁或处理。”
问一下大家这种方法在高并发状态下能否安全?
或有没有其他好的方式模拟sequence ?
非常感谢!

解决方案:10分
mysql不是有自增长字段吗?
字段属性:Auto Incr什么的。
设置主键自增长,然后IBATIS里本人是这样写的:
<selectKey resultClass=”Long” keyProperty=”seqid”>
SELECT @@IDENTITY AS seqid
</selectKey>
解决方案:30分
本人理解你的意思了,你是想在高并发时,插入数据想返回当前所插入记录的ID,是吧?
这个应该不会的,LAST_INSERT_ID是基于单个数据库连接的,它会返回的ID是当前连
接最后一次insert操作的ID,并不是整个数据库最后一次insert操作。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明在spring+ibatis中使用LAST_INSERT_ID()能否安全?
喜欢 (0)
[1034331897@qq.com]
分享 (0)