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

方法一是使用last_insert_id

产生的ID 每次连接后保存在服务器中。这意味着函数向一个给定客户端返回的值是该客户端产生对影响AUTO_INCREMENT列的最新语句第一个 AUTO_INCREMENT值的。这个值不能被其它客户端影响,即使它们产生它们自己的 AUTO_INCREMENT值。这个行为保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁或处理。

每次mysql_query操作在mysql服务器上可以理解为一次“原子”操作, 写操作常常需要锁表的, 是mysql应用服务器锁表不是我们的应用程序锁表。

值得注意的是,如果你一次插入了多条记录,这个函数返回的是第一个记录的ID值。

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

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

方法二是使用max(id)

使用last_insert_id是基础连接的,如果换一个窗口的时候调用则会一直返回10

如果不是频繁的插入我们也可以使用这种方法来获取返回的id值

这个方法的缺点是不适合高并发。如果同时插入的时候返回的值可能不准确。

方法三是创建一个存储过程,在存储过程中调用先插入再获取最大值的操作

方法四使用@@identity

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

方法五是使用getGeneratedKeys()

总结一下,在mysql中做完插入之后获取id在高并发的时候是很容易出错的。另外last_insert_id虽然是基于session的但是不知道为什么没有测试成功。

其实在ibtias框架里使用selectkey这个节点,并设置insert返回值的类型为integer,就可以返回这个id值。

原文:http://my.oschina.net/zimingforever/blog/136599

mysql 插入数据 自增长_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插入数据后返回自增id 使用<insert 中的useGeneratedKeys 和 keyProperty 两个属性 在Mybatis Mapper文件中添加属性 useGenera ...

  4. mysql 插入数据 自增长_MySQL ------ 插入数据(INSERT和insert select)(二十)

    数据插入(INSERT): 用来插入(或添加)行到数据表中.也可利用mysql 的安全机制机制使用insert 语句 可使用的四种方式:插入完整的行,插入行的一部分,插入多行和插入某些查询结果 一.插 ...

  5. mybatis 插入数据后返回自增id

    useGeneratedKeys="true" keyProperty="id"> sql全部内容: <insert id="insert ...

  6. mysql重新构建自增长_mysql 建表后 重新构建 自增字段 (保留 原有字段结构)

    添加字段 1.去除原id的自增功能:ALTER TABLE A_A MODIFY COLUMN id int(10) NOT NULL FIRST ; 2.添加名称为cstId,类型为bigint的字 ...

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

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

  8. mysql事务回滚后,自增ID仍然增加

    事务回滚后,自增ID仍然增加 回滚后,自增ID仍然增加. 比如当前ID是7,插入一条数据后,又回滚了. 然后你再插入一条数据,此时插入成功,这时候你的ID不是8,而是9. 因为虽然你之前插入回滚,但是 ...

  9. 获取mysql 自增id 和mysql 下一个自增id的方法

    mysql获取表中自增id的方法: 1. 使用 select MAX(id) from tablename; 获取的是表中最大的id:顺序执行  insert ---> delete 插入的数据 ...

  10. mybatis的insert语句获取自增id的方法(mySQL)

    前提是数据库表里已经把id字段设置成了自增的 javabean的定义是这样的: package test;import java.util.Date;public class Express {pri ...

最新文章

  1. 以太坊Ethereum存储和数据结构 图示
  2. 十九、Android Activity初探
  3. 我是LinkedIn的SRE,我把LinkedIn搞挂了
  4. Leetcode - 144. Binary Tree Preorder Traversal (层次遍历)
  5. 【Linux】27.Markdown的用法
  6. R开发(part7)--环境空间
  7. 如何下载python3.6版本-python最新版本免费下载-python 3.6.3正式版下载__飞翔下载
  8. 玩转 Python 3.5 的 await/async
  9. 高亮插件Highlighting的使用
  10. 倒车雷达matlab仿真,倒车雷达系统设计(超声波-SEG4)
  11. 使用Excel进行线性规划
  12. badbody下_badboy下载_badboy测试工具2.0.5官方免费版 - 系统之家
  13. Kindle阅读产品体验报告-随时随地畅享阅读
  14. 20220721挨揍内容
  15. 双系统后适合装matlab吗,安装双系统对电脑有什么影响|电脑装双系统有什么好处和坏处...
  16. Spring乱码问题解决
  17. iOS11 如何防止用户录屏?
  18. plsr matlab,matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)
  19. 易语言上传文件 自动化编辑对话框并点击按钮
  20. linux上搭建集群环境

热门文章

  1. 在静态页面html中跳转传值
  2. #QCon#北京2011大会“更有效地做测试”专题Slides资料
  3. 搭建Web站点和FTP站点
  4. Windows7删除休眠文件hiberfil.sys节省大量C盘空间
  5. 客户端无刷新调用服务器程序
  6. 微信小程序-Image 图片实现宽度100%,高度自适应
  7. 多线程与NSTimer
  8. 已处理证书链,但是在不受信任提供程序信任的根证书中终止 - Windows 7安装.Net Framework 4.7.2时出现此问题
  9. SQL数据库异地备份(小白篇)两台服务器之间备份
  10. C# winfrom单击事件弹出浏览器