从不同的表中删除过程

时间:2017-04-10 22:07:46

标签: mysql stored-procedures

我正在尝试创建一个删除与cust_id相关的所有内容的过程。当我在执行过程时输入cust_id时,它会从客户和发票表中删除所有内容,但不会从行表中删除,我不知道原因。这就是我所拥有的

ID.         SIP           DIP
1.      123.243.0.1       56
2.      123.143.0.1       89
3.      0.16783633        44
4.      123.143.0.1       89

1 个答案:

答案 0 :(得分:0)

如果首先从invoices表中删除与客户相关的所有记录,则exists()运算符不能对line表中的任何记录返回true。

最简单的解决方案是首先颠倒删除的顺序并从line表中删除。

稍微好一点的解决方案是使用多表删除语法,用一个语句删除所有3个表中的匹配记录:

delete invoice, customer, line
from customer
left join invoice on customer.cus_code=invoice.cus_code
left join line on invoice.inv_number=line.inv_number
where customer.cus_code=cust_id

但是,最好的方法是使用设置了on delete cascade选项的外键,并且根本不使用存储过程。

但是,在大多数国家/地区,您不能像这样删除发票,因此在实施此类删除操作之前,您应该真正检查业务需求。