2016-07-07 3 views
1

я боролся с этими двумя на некоторое время:Почему MySQL требует аргументов в определенном порядке?

LOAD DATA LOCAL INFILE '...' INTO TABLE ... 
FIELDS TERMINATED BY '!' LINES TERMINATED BY '\n'; 

Это прекрасно работает. Что не работы, заключается в следующем:

LOAD DATA LOCAL INFILE '...' INTO TABLE ... 
LINES TERMINATED BY '\n' FIELDS TERMINATED BY '!'; 

Почему нет? Разве смысл не идентичен? В чем смысл этого? Существуют ли примеры, в которых изменение порядка аргументов, таких как изменение, приводит к результату?

+1

Это определение MySQL для определения правил синтаксиса. – dnoeth

+0

Конечно, я спрашиваю, что за этим стоит. – Ares

+1

Возможно, по той же причине задан порядок запросов. 'SELECT ... FROM ... WHERE ... GROUP BY ...' работает, но 'SELECT ... FROM ... GROUP BY ... WHERE' does not. Конечно, читая это, они имеют в виду одно и то же. Но компилятор не ожидает этого в этом порядке. Именно так был определен синтаксис языка. – Siyual

ответ

2

Потому что это а) способ работы механизма запроса и б), потому что парень, который его написал, не захотел пройти через его кодирование, чтобы разрешить переменный порядок необязательных предложений с парсером SQL, потому что это на самом деле не добавляет большого значения.

В конечном счете, это та же самая причина ls file.txt -a и file.txt -a ls не являются один и той же командой оболочки, или причина, вы должны использовать x = 6 * (9 + 2) вместо x = 6 9 2 + * в C. Ответ: потому что есть синтаксис и есть правила.

+0

У некоторых вещей нет причин быть произвольно переупорядоченными. Это одна из тех вещей. +1. – Dan