mysql - 如何创建同时删除相关记录的 SQL 删除

标签 mysql sql

我的 mySQL 数据库中有两个表:INVOICE 和 INVOICE_LINE。两个表都有一个主键列(自动增量)ID。 INVOICE_LINE 有一个与 INVOICE.ID 相关的列 INV_ID,即通过将列 INVOICE_LINE.INV_ID 定义为 INVOICE.ID 的外键来创建关系。

我该如何为此编写 SQL?

最佳答案

方法一:

在具有 ON DELETE CASCADE 行为的 INVOICEINVOICE_LINE 这两个表之间强制执行外键约束。因此,从 INVOICE 表中删除条目将删除 INVOICE_LINE 表中的所有相应记录。

方法2:

如果这两个表之间没有外键约束,那么您需要采用以下查询:

DELETE inv,inv_line
FROM INVOICE inv 
LEFT JOIN INVOICE_LINE inv_line ON inv.ID = inv_line.INV_ID
WHERE inv.ID = ?
<小时/>

注意:

我使用了 LEFT JOIN 而不是 INNER JOIN,因为如果任何发票在 INVOICE_LINE 表中没有相应的发票行,则 INNER JOIN 不会从 INVOICE 表中删除记录。但是 LEFT JOIN 确实如此

关于mysql - 如何创建同时删除相关记录的 SQL 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40460613/

相关文章:

c# - Entity Framework - 尝试插入到带有外键的表中,EF 尝试插入到带有主键的原始表中

php - 如何获取三个表中的类别数?

mysql - 为了从 MySQL 中提取表的较大子集,索引、表顺序如何影响查询速度?

mysql - rails : Unknown column in SELECT statement

php - SELECT * FROM city WHERE city LIKE '%value% %value%' ;

mysql - 替换mysql列中的字符串

php - MYSQL触发器中如何解析JSON

php - 使用 PHP 和 Swift 2 上传图片?

sql - 枢轴函数返回空值

mysql - 在 MYSQL 中使用连接删除行