如何确保数据的关联性?

ruhong 2008-04-02 07:26:23

一个多用户系统的环境。

有一个表a, 字段 a1, a2 ,一个表b, 字段 b1, b2, 表a和表b的关系是一对多, 主键a1, 关联的键是b1
由于dataset是离线处理数据,如何使用insert into 命令, 使表a和表b更新到sql里保持他们的关联性?
要考虑的是一个多用户的系统,也许你更新数据的时候,别人也在更新。

...全文
132 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanlongwuhui 2008-04-03
  • 打赏
  • 举报
回复
表名T1,主键为F1,以下SQL语句能完成“在insert的时候,取得主键最大值,然后加1”:
insert into T1 (F1) select Max(F1)+1 from T1
但对于b表的更新,则需要获取F1的值再对B进行更新。这在个多用户系统的环境中可能出现问题了。就是当我再取的时候用什么条件作为判断,用取最大值?那肯定是不可行的,因为有可能在执行取值的SQL前,有新的数据已经被写入T1了。要正确取到F1的值,只能通过唯一性约束的字段来做条件去进行定位,这样才不会出错。
另外你可以考虑B表的改变能否通过触发器实现的,如果可以的话,你可以在T1表中做个触发器来解决问题。
ruhong 2008-04-02
  • 打赏
  • 举报
回复
我现在的作法是这样的

在更新前,先锁定记录,然后取主键的最大值,
在本地的dataset上重新生成主键值,再分别将表a和表b更新到服务器上,
最后彩放锁定。
在用户不多的情况下,不觉得怎么,一旦用户多的话,估计是要出问题的
我觉得应该可以从SQL 语句中直接实现,这样就不会出问题,
比如用一个SQL 语句, 在insert的时候,取得主键最大值,然后加1,
作为当前的主键值,接着表b的对应值也跟着改变,求这种语句。
lbh119 2008-04-02
  • 打赏
  • 举报
回复
你在更新的时候可以把记录锁定

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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