| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 859 人关注过本帖
标题:在过程中insert一条数据后,取出标识列。在并发情况中的疑问??
只看楼主 加入收藏
changjie
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-4-18
结帖率:100%
收藏
 问题点数:0 回复次数:9 
在过程中insert一条数据后,取出标识列。在并发情况中的疑问??

create procedure addArticle_type
as
insert into slave_article_type (T_title,T_admin,T_picPath,T_width,T_height) --添加
values ('网络技术','changjie',default,default,default)
select scope_identity() --查了下网上的话法,给出的解释是在 (任何会话当前作用域所有表)


比如有这样一个过程,在我insert一条数据后,然后马上取出这个标识。

假如有很多用户添加数据, 在我自己的会话中,还没有把这个标识列取出, 又被另外一个用户更改了这个标识列。

我要怎么才能保证这个标识列是我自己的呢??

或者说我现在的这种理解完全走入了误区。 还请高手指点。

搜索更多相关主题的帖子: insert 疑问 数据 
2007-01-28 16:22
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 

把select和insert语句放在一个事务中


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-01-28 16:50
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
加锁,,可以不??

飘过~~
2007-01-28 21:53
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 
改天来个事务,锁,以及并发性的讨论

26403021 sql群 博客 blog./user15/81152/index.shtml
2007-01-28 21:59
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
以下是引用jinyuzhang在2007-1-28 21:59:00的发言:
改天来个事务,锁,以及并发性的讨论

赞成..多多指教.


飘过~~
2007-01-28 22:28
changjie
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2006-4-18
收藏
得分:0 

强列支持版主来个,事务,锁, 的讨论。

版主所说的放在事务中,我也想过,但是总觉的还是不妥。
事务保证当前的这个批处理的完整性。 而这里取scope_identity() 是(所有会话所有表当前作用域--其实这句话也是看的一知半解) 的最后的一个identity
但这个事务中,也不能保证,其他用户添加记录啊而改变最后的identity啊。

对于并发问题,不明白的还真多,但这恰恰又是个重点, 还多请前辈们多多指教。

2007-01-28 22:38
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 

不是我讨论,我是要你们讨论,我也是菜菜


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-01-28 22:59
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 

找到一种方案,在insert的时候加表级锁,可以防止别人插入,但是这个代价也太大了,其他用户连select都无法执行了,这个太不实际了
begin tran
insert into slave_article_type with(tablock) (T_title,T_admin,T_picPath,T_width,T_height) --添加
values ('网络技术','changjie',default,default,default)
select scope_identity()
commit tran


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-01-28 23:36
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
加了锁后,只能是在一个用户用完以后,下一个用户才可以用.
一定要记住,加了锁,要解锁.

飘过~~
2007-01-29 13:02
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
收藏
得分:0 
可以直接在语句中加锁,事务完成后就释放了

[此贴子已经被作者于2007-1-29 13:06:07编辑过]



26403021 sql群 博客 blog./user15/81152/index.shtml
2007-01-29 13:05
快速回复:在过程中insert一条数据后,取出标识列。在并发情况中的疑问??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012139 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved