如何使用一个查询删除多个表?

时间:2015-12-08 17:47:16

标签: mysql

我有两个表如下所示:

表1: 发票

表2: invoice_details

public function deleteInvoice($id='')
    {
        if( !empty( $id ) ){
            $query = "DELETE FROM invoices where uuid ='$id'";
            if(mysqli_query($this->_con, $query))return true;   
            else return false;  
        }else{
            return false;   
        }
    }

表2包含一个名为" invoice_id"的列。这与" id"表1

每当我使用上述功能删除发票时,我也想同时删除invoice_details。有没有一种简单的方法来修改上面的代码来做到这一点?

3 个答案:

答案 0 :(得分:2)

首先,您需要在invoice_details

上设置外键约束
ALTER TABLE invoice_details
    ADD CONSTRAINT fk_invoice
    FOREIGN KEY(invoice_id)
    REFERENCES invoices(id)
    ON DELETE CASCADE;

然后您可以删除发票,它会自动删除详细信息

答案 1 :(得分:1)

不要修改代码。使用ON DELETE CASCADE选项在表之间建立外键关系。

ALTER TABLE invoice_details ADD CONSTRAINT fk_invoice FOREIGN KEY invoice_id REFERENCES invoices(invoice_id) ON DELETE CASCADE;

现在数据库为您完成了这项工作。

答案 2 :(得分:0)

您可以使用外键约束来执行此操作,强制删除CASCADE。有关其他详细信息,请参阅https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html