MySql 从多个表中删除记录

时间:2021-03-26 17:51:16

标签: mysql

我正在尝试删除与 MySql 中特定父记录相关联的大多数记录。我没有使用级联删除,因为链中有我不想删除的链接记录。

基本上我有 4 个表,其中包含一个父记录和三组子记录。在高层次上,我想要做的应该是这样的:

SET FOREIGN_KEY_CHECKS=0; 
START TRANSACTION; 
DELETE FROM message_content WHERE campaign_id=3; 
DELETE FROM targets WHERE campaign_id=3; 
DELETE FROM imports WHERE campaign_id=3; 
DELETE FROM campaigns WHERE id=3; 
COMMIT;

但是,当我运行该代码时,出现以下错误:

ERROR Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'START TRANSACTION; DELETE FROM message_content WHERE campaign_id=3; DELETE FROM ' at line 1

阅读 Stack Overflow 上的其他问题,他们中的大多数人建议使用 JOIN 来完成这项工作;这是有道理的,但我正在努力弄清楚它的语法,因为所有示例对所有表都使用相同的键,而在我的情况下,活动表使用不同的键。

我的代码应该是什么样的?这是正确的吗?

DELETE campaigns, message_content, targets, imports 
FROM campaigns
INNER JOIN message_content ON campaigns.id=message_content.campaign_id 
INNER JOIN targets ON campaigns.id=targets.campaign_id
INNER JOIN imports ON campaigns.id=imports.campaign_id
WHERE campaigns.id=3;

当我在 SELECT 查询中尝试某个版本的代码时(我开始删除内容有点紧张)我没有得到应该有的结果集。

有人可以帮我使用正确的语法吗?

1 个答案:

答案 0 :(得分:0)

根据https://www.npmjs.com/package/mysql#multiple-statement-queries

出于安全原因禁用了对多个语句的支持(如果值没有正确转义,它允许 SQL 注入攻击)。要使用此功能,您必须为您的连接启用它:

var connection = mysql.createConnection({multipleStatements: true});

有了这个设置,它就奏效了。