Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 27 MySQL und C
  gp 27.1 Aufbau eines Datenbanksystems
    gp 27.1.1 Warum wurde ein Datenbanksystem (DBS) entwickelt?
    gp 27.1.2 Das Datenbank-Management-System (DBMS)
    gp 27.1.3 Relationale Datenbank
    gp 27.1.4 Eigene Clients mit C für SQL mit der ODBC-API entwickeln
  gp 27.2 MySQL installieren
    gp 27.2.1 Linux
    gp 27.2.2 Windows
    gp 27.2.3 Den Client mysql starten
  gp 27.3 Crashkurs (My)SQL
    gp 27.3.1 Was ist SQL?
    gp 27.3.2 Die Datentypen von (My)SQL
    gp 27.3.3 Eine Datenbank erzeugen
    gp 27.3.4 Eine Datenbank löschen
    gp 27.3.5 Datenbank wechseln
    gp 27.3.6 Eine Tabelle erstellen
    gp 27.3.7 Die Tabelle anzeigen
    gp 27.3.8 Tabellendefinition überprüfen
    gp 27.3.9 Tabelle löschen
    gp 27.3.10 Struktur einer Tabelle ändern
    gp 27.3.11 Datensätze eingeben
    gp 27.3.12 Datensätze auswählen
    gp 27.3.13 Ein fortgeschrittenes Szenario
    gp 27.3.14 Datensatz löschen
    gp 27.3.15 Datensatz ändern
    gp 27.3.16 Zugriffsrechte in MySQL
    gp 27.3.17 Übersicht über einige SQL-Kommandos
  gp 27.4 Die MySQL C-API
    gp 27.4.1 Grundlagen zur Programmierung eines MySQL-Clients
    gp 27.4.2 Client-Programm mit dem gcc- unter Linux und dem Cygwin gcc-Compiler unter Windows
    gp 27.4.3 MySQL Client-Programme mit dem VC++ Compiler und dem Borland Freeware Compiler
    gp 27.4.4 Troubleshooting
    gp 27.4.5 Das erste Client-Programm – Verbindung mit dem MySQL-Server herstellen
    gp 27.4.6 MySQL-Kommandozeilen-Optionen
    gp 27.4.7 Anfrage an den Server
  gp 27.5 MySQL und C mit CGI
    gp 27.5.1 HTML-Eingabeformular
    gp 27.5.2 CGI-Anwendung add_db.cgi
    gp 27.5.3 CGI-Anwendung search_db.cgi
  gp 27.6 Funktionsübersicht
  gp 27.7 Datentypenübersicht der C-API

Kapitel 27 MySQL und C

Die Kombination von MySQL und der C-API ist ein sehr reizvolles, aber leider auch selten behandeltes Thema. Dieses Kapitel sorgt für Abhilfe und bietet Ihnen eine Einführung in MySQL und die C-API.


Hinweis   Dieses Kapitel kann ein vollwertiges MySQL-Buch nicht ersetzen. Das Thema MySQL ist zwar nicht unbedingt kompliziert, aber der Umfang ist gewaltig. Einige Funktionen der C-API oder MySQL-Sprachelemente werden deshalb hier nicht erwähnt.



Galileo Computing - Zum Seitenanfang

27.1 Aufbau eines Datenbanksystems  downtop

Dieser Abschnitt ist sehr wichtig, sofern Sie noch keinerlei Erfahrung mit Datenbanksystemen gemacht haben. Er erklärt die grundlegenden Prinzipien von Datenbanken im Allgemeinen.

Als C-Programmierer werden Sie sich fragen, warum benötige ich eine Datenbank? Ich kann doch einfach ein Programm unter Verwendung von binären Bäumen entwickeln, womit die Nutzung einer Datenbank überflüssig wird. Und Sie werden sich wundern – vereinfacht arbeitet MySQL auch so, nur mit einer anderen Beziehung: einer relationalen. Sicherlich, dass könnten Sie auch programmieren, schließlich wurde MySQL in der Programmiersprache C geschrieben. Also, wozu das Rad wieder neu erfinden? Außerdem erweist es sich als recht schwieriges Unterfangen, ein eigenes relationales Datenbankprogramm zu schreiben.


Galileo Computing - Zum Seitenanfang

27.1.1 Warum wurde ein Datenbanksystem (DBS) entwickelt?  downtop

Vor der Zeit der Datenbanken wurden Daten mit selbst entwickelten Programmen in Dateien gespeichert. Diese Programme waren zumeist an die Bedürfnisse einer Firma bzw. eines Anwenders angepasst. Schlimmer noch, teilweise wurden die Programme für die einzelnen Abteilungen bis hin zum einzelnen Mitarbeiter konfiguriert. Probleme waren dabei vorprogrammiert. Herr Meier konnte nicht auf die Datei »x« zugreifen, die Herr Müller erstellt hat, da Herr Meier im Gegensatz zu Herrn Müller ein modifiziertes Programm besitzt.

