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
一部のタプルを格納してから空にするために使用される一時テーブルです。PRIMARY KEY はありません。
プロセスはテーブルを複数回埋めるため、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 |
+---------+---------+
したがって、2 つの重複するタプルが存在することを考慮する(foo,4)
と(bar,5)
、8 つの要素が挿入されると予想していましたが、実際には、2 つの重複を無視して、クエリで 10 の要素が挿入されていることがわかりました。
ポイントは、ドキュメントでこの動作の理由を見つけることができないということです。私が持っているがある場合にのみ機能するここを見つけました。しかし、 、、およびを一緒に持つこの動作の正確な説明を見つけることができませんでした。LIMIT
INSERT...SELECT
ORDER BY
INSERT IGNORE
INSERT...SELECT
ORDER BY
LIMIT
誰かがこの予期しない動作を説明するのを手伝ってくれますか?