Update
Comme BrianCampbell weist hier darauf hin , SQLite 3.7.11 und höher unterstützt jetzt die einfachere Syntax des ursprünglichen Beitrags . Der gezeigte Ansatz ist jedoch immer noch geeignet, wenn Sie eine maximale Kompatibilität mit älteren Datenbanken wünschen.
Originalantwort
Wenn ich Privilegien hätte, würde ich die Antwort des Flusses : Sie kann mehrere Zeilen in SQLite einzufügen, brauchen Sie nur andere Syntax . Um es ganz klar zu machen, das OPs MySQL Beispiel:
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2');
Dies kann in SQLite umgewandelt werden als:
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'
eine Anmerkung zur Leistung
Ursprünglich habe ich diese Technik verwendet, um große Datensätze effizient aus Ruby on Rails zu laden. Allerdings , wie Jaime Cook hervorhebt Es ist nicht klar, ob dies eine schnellere Umhüllung für einzelne Personen darstellt. INSERTs
innerhalb einer einzigen Transaktion:
BEGIN TRANSACTION;
INSERT INTO 'tablename' table VALUES ('data1', 'data2');
INSERT INTO 'tablename' table VALUES ('data3', 'data4');
...
COMMIT;
Wenn Sie Effizienz anstreben, sollten Sie dies zuerst versuchen.
eine Anmerkung zu UNION vs. UNION ALL
Wie mehrere Personen anmerkten, sollten Sie bei der Verwendung von UNION ALL
(wie oben gezeigt), werden alle Zeilen eingefügt. In diesem Fall würden Sie also vier Zeilen mit data1, data2
. Wenn Sie das ALL
dann werden doppelte Zeilen eliminiert (und der Vorgang wird vermutlich etwas langsamer). Wir verwenden UNION ALL, da es der Semantik des ursprünglichen Beitrags besser entspricht.
zum Schluss
P.S.: Bitte +1 Antwort des Flusses da sie die Lösung zuerst präsentierte.
6 Stimmen
Auf Beilagen: stackoverflow.com/questions/1711631/
5 Stimmen
Ja, ab der Version 2012-03-20 (3.7.11) wird Ihre Syntax unterstützt.