обновление
Поскольку BrianCampbell указывает здесь , SQLite 3.7.11 и выше, теперь поддерживает более простой синтаксис исходного сообщения . Однако показанный подход все еще уместен, если вам нужна максимальная совместимость с устаревшими базами данных.
оригинальный ответ
Если бы у меня были привилегии, я бы поднял ответ andy : Вы можете вставить несколько строк в SQLite, вам просто нужен другой синтаксис . Для наглядности приведем пример OPS MySQL:
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2');
Это может быть преобразовано в SQLite как:
INSERT INTO 'tablename'
SELECT 'data1' AS 'column1', 'data2' AS 'column2'
UNION ALL SELECT 'data1', 'data2'
UNION ALL SELECT 'data1', 'data2'
UNION ALL SELECT 'data1', 'data2'
заметка о производительности
Первоначально я использовал эту технику для эффективной загрузки больших наборов данных из Ruby on Rails. Однако , , как отмечает Хайме Кук , не ясно, является ли это более быстрым переносом индивидуума INSERTs
в одну транзакцию:
BEGIN TRANSACTION;
INSERT INTO 'tablename' table VALUES ('data1', 'data2');
INSERT INTO 'tablename' table VALUES ('data3', 'data4');
...
COMMIT;
Если ваша цель - эффективность, сначала попробуйте.
примечание о UNION против UNION ALL
Как прокомментировали несколько человек, если вы используете UNION ALL
(как показано выше), все строки будут вставлены, поэтому в этом случае вы получите четыре строки data1, data2
. Если вы пропустите ALL
, то дублирующиеся строки будут удалены (и операция, вероятно, будет немного медленнее). Мы используем UNION ALL, так как он более точно соответствует семантике исходного сообщения.
при закрытии
P.S .: Пожалуйста, +1 andy's ответ , не мой! Сначала он представил решение.