JN项目-触发器级联删除

项目用的是mysql数据库

1.发现问题:删除主表的时候,评论表还在,点击评论链接不过去,因为主表被删

需求:现在想要实现删除主表,然后评论表内容也跟着级联删除

2.我们的评论表如下,有很多主表公用一个评论表,用commenttype区分



3.写触发器:


声明一个变量DECLARE c VARCHAR(32);,

然后设置值SET c = (SELECT DISTINCT commenttype FROM m_cultureact_gzl);

需要主表提供一个参数,根据这个参数删除评论表相关的内容

DELETE FROM p_comment WHERE commentid = old.msgCode AND commenttype = c;

4.主表m_cultureact_gzl增加字段commenttype


5.实体中增加代码,并且getter setter


6.每次新增主表要保存commenttype


测试OK


级联删除规则 `ON DELETE CASCADE` 是数据库中用于处理间关关系的一种重要机制,主要应用于关系型数据库,如 MySQL、PostgreSQL 等。当在数据库中定义之间的外键约束时,可以使用该规则。 ### 功能概述 `ON DELETE CASCADE` 规则允许在删除中的某条记录时,数据库系统会自动删除中所有与之关的记录。这确保了数据的一致性,避免出现孤立的记录,即子中存在引用父中已删除记录的情况。 ### 语法示例 在创建时,可以通过以下方式定义外键约束并使用 `ON DELETE CASCADE` 规则。以 MySQL 为例: ```sql -- 创建父 CREATE TABLE parent_table ( parent_id INT PRIMARY KEY, -- 其他字段 parent_name VARCHAR(50) ); -- 创建子,并定义外键约束及级联删除规则 CREATE TABLE child_table ( child_id INT PRIMARY KEY, parent_id INT, -- 其他字段 child_name VARCHAR(50), FOREIGN KEY (parent_id) REFERENCES parent_table(parent_id) ON DELETE CASCADE ); ``` 在上述示例中,`child_table` 通过 `parent_id` 字段引用了 `parent_table` 的 `parent_id` 字段,并且指定了 `ON DELETE CASCADE` 规则。 ### 实际效果 当执行以下删除操作时: ```sql DELETE FROM parent_table WHERE parent_id = 1; ``` 数据库系统会自动删除 `child_table` 中所有 `parent_id` 为 1 的记录,以保持数据的一致性。 ### 优点 - **数据一致性**:自动删除记录,避免了数据冗余和不一致的问题。 - **简化操作**:无需手动编写额外的 SQL 语句来删除中的关记录,减少了开发工作量。 ### 缺点 - **数据丢失风险**:如果不小心删除了父中的重要记录,与之关的子记录也会被自动删除,可能导致数据的意外丢失。 - **性能影响**:在删除大量记录时,级联删除可能会导致性能下降,因为数据库需要处理多个删除操作。 ### 注意事项 - 在使用 `ON DELETE CASCADE` 规则时,需要谨慎考虑数据的重要性和业务需求,确保不会因为误操作而导致数据丢失。 - 对于复杂的数据库架构,级联删除可能会引发连锁反应,影响多个的数据,因此需要进行充分的测试和验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZHOU_VIP

您的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值