当前页面: 开发资料首页 → J2EE 专题 → 超简单问题,有关自动生成id号返回问题
超简单问题,有关自动生成id号返回问题
摘要: 超简单问题,有关自动生成id号返回问题
主表插入然后插入子表,问题就来了,子表需要主表的id号,这个id号我怎么取得
如果主表的id是自增我怎么取出来?怎么能保证我取得的号码就是刚才我插入的呢?
如果主表是我用程序生成的,那么我如何生成一个唯一的id号,并且这个id号取得之后在没有插入数据库之前不会被其他程序所使用呢?
hsql
insert into table1(id,name) values(null,'abc');
insert into table2(pid,detail) values(identity(),'handsome');
mssql
insert into table1(id,name) values(null,'abc');
insert into table2(pid,detail) values(@@identity,'handsome');
你可以专门用一个表保存其它表中用到的ID.专门写一个类从这个表中获取.
例:
表:xt_talbe_id
字段: table_name //表名,用ID的表.
c_id //table_name中当前的ID,也就是你刚插进去的ID
next_id //table_name中要用到的下一个ID.
这只是个思路.现在我们就用这种方式做项目.
供LZ参考.
谢谢楼上二位
Netself() :你的这个表取得一个id号之后马上就要改写next_id吧,也就是说取出了就永远也不会被再用了,如果业务出现回滚那么那个取得的id就永远都不会被使用,这样才能保证其他线程后续取号的时候不会取得相同的id,你没有说清楚是不是要马上更改这个id,我想确认一下是不是就是我说的这个过程?
c_id 和next_id 在每次取完后都要更新.
让c_id=next_id
next_id=next_id+1;
dreamover(梦醒了〖http://hellfire.cn〗) :你说的方法是错误的,应该用SCOPE_IDENTITY()
用@@IDENTITY是有危险的,具体原因看下面两个连接:
http://blog.joycode.com/ghj/archive/2004/03/21/16745.aspx
http://brooks.cnblogs.com/archive/2006/04/24/383391.aspx
谢谢Netself() 的回答,结贴