INSERT语句之后返回主键id

方式一: 插入数据之后查询最大主键值,不适合高并发等场景

  1. SELECT @@IDENTITY
  2. select last_insert_id()
  3. select max(id) from user
  • 我本人在navicat测试,插入完成之后,在新窗口分别测试三条语句,前两条查询不到最新的。如果插入和查询在同一个窗口,则均没有问题,我猜测可能是因为打开新查询窗口,相当于一个新的连接,导致查询错误。1,2查询的是最后插入对应的ID,就算执行了删改操作。

方式二:插入并直接返回主键,利用的是创建存储过程,在存储过程中调用先插入再获取最大值的操作

DELIMITER $$
DROP PROCEDURE IF EXISTS `test` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(in name varchar(100),out oid int)
BEGIN
  insert into user(name) values('ss');
  select max(id) from user into oid;
  select oid;
END $$
DELIMITER ;
call test('gg',@id);

方式三: 用xml方式
1.

<insert id="insert" parameterType="map">  
    insert into table1 (name) values (#{name})  
    <selectKey resultType="java.lang.Integer" keyProperty="id">  
      CALL IDENTITY()  
    </selectKey>  
</insert> 

直接就可以从map中获取id
2.


<insert id="insert" parameterType="int"     
        useGeneratedKeys="true" keyProperty="id">    
        insert into system(name) values(#{name})    
</insert>

返回值是一个int类型,用来接收id

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值