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

一般情况下获取刚插入的数据的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:

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返回一个列表。

可以用 SELECT last_insert_id();查询LAST_INSERT_ID的值.

Important: If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only.

使用单INSERT语句插入多条记录,  LAST_INSERT_ID只返回插入的第一条记录产生的值. 比如

1. mysql> INSERT INTO t VALUES (NULL, 'aaaa'), (NULL, 'bbbb'), (NULL, 'cccc');

2. mysql> SELECT * FROM t;

3. +----+------+

4. | id | name |

5. +----+------+

6. |  1 | Bob  |

7. |  2 | aaaa |

8. |  3 | bbbb |

9. |  4 | cccc |

10. +----+------+

11. mysql> SELECT LAST_INSERT_ID();

12. +------------------+

13. | LAST_INSERT_ID() |

14. +------------------+

15. |                2 |

16. +------------------+

ID 2 是在插入第一条记录aaaa 时产生的.

(3)select @@IDENTITY:

String sql="select @@IDENTITY";

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

2012年8月30日 22:01

2207

1

3

134

mysql获取一个表的数据作为值插入_请问如何在mysql中得到一个即将插入数据表中的那条数据的id值(id自增长)?...相关推荐

  1. 让经纬度数据带矢量方向_惊艳!这样处理可得到细至可用于交通模型的路网数据丨城市数据派...

    点击上图,了解课程 [成为拥有10万+的作者很难吗?也许下一个就是你!](点击看详情),是由城市数据派主办的征稿活动,小派在此恭候派友们投稿分享! [本期看点] 矢量路网数据哪里来? 对着卫星图一笔一 ...

  2. mysql幻读和不可重复读的区别_面试官:MySQL的可重复读级别能解决幻读吗

    Java面试笔试面经.Java技术每天学习一点 Java面试 关注不迷路 作者:宁愿. 来源:https://juejin.im/post/5c9040e95188252d92095a9e 引言 之前 ...

  3. mysql如何删掉_请问如何把mysql干干净净的删掉?

    你的位置: 问答吧 -> 数据库 -> 问题详情 请问如何把mysql干干净净的删掉? 如题 我装了之后 把ROOT的密码给忘了 不如重装 但删不干净 不知道有什么办法可以干净的干掉MYS ...

  4. mysql获取字符串第2次出现的位置_我要获取一个字符串中某个标点第二次出现的位置...

    展开全部 获取方法e5a48de588b662616964757a686964616f31333365643662: //根据第一个点的位置 获得第二个点的位置 index=str.indexOf(& ...

  5. android 数据存储怎么保存图片_遇到验证码怎么办?Python编写一个验证码图片数据标注GUI程序!...

    做验证码图片的识别,不论是使用传统的ORC技术,还是使用统计机器学习或者是使用深度学习神经网络,都少不了从网络上采集大量相关的验证码图片做数据集样本来进行训练. 采集验证码图片,可以直接使用Pytho ...

  6. 低版本mysql数据导入高版本_将高版本mysql数据库的数据导入低版本mysql中

    前言 最近做了个网站,准备放到虚拟主机上的时候,发现本地数据库是mysql5.6,服务器上的mysql是5.0的.于是尝试导出数据,结果,导入的数据不是出错,就是各种乱码.折腾了好久之后,终于找到了解 ...

  7. 编写一个java程序_鼠标在java窗口上的坐标_请问如何在Java中获取窗口外部的鼠标单击坐标...

    尽管可能,但可能会受到限制: 为焦点事件添加一个AWTEventListener.只要您的应用在单击按钮之前就具有焦点,就会收到焦点丢失事件.然后查询指针位置. 限制是,当然,您的应用程序失去了焦点. ...

  8. 让经纬度数据带矢量方向_惊艳!这样处理可得到细至可用于交通模型的路网数据...

    [本期看点] 矢量路网数据哪里来? 对着卫星图一笔一划描? 从AutoCAD转换? 从OSM直接下载? 不,以上方法已经OUT了, 不是效率低,就是误差大,获取局部道路数据勉强可行,但是要获取大片区域 ...

  9. 每个python文件就是一个模块、模块的名字就是_每个Python文件都可以作为一个模块,模块的名字就是 的名字_学小易找答案...

    [单选题]9.3 The management of XYZ Co has annual credit sales of $20 million and accounts receivable of ...

最新文章

  1. 网络营销推广软件教你学会单页面SEO优化技巧,轻松赢流量!
  2. 一些带dga域名的恶意软件
  3. OpenCV2学习笔记(一)
  4. bootstrap-table操作之“删除”
  5. Thief in a Shop
  6. 纪念第一次青海湖之行泡汤
  7. 其他脚本与 asp.net 脚本一起验证时容易出的问题
  8. 抽象方法,抽象类,接口
  9. java json html模板,基于jQuery的AJAX和JSON实现纯html数据模板(转载)
  10. Jetson tk1 刷机教程
  11. python模拟鼠标点击linux_Python模拟实现Linux系统unix2dos功能
  12. 计算机没有本地网络,网络连接里没有本地连接
  13. 远离国产!电脑垃圾清理工具:ccleaner和CleanMyMac
  14. English语法_分词 - 概述
  15. html实现播放暂停,html如何实现播放和暂停
  16. 路由器信号总是无法与手机连接服务器,手机搜不到路由器信号_手机无法搜到路由器信号怎么办?-192路由网...
  17. 雷军:我也想做高级工程师 !
  18. 利用html做一个3D 图片动态效果
  19. CNN可视化!从CVPR 2022出发,聊聊CAM是如何激活我们文章的热度!
  20. Git常用命令(Git常用命令)

热门文章

  1. C++ char数组和char*的输入
  2. PyTorch框架学习十九——模型加载与保存
  3. tensorflow知识点
  4. Python 生成器 和 yield 关键字
  5. linux启动过程剖析,分析Linux系统的启动过程
  6. 测绘技术设计规定最新版_公示 | 29家单位申报甲级测绘资质审查意见
  7. vector 查找结构体对象_面试大厂回来,我狠补了一把算法和数据结构
  8. java框架谁搭建_从零开始搭建一个开发框架(Java + Hibernate + Spring + Oracle)
  9. php 短信验证码对比,php短信验证码的3个优势,你知道是什么吗?
  10. 阿里云服务器安装JDK指南