677 Stimmen

Ist es möglich, mehrere Zeilen auf einmal in eine SQLite-Datenbank einzufügen?

In MySQL können Sie mehrere Zeilen wie folgt einfügen:

INSERT INTO 'tablename' ('column1', 'column2') VALUES
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2');

Allerdings erhalte ich eine Fehlermeldung, wenn ich versuche, etwas wie dieses zu tun. Ist es möglich, mehrere Zeilen auf einmal in eine SQLite-Datenbank einzufügen? Wie lautet die Syntax dafür?

6 Stimmen

5 Stimmen

Ja, ab der Version 2012-03-20 (3.7.11) wird Ihre Syntax unterstützt.

9voto

Pepik z Usti Punkte 31

Einfach. Selbsterklärend.

Test mit Version 3.36.0 11/20/21.

CREATE TEMP TABLE x (col1 TEXT, col2 TEXT, col3 TEXT);

INSERT INTO x 
VALUES 
('xx','yy','cc'),
('xx','yy','cc'),
('xx','yy','cc'),
('xx','yy','cc'),
('xx','yy','cc'),
('xx','yy','cc');

SELECT * FROM x;

Ausgabe:

col1|col2|col3|
----+----+----+
xx  |yy  |cc  |
xx  |yy  |cc  |
xx  |yy  |cc  |
xx  |yy  |cc  |
xx  |yy  |cc  |
xx  |yy  |cc  |

Versionskontrolle:

SELECT sqlite_version();

Ausgabe:

sqlite_version()|
----------------+
3.36.0          |

Manch einer mag sagen, dass alle " UNION "-Antworten veraltet sind; dennoch sind sie sehr nützlich. Irgendwann bekommen wir alle auf unseren Schreibtischen "den Knall aus der Vergangenheit" und dann rettet die 15 Jahre alte Notiz unseren Tag.

0 Stimmen

Vielen Dank, dass mich zu dieser anderen Lösung mit DB Browser für SQLite geführt hat: stackoverflow.com/a/74310949/10789707

9voto

LEO Punkte 2514

Fearless_fool hat eine gute Antwort für ältere Versionen. Ich wollte nur hinzufügen, dass Sie sicherstellen müssen, dass Sie alle Spalten aufgelistet haben. Wenn Sie also 3 Spalten haben, müssen Sie sicherstellen, dass Select auf 3 Spalten wirkt.

Beispiel: Ich habe 3 Spalten, möchte aber nur Daten aus 2 Spalten einfügen. Angenommen, die erste Spalte ist mir egal, weil sie eine Standard-Integer-ID ist. Ich könnte das Folgende tun...

INSERT INTO 'tablename'
      SELECT NULL AS 'column1', 'data1' AS 'column2', 'data2' AS 'column3'
UNION SELECT NULL, 'data3', 'data4'
UNION SELECT NULL, 'data5', 'data6'
UNION SELECT NULL, 'data7', 'data8'

Hinweis: Denken Sie daran, dass bei der Anweisung "select ... union" die Reihenfolge verloren geht. (Aus AG1)

8voto

AG1 Punkte 6588

Alex hat recht: Die Anweisung "select ... union" verliert die Reihenfolge, die für einige Benutzer sehr wichtig ist. Selbst wenn Sie in einer bestimmten Reihenfolge einfügen, ändert Sqlite die Dinge, so dass Sie lieber Transaktionen verwenden sollten, wenn die Reihenfolge der Einfügung wichtig ist.

create table t_example (qid int not null, primary key (qid));
begin transaction;
insert into "t_example" (qid) values (8);
insert into "t_example" (qid) values (4);
insert into "t_example" (qid) values (9);
end transaction;    

select rowid,* from t_example;
1|8
2|4
3|9

6voto

g.revolution Punkte 11334

In mysql lite können Sie nicht mehrere Werte einfügen, aber Sie können Zeit sparen, indem Sie die Verbindung nur einmal öffnen, alle Einfügungen vornehmen und dann die Verbindung schließen. Das spart eine Menge Zeit

6voto

tuinstoel Punkte 7244

Das können Sie nicht, aber ich glaube nicht, dass Sie etwas verpassen.

Da Sie Sqlite immer im Prozess aufrufen, ist es für die Leistung fast egal, ob Sie 1 Insert-Anweisung oder 100 Insert-Anweisungen ausführen. Die Übergabe nimmt jedoch viel Zeit in Anspruch, so dass Sie diese 100 Einfügungen in eine Transaktion einbinden sollten.

Sqlite ist viel schneller, wenn Sie parametrisierte Abfragen verwenden (weit weniger Parsing erforderlich), so würde ich nicht verketten große Anweisungen wie diese:

insert into mytable (col1, col2)
select 'a','b'
union 
select 'c','d'
union ...

Sie müssen immer wieder geparst werden, weil jede verkettete Anweisung anders ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X