如何获得插入当前语句的时候,自增ID的值

既然是自增的数据列,

那么此时插入的这一条数据应该是最后一条,其ID 应该是最大的

可以使用  select max(ID) from table;

但是有一个问题,如果是一个正在使用的有着频繁插入的数据表,

当你执行完你的insert 语句之后,在你执行这条select 语句之前,如果有其他用户又进行了insert 操作,那么,你select 得到的ID,不一定是你这条语句的ID

所有应该使用的 是

inset into 表名(列名,列名,.. ) output inserted.ID  values  (数据,数据,...);

使用例子: 
1.对于INSERT,可以引用inserted表以查询新行的属性. 
   insert into [表名] (a) OUTPUT Inserted.a values (‘a‘)      
2.对于DELETE,可以引用deleted表以查询旧行的属性. 
   delete [表名] OUTPUT deleted.a where links = ‘a‘ 
3.对于UPDATE,使用deleted表查询被更新行在更改前的属性,用inserted表标识被更新行在更改后的值. 
   update [表名] set a = ‘b‘ OUTPUT Inserted.a where a = ‘a‘(返回修改后的值) 
   update [表名] set a = ‘b‘ OUTPUT deleted.a where a = ‘a‘ (返回修改前的值)

时间: 2024-10-15 03:59:09

如何获得插入当前语句的时候,自增ID的值的相关文章

SQL获取刚插入的记录的自动增长列ID的值

假设表结构如下: CREATE TABLE TestTable ( id int identity, CreatedDate datetime ) SQL2005获得新增行的自动增长列的语句如下: insert into TestTable (CreatedDate)  output  inserted.id  values (getdate()) SQL2000获得新增行的自动增长列的语句如下: insert into TestTable (CreatedDate)  values (getd

mybatis获取插入的语句主键(自增主键)

<insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into users(name, age, g

sqlalchemy 和 django 插入操作后自动返回自增ID

result = session.execute('insert into ***') session.commit() last_insert_id = result.lastrowid 注意:如果存在多个用户操作数据库,应保持每个用户或者每个请求线程拥有各自隔离的session https://segmentfault.com/q/1010000004328560 def test_add(other): u = TestClass() u.Other = other session = d

mysql 插入数据后返回当前的自增ID方法

存储过程的写法: mysql>create procedure test( ->in username varchar(50), ->in password varchar(50), ->out userid int) ->begin ->set @sql=concat("insert into user(`username`,`password`) values(' ",username,"' ,' ",password,&qu

mysql插入数据后返回自增ID的方法

mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得到这个自增id的值呢? 方法一:是使用last_insert_id mysql> SELECT LAST_INSERT_ID(); 产生的ID 每次连接后保存在服务器中.这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMEN

MySQL 插入与自增主键值相等的字段 与 高并发下保证数据准确的实验

场景描述: 表t2 中 有 自增主键 id  和 字段v  当插入记录的时候 要求 v与id 的值相等(按理来说这样的字段是需要拆表的,但是业务场景是 只有某些行相等 ) 在网上搜的一种办法是 先获取自增ID SELECT max(id)+1 from t2 然后给v字段插入获取到的值 但是这样的做法在有删除行+调整过自增值的表中是不准确的 于是换个思路 从 information_schema 下手 读取表的信息 INSERT INTO `t2` VALUES ( NULL, ( SELECT

mysql获取插入时自增ID值的方法

1.  LAST_INSERT_ID: LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变. LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update*作生成的第一个record的ID.这个值不能被其它客户端(Connection)影响,保证

Oracle 在函数或存储过程中执行一条插入语句并返回主键ID值

有时,我们需要往一张表插入一条记录,同时返回主键ID值. 假定主键ID的值都是通过对应表的SEQUENCE来获得,然后进行ID赋值 这里有几种情况需要注意: 1)如果建表语句含有主键ID的触发器,通过触发器来实现主键ID的自增,实现方式如下: INSERT INTO GP_MONTH_BILL ( MONTH, BONUS_VALUE, CUR_WAY, CUR_TIME, STATUS, IS_USE, CREATE_TIME) VALUES ( CUR_MONTH, CUR_BONUS_VA

MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存

二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: Xml代码   <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String" resultMap="studentResultMap"> SELECT ST.STUDENT_ID, ST.STUDENT_NAME, ST.STUDENT_SEX