INSERT — оператор языка SQL, который позволяет добавить строки в таблицу, заполняя их значениями. Значения можно вставлять перечислением с помощью слова values и перечислив их в круглых скобках через запятую или оператором select.

Примеры использования

[править | править код]

Используя перечисление значений, с указанием столбцов:

insert into <название таблицы> ([<Имя столбца>, ... ]) values (<Значение>,...)

Например:

INSERT INTO phone_book (name, number) VALUES ('John Doe', '555-1212');

Используя перечисление значений, без указания столбцов:

insert into <название таблицы> values (<Значение>,...)

Например:

INSERT INTO phone_book VALUES ('John Doe', '555-1212');

Используя select:

insert into <название таблицы> select <имя столбца>,... from <название таблицы>

В последнем случае, в таблицу может вставиться более одной записи. Если в таблице есть другие поля требующие заполнения, но не указанные в операторе insert, для них будет установлено значение по умолчанию, либо null, если значение по умолчанию не указано.

Альтернативный синтаксис оператора INSERT

[править | править код]

В некоторых СУБД, например, MySQL, существует альтернативный синтаксис оператора INSERT, в котором значения присваиваются столбцам при помощи ключевого слова SET:

insert into <название таблицы> set <имя столбца1> = <значение1>, <имя столбца2> = <значение2>...

Особенности

[править | править код]

Во время выполнения оператора могут возникнуть ошибки:

Опция identity_insert (MS SQL Server)

[править | править код]

эта инструкция не будет работать, нужно указывать имя таблицы.

Включить опцию:

 SET IDENTITY_INSERT table { ON | OFF }

После включения этой опции можно вставлять значения в поля, определенные как identity. Нужно учесть, что значение должно быть уникальным.

Включать эту опцию без явной необходимости не рекомендуется. Однако, её следует использовать в записях, в которых нужно сменить некоторые столбцы, не поменяв её identity столбец (например, если по этому столбцу делается связь с другой таблицей)

Получение ключа

[править | править код]

Разработчики, которые используют суррогатный ключ в качестве первичного ключа, часто сталкиваются со сценарием, когда необходимо получить первичный ключ (для использования в других запросах), сгенерированный базой данных в ответ на оператор SQL INSERT. Но большинство систем не позволяют оператору SQL INSERT возвращать данные. Возможные способы решения:

SELECT *
FROM FINAL TABLE ( INSERT INTO phone_book VALUES ( 'Peter Doe','555-2323' ) ) AS t
DB2 для z/OS реализует эту возможность следующим образом:
SELECT EMPNO, HIRETYPE, HIREDATE 
FROM FINAL TABLE (INSERT INTO EMPSAMP (NAME, SALARY, DEPTNO, LEVEL) VALUES(Mary Smith, 35000.00, 11, Associate));
DECLARE @table TABLE (
	[id] [smallint] IDENTITY(1,1) NOT NULL,
	[name] [nchar](50) NULL);
 
INSERT INTO @table
    OUTPUT INSERTED.id
VALUES ('Peter Doe');
INSERT INTO phone_book VALUES ( 'Peter Doe','555-2323' )
RETURNING phone_book_id
INSERT INTO phone_book VALUES ( 'Peter Doe','555-2323' )
RETURNING phone_book_id INTO v_pb_id
SELECT IDENTITY();

См. также

[править | править код]
Для улучшения этой статьи желательно: Проверить достоверность указанной в статье информации. На странице обсуждения должны быть пояснения.Найти и оформить в виде сносок ссылки на независимые авторитетные источники, подтверждающие написанное.Добавить иллюстрации.После исправления проблемы исключите её из списка. Удалите шаблон, если устранены все недостатки.