多表操作问题,请大家帮个忙,谢谢

来源:百度知道 编辑:UC知道 时间:2024/07/04 15:22:28
本人初学数据库,遇到下面的问题,请各位哥哥姐姐们多多指教。

同一数据库中有表a、表b、表c

表a对表b
一对多关系
关系类型 1.实施参照完整性 2.级联更新相关字段 3.级联删除相关字段

表c对表b
一对多关系
关系类型 1.实施参照完整性 2.级联更新相关字段 3.级联删除相关字段

现在要对表b进行添加、修改、删除操作,需不需要打开表a和表c的相关记录集?对表a和表c有没有影响?

我在对表b进行添加操作时遇到错误,
调试信息如下:
由于数据表'a'需要一个相关记录,不能添加或修改记录。
由于数据表'c'需要一个相关记录,不能添加或修改记录。

请教各位哥哥姐姐们,这是为什么?错在哪里?怎么修改才能进行需要进行的操作?
请给出一个相关的例子,感激不尽!
可以给个解决这种问题的例子吗?二楼的答案很正确,但问题是,在表a,和表c中的主键已经有了相关的记录,依旧提示错误。

这是因为你在表a对表b的关系类型和表c对表b中添加了
1.实施参照完整性 2.级联更新相关字段 这两个关系类型。

也就是说在添加表b的时候,表b中的外键数据必须先添加到表a或表c中

因为是添加关系表数据,所以必须先在两个主表中添加数据后,才能再在关系表中添加,注意这里指的是关系表b中的外键数据,必须是两个主表中的主键。

比如往b表里里面的外键是ba,bc分别为int 型
则往b表里面插入一条记录为insert into b (ba,bc) values(4,5)时,必须保证a表里面的主键有4,c表的主键有5.

问题的描述好抽象 - -!
你那个调试信息是因为表a和表c中引用了表b中的主键做了外键
举个例子,比如有两张表,一张员工表,一张部门表
员工表中有个字段叫部门号,它对应了部门表中的部门号字段,由于一个部门有多个员工,所以部门表对员工表是一对多的关系
假设现在想删除部门表中部门号为D001的记录,由于员工表中存在部门号为D001的员工,所以会提示
由于数据表'员工表'需要一个相关记录,不能添加或修改记录。
这个时候比较简单的解决方法是,先删除员工表中部门号为D001的所有记录,然后再删除部门表中部门号为D001的记录
还有种方法就是做个instead of delete触发器来实现