当前位置: 代码迷 >> C# >> 这种情况下,数据库会实现级联操作吗
  详细解决方案

这种情况下,数据库会实现级联操作吗

热度:97   发布时间:2016-05-05 04:23:36.0
这种情况下,数据库能实现级联操作吗?
本帖最后由 df4343t 于 2015-03-26 20:09:30 编辑
数据库中有“订单表”、"订单明细表"。“订单表”中的ID列是主键,"订单明细表"中有"订单ID"列,“订单表”的ID列是"订单明细表"的"订单ID"列的外键。

现在有这样一种需求:
"订单明细表"中有一列名叫"AAAA",要求:当"订单明细表"中任意一行的"AAAA"列的值变成“张三”,那么,"订单明细表"中与这一行具有相同"订单ID"值的行的"AAAA"列的值都变成“苍老师”。

请问,这个需求,是使用级联操作吗?该怎么写呢?或许有其它更好的方法呢?
------解决思路----------------------
明显要通过事务操作,一旦发生错误进行回滚
你明细表的任意一行编程张三,肯定是通过主键变更的,然后以外键去更新主表的相应字段,都成功了则commit
------解决思路----------------------
错了……你不是更新主表,应该是类似下面的
update 子表 
set AAAA="苍有马老师"
where 主表ID = (select 主表ID from 子表  with(nolock) where 子表主键=123) And 子表主键!=123

------解决思路----------------------
你到底是要更新数据库里的数据

还是只是显示出来的内容改变,而原始数据不变?

从你的描述,没看出跟级联有任何关系
------解决思路----------------------
你说的这种级联是没有的,数据库的级联一般是主键被删除或更改后,自动删除和更新对应的外键,但不是修改外键所在数据的其他列。你这需求如果只是做批量更新一句SQL就办到了,如果是要求自动维护,那么就在订单表上加载一个触发器
------解决思路----------------------
引用:
一句SQL办不到吧,要先查询,再update吧

UPDATE A  SET A1 = B1, A2 = B2, A3 = B3  FROM A LEFT JOIN B ON A.ID = B.ID
------解决思路----------------------
引用:
Quote: 引用:

你说的这种级联是没有的,数据库的级联一般是主键被删除或更改后,自动删除和更新对应的外键,但不是修改外键所在数据的其他列。你这需求如果只是做批量更新一句SQL就办到了,如果是要求自动维护,那么就在订单表上加载一个触发器

一句SQL办不到吧,要先查询,再update吧


这根本不需要级联好吧!
update A set AAAA = '苍老师' 
from 订单明细表 A
join (select 订单ID from  订单明细表 where AAAA = '张三') B on B.订单ID = A.订单ID
where  AAAA != '张三'


------解决思路----------------------
引用:
Quote: 引用:


这根本不需要级联好吧!
update A set AAAA = '苍老师' 
from 订单明细表 A
join (select 订单ID from  订单明细表 where AAAA = '张三') B on B.订单ID = A.订单ID
where  AAAA != '张三'

不太看得懂呢,A是什么啊?

表别名,A 就是订单明细表,B就是select语句生成的表
------解决思路----------------------
这个跟级联操作没有关系。对于(大部分)关系数据库来说,这就是普通的触发器操作。

你的AAA列不是主键,并且也不存在外键,因此跟级联操作无关。
  相关解决方案