MySQL 从内存中删除 table 加入 InnoDB table

MySQL delete from Memory table join InnoDB table

我的查询是:

DELETE FROM abc_memory INNER JOIN abc USING (abc_id) WHERE x < y

和MySQL抱怨说:

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 'INNER JOIN abc USING (abc_id) WHERE x < y' at line 1

在 MySQL 中有一个限制,即既不将内存 table 与 innodb table 连接在一起,也不在连接两个普通 table 时进行删除。但是在与 InnoDB table 连接时从内存 table 中删除是否有限制?

当你在 DELETE 中使用 JOIN 时,你必须在 DELETE 子句中列出 table 名称,以告诉它哪个 table (s) 从中删除。

DELETE abc_memory
FROM abc_memory
JOIN abc USING (abc_id)
WHERE x < y

这只会从 abc_memory table 中删除。如果要从两个 table 中删除,请将其更改为 DELETE abc_memory, abc

这在manual中有解释:

Multiple-table syntax

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

or:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]

您必须在 DELETE 之后或 USING 子句中列出 table(这与 USING 选项不同 JOIN 子句).