面试遇到一个问题。请教高手

csdn02 2010-09-13 11:45:22
BS结构下的,比如后台修改文章(或者其他什么业务单据等),因为访问的人多,有可能多个人同时保存同一个文章,点保存按钮时防止被别人保存后你又覆盖别人的内容了,又什么解决方案?

我回答的是:点入修改页面后,把数据库查询的每个字段保存到一个地方(数组或arrayList什么的),点保存时再把数据库每个字段再和刚才保存的数组比较,看有没被修改过的字段,有的话则提示:“你查看的这段时间已经有其他人修改过这篇文章!请先加载最新的再来修改!”

面试官:这个方案也行,但更好的方案还有什么?




请高手看下,是不是还有其他方案,我那方案肯定是效率最低的。数据库应该有自身的技术比较的
...全文
263 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
kkbac 2010-09-13
  • 打赏
  • 举报
回复
时间戳 是个很好的选择.
li12403074 2010-09-13
  • 打赏
  • 举报
回复
也就是排他操作,方法很多啊,上网搜索下!
porschev 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyq11 的回复:]
数据库的锁机制和事务处理

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
[/Quote]

学习了。。。
Froyo2010 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wuyq11 的回复:]
数据库的锁机制和事务处理

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
[/Quote]

正解
wuyq11 2010-09-13
  • 打赏
  • 举报
回复
数据库的锁机制和事务处理

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
shellwin 2010-09-13
  • 打赏
  • 举报
回复
顶楼上的
bancxc 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huangmin3956 的回复:]
[/Quote]时间戳 不是 时间字段
yan267 2010-09-13
  • 打赏
  • 举报
回复
读取数据的时候,连更新时间一起读取。

更新的时候,判断原来的更新时间是否有变化,如果有,说明有人更新了,就弹出提示。

如果更新时间没有变化,表示没有人更新,然后更新数据。

更新的时候加锁,这样就可以防止同时点击的情况了。
sisi88 2010-09-13
  • 打赏
  • 举报
回复
你这个保存文章时候,需要登录吗? 如果需要登录就好办了呀,进数据库时候,直接通过ID判断就行了!可以加加个时间字段 createTime 和updatetime 一个是保存时间,一个是修改时间!
huangmin3956 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 csdn02 的回复:]
请问楼上:能不能具体说下是怎么操作吗?能说具体点吗?
[/Quote]

就是没条数据保存的时候数据库中有个时间戳也就是个时间字段
显示最后修改的时间
拿这个时间跟这个准备修改的人提交的时间对比就可以了
csdn02 2010-09-13
  • 打赏
  • 举报
回复
请问楼上:能不能具体说下是怎么操作吗?能说具体点吗?
bancxc 2010-09-13
  • 打赏
  • 举报
回复
如果时间戳有变化说明已经修改过了
bancxc 2010-09-13
  • 打赏
  • 举报
回复
timestamps
dataadapters 2010-09-13
  • 打赏
  • 举报
回复
首先,在加载一条记录时,以该记录的ID号创建一个Application对象,例如: Application[HiddenField1.Value.ToString() + "RoomType"] = "a";

然后,在每次确认修改时,先判断Application对象是否为空,例如:Application[HiddenField1.Value.ToString() + "RoomType"] == null;如果为空说明该记录已被修改,否则说明未被修改。

最后,在每次修改结束后,移除该Application对象,例如: Application.Remove(HiddenField1.Value.ToString() + "RoomType");
  • 打赏
  • 举报
回复
用insert,不是update
chuxue1342 2010-09-13
  • 打赏
  • 举报
回复
你的文章只能修改一次吗?如果这样的话,设置一个字段就行了吗?如果是限制短时间内不让重复修改的话,更新之前跟最后的修改时间比较就行了~
xu_diligent 2010-09-13
  • 打赏
  • 举报
回复
有用,学习了!
Canny 2010-09-13
  • 打赏
  • 举报
回复
9楼 顶一下,学习了
RUNBEAR 2010-09-13
  • 打赏
  • 举报
回复

学习[Quote=引用 9 楼 wuyq11 的回复:]
数据库的锁机制和事务处理

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
[/Quote]

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