在 MySql 5.6 中,我有一个类似于以下的查询:
INSERT IGNORE INTO TABLE_1 (field_a,field_b)
SELECT field_a,field_b
FROM TABLE_2
WHERE
...
ORDER BY field_a
LIMIT 0,10
TABLE_1
是一个临时表,用来存储一些元组,然后清空。它没有主键。
由于该进程多次填充表,因此它可能包含通过SELECT
. 考虑到这一点,我考虑增加限制,以便能够插入所有需要的数据。
TABLE_1
这是查询的内容和结果的示例SELECT
。
TABLE_1
:
+---------+---------+
| field_a | field_b |
+---------+---------+
| foo | 1 |
| foo | 2 |
| foo | 3 |
| foo | 4 |
| bar | 2 |
| bar | 3 |
| bar | 4 |
| bar | 5 |
+---------+---------+
SELECT
结果(忽略LIMIT
):
+---------+---------+
| field_a | field_b |
+---------+---------+
| foo | 4 |
| foo | 5 |
| foo | 6 |
| foo | 7 |
| foo | 8 |
| foo | 9 |
| foo | 10 |
| foo | 11 |
| foo | 12 |
| foo | 13 |
| bar | 5 |
| bar | 6 |
| bar | 7 |
| bar | 8 |
+---------+---------+
因此,考虑到有两个重复的元组,(foo,4)
并且(bar,5)
,我预计要插入 8 个元素......而实际上,我发现查询插入了 10 个元素,忽略了两个重复项。
关键是我在文档中找不到这种行为的原因。我在这里发现只有当我有一个 时才LIMIT
有效。但是我无法找到对这种行为的精确描述,同时具有,和.INSERT...SELECT
ORDER BY
INSERT IGNORE
INSERT...SELECT
ORDER BY
LIMIT
有人可以帮我解释这种意外行为吗?