Sql insert into 后获得自动插入的id

refs:

https://blog.csdn.net/longaohun/article/details/6233092


问题:

原来使用如下方法返回插入后的id,结果发现当并发时对应不上,返回的id并不一致,可能是别的进程插入的id,

INSERT INTO  TableName  (column) values (0);select IDENT_CURRENT('TableName')

解决方案:

通过参考文章,修改为使用 scope_identity(),结果待观察。


//=========

当运行完插入语句后,执行select   @@identity就可得到自动生成的id

如果是sql server 最好用select SCOPE_IDENTITY() as id


因为@@identity全局的

同类还有IDENT_CURRENT(‘table’)

IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域

 

java实例

String sql = "INSERT INTO PowerControl_RoleInfo(name,gender) VALUES (?,?)

;SELECT SCOPE_IDENTITY()";

rs = pstm.executeQuery();
while(rs.next()){

ID = rs.getInt(1);
}


猜你喜欢

转载自blog.csdn.net/henry_wu001/article/details/79999753