我正在尝试删除与 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 查询中尝试某个版本的代码时(我开始删除内容有点紧张)我没有得到应该有的结果集。
有人可以帮我使用正确的语法吗?
答案 0 :(得分:0)
根据https://www.npmjs.com/package/mysql#multiple-statement-queries:
出于安全原因禁用了对多个语句的支持(如果值没有正确转义,它允许 SQL 注入攻击)。要使用此功能,您必须为您的连接启用它:
var connection = mysql.createConnection({multipleStatements: true});
有了这个设置,它就奏效了。