Mysql 从不同表中删除的过程

Mysql 从不同表中删除的过程,mysql,stored-procedures,Mysql,Stored Procedures,我正在尝试创建一个过程,该过程将删除与客户id相关的所有内容。当我在执行该过程时输入客户id时,它将删除客户和发票表中的所有内容,但不删除行表中的所有内容,我不知道为什么。这就是我所拥有的 BEGIN DELETE FROM CUSTOMER WHERE CUS_CODE = cust_id; DELETE FROM INVOICE WHERE INVOICE.CUS_CODE = cust_id; DELETE FROM LINE WHERE EXISTS (SELECT * FROM INV

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

BEGIN
DELETE FROM CUSTOMER WHERE CUS_CODE = cust_id;
DELETE FROM INVOICE WHERE INVOICE.CUS_CODE = cust_id;
DELETE FROM LINE WHERE EXISTS (SELECT * FROM INVOICE WHERE 
INVOICE.INV_NUMBER = LINE.INV_NUMBER AND invoice.CUS_CODE = cust_id);
END

如果您首先从
发票
表中删除与客户相关的所有记录,则
exists()
运算符无法为
行中的任何记录返回true

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

更好的解决方案是使用多表删除语法,即使用一条语句从所有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
但是,最好将外键与delete cascade
选项集一起使用,并且根本不使用存储的proc

但是,在大多数国家,您不允许像这样删除发票,因此在执行此类删除操作之前,您应该真正检查您的业务需求