SQL INSERT без указания столбцов. Что происходит?

Вопрос:Просматривал любимые W3schools и нашел эту страницу и на самом деле узнал что-то интересное. Я не знал, что вы можете вызвать команду insert без указания столбцов значений. Например: INSERT INTO table_name VALUES (value1, value2, value3,...) Вытаскивая из моей туманной памяти, я, кажется, помню, как SQL prof упоминает, что вы должны обрабатывать поля, как если бы

Вопрос:

Просматривал любимые 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 должен иметь что-то похожее на это.

Оцените статью
Добавить комментарий