数据库如何实现级联操作

.Net技术 码拜 10年前 (2015-04-02) 3203次浏览 0个评论
 

数据库中有“订单表”、”订单明细表”。“订单表”中的ID列是主键,”订单明细表”中有”订单ID”列,“订单表”的ID列是”订单明细表”的”订单ID”列的外键。

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

请问,这个需求,是使用级联操作吗?该怎么写呢?或许有其它更好的方法呢?

数据库如何实现级联操作
10分
明显要通过事务操作,一旦发生错误进行回滚
你明细表的任意一行编程张三,肯定是通过主键变更的,然后以外键去更新主表的相应字段,都成功了则commit
数据库如何实现级联操作
20分
错了……你不是更新主表,应该是类似下面的

update 子表 
set AAAA="苍有马老师"
where 主表ID = (select 主表ID from 子表  with(nolock) where 子表主键=123) And 子表主键!=123
数据库如何实现级联操作
3分
你到底是要更新数据库里的数据

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

从你的描述,没看出跟级联有任何关系

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

你到底是要更新数据库里的数据

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

从你的描述,没看出跟级联有任何关系

更新数据库的数据啊

数据库如何实现级联操作
引用 6 楼 xdashewan 的回复:

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

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

数据库如何实现级联操作
15分
引用 8 楼 df4343t 的回复:

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

UPDATE A  SET A1 = B1, A2 = B2, A3 = B3  FROM A LEFT JOIN B ON A.ID = B.ID

数据库如何实现级联操作
27分
引用 8 楼 df4343t 的回复:
Quote: 引用 6 楼 xdashewan 的回复:

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

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

这根本不需要级联好吧!

update A set AAAA = ""苍老师"" 
from 订单明细表 A
join (select 订单ID from  订单明细表 where AAAA = ""张三"") B on B.订单ID = A.订单ID
where  AAAA != ""张三""
数据库如何实现级联操作
10分
引用 11 楼 df4343t 的回复:
Quote: 引用 10 楼 xuanbg 的回复:

这根本不需要级联好吧!

update A set AAAA = ""苍老师"" 
from 订单明细表 A
join (select 订单ID from  订单明细表 where AAAA = ""张三"") B on B.订单ID = A.订单ID
where  AAAA != ""张三""

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

表别名,A 就是订单明细表,B就是select语句生成的表

数据库如何实现级联操作
5分
这个跟级联操作没有关系。对于(大部分)关系数据库来说,这就是普通的触发器操作。

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


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明数据库如何实现级联操作
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!