数据库问题,插入数据之后怎么获取此数据的自增ID

jerry2012 发布于 2013/07/31 17:57
阅读 4K+
收藏 0

各位高手,小弟请教了,小弟遇到这样一个问题,有两张表,比如说 message,image 两张表,一个消息对应多张图片,image中有messageId字段关联消息,(messageId自增),问题来了,当我要插入消息到message表中的时候,怎么立即获取messageId(自增的Id),在多用户访问情况下,以用来关联图片。

加载中
0
CeeFee
CeeFee

mysql_insert_id 或者 SELECT last_insert_id()

请 插入 之后立即获取!

泡不烂的凉粉
泡不烂的凉粉
mysql_insert_id 是针对当前连接的.无论并发多好. 都是安全的. 唯一需要注意的就是链接重置. 这样只是获取不到结果,并不会出现混乱.
CeeFee
CeeFee
回复 @jerry2012 : http://my.oschina.net/fz04003/blog/63327
jerry2012
jerry2012
@CeeFee 项目赶啊。。。。
jerry2012
jerry2012
@CeeFee 能帮我写一个吗?新手啊
CeeFee
CeeFee
回复 @jerry2012 : 那就写触发器吧
下一页
0
你要爪子
你要爪子

你是说在代码里写么?

java

ResultSet rs = pstmt.getGeneratedKeys();

jerry2012
jerry2012
都可以,只要能确保在高并发的情况下也能插入数据后立马取出id
0
喜之郎
喜之郎
还是自己生成ID爽啊。
0
loyal
loyal

1.最好自己生成ID

2.如果要用SELECT last_insert_id(),要保证才同一个事务连接里.

实际上现在大部分应用都用自己的生成的ID吧?而且还强大,不仅仅是数字,还有策略自增主键什么的...哎.

loyal
loyal
回复 @jerry2012 : 我说了最好自己生成ID,这样可以解决所有获取ID的问题.
jerry2012
jerry2012
message是自增Id,但是我要去关联Image表,,,,
0
吴凯乐
吴凯乐
select * from (select * from 表名 order by 字段名 desc) where rownum=1;
获取到最新一条记录,然后获取其 messageId
cswy
cswy
这个并发高点就会蛋疼
0
hylent
hylent

并发有多高 才能得出错误的id啊 那还是自己生成id吧

0
迷路的游侠
迷路的游侠
这个我感觉pg和oracle比较爽,先获取ID,然后再连同ID一起插入数据库
IdleMan
IdleMan
oracle 有个returning语句也不错
0
华兹格
华兹格
自己生成吧,好控制。
0
mark35
mark35

引用来自“迷路的游侠”的答案

这个我感觉pg和oracle比较爽,先获取ID,然后再连同ID一起插入数据库

pgsql和oracle是插入时即可返回插入行的所有信息,包括但不限于自增id。mysql这垃圾实现不了这种原子操作才搞出个last_insert_id这个东西

返回顶部
顶部