数据库中有“订单表”、”订单明细表”。“订单表”中的ID列是主键,”订单明细表”中有”订单ID”列,“订单表”的ID列是”订单明细表”的”订单ID”列的外键。 现在有这样一种需求: 请问,这个需求,是使用级联操作吗?该怎么写呢?或许有其它更好的方法呢? |
|
10分 |
明显要通过事务操作,一旦发生错误进行回滚
你明细表的任意一行编程张三,肯定是通过主键变更的,然后以外键去更新主表的相应字段,都成功了则commit |
20分 |
错了……你不是更新主表,应该是类似下面的
update 子表 set AAAA="苍有马老师" where 主表ID = (select 主表ID from 子表 with(nolock) where 子表主键=123) And 子表主键!=123 |
3分 |
你到底是要更新数据库里的数据
还是只是显示出来的内容改变,而原始数据不变? 从你的描述,没看出跟级联有任何关系 |
10分 |
你说的这种级联是没有的,数据库的级联一般是主键被删除或更改后,自动删除和更新对应的外键,但不是修改外键所在数据的其他列。你这需求如果只是做批量更新一句SQL就办到了,如果是要求自动维护,那么就在订单表上加载一个触发器
|
更新数据库的数据啊 |
|
一句SQL办不到吧,要先查询,再update吧 |
|
15分 |
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A LEFT JOIN B ON A.ID = B.ID |
27分 |
这根本不需要级联好吧! update A set AAAA = ""苍老师"" from 订单明细表 A join (select 订单ID from 订单明细表 where AAAA = ""张三"") B on B.订单ID = A.订单ID where AAAA != ""张三"" |
10分 |
表别名,A 就是订单明细表,B就是select语句生成的表 |
5分 |
这个跟级联操作没有关系。对于(大部分)关系数据库来说,这就是普通的触发器操作。
你的AAA列不是主键,并且也不存在外键,因此跟级联操作无关。 |