Mise à jour
Como BrianCampbell souligne ici , SQLite 3.7.11 et plus supporte maintenant la syntaxe plus simple de l'article original . Cependant, l'approche présentée est toujours appropriée si vous souhaitez une compatibilité maximale entre les bases de données existantes.
première réponse
Si j'avais des privilèges, je bousculerais réponse de la rivière : Vous peut insérer plusieurs lignes dans SQLite, il suffit de syntaxe différente . Pour être parfaitement clair, l'exemple MySQL du PO :
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2');
Cela peut être reformulé en SQLite comme suit :
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'
une note sur les performances
J'ai initialement utilisé cette technique pour charger efficacement de grands ensembles de données à partir de Ruby on Rails. Cependant , comme le souligne Jaime Cook il n'est pas évident que ce soit un emballage individuel plus rapide. INSERTs
au cours d'une même transaction :
BEGIN TRANSACTION;
INSERT INTO 'tablename' table VALUES ('data1', 'data2');
INSERT INTO 'tablename' table VALUES ('data3', 'data4');
...
COMMIT;
Si l'efficacité est votre objectif, vous devriez d'abord essayer ceci.
une note sur UNION vs UNION ALL
Comme plusieurs personnes l'ont fait remarquer, si vous utilisez UNION ALL
(comme illustré ci-dessus), toutes les lignes seront insérées, donc dans ce cas, vous obtiendrez quatre lignes de data1, data2
. Si vous omettez le ALL
les lignes en double seront éliminées (et l'opération sera sans doute un peu plus lente). Nous utilisons UNION ALL car cela correspond mieux à la sémantique de l'article original.
en clôture
P.S. : S'il vous plaît +1 réponse de la rivière car il a présenté la solution en premier.
31 votes
Il ne s'agit pas d'un doublon, car cette question porte sur SQLite en particulier, et non sur SQL en général (bien que certaines des réponses à cette question soient utiles pour celle-ci).
6 votes
Sur les encarts en vrac : stackoverflow.com/questions/1711631/
6 votes
La question est de savoir pourquoi vous devriez le faire. Étant donné que SQlite est en cours de traitement sur la même machine et que vous pouvez regrouper plusieurs insertions dans une transaction, je n'en vois pas la nécessité ?
4 votes
Oui, à partir de la version 2012-03-20 (3.7.11), votre syntaxe est supportée.