免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8548 | 回复: 15
打印 上一主题 下一主题

如何准确无误地取到刚刚插入的一行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-03 22:08 |只看该作者 |倒序浏览
各位大侠,小弟有一问题请教,比如我的程序中要在表中插入一行insert into .....,而这一行中有一列ID其类型是serial,这一列的值由系统自动加入,我又如何在随后的程序中准确无误地取到刚刚插入的那一行?
刚插入的那一行ID的值应该是最大,如果我用select * from test order by ID desc,取第一行应该是可以,但如果在我select之前又有另一个用户执行了insert,这时ID的最大值又变了,取到的行肯定不对,这该如何是好?

insert into test (usr,pass) values ('abc','123');
select * from test where ?   

论坛徽章:
0
2 [报告]
发表于 2005-04-04 09:39 |只看该作者

如何准确无误地取到刚刚插入的一行?

我习惯自己来处理sequence,先获得sequence,然后insert,这样根据sequence来获得insert的行

论坛徽章:
0
3 [报告]
发表于 2005-04-04 09:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2005-04-04 10:06 |只看该作者

如何准确无误地取到刚刚插入的一行?

加锁是否影响性能?我到现在从来没用过lock,呵呵

论坛徽章:
0
5 [报告]
发表于 2005-04-04 14:15 |只看该作者

如何准确无误地取到刚刚插入的一行?

使用sequnce保险

论坛徽章:
0
6 [报告]
发表于 2005-04-04 15:47 |只看该作者

如何准确无误地取到刚刚插入的一行?

恕我愚味,请问具体如何实现?

论坛徽章:
0
7 [报告]
发表于 2005-04-04 17:09 |只看该作者

如何准确无误地取到刚刚插入的一行?

begin;
insert into
select * from table where id=currval('serial自动生成的序列名字')
...
commit;

那个名字你可以在psql里用
\d tablename
找到

论坛徽章:
0
8 [报告]
发表于 2005-04-04 19:20 |只看该作者

如何准确无误地取到刚刚插入的一行?

一个C#程序片断,仅供参考,逻辑都放在程序里处理的,function只处理四个基本操作

public bool InsertUser(UserData userData)
{
if(userData.Count != 1)
return false;

int userId = new Users().SelectSequence();
userData.Rows[0][UserData.USERID_FIELD] = userId;

int result = new Users().InsertUser(userData);

if(result >; 0)
return true;
else
return false;
}

public int SelectSequence()
{
if(npgsqlDataAdapter == null)
{
throw new System.ObjectDisposedException( GetType().FullName );
}

npgsqlDataAdapter.SelectCommand = GetSequenceCommand();

return Convert.ToInt32(npgsqlDataAdapter.SelectCommand.ExecuteScalar());
}


private NpgsqlCommand GetSequenceCommand()
{
if(selectSequenceCommand == null)
{
selectSequenceCommand = new NpgsqlCommand(CommandString.USER_SEQUENCE, Configuration.Connection);

selectSequenceCommand.CommandType = CommandType.StoredProcedure;
}
return selectSequenceCommand;
}

论坛徽章:
0
9 [报告]
发表于 2005-04-05 21:34 |只看该作者

如何准确无误地取到刚刚插入的一行?

先取得sequence的值,再插入

论坛徽章:
0
10 [报告]
发表于 2005-04-05 23:40 |只看该作者

如何准确无误地取到刚刚插入的一行?

[quote]原帖由 "雨中漫步"]先取得sequence的值,再插入[/quote 发表:


兄弟,这么晚了还不睡觉??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP