老师这块的话,实际项目中应该是级联操作用的比较多吧,没分类还存在着商品不符合逻辑啊,级联怎么操作?

老师这块的话,实际项目中应该是级联操作用的比较多吧,没分类还存在着商品不符合逻辑啊,级联怎么操作?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小班 2020-08-06 10:15:59

同学你好,这其实是两种删除思路:

    第一种是在业务层中删除分类的方法执行之前,通过cid'将对应的所有商品全部删除掉。

        这样删除商品分类,是将商品分类和商品信息一起删除,是指决定当前分类下的商品都不再归为它类,所有商品信息都会丢失,不再在我们的商城售出。这样即便再创建一个与原来的内容一样的商品,也应看做是新商品。

    第二种是在删除分类之前将商品的外键cid置空。

    在删除时保留商品仅删除分类,这个没有分类的商品还有可能被归为它类,本身的商品信息等都没有丢失。

如上所示是两种不同的思路,具体采用哪种方式要看业务场景和具体需求了。

继续加油 祝:学习愉快~

  • 级联操作不是还有一个set null吗 ,主表删除或更新,就把子表对应的列设置成null,

    [CONSTRAINT 外键名称] FOREIGN KEY(字段名称) REFERENCES 主表(字段名称) ON UPDATE set null ON DETATE set null

    2021-04-01 13:19:04
  • 同学你好,在sql语句中是可以直接通过这个操作实现级联删除,但是在项目中数据是很重要的,对应有自己规则来删除对象,所以在项目中不建议直接在书写对应的sql语句,实现级联删除,容易出现不可控的数据问题。所以一般情况下会在service(业务层)中实现对应的数据查询与设置,在当前项目中因为数据比较简单,就直接将对应数据设置为空了。

    同学了解这种形式就可以。

    祝学习愉快!

    2021-04-01 15:11:36
  • 老师,还有一个问题是,视频中在把商品分类设置为Null的时候为什么要先将指定分类的商品查出来,可以把这一步直接替换成修改吗,

    就像这样,在dao层专门创建一个方法,将要删除的分类关联的商品的cid设置为null

    String sql="update product set cid=null where cid=?";

    pstmt=conn.prepareStatement(sql);

    pstmt.setInt(1, cid);

    pstmt.executeUpdate();


    2021-04-01 18:55:40
好帮手慕酷酷 2020-03-08 16:25:40

同学你好,同学的理解有点偏差,这里是指在删除分类时,先进行查询该分类下的商品,将商品的分类id的外键设置为null,因为两个表之间是由外键进行关联,在进行删除时,如果不将其设置为null,切断关联,将无法被删除,会报错。再进行删除分类。而不是没分类时存在商品进行删除。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 我也想问楼主的问题,假如分类下面还有一堆商品,把他删了(外键的作用就是约束表,我既然已经约束了,现在又绕一圈解开不是矛盾吗)那些商品不就显示不出来属于哪个分类的了吗,如果老师只是用这个例子演示这种操作思路的话,可不可以换种例子,这个实例有点不能理解,实际开发中这种应该也不会有吧
    2020-08-05 21:53:30
  • 同学你好,老师在上面的回答中回复了同学这个问题,同学可以参考一下。 继续加油 祝:学习愉快~
    2020-08-06 10:16:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师