Вопрос:
Просматривал любимые W3schools и нашел эту страницу и на самом деле узнал что-то интересное. Я не знал, что вы можете вызвать команду insert без указания столбцов значений. Например:
INSERT INTO table_name VALUES (value1, value2, value3,…)
Вытаскивая из моей туманной памяти, я, кажется, помню, как SQL prof упоминает, что вы должны обрабатывать поля, как если бы они не были в каком-то определенном порядке (хотя есть на стороне RDB, но это не гарантировано).
Мой вопрос в том, как сервер знает, какие значения назначаются для каких полей? * Я бы сам это испытал, но не собираюсь использовать производственный сервер, к которому я имею доступ в настоящий момент.
Если эта технология специфична, я работаю над PostgresSQL. Как этот конкретный синтаксис даже полезен?
Лучший ответ:
Ваш проф был прав – вы должны явно указывать столбцы, прежде чем называть значения.
В этом случае, хотя значения будут вставлены в том порядке, в котором они отображаются в определении таблицы.
Проблема заключается в том, что если этот порядок изменяется или удаляются или добавляются столбцы (даже если они являются нулевыми), тогда вставка будет разорваться.
С точки зрения его полезности, не так много в производственном коде. Если вы вручную кодируете быструю вставку, это может просто помочь вам печатать все имена столбцов.
Ответ №1
Они вставляются в поля в том порядке, в котором они указаны в определении таблицы.
Итак, если ваша таблица имеет поля (a, b, c), a = значение1, b = значение2, c = значение3.
Твой профессор был прав, это лениво и может сломаться. Но полезно для быстрой и грязной ленивой вставки.
Ответ №2
Я не могу устоять, чтобы поставить здесь “RTFM”.
В руководстве PostgreSQL подробно описано, что происходит в главе о INSERT:
Имена целевых столбцов могут быть перечислены в любом порядке. Если нет списка имена столбцов даны вообще, по умолчанию все столбцы таблицу в объявленном порядке; или имена первых N столбцов, если это только N столбцов, предоставляемых предложением или запросом VALUES. Ценности предоставляемые предложением или запросом VALUES, связаны с явный или неявный список столбцов слева направо.
Смелый акцент мой.
Ответ №3
Значения просто добавляются в том же порядке, что и столбцы в таблице. Он полезен в ситуациях, когда вы не знаете имена столбцов, с которыми работаете, но знаете, какие данные нужно вводить. Как правило, это не очень хорошая идея, хотя, конечно, ломается, если порядок столбцов изменение или новые столбцы вставлены в середину.
Ответ №4
Этот синтаксис работает только без указания столбцов тогда и только тогда, когда вы предоставляете с тем же числом значений, что и количество столбцов. Вторая важная вещь – столбцы в таблице sql всегда находятся в одном порядке и зависят от определения вашей таблицы. Единственное, что не имеет врожденного порядка в таблице sql, это строки.
Ответ №5
когда таблица создана, каждый столбец будет иметь номер заказа в системной таблице. Поэтому каждое значение будет вставлено в соответствии с порядком.
Значение firt будет идти в первый столбец… так далее
В sql сервере системная таблица syscolumn поддерживает этот порядок. Postgresql должен иметь что-то похожее на это.