Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge
Anmelden
Sektionen
Sie sind hier: Startseite bitMagie SQLite SQLite - Datensätze einfügen, ändern und löschen

SQLite - Datensätze einfügen, ändern und löschen

| abgelegt unter: , ,

Auf der Basis einer wohldurchdachten Tabellenstruktur läßt sich ein entsprechender Datenbestand in SQLite effizient pflegen, das bedeutet: einfügen, ändern und löschen. Zu diesem Zweck bietet die SQL-Sprache jeweils ein Insert-, Update- und Delete-Kommando.

INSERT - Kommando

Die grundlegende Syntax lautet:

insert into <tabellen-name>( spalten-liste ) values( werte-liste );

Die Spalten und Werte werden als miteinander korrespondierende kommaseparierte Listen angegeben. Ein Wert an einer bestimmten Position in der Werte-Liste korrespondiert mit der Spalte an der gleichen Position in der Spalten-Liste. Die Spaltenliste kann ausnahmsweise weggelassen werden, wenn alle Spalten der Tabelle in der Werte-Liste einen Wert zugewiesen bekommen und die Reihenfolge der Werte mit der Spaltenfolge der Tabelle korrespondiert.

In dem vorhergegangenen SQLite-Artikel wurde eine Tabelle "pflanzen" erzeugt, in die jetzt  drei Zeilen eingefügt werden sollen. Da alle Spalten der Tabelle dabei mit einem Wert belegt werden und die Werte-Folge mit der Spaltenfolge der Tabelle übereinstimmt, kann die Spaltenliste in diesem Fall weggelassen werden:

-- Daten in Tabelle 'pflanzen' einfuegen
insert into pflanzen values(1, "Ananas","Obst", "braun", "suess", "gross");
insert into pflanzen values(2, "Apfel","Obst", "gruen", "sauer", "mittel");
insert into pflanzen values(3, "Banane","Obst", "gelb", "suess", "mittel");

Unterstellt man, dass die Tabelle vor Ausführung der insert-Kommandos noch leer war, dann funktioniert diese Anweisungsfolge problemlos. War die Tabelle allerdings nicht leer,  dann darf keine der Pflanzen-IDs bzw. keine der  Kombinationen aus Pflanzen-Name und Pflanzen-Art der insert-Kommandos aufgrund der bei der Tabellenerzeugung festgelegten Einschränkungen ( Constraints ) bereits in der Tabelle existieren, da ansonsten das betreffende insert-Kommando fehlschlagen würde.

Das nachfolgende insert-Kommando erzeugt einen Datensatz mit der Pflanzen-ID  "4" :

insert into pflanzen(art,name,groesse,geschmack,farbe)
values("Obst","Birne", "mittel", "suess", "gelb");

Da in der Werte-Liste ein Wert weniger eingetragen ist, als es Spalten in der Tabelle gibt, muss in der Spaltenliste angegeben werden, welcher Wert der Werteliste zu welcher Spalte gehören soll.  Man beachte in diesem Beispiel auch die willkürlich veränderte Spaltenfolge, die keinerlei Auswirkungen auf das Ergebnis hat, solange die Werte der Werteliste in entsprechender Reihenfolge aufgeführt werden. Wie sich leicht ablesen lässt, fehlt in der Anweisung die Spalte "id". Die bereits besprochene Einschränkung dieser Spalte bewirkte u.a. implizit ein autoincrement. Damit erhält die Spalte "id", weil sie keinen Wert explizit zugewiesen bekommt, automatisch den um 1 erhöhten grössten Wert, der in der Tabelle bis dahin in der Spalte "id" existiert. Dies war der Wert 3, so dass die neue ID den Wert 4 bekommt. Im Normalfall lässt sich die neu erzeugte ID nicht so einfach abschätzen, deshalb kann die zuletzt erzeugte ID mittels einer SQL-Funktion abgefragt werden:

select last_insert_rowid() as zuletztEingefuegteID from pflanzen; 

SQLite erzeugt für jede Zeile einer Tabelle automatisch eine "rowid". Die als integer primary key deklarierte Spalte "id" ist durch diese Deklaration zu einem Alias für für "rowid" geworden.  Als Ergebnis der select-Anweisung erhält man dann z.B. im SQLite-Kommandozeilen-Tool die Ausgabe:

 zuletztEingefuegteID 
----------------------
4

 

 

UPDATE - Kommando

Die Syntax lautet:

update <tabellen-name> set <spalten-name> = <wert> [ , <spalten-name> = <wert> [ , < ... > ] ] [ where <bedingungen> ] ;

Ohne Angabe der where-Klausel werden alle Datensätze aktualisiert.

Wollte man in Pflanzen-Tabelle z.B. alle Obstsorten als "gross" deklarieren, dann würde man das mit der folgenden Anweisung erreichen:

update pflanzen set groesse='gross' where art='Obst'; 

Das Standardverhalten bei Textvergleichen ist "case-sensitiv" und deshalb muss hier auf die korrekte Schreibweise geachtet werden.

Soll Geschmack und Farbe des Apfels in "suess" und "rot" geändert werden, dann erreicht man das mit der folgenden Anweisung:

update pflanzen set geschmack='suess', farbe='rot' where name='apfel'; 

Weil die Spalte "name" bei der Tabellenerzeugung mit der Einschränkung "nocase" versehen wurde, ist bei diesem Vergleich die Gross-/Kleinschreibung irrelevant.

Schliesslich sollen noch alle suessen gelben Pflanzen als klein deklariert werden:

update pflanzen set groesse='klein' where geschmack='suess' and farbe='gelb'; 

Damit sind Birne und Banane in der Tabelle zu "kleinen" Obstsorten geworden.

Auch bei der Änderung eines Datensatzes muss - genau wie beim Einfügen - darauf geachtet werden, dass die für die Tabelle und Spalten geltenden Einschränkungen nicht verletzt werden, da ansonsten die Änderungsanweisung  fehlschlägt.

 

DELETE - Kommando

Die Syntax lautet:

delete from <tabellen-name> [ where <bedingung> ] ;

Ohne Angabe der where-Klausel werden alle Datensätze aus der Tabelle namens <tabellen-name> gelöscht.

Die folgende Anweisung löscht das saure Obst aus der Tabelle:

delete from pflanzen where art='Obst' and geschmack='sauer';

Um alle Datensätze aus der Tabelle pflanzen zu löschen, schreibt man einfach:

delete from pflanzen;
14.06.2011 14:55
Artikelaktionen