mysql 插入数据 自增长_mysql插入数据后返回自增ID的方法
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的方法相关推荐
- mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法
引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...
- mysql 新增返回主键自增id_详解mysql插入数据后返回自增ID的七种方法
引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...
- mysql插入数据后返回自增id
mysql插入数据后返回自增id 使用<insert 中的useGeneratedKeys 和 keyProperty 两个属性 在Mybatis Mapper文件中添加属性 useGenera ...
- mysql 插入数据 自增长_MySQL ------ 插入数据(INSERT和insert select)(二十)
数据插入(INSERT): 用来插入(或添加)行到数据表中.也可利用mysql 的安全机制机制使用insert 语句 可使用的四种方式:插入完整的行,插入行的一部分,插入多行和插入某些查询结果 一.插 ...
- mybatis 插入数据后返回自增id
useGeneratedKeys="true" keyProperty="id"> sql全部内容: <insert id="insert ...
- mysql重新构建自增长_mysql 建表后 重新构建 自增字段 (保留 原有字段结构)
添加字段 1.去除原id的自增功能:ALTER TABLE A_A MODIFY COLUMN id int(10) NOT NULL FIRST ; 2.添加名称为cstId,类型为bigint的字 ...
- 七种MYSQL插入数据后返回自增主键ID的方法
我们都知道,mysql中的insert插入之后会有返回值,返回的是影响的行数,也就是说,成功插入一条数据之后返回的是1,失败则返回0.那么,很多时候我们都想要得到最后插入的id值,下面七种方法均可,结 ...
- mysql事务回滚后,自增ID仍然增加
事务回滚后,自增ID仍然增加 回滚后,自增ID仍然增加. 比如当前ID是7,插入一条数据后,又回滚了. 然后你再插入一条数据,此时插入成功,这时候你的ID不是8,而是9. 因为虽然你之前插入回滚,但是 ...
- 获取mysql 自增id 和mysql 下一个自增id的方法
mysql获取表中自增id的方法: 1. 使用 select MAX(id) from tablename; 获取的是表中最大的id:顺序执行 insert ---> delete 插入的数据 ...
- mybatis的insert语句获取自增id的方法(mySQL)
前提是数据库表里已经把id字段设置成了自增的 javabean的定义是这样的: package test;import java.util.Date;public class Express {pri ...
最新文章
- 以太坊Ethereum存储和数据结构 图示
- 十九、Android Activity初探
- 我是LinkedIn的SRE,我把LinkedIn搞挂了
- Leetcode - 144. Binary Tree Preorder Traversal (层次遍历)
- 【Linux】27.Markdown的用法
- R开发(part7)--环境空间
- 如何下载python3.6版本-python最新版本免费下载-python 3.6.3正式版下载__飞翔下载
- 玩转 Python 3.5 的 await/async
- 高亮插件Highlighting的使用
- 倒车雷达matlab仿真,倒车雷达系统设计(超声波-SEG4)
- 使用Excel进行线性规划
- badbody下_badboy下载_badboy测试工具2.0.5官方免费版 - 系统之家
- Kindle阅读产品体验报告-随时随地畅享阅读
- 20220721挨揍内容
- 双系统后适合装matlab吗,安装双系统对电脑有什么影响|电脑装双系统有什么好处和坏处...
- Spring乱码问题解决
- iOS11 如何防止用户录屏?
- plsr matlab,matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)
- 易语言上传文件 自动化编辑对话框并点击按钮
- linux上搭建集群环境
热门文章
- 在静态页面html中跳转传值
- #QCon#北京2011大会“更有效地做测试”专题Slides资料
- 搭建Web站点和FTP站点
- Windows7删除休眠文件hiberfil.sys节省大量C盘空间
- 客户端无刷新调用服务器程序
- 微信小程序-Image 图片实现宽度100%,高度自适应
- 多线程与NSTimer
- 已处理证书链,但是在不受信任提供程序信任的根证书中终止 - Windows 7安装.Net Framework 4.7.2时出现此问题
- SQL数据库异地备份(小白篇)两台服务器之间备份
- C# winfrom单击事件弹出浏览器