In diesem Fall hatte Herr Meier zwei Möglichkeiten: Entweder er lässt das Programm vom Programmierer wieder anpassen (das war noch die Blütezeit für Programmierer, immer Arbeit vorhanden) oder er geht zu Herrn Müller und besorgt sich von diesem die Daten. Doch dann will Herr Müller den Datensatz abrufen und findet ihn nicht mehr. Nach einigen Recherchen stellt sich heraus, dass Frau Schneider diesen Datensatz gelöscht hat, da Sie dachte, dieser würde nicht mehr benötigt.

Da beim Zugriff auf gemeinsame Daten (auch file sharing genannt) ein enormer Wartungsaufwand entstand, was häufig zu hohen Kosten führte, wurden Datenbanksysteme entwickelt. Ein Datenbanksystem hat gegenüber dem traditionellen Dateisystem die folgenden hervorzuhebenden Vorteile:

gp  Der Benutzer kann auf die Daten zugreifen, ohne dass dieser wissen muss, wie die einzelnen Daten organisiert sind.
gp  Der Benutzer kann (fast) ohne Kenntnisse Daten löschen, hinzufügen, ändern oder erweitern. Der Benutzer muss nicht mal wissen, um welche Datenbank es sich handelt.
gp  Das Datenbanksystem sorgt dafür, dass ein unbedachter Benutzer Daten nicht einfach löschen kann oder doppelte Daten zweimal gespeichert werden.
gp  Ein gutes Datenbanksystem ist portabel. Das bedeutet, das System organisiert den Datenbestand so, dass mit Hilfe von Schnittstellen andere Programme und Systeme auf diese Daten zurückgreifen können.
gp  Datensätze werden so optimiert, dass diese geringeren Speicherplatz erfordern und eine schnellere Zugriffszeit haben.

Galileo Computing - Zum Seitenanfang

27.1.2 Das Datenbank-Management-System (DBMS)  downtop

Das Datenbank-Management-System (kurz DBMS) ist die Schnittstelle, mit der der Benutzer Mittel zu Verfügung gestellt bekommt, um mit der Datenbank zu kommunizieren. Durch das DBMS wird beim Ändern, Hinzufügen, Löschen oder Erweitern immer auf die Korrektheit der Datenbestände überprüft. Greift der Benutzer zum Beispiel auf einen Datensatz in der Datenbank zurück, wird zuerst nach einem gewissen Schema des DBMS’ auf den Datenbestand zugegriffen. Anschließend werden dem Benutzer diese Daten so serviert, wie er sie sich von der Anforderung erwünscht. Dadurch entsteht eine Art Datenunabhängigkeit, welche in einem DBMS deshalb so wichtig ist, weil dadurch die physische Speicherung einer Datenbank beliebig geändert werden kann, ohne die logische Struktur der Daten zu verändern.

In Abbildung 27.1 können Sie das Drei-Schichten-Modell erkennen. Um es kurz zu halten: Es handelt sich dabei schlicht um die Trennung von Benutzer, dem DBMS und der Datenspeicherung. Die externe Schicht beschreibt alle Möglichkeiten, die der Benutzer hat, um auf die Datenbank zuzugreifen (Programme, Funktionen und Schnittstellen). Die konzeptionelle Schicht beschreibt das Datenmodell (hier das relationale Modell). Mit diesem Modell wird beschrieben, wie auf die Daten zugriffen wird und in welchem Zusammenhang diese zueinander stehen. Die interne Schicht ist die tiefste Schicht und stellt die Ebene der Datenpräsentation dar – also, wie und wo die Daten gespeichert werden.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 27.1   Die drei Ebenen eines Datenbanksystems

Noch ein paar Sätze zur logischen Struktur: Als C Programmierer kennen Sie ja Strukturen. Folgende Struktur dient jetzt als Beispiel:

struct file{
   char name[MAX];
   char vame[MAX];
   int  old;
   struct file *l;
   struct file *r;
};

Das Programm mit dieser Struktur läuft jahrelang bei Ihrem Kunden mit unzähligen Adressen. Jetzt wünscht Ihr Kunde, dass Sie den Datenbestand für int old entfernen und zwei andere Strukturvariablen dafür einsetzen. Sie müssen jetzt das Programm umschreiben, müssen den Datenbestand neu anpassen, und noch einiges mehr gilt es dabei zu beachten. Eine Menge Arbeit also. Mit dem DBMS lässt sich dies ohne Mühe mit ein oder zwei Befehlen erledigen.

