lehrkraefte:blc:informatik:efi-2023:datenbanken

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
lehrkraefte:blc:informatik:efi-2023:datenbanken [2024/03/25 14:40] – [Restore/Copy] Ivo Blöchligerlehrkraefte:blc:informatik:efi-2023:datenbanken [2024/04/01 18:55] (current) – [Weitere Infos] Ivo Blöchliger
Line 1: Line 1:
 +====== Sqlite ======
 +Einfache und doch performante Datenbank (Einsatz für kleinere Webseiten, Apps, Browser): https://www.sqlite.org/
  
 +Ein Vorteil ist, dass die Datenbank keinen Server braucht und in einer einzigen Datei gespeichert ist (im Gegensatz zu den meisten anderen Datenbanken).
 +
 +===== Spielwiese =====
 +Verbindung auf dem ofi.tech-lab.ch Server:
 +<code bash>
 +ssh ef
 +cd sqlite-demo
 +sqlite3 demo.sqlite
 +</code>
 +
 +Default-Einstellungen in der Datei ''~/.sqliterc'':
 +<code bash>
 +cat ~/.sqliterc 
 +</code>
 +enthält zur Zeit:
 +<code txt>
 +.headers on
 +.mode column
 +PRAGMA foreign_keys = ON;
 +</code>
 +
 +
 +Sqlite-Befehle:
 +<code bash>
 +.schema
 +.quit
 +</code>
 +
 +
 +==== Tabellen anlegen ====
 +https://www.sqlite.org/lang_createtable.html
 +<code sql>
 +CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT,
 +  username TEXT UNIQUE NOT NULL,
 +  password TEXT NOT NULL);
 +CREATE TABLE score (id INTEGER PRIMARY KEY AUTOINCREMENT, 
 +  userid int not null, 
 +  zeit TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
 +  score int, 
 +  FOREIGN KEY(userid) REFERENCES user(id));
 +</code>
 +==== Daten einfügen ====
 +
 +<code sql>
 +INSERT INTO score (score, userid) values (42, 1);
 +</code>
 +Wird eine nicht-existente ''userid'' angegeben, wird ein Fehler produziert und nichts eingefügt.
 +
 +==== Daten abfragen ====
 +<code sql>
 +SELECT * FROM score;
 +SELECT * FROM score ORDER BY score DESC;
 +SELECT * FROM score order by score desc limit 3;
 +select username, score from user,score where user.id=score.userid order by score desc;
 +select username, score from user inner join score on user.id=score.userid order by score desc;
 +</code>
 +
 +Hinweis: ''select ... from user,score where ...'' ist äquivalent zu ''select ... from user inner join score on ...''. Je nach Datenbank soll es aber Unterschiede in der Ausführungsgeschwindigkeit geben.
 +
 +==== Daten modifizieren ====
 +https://www.sqlite.org/lang_update.html
 +<code sql>
 +UPDATE score set score=123 where id=18;
 +</code>
 +
 +==== Daten löschen ====
 +https://www.sqlite.org/lang_delete.html
 +<code sql>
 +DELETE from score where id=18;
 +</code>
 +
 +
 +==== Backup ====
 +<code bash>
 +echo -e ".dump\n.quit" | sqlite3 demo.sqlite > demo.dump
 +</code>
 +
 +==== Restore/Copy ====
 +<code bash>
 +sqlite3 copy.sqlite < demo.dump
 +</code>
 +
 +
 +
 +===== Weitere Infos =====
 +  * [[lehrkraefte:blc:informatik:ffprg2-2023:sqlite|Aus dem Freifach Programmieren]]
 +  * https://kerkour.com/sqlite-for-servers