在 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...SELECTORDER BYINSERT IGNOREINSERT...SELECTORDER BYLIMIT
有人可以帮我解释这种意外行为吗?