不同数据库获取新增加的主键值

 不同数据库获取新增加的主键值

 

数据库
获取新增主键的查询语句
DB2
IDENTITY_VAL_LOCAL()
Informix
SELECT dbinfo('sqlca.sqlerrd1') FROM <TABLE>
Sybase
SELECT @@IDENTITY
SqlServer
SELECT SCOPE_IDENTITY()或SELECT @@IDENTITY
MySql
SELECT LAST_INSERT_ID()
HsqlDB
CALL IDENTITY()
Cloudscape
IDENTITY_VAL_LOCAL()
Derby
IDENTITY_VAL_LOCAL()
PostgreSQL
SELECT nextval('<TABLE>_SEQ')
 
 如果数据库的并发率很高,比如在插入记录后执行查询主键之前,数据库又执行了若干条插入记录的SQL语句,这时,通过表 1 返回的主键值就是最后一条插入语句的主键值,而非我们希望的主键值了。所以使用查询语句获取表自增键值是不安全的,这也是为什么有些数据库(如 Oracle、Firebird)故意不提供自增键,而只提供序列的原因,序列强制要求你在新增记录前,先获取主键值。Oracle通过SELECT <SEQUENCE_NAME>.nextval FROM DUAL获取序列的下一个值,而FireBird通过SELECT GEN_ID(<SEQUENCE_NAME> 1) FROM RDB$DATABASE获取序列的下一个值。在10.4.1小节中,我们还将讲解应用层自增键的相关知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值