Как вставить несколько строк в SQLite?
Проблема:
У меня есть следующая задача с базой данных SQLite. В MySQL я могу вставить несколько строк с помощью следующего запроса:
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2');
Однако, когда я пытаюсь сделать что-то подобное в SQLite, я получаю ошибку. Возможно ли вставить несколько строк одновременно в базу данных SQLite? Какой синтаксис необходимо использовать для этого?
Буду благодарен за помощь!
5 ответ(ов)
Да, это возможно, но не с помощью обычного вставки значений, разделённых запятыми.
Попробуйте так...
insert into myTable (col1, col2)
select aValue as col1, anotherValue as col2
union select moreValue, evenMoreValue
union...
Да, это немного неаккуратно, но достаточно легко автоматизировать генерацию этого запроса из набора значений. Также, судя по всему, имена столбцов нужно указывать только в первом SELECT.
Я написал код на Ruby, который генерировал единую вставку из 500 элементов с несколькими строками из серии операторов INSERT, и это было значительно быстрее, чем выполнение индивидуальных вставок. Затем я попробовал просто обернуть несколько вставок в одну транзакцию и обнаружил, что могу достичь такой же скорости с намного меньшим объемом кода.
BEGIN TRANSACTION;
INSERT INTO table VALUES (1,1,1,1);
INSERT INTO table VALUES (2,2,2,2);
...
COMMIT;
Таким образом, использование транзакций действительно может значительно повысить производительность, особенно при большом количестве операций вставки. Это позволяет минимизировать накладные расходы на выполнение каждого отдельного запроса, что делает код более эффективным и легче читаемым.
Начиная с версии 2012-03-20 (3.7.11), SQLite поддерживает следующий синтаксис для команды INSERT:
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data3', 'data4'),
('data5', 'data6'),
('data7', 'data8');
Для получения дополнительной информации ознакомьтесь с документацией: SQLite INSERT documentation.
P.S.: Пожалуйста, ставьте +1 к ответу Брайана Кэмпбелла, а не к моему! Он первым представил решение.
Как упомянули другие пользователи, SQLite не поддерживает эту синтаксис. Не могу сказать, являются ли составные INSERT'ы частью стандарта SQL, но из моего опыта они не реализованы во множестве продуктов.
Кроме того, хочу обратить ваше внимание на то, что производительность вставки в SQLite значительно улучшается, если вы обернете несколько INSERT'ов в явную транзакцию.
Конечно! Чтобы вставить несколько строк в таблицу с помощью SQL, вы можете использовать синтаксис, похожий на тот, что вы представили. Вот пример, как это может выглядеть:
INSERT INTO ИМЯ_ТАБЛИЦЫ
(ДАННЫЕ1, ДАННЫЕ2)
VALUES (ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2),
(ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2),
(ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2),
(ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2),
(ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2),
(ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2),
(ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2),
(ЗНАЧЕНИЕ1, ЗНАЧЕНИЕ2);
Здесь ИМЯ_ТАБЛИЦЫ
— это название вашей таблицы, а ДАННЫЕ1
и ДАННЫЕ2
— это столбцы, в которые вы хотите вставить значения. Каждая пара значений в VALUES
представляет отдельную строку, которую вы хотите добавить в таблицу.
Обратите внимание, что количество значений в каждой паре должно соответствовать количеству столбцов, указанных в списке. Если вам нужно вставить больше данных, просто добавьте дополнительные пары значений, разделенные запятыми.
Решения для INSERT OR UPDATE в SQL Server
Как вывести список таблиц в файле базы данных SQLite, открытом с помощью ATTACH?
Сброс начального значения идентификатора после удаления записей в SQL Server
Postgres: Как повысить пользователя до суперпользователя?
Как восстановить дамп-файл из mysqldump?