Есть ли способ назвать столбцы в инструкции INSERT?

Когда я выполняю операторы SELECT в PHP-коде, я всегда выбираю именованные столбцы, например:

SELECT id, name from users;

вместо использования:

SELECT * from users;

Это имеет то преимущество, что является более информативным и читаемым, а также позволяет избежать проблем в дальнейшем, если в таблицу будут добавлены новые столбцы.

Мне интересно, можно ли использовать ту же идею в инструкции INSERT? Я предполагаю, что это может быть что-то вроде этого:

INSERT into people values (id=1, name = "Fred");

Синтаксис, показанный в этом примере, не работает, но мне интересно, возможно ли что-то эквивалентное? Если нет, то кто-нибудь знает, почему нет? Это умышленное упущение?

Ух ты! Я давно хотел сделать это, и оказалось, что это было легко, и что почти все, кроме меня, уже знали об этом. Я люблю Stackoverflow ...

Ben 14.01.2009 18:12

Если у вас есть другой вопрос SQL, посмотрите здесь sqlzoo.net. Это мне очень помогло.

Xn0vv3r 14.01.2009 21:57
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
2
526
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

INSERT INTO people (id, name)
VALUES (1, 'Fred');
INSERT into people(id,name) values (1, 'Fred');

это правильно, за исключением того, что вам нужны одинарные кавычки вместо двойных кавычек.

Ryan Guill 14.01.2009 18:09

Спасибо, я вырезал и наклеил и не исправил эту часть. К тому же jmien опередила меня примерно на 10 секунд.

Paul Tomblin 14.01.2009 18:16
INSERT INTO table (column_1, column_2, column_3, ...)
VALUES (value_1, value_2, value_3, ...)

то, что ты хочешь, это

INSERT INTO PEOPLE ( id, name ) VALUES ( 1, 'FRED' )

Попробуйте так: ВСТАВИТЬ В люди (идентификатор, имя) ЗНАЧЕНИЯ (1, «Фред»);

Используйте INSERT INTO <table> (col1, col2) VALUES (1,2).

синтаксис для этого случая

INSERT into people (id, name) values (1, 'Fred');

по крайней мере, он работает в dbms, которые я использую (PostgreSQL)

Ответ принят как подходящий

Такой синтаксис возможен только в MySQL. Афайк, другие СУБД этого не допускают. Вот синтаксис:

INSERT INTO games SET yr = 2012, city = 'London';

Я бы хотел, чтобы PostgreSQL облегчил такой синтаксис вставки

Стандартный синтаксис ANSI, однако, будет

ВСТАВИТЬ в ценности людей (года, города) (2012, «Лондон»);

Другой метод, однако, - это стандартный SQL, переносимый на любую совместимую со стандартом СУБД.

Harper Shelby 14.01.2009 18:33

@Harper: Это важный момент, но для меня версия только для MySQL подходит, так как я не пишу производственное программное обеспечение, а просто что-то для себя, и я буду использовать только MySQL ... Я думаю... :-)

Ben 14.01.2009 18:38

Когда-нибудь в будущем вы будете ругать себя за то, что не делаете это стандартным способом SQL.

Paul Tomblin 14.01.2009 21:35

Он непереносимый, и я не вижу никаких преимуществ.

Friedrich 15.01.2009 09:27

Даже команда PostgreSQL считает такой синтаксис более читабельным. Я не могу поверить, что отвечаю на вопрос добросовестно, без злого умысла или чего-то еще, но я получил отрицательный голос. Ну .. это жизнь ... здесь.

Michael Buen 15.01.2009 09:59

@ Майкл Буэн: Я согласен с вами. Я лично считаю, что ваш ответ был хорошим ответом. Я искал решение MySQL, и, на мой взгляд, предложенный вами ответ более читабелен, чем более стандартный. Жаль, что за вас проголосовали против.

Ben 17.01.2009 16:00

Я предполагаю, что этот ответ - синдром разбитого окна. Я просто надеялся, что в будущем многие поставщики СУБД сочтут этот синтаксис более простым в использовании, чем стандартный. Что переменная и ее значение должны находиться в непосредственной близости друг от друга.

Michael Buen 14.02.2009 16:00

Используя стандартный синтаксис, вы можете вставить сразу несколько строк:

INSERT INTO Table (column1,...,columnN) VALUES
(r1v1, ..., r1vN),
(r2v1, ..., r2vN),
(r3v1, ..., r3vN).

Это МНОГО более быстрый способ импорта данных, чем по одной строке (особенно в MySQL)! Я не думаю, что вы можете сделать то же самое, используя

INSERT INTO Table SET column1 = r1v1, ..., columnN = r1vN

синтаксис.

(По личному опыту, вставка 300000 строк по одной строке за раз занимала несколько минут. Когда я изменил сценарий, чтобы использовать только несколько операторов вставки, каждый из которых вставлял несколько тысяч строк, потребовалось всего несколько секунд, чтобы импортировать все это, MySQL 5.0).

Другие вопросы по теме