存储过程的写法:

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,"' )");

->prepare stmt from @sql;

->execute stmt;

->select @@identity into userid;

->end ||

调用:

mysql>call test('name','pwd',@id);

mysql>select @id;

其中的prepare和execute使用请参考手册

我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数,

一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。
但在多线程情况下,就不行了。

下面介绍三种方法

(1)getGeneratedKeys()方法:

程序片断:

Connection conn = ;
Serializable ret = null;
PreparedStatement state = .;
ResultSet rs=null;
try {
state.executeUpdate();
rs = state.getGeneratedKeys();
if (rs.next()) {
ret = (Serializable) rs.getObject(1);
}
} catch (SQLException e) {
}
return ret;

(2)LAST_INSERT_ID:

select LAST_INSERT_ID();

LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

在多用户交替插入数据的情况下max(id)显然不能用。
这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update*作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录, LAST_INSERT_ID返回一个列表。

(3)select @@IDENTITY:

String sql="select @@IDENTITY";

@@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的 全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至 101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。

转载于:https://www.cnblogs.com/wang3680/p/4493473.html

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

  1. mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...

  2. mysql 新增返回主键自增id_详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...

  3. 七种MYSQL插入数据后返回自增主键ID的方法

    我们都知道,mysql中的insert插入之后会有返回值,返回的是影响的行数,也就是说,成功插入一条数据之后返回的是1,失败则返回0.那么,很多时候我们都想要得到最后插入的id值,下面七种方法均可,结 ...

  4. mysql插入数据后返回自增id

    mysql插入数据后返回自增id 使用<insert 中的useGeneratedKeys 和 keyProperty 两个属性 在Mybatis Mapper文件中添加属性 useGenera ...

  5. MYSQL插入数据后返回主键

    最近做项目,要求不能使用mybatis等框架,所以一切数据库访问操作都是用原生的JDBC. 用过mybatis的都知道,插入新数据后可以直接返回主键的值,但是使用JDBC不行,于是上网搜了一下,找到一 ...

  6. mysql 插入数据后返回该条数据id

    问题: 在做关联表插入操作时,需要根据主表的 主键id作详情表的属性值,最笨的方法就是,先插入主表,然后通过查询返回刚刚插入的 主键id,容易出现问题. 解决办法: 在mybatis的配置文件中,用k ...

  7. mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...

  8. Mybatis 插入数据后返回自增主键ID

    1 xml 映射文件中处理 在映射器中配置获取记录主键值 在xml中 insert 标签中定义 : useGeneratedKeys为true,用来设置返回主键id的值, keyProperty 代表 ...

  9. JDBC插入数据后返回新数据id

    使用jdbc向表中插入数据时,有时候需要返回新插入数据的id.比如现在要向两个表中分别插入一条数据,第一条数据插入后生成的id要作为第二条数据的一个字段值. 具体代码: PreparedStateme ...

最新文章

  1. UVa 311 - Packets
  2. Boost::split用法详解
  3. css3宽度变大动画_不会仪表?太尴尬了。14种动画让你轻松掌握各种流量计工作原理...
  4. FFT C语言 修改了matlab
  5. SAP 电商云 Spartacus UI 4.1 版本的延迟加载技术介绍
  6. How to suppress email sending when operating on Activity
  7. 慎用stl中的erase的返回值
  8. python画图去掉边框
  9. 阿里巴巴研究员刘国华:阿里巴巴智能运维体系建设
  10. mysql备份:一,Xtrabackup
  11. 坊间八卦 | 关于 Oracle 中国区裁员的是是非非
  12. android studio创建9.patch图片,使用时出现Error: Duplicate resources
  13. 美国visa虚拟信用卡
  14. java名片生成_HTML5 canvas绘图基础(电子名片生成器源码)
  15. 购物网站的商品推荐算法有哪些?
  16. 动物识别——人工智能
  17. 针对phpStudy网站服务器的入侵
  18. i7处理器好吗_英特尔酷睿i5处理器和i7有什么区别
  19. mysql maser-slave
  20. python3.x和python2.x唯一区别_Python3.x和Python2.x的区别

热门文章

  1. BigDecimal参数8种舍入方式
  2. Kafka常用命令之kafka-console-consumer.sh
  3. VUE项目启动:You may use special comments to disable some warnings
  4. c++分割字符串方法
  5. 设置element-iu中table滚动条位置
  6. Ubuntu-18.04.1安装QQ
  7. 椭圆极点极线性质_圆锥曲线的统一性质
  8. The Cow Lexicon
  9. 跟着百度学PHP[13]-文件上传
  10. 温故js系列(4)-运算符详解