当前位置: 首页 > 面试题库 >

更新外键值

方浩旷
2023-03-14
问题内容

我有一个数据库应用程序,其中一个组的建模如下:

TABLE Group
(
  group_id integer primary key,
  group_owner_id integer
)

TABLE GroupItem
(
  item_id integer primary key,
  group_id integer,
  group_owner_id integer,
  Foreign Key (group_id, group_owner_id) references Group(group_id, group_owner_id)
)

我们设置了一个包含多字段的外键,group_owner_id因为我们要确保aGroupItem不能拥有与其所在所有者不同的所有者Group。由于其他原因(我认为我不需要对此进行详细说明),group_owner_id不能从GroupItem表中删除,因此仅删除它是不可行的。

我的大问题是,如果我想group_owner_id为整个组更新,我正在编写这样的代码(用伪代码):

...
BeginTransaction();
BreakForeignKeys(group_items);
SetOwnerId(group, new_owner_id);
SaveGroup(group);
SetOwnerId(group_items, new_owner_id);
SetForeignKeys(group_items, group);
SaveGroupItems(group_items);
CommitTransaction()
...

有办法解决吗?似乎有点笨拙。希望我已经发布了足够的细节。

谢谢。


问题答案:

SQL Server不支持UPDATE CASCADE吗?:-

Foreign Key (group_id, group_owner_id)
 references Group(group_id, group_owner_id)
 ON UPDATE CASCADE

然后,您只需更新组表的group_owner_id。



 类似资料:
  • 问题内容: 我在表中有一条带有错误主键的记录。我想将其更改为正确的值,但该值在许多其他表中使用。 有没有简单的方法可以在同一时间更新主键和外键? 问题答案: 如果将外键设置为级联更改,则值应自动更改。

  • 我在一次迁移中犯了一个错误,我创建了外键,但忘记添加onDelete(“级联”),这导致无法删除具有外部关系的内容。由于级联未正确触发,删除失败。我该如何解决这个问题? 我希望进行新的迁移,并用丢失的onDelete更新外键 但是当我试着运行它时,我得到了这个 SQLSTATE[23000]:完整性约束违反: 1022不能写;表'#sql-4688_6b'中的重复键(SQL:改变表添加约束外键()

  • 问题内容: 我正在尝试使我的@OneToMany和@ManyToOne关系正确。 第1类: 第2类: 当我加载或保存新记录时,这种关系似乎运行良好: 但是,当我尝试更新该记录时,它将尝试将IdeaProfileId设置为null: 当我调试时,我可以看到IdeaProfileId确实在音高对象上设置了… 仅供参考,我不是直接更新从数据库加载的原始对象。这些域映射到UI更新的Model类。因此,在保

  • 我如何才能做到这一点,使我的A实体仅由B的外键持久化?也就是说,只有外键被插入到数据库中(因为B是一个主表,所以我不需要插入元素)。

  • 问题内容: 我正在尝试使我的@OneToMany和@ManyToOne关系正确。 第1类: 第2类: 当我加载或保存新记录时,这种关系似乎运行良好: 但是,当我尝试更新该记录时,它将尝试将IdeaProfileId设置为null: 当我调试时,我可以看到IdeaProfileId确实在音高对象上设置了… 仅供参考,我不是直接更新从数据库加载的原始对象。这些域映射到UI更新的Model类。因此,在保

  • 问题内容: 进行时: 错误: 这是我的桌子: 问题答案: 照原样,必须先删除Advertisers表中的行,然后才能删除它引用的Jobs表中的行。这个: …实际上与应有的相反。实际上,这意味着您必须在作业表中有一条记录,然后才是广告商。因此,您需要使用: 纠正外键关系后,您的delete语句将起作用。