Name | Gehalt |
---|---|
Hans | 1000 |
Ulrike | 2000 |
Name | Strasse | Telefonnummer |
---|---|---|
Hans Müller | Milchstr. 44 | (007) 111 222 |
Liese Schmitz | Schmiedstr. 100 | (007) 222 111 |
Sammlung von Daten, die untereinander in einer logischen Beziehung stehen und von einem Datenbankverwaltungsprogramm (DBMS) verwaltet werden.
http://linas.org/linux/db.html
Via Datenbank mysql:
Nach jedem Ändern der Zugriffsrechte mysqladmin reload ausführen.
Typ | Beschreibung |
---|---|
tinyint | -128 .... 127 |
smallint | -32768 .... +32767 |
int | -2147483648 .... +2147483647 |
float(n) | n E {4;8}, Einfache und doppelte Genauigkeit |
date | YYYY-MM-DD Datumsformat |
time | HH-MM-SS Zeitformat |
char(m) | Zeichenkette mit fester Länge |
varchar(m) | variable Länge, max. m Zeichen |
blob | Binary Large Object, wird für Texte gebraucht, "TINY", "", "LONG" |
Das Copyright liegt bei der Unversity of California. Man kann mit der Software anstellen, was man will.
Typ | Beschreibung |
---|---|
float4 | 6 Dezimalstellen |
float8 | 15 Dezimalstellen |
int2 | -32767 .... +32768 |
int4 | -2147483648 .... +2147483647 |
int8 | +/- 18 Dezimalstellen |
money | 4 Byte, -21474836,48 .... +21474836,47 |
char | ein Zeichen |
text | Variable Länge |
varchar(n) | 4+n Bytes |
date | Datum, Datumformate mit SET DATESTYLE=Value einstellbar |
time | Uhrzeit, Auflösung 1 Mikrosekunde |
bool | Kann den Wert 't' oder 'f' annehmen |
CREATE DATABASE testdb;
CREATE TABLE tabelle1 (name VARCHAR(100), gehalt INT2);
ALTER TABLE tabelle1 ADD nummer INT;
ALTER TABLE tabelle1 DROP nummer;
INSERT INTO tabelle1 VALUES('hans',1000);
INSERT INTO tabelle1 VALUES('ulrike', 2000);
SELECT * FROM tabelle1;
SELECT name, SUM(gehalt) FROM tabelle1 GROUP BY name;
SELECT * FROM tabelle1 WHERE gehalt=1000;
SELECT name, 12*gehalt AS jahresgehalt FROM tabelle1;
SELECT * FROM tabelle1 ORDER BY name DESC;
SELECT * FROM tabelle1 ORDER BY name ASC;
UPDATE tabelle1 SET gehalt=2000 WHERE name='hans';
DELETE FROM tabelle1;
DELETE FROM tabelle1 WHERE gehalt=2000;
DROP DATABASE testdb;
Eine ordentlicher gestaltete Tabelle nach Vorlage von Tabelle2 sähe so aus:
CREATE TABLE tabelle2 (name varchar(100), strasse varchar(100), telefon varchar(100) NOT NULL);
CREATE UNIQUE INDEX telefon_idx ON tabelle2 (telefon);
INSERT INTO tabelle2 VALUES('hans müller', 'milchstr. 44', '(007) 111 222');
INSERT INTO tabelle2 VALUES('hans müller', 'milchstr. 44', '(007) 111 222');
(2. Zeile liefert Fehler, weil Telefonnummer schon vorkomt)
INSERT INTO tabelle2 VALUES('ulrike meier', 'milchstr. 33', '(008) 123 456');
Ein Index erlaubt es, Zeilen als eindeutig zu kennzeichnen. In diesem Beispiel dürfen keine zwei Tupel dasselbe Attribut telefon haben.
Folgende Tabellen legen wir uns an:
Personalnummer (*) | Gehalt |
---|---|
111 | 1000 |
222 | 2000 |
112 | 2000 |
Vorname | Personalnummer (*) |
---|---|
Hans | 111 |
Liese | 222 |
Uschi | 112 |
CREATE TABLE tabelle3(Personalnummer int2 NOT NULL, Gehalt int2);
CREATE UNIQUE INDEX p_idx ON tabelle3 (Personalnummer);
CREATE TABLE tabelle4(Vorname varchar(100), Personalnummer int2 NOT NULL);
CREATE UNIQUE INDEX p_idx ON tabelle4 (Personalnummer);
INSERT INTO tabelle3 VALUES(111, 1000);
INSERT INTO tabelle3 VALUES(222, 2000);
INSERT INTO tabelle3 VALUES(112, 1000);
INSERT INTO tabelle4 VALUES('Hans', 111);
INSERT INTO tabelle4 VALUES('Liese', 222);
INSERT INTO tabelle4 VALUES('Uschi', 112);
Welche Person(Vorname) erhält welches Gehalt
SELECT a.Vorname, b.Gehalt FROM tabelle4 AS a, tabelle3 AS b
WHERE a.Personalnummer=b.Personalnummer;
#include <mysql.h> #include <stdio.h> int main(void) { MYSQL *connection; /* Verbindung zu Postgres-Server */ MYSQL_RES *result; /* Ergebnis einer Abfrage */ char sql[1000]; /* Hält Abfrage fest */ MYSQL_ROW row; /* Ergebniszeile */ int anz; /* Anzahl der Tupel */ int i; /* für for-Schleife */ /* Datenstruktur initialisieren */ connection=mysql_init(NULL); /* Verbindung aufbauen und testen */ if(! mysql_real_connect(connection, NULL, "dbuser", NULL, "test", 0,NULL,0)) { fprintf(stderr, "Verbindung schlug fehl\n"); mysql_close(connection); exit(1); } sprintf(sql, "SELECT * FROM tabelle"); /* SQL-Befehl ausführen */ if((mysql_query(connection, sql) !=0)) { fprintf(stderr, "Abfrage schlug fehl (%s): %s\n", sql, mysql_error(connection)); mysql_close(connection); exit(1); } /* Ergebnisse speichern */ result=mysql_store_result(connection); anz=mysql_num_fields(result); while((row=mysql_fetch_row(result))) { for(i=0; i<anz; i++) printf("%s ", row[i]); printf("\n"); } /* Ergebnis-Speicher wieder freigeben */ mysql_free_result(result); /* Verbindung trennen */ mysql_close(connection); return 0; }
Übersetzen mit:
gcc -c -g -Wall -I/usr/include/mysql -o m.o m.c gcc -o mysqltest m.o -L/usr/lib/mysql -lm -lmysqlclient
#include <libpq-fe.h> #include <stdio.h> int main(void) { PGconn *connection; /* Verbindung zu Postgres-Server */ PGresult *res; /* Ergebnis einer Abfrage */ char sql[1000]; /* Hält Abfrage fest */ int anz; /* Anzahl der Tupel */ int i; /* für for-Schleife */ /* Verbindung aufbauen */ connection=PQsetdbLogin(NULL, NULL, NULL, NULL, "hotel", "dbuser", NULL); /* Testen auf Erfolg */ if(PQstatus(connection)!=CONNECTION_OK) { fprintf(stderr, "Verbindung schlug fehl\n"); PQfinish(connection); exit(1); } sprintf(sql, "SELECT * FROM belegung"); /* Anfang der Transaktion */ res=PQexec(connection, "BEGIN"); if(PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "Verbindung schlug fehl\n"); PQclear(res); PQfinish(connection); exit(1); } PQclear(res); res=PQexec(connection, sql); /* SQL-Befehl ausführen */ if(PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "Abfrage schlug fehl (%s)\n", sql); PQclear(res); PQfinish(connection); exit(1); } anz=PQntuples(res); /* Anzahl der Tupel ermitteln */ for(i=0; i< anz; i++) /* Alle ausgeben */ { printf("%s ", PQgetvalue(res, i, 0)); printf("%s\n", PQgetvalue(res, i, 1)); } PQclear(res); /* Ende der Transaktion */ res=PQexec(connection, "COMMIT"); PQclear(res); PQfinish(connection); /* Verbindung trennen */ return 0; }
Übersetzen mit:
gcc -c -g -Wall -I/usr/lib/pgsql/include -o pg.o pg.c gcc -o pgtest pg.o -L/usr/local/postgres/lib -lcrypt -lpq