如何合并两个DELETE语句实现先删appointments表再删customers表对应数据
方案1:顺序执行+事务包裹(最推荐)
你只需要严格按照「先删子表、后删父表」的顺序执行两条语句即可,为了避免中途执行失败导致数据不一致,建议用事务包裹,该方案兼容所有主流关系型数据库:
-- 开启事务,不同数据库语法差异极小,部分数据库可简化写为 BEGIN; BEGIN TRANSACTION; -- 第一步:删除预约表中的关联数据 DELETE FROM appointments WHERE Customer_ID = 1; -- 第二步:删除客户表中的目标数据 DELETE FROM customers WHERE Customer_ID = 1; -- 执行无误后提交事务,两条删除操作才会正式生效 COMMIT;
- 如果执行过程中任意一步报错,执行
ROLLBACK;即可回滚所有操作,不会出现只删除了部分数据的异常情况。 - 绝对不要调换两条删除语句的顺序,直接先删customers表会触发外键约束报错,因为appointments表还有数据引用该Customer_ID。
方案2:外键级联删除(需提前配置约束)
如果appointments表的Customer_ID字段已经设置了关联customers.Customer_ID的外键,并且开启了ON DELETE CASCADE级联删除属性,那么你只需要执行删除customers的语句,数据库会自动先删除所有关联的appointments数据:
DELETE FROM customers WHERE Customer_ID = 1;
注意:级联删除风险较高,没有手动控制执行顺序稳妥,非必要场景不建议使用,避免误操作时批量删除大量关联数据。
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

