Есть ли способ назвать столбцы в операторе INSERT? - PullRequest
2 голосов
/ 14 января 2009

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

SELECT id, name from users;

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

SELECT * from users;

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

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

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

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

Ответы [ 9 ]

28 голосов
/ 14 января 2009
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

INSERT INTO people (id, name)
VALUES (1, 'Fred');
5 голосов
/ 14 января 2009

что вы хотите, это

INSERT INTO PEOPLE ( id, name ) VALUES ( 1, 'FRED' )
5 голосов
/ 14 января 2009
INSERT into people(id,name) values (1, 'Fred');
4 голосов
/ 14 января 2009

Использование INSERT INTO <table> (col1, col2) VALUES (1,2).

4 голосов
/ 14 января 2009
INSERT INTO table (column_1, column_2, column_3, ...)
VALUES (value_1, value_2, value_3, ...)
3 голосов
/ 14 января 2009

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

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

Хотелось бы, чтобы PostgreSQL способствовал такому синтаксису вставки

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

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

3 голосов
/ 14 января 2009

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

ВСТАВИТЬ в людей (ID, имя) значения (1, «Фред»);

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

3 голосов
/ 14 января 2009

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

2 голосов
/ 14 февраля 2009

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

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 ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...