问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql 执行insert返回自增长id

发布网友 发布时间:2022-04-30 07:33

我来回答

3个回答

懂视网 时间:2022-04-30 11:54

SELECT 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值

select max(id) from user;

这个方法的缺点是不适合高并发。如果同时插入的时候返回的值可能不准确。
 
方法三:是创建一个存储过程,在存储过程中调用先插入再获取最大值的操作

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

方法四:使用@@identity

select @@IDENTITY

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

方法五:是使用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;

总结一下,在mysql中做完插入之后获取id在高并发的时候是很容易出错的。另外last_insert_id虽然是基于session的但是不知道为什么没有测试成功。
     
    其实在ibtias框架里使用selectkey这个节点,并设置insert返回值的类型为integer,就可以返回这个id值。
    

mysql插入数据后返回自增ID的方法

标签:

热心网友 时间:2022-04-30 09:02

问题分析:通过insert操作之后,只能再查询自增ID即可

具体操作:MYSQL获取自增ID的四种方法

select max(id) from tablename

SELECT LAST_INSERT_ID() 函数

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

select @@IDENTITY;

@@identity 是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。

SHOW TABLE STATUS;

得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值就是当前该表的最大自增ID.

热心网友 时间:2022-04-30 10:20

必须得有insert在前面

mysql> create table t2(id int not null primary key auto_increment);
Query OK, 0 rows affected (0.05 sec)

mysql> insert into t2 values();
Query OK, 1 row affected (0.05 sec)

mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)

mysql>追问我是在程序后台代码里执行插入语句的,异常信息:You have an error in your SQL syntax;syntax to use near 'NULL = LAST_INSERT_ID()' at line 1

追答你这样表述谁都看不懂的啊,不知道你后面怎么写的。
select max(id) from 你试试用这个吧
应该是你用法的问题,你百度下:last_insert_id()函数用法试试

实在不行用proc

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 毛毛9点的时候,妈妈告诉正在玩拼图的毛毛该收拾玩具? 孩子做作业不专心,作为家长应该如何帮助孩子呢? 请问:认真的拼拼图,是哪个的?这两个(地、 的)选什么? OPPO手机解不开了,怎么办? oppoReno3pro手机密码忘了解不开怎么办? 海尔滚筒洗衣机不脱水怎么回事 海尔滚筒洗衣机不进水但脱水正常工作是怎么回事? oppo手机的密码解不开了怎么办 懂CAD的高手帮帮忙,我打开图纸就是没有尺寸 我下了个2012的cad,打开图纸没有尺寸,有的图纸还打不开.怎么办 CAD打开建筑施工图没有尺寸标注 在AUTOCAD中,一般图纸打开没有尺寸,是什么情况?有几种方法可以解决? cad2012打开老图纸怎么没有尺寸?标题栏里的文字也没有? cad-这图纸中L没有尺寸还有其他尺寸都没有、怎么回事???求告知 CAD图纸上尺寸不见了 无锡外地人的租房公积金能领取多少钱 无锡外地上班没离职怎麼取公积金 公积金如何支取。我是外地人口。在无锡工作了两年。现在不想再无锡工厂里上班了。想支取公积金。 无锡公积金异地贷款办理流程 异地公积金可以在无锡买房吗 谁能帮我写一段很有文采的关于“拼图人生”的一段话,100左右。 如何培养孩子专心致志的好习惯 为什么说,送1+孩子一套启蒙拼图,就是跑赢起跑线? 如何让孩子养成做事专心专注的好习惯 怎样才能专心做一件事情? 大家觉得vivonex的下巴窄吗? 青岛医合网科技有限公司怎么样? 股票市净值是什么意思 股票的市净值是怎么回事? 酒糟在20度左右的温度要多久能做好 醪糟发酵多久会最甜 铝锅蒸馒头对身体有害吗? 铝锅蒸馒头 原来的铝锅蒸锅现在还能蒸馒头吗?有毒吗? 铝锅,铝勺,用这些铝制品做饭对人体有害吗? 怎么给U盘分盘 用铝锅蒸馒头,会有铝和铅进入馒头吗 如何把一个U盘分割成多个磁盘 用工业铝制锅蒸馒头有毒? 质保金退回是不是说明产品合格?