Der Benutzer kommuniziert allerdings nicht direkt mit dem DBMS, sondern mit einer Schnittstelle, die sich noch vor dem DBMS befindet, dem DBCI (Data-Base-Communication-Interface).

Sie können hier eindeutig das Client-Server-Prinzip wieder erkennen, wobei der Server-Teil sich um die Verwaltung und Verarbeitung von Daten kümmert und der Client-Teil mit dem Benutzer zu tun hat, darunter die komfortable Eingabe, einfaches Auslesen und mehr. Hier das Beispiel grafisch dargestellt:

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 27.2   MySQL-Datenbanksystem

Der Client kann jetzt ein Webbrowser sein, der ein CGI-Programm startet, womit auf die Datenbank zugegriffen wird, eine Java-Applikation mit der Schnittstelle JDBC (Java Database Connectivity), ein C-Programm mit der ODBC-Schnittstelle (ODBC = Open DataBase Connectivity), ein Perl-Skript mit dem DBI-Modul oder auch der Datenbank-Client mysql. Wie auch immer Sie auf das DBMS zugreifen, der Server verarbeitet die Anfrage des Clients und schickt gesammelte Daten an ihn zurück. Und die Sprache, mit der hier kommuniziert wird, heißt SQL (Structured Query Language). Die SQL ist eine genormte Datenbanksprache, die in der Regel jede Datenbank versteht. Es gibt natürlich auch Client-Programme, die Sie verwenden können, ohne ein Wort SQL zu verstehen. Das Client-Programm sorgt in diesem Fall für die Kommunikation zwischen Server und Benutzer. Als ein C-Programmierer sollte es Ihr Ziel sein, ein solches Client-Programm zu entwickeln.


Galileo Computing - Zum Seitenanfang

27.1.3 Relationale Datenbank  downtop

MySQL ist eine Datenbank, die auf dem relationalen Konzept aufbaut. Das bedeutet, dass zwischen den Daten, welche in Tabellen gespeichert werden, bestimmte Beziehungen bestehen. Sie können die Daten mit Zusammenhängen zu anderen Daten speichern.


Hinweis   Die Daten einer Datenbank stehen in einer Tabelle mit Zeilen und Spalten. Eine Datenzeile wird dabei als Datensatz bezeichnet.


Folgende Beziehungen sind jetzt zwischen verschiedenen Datensätzen möglich:


Tabelle 27.1   Relationale Beziehungen

Beziehung Bedeutung
1:1-Beziehung Bei der Eins-zu-Eins-Beziehung zwischen Datensätzen wird nur ein Datensatz mit einem anderen verbunden.
1:n und n:1 Beziehung Die 1:n-Beziehung ist die gängigste Beziehung. Ein Datensatz kann so mit vielen anderen Datensätzen zusammengehängt werden.
n:m-Beziehung Hierbei stehen mehrere Datensätze mit mehreren Datensätzen in Beziehung.

Wenn Sie das relationale Konzept hier nicht so richtig verstanden haben, macht dies für den weiteren Verlauf des Buchs nichts aus. Es sollte nur der Vollständigkeit halber erwähnt werden. Sollten Sie sich allerdings ernsthaft mit MySQL befassen wollen, finden Sie im Anhang Literatur und weiterführende Links.


Galileo Computing - Zum Seitenanfang

27.1.4 Eigene Clients mit C für SQL mit der ODBC-API entwickeln  toptop

In diesem Buch wird nur beschrieben, wie Sie eigene Clients für die MySQL-Datenbank mit der C-API (API = Application Programming Interface) schreiben können. Sie können zwar für jede Datenbank mit C eigene Client-Programme erstellen, nur liefert jede Datenbank dafür spezielle und leider unterschiedliche Funktionen aus. Wollen Sie Client-Programme schreiben, die mit jedem Datenbanksystem zusammenarbeiten, so benötigen Sie die ODBC-API, welche eine reine C-Schnittstelle ist. Der ODBC-Treiber muss zuvor besorgt und installiert werden. Er klinkt sich dann zwischen die Client-Anwendung und das DBMS ein. Sendet der Client eine Anforderung an den Server, verarbeitet der ODBC-Treiber zuerst die Anfrage und gibt sie in entsprechender Form an den Server (DBMS) weiter, damit dieser die Anfrage versteht. Der Server antwortet anschließend dem Client, wiederum durch den ODBC-Treiber. Wenn Sie so wollen, dient ODBC also als Dolmetscher für verschiedene Datenbanken mit dem Client-Programm.

 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de