8.2.太极平台:使用MySQL数据库外键字段,自动删除联动数据

1、业务需求

关系型数据库中,表与表之间存在关联,是很常见的,因此也得名关系型数据库。其中,外键是一个重要特性。主从之间存在一对多、多对多的关系。

经常遇到这样的业务需求。删除一条订单时,要删除该条订单相关联的所有支出记录、付款记录、评论记录、商品记录;在删除一个商品分类时,则不能删除该分类下的所有商品,而是要将商品的分类清空。一般情况下,我们通过编码,在数据层采用事务的方式去实现。

采用太极平台框架后,我们要尽量减少编码,甚至不编码。所以将采用数据库的外键特性,自动去实现功能需求。

借用订单表、订单支出表、订单收款表,建立外键关系如下。删除订单时,同步删除该条记录相关的支出记录、付款记录。

2、建立外键解决

在订单支出表qd_order_cost中,将字段OrderId设置为外键,与订单表qd_order的主键Id字段进行关联。这里的重点,是设置删除时的属性。

  • 设置为CASCADE,则会级联删除。即删除了主表记录,从表记录就相应删除;下面还有从表外键,也会继续删除。
  • 设置为SET NULL,则会清空从表的字段值,设置为null。此时从表的OrderId字段,要设置为允许null。
  • 设置为RESTRICT,则会严格校验,如果从表有数据,则不允许删除。删除时会报异常。太极平台能独立识别此异常,并返回友好的提示给用户“删除失败,子表下有外键数据”。所以想要实现此效果,也不需要编码进行判断。在数据库层面进行限制即可。
  • 设置NO ACTION,则不进行任何处理。

所以根据需求,删除订单时,想同步删除订单下的所有从表数据,则从表的外键删除选项,设置为CASCADE;不需要删除,则可以设置SET NULL或者NO ACTION;限制不能删除,则可以设置为RESTRICT。

发布了89 篇原创文章 · 获赞 71 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/weixin_42127613/article/details/96453481