logo

Множественная вставка строк в SQLite: правильный синтаксис

Быстрый ответ

Добавить несколько записей в SQLite можно с помощью следующего скрипта:

SQL
Скопировать код
INSERT INTO имя_таблицы (колонка1, колонка2) VALUES
('значение1_строка1', 'значение2_строка1'),
('значение1_строка2', 'значение2_строка2');

Подставьте вместо имя_таблицы, колонка1, колонка2 и значение соответствующие значения.

Если требуется добавить большое количество данных, повысьте производительность, запаковав добавление данных в транзакцию:

SQL
Скопировать код
BEGIN TRANSACTION;
/* Начинаем */
INSERT INTO имя_таблицы (колонка1, колонка2) VALUES ('значение1_строка1', 'значение2_строка1');
/* Добавляем еще одну запись */
INSERT INTO имя_таблицы (колонка1, колонка2) VALUES ('значение1_строка2', 'значение2_строка2');
...
COMMIT; /* Заканчиваем операции */

Пакетная загрузка данных значительно ускорит работу SQLite!

Берегите свои нервы: Устаревшие версии SQLite

Если вы используете устаревшую версию SQLite до версии 3.7.11, не волнуйтесь! Для массового добавления применяйте команду UNION ALL SELECT:

SQL
Скопировать код
INSERT INTO имя_таблицы (колонка1, колонка2)
SELECT 'значение1a', 'значение2a'
UNION ALL SELECT 'значение1b', 'значение2b'
UNION ALL SELECT 'значение1c', 'значение2c';

Запомните, в последовательности UNION псевдонимы используются только для первого оператора SELECT!

Оптимизация: быстро и эффективно

Транзакции: всегда быстрее

Оформляйте операции добавления данных в одну транзакцию, чтобы уменьшить количества I/O операций с диском и ускорить работу SQLite.

Не забывайте завершать транзакцию с помощью команды COMMIT — покидают только после завершения работы!

Write-Ahead Logging (WAL): два действия одновременно

Если нужно одновременно читать и писать данные, режим Write-Ahead Logging (WAL) в SQLite будет самым подходящим. Перед его использованием изучите соответствующий раздел документации SQLite.

Визуализация

Восприимчиво отнеситесь к SQLite как к садовому участку, где каждый INSERT становится высаживанием саженца:

Markdown
Скопировать код
Участок (📋): [грядка 1 (🌱), грядка 2 (🌱🌱), грядка 3 (🌱🌱🌱)]

Этот участок через некоторое время превратится в:

SQL
Скопировать код
INSERT INTO участок (грядка) VALUES
(🌱),  /* И вот уже первый саженец! */
(🌱🌱), /* Два идентичных растения! */
(🌱🌱🌱); /* И даже три на одной грядке! */

И теперь настало время для сбора урожая:

Markdown
Скопировать код
📋: [🌿, 🌿🌿, 🌿🌿🌿]
# Вот это результат!

Массовые операции: сила трудовой дисциплины

Множественное добавление строк: вместе нам не страшны трудности!

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

ruby
Скопировать код
# Автогенерируем запросы: пусть сила трудовой дисциплины будет с нами!
строки.map do |строка|
  "INSERT INTO имя_таблицы VALUES #{строка.join(",")};"
end.join

Обработка ошибок: нежность и забота о данных

При работе с большим количеством данных очень важно обрабатывать исключения, исправлять ошибки и контролировать целостность данных.

Распространенные ошибки: путь к истинному знанию SQL

Несоответствие типов данных: яблоки отличаются от апельсинов

Всё в SQL замечательно до тех пор, пока вы не решили смешать типы данных! Будьте аккуратными, чтобы не нарушить целостность данных.

Уникальные ключи и дубликаты: это что-то новое

Добавьте в свои запросы INSERT OR IGNORE, чтобы избежать проблем с дублированием данных.

Продвинутые приемы: для тех, кто стремится к совершенству

PRAGMAs для оптимизации добавления данных: тонкая настройка — секрет успеха

PRAGMAs позволяют вам контролировать качество работы SQLite. Например, PRAGMA cache_size; дает возможность управлять размером кеша вашей сессии.

EXPLAIN QUERY PLAN: глубокий взгляд внутрь

Используйте EXPLAIN QUERY PLAN для лучшего разумения SQLite перед выполнением запроса.

Полезные материалы

  1. How to insert multiple rows in SQLite? – Stack OverflowОбсуждение на Stack Overflow.
  2. INSERT – SQLite Official DocumentationОфициальная документация SQLite.
  3. Save data in a local database using Room | Android DevelopersСоветы от разработчиков Android.
  4. SQLite Frequently Asked QuestionsЧасто задаваемые вопросы по SQLite.
  5. Write-Ahead LoggingОписание режима WAL в SQLite.
  6. Transaction – SQLite Official DocumentationЧто такое транзакция в SQLite?
  7. SQLite – INSERT QueryВведение в запросы INSERT в SQLite.