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

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1411-7
Pfeil 24 MySQL und C
Pfeil 24.1 Aufbau eines Datenbanksystems
Pfeil 24.1.1 Warum wurde ein Datenbanksystem (DBS) entwickelt?
Pfeil 24.1.2 Das Datenbank-Management-System (DBMS)
Pfeil 24.1.3 Relationale Datenbank
Pfeil 24.1.4 Eigene Clients mit C für SQL mithilfe der ODBC-API entwickeln
Pfeil 24.2 MySQL installieren
Pfeil 24.2.1 Linux
Pfeil 24.2.2 Den Client »mysql« starten
Pfeil 24.3 Crashkurs (My)SQL
Pfeil 24.3.1 Was ist SQL?
Pfeil 24.3.2 Die Datentypen von (My)SQL
Pfeil 24.3.3 Eine Datenbank erzeugen
Pfeil 24.3.4 Eine Datenbank löschen
Pfeil 24.3.5 Datenbank wechseln
Pfeil 24.3.6 Eine Tabelle erstellen
Pfeil 24.3.7 Die Tabelle anzeigen
Pfeil 24.3.8 Tabellendefinition überprüfen
Pfeil 24.3.9 Tabelle löschen
Pfeil 24.3.10 Struktur einer Tabelle ändern
Pfeil 24.3.11 Datensätze eingeben
Pfeil 24.3.12 Datensätze auswählen
Pfeil 24.3.13 Ein fortgeschrittenes Szenario
Pfeil 24.3.14 Datensatz löschen
Pfeil 24.3.15 Datensatz ändern
Pfeil 24.3.16 Zugriffsrechte in MySQL
Pfeil 24.3.17 Übersicht über einige SQL-Kommandos
Pfeil 24.4 Die MySQL-C-API
Pfeil 24.4.1 Grundlagen zur Programmierung eines MySQL-Clients
Pfeil 24.4.2 Client-Programm mit dem gcc unter Linux und dem Cygwin–gcc-Compiler unter Windows
Pfeil 24.4.3 MySQL Client-Programme mit dem VC++ Compiler und dem Borland Freeware Compiler
Pfeil 24.4.4 Troubleshooting
Pfeil 24.4.5 Das erste Client-Programm – Verbindung mit dem MySQL-Server herstellen
Pfeil 24.4.6 MySQL-Kommandozeilen-Optionen
Pfeil 24.4.7 Anfrage an den Server
Pfeil 24.5 MySQL und C mit CGI
Pfeil 24.5.1 HTML-Eingabeformular
Pfeil 24.5.2 Die CGI-Anwendung »add_db.cgi«
Pfeil 24.5.3 Die CGI-Anwendung »search_db.cgi«
Pfeil 24.6 Funktionsübersicht
Pfeil 24.7 Datentypenübersicht der C-API


Rheinwerk Computing - Zum Seitenanfang

24.3 Crashkurs (My)SQL Zur nächsten ÜberschriftZur vorigen Überschrift

Um mit MySQL arbeiten zu können, werden Sie nun einige grundlegende Sprachelemente kennenlernen. Vieles wird Ihnen als C-Programmierer ohnehin nicht schwerfallen. Natürlich soll hier nicht die ganze Palette von SQL-Kommandos verwendet werden, sondern nur eine ausgewählte Anzahl, die Sie in die Lage versetzt, eine Datenbankstruktur aufzubauen und die zugehörigen Abfragen zu formulieren.


Rheinwerk Computing - Zum Seitenanfang

24.3.1 Was ist SQL? Zur nächsten ÜberschriftZur vorigen Überschrift

Um es gleich vorweg zu nehmen: SQL ist keine Programmiersprache. SQL steht für Structured Query Language und gliedert sich in zwei Teile:

  • DDL-Anweisungen (Data Definition Language) – Diese Anweisungen dienen zum Aufsetzen der Datenbankstruktur.
  • DML-Anweisungen (Data Manipulation Language) – Diese Anweisungen beziehen sich auf die Manipulation von Daten.

Rheinwerk Computing - Zum Seitenanfang

24.3.2 Die Datentypen von (My)SQL Zur nächsten ÜberschriftZur vorigen Überschrift

Genauso wie in C gibt es bei MySQL Datentypen. Aufgeteilt werden diese in numerische Datentypen, Datentypen für Strings und Datentypen für Datum und Zeit. Wir beginnen mit einer kurzen Übersicht zu den Datentypen für Ganzzahlen (Integer-Datentypen) mit deren Bereichsangabe:


Tabelle 24.2 Übersicht zu den ganzzahligen Datentypen von MySQL

Datentyp Speicherbedarf Erklärung
TINYINT

1 Byte (8 Bit)

–128 bis 127 mit UNSIGNED von 0 bis 255

SMALLINT

2 Byte (16 Bit)

–32768 bis 32767 mit UNSIGNED von 0 bis 65535

MEDIUMINT

3 Byte (24 Bit)

–83886008 bis 83886007 mit UNSIGNED von 0 bis 16777215

INT, INTEGER

4 Byte (32 Bit)

–2147483648 bis 2147483647 mit UNSIGNED von 0 bis 4294967296

BIGINT

8 Byte (64 Bit)

–9223372036854775808 bis 9223372036854775807 mit UNSIGNED von 0 bis 18446744073709551616


Wie schon in C können Sie auch in MySQL mit dem Schlüsselwort UNSIGNED das Vorzeichenbit setzen. Für Gleitpunktzahlen stehen Ihnen folgende Datentypen zur Verfügung:


Tabelle 24.3 Übersicht zu Datentypen für Gleitpunktzahlen in MySQL

Datentyp Speicherbedarf Erklärung
FLOAT

4 Byte (32 Bit)

–3.402823466E+38 bis 1.175494351E-38 und 1.175494351E-38 bis 3.402823466E+38

DOUBLE

8 Byte (64 Bit)

–1.7976931348623157E+308 bis –2.2250738585072014E-308 und 2.2250738585072014E-308 bis 1.7976931348623157E+308

DECIMAL(M,D)

M Byte (M*8 Bit)

Abhängig von M und D


Für Strings (Zeichenketten) können Sie gleich mehrere Datentypen einsetzen, die sich – abgesehen vom Namen – hauptsächlich durch die Anzahl der Zeichen unterscheiden, die sie aufnehmen können:


Tabelle 24.4 Übersicht zu den Datentypen für Zeichen und Strings in MySQL

Datentyp Speicherbedarf Erkärung
CHAR(x)

x-Byte

Zeichenkette fester Länge mit x-Byte bis max. 255 Zeichen

VCHAR(x)

x+1 Byte

Zeichenkette mit variabler Länge mit x-Byte bis max. 255 Zeichen

TINYTEXT,
TINYBLOB

Zeichenzahl+1 Byte

Zeichenkette mit variabler Länge bis max. 255 Zeichen

TEXT, BLOB

Zeichenzahl+2 Byte

Zeichenkette mit variabler Länge bis max. 65535 Zeichen

MEDIUMTEXT,
MEDIUMBLOB

Zeichenzahl+3 Byte

Zeichenkette mit variabler Länge bis max. 224 Zeichen

LONGTEXT,
LONGBLOB

Zeichenzahl+4 Byte

Zeichenkette mit variabler Länge bis max. 232 Zeichen


Die BLOP-Datentypen sind für Binärdaten gedacht. Zu guter Letzt folgen noch einige MySQL-Datentypen für Datum und Zeit:


Tabelle 24.5 Übersicht zu den Datentypen für Zeit und Datum

Datentyp Speicherbedarf Erklärung
DATE

3 Byte (24 Bit)

Datum von 1000-01-01 bis 9999-12-31; Format YYYY-MM-DD

DATETIME

8 Byte (64 Bit)

Datum und Zeit von 1000-01-01 00:00:00 bis 9999-12-31 23:59:59; Format YYYY-MM-DD HH:MM:SS

TIMESTAMP(M)

4 Byte (32 Bit)

UNIX-Zeitstempel von Datum und Zeit von 1970-01-01 00:00:00 bis 2036-12-31 23:59:59; Format YYYY-MM-DD HH:MM:SS. Format M = 6 YYMMDD; M = 8 YYYYMMDD; M = 12 YYMMDDHHMMSS; M = 14 YYYYMMDDHHMMSS

TIME

3 Byte (24 Bit)

Zeit von –838:59:89 bis 838:59:59; Format HH:MM:SS

YEAR

1 Byte (8 Bit)

Jahr (4-stellig) von 1901 bis 2155; Format YYYY


Anhand eines Beispiels sollen Sie in die SQL-Sprache eingeführt werden. Starten Sie zuerst wieder den Client mysql mit:

mysql -u root -h localhost

Rheinwerk Computing - Zum Seitenanfang

24.3.3 Eine Datenbank erzeugen Zur nächsten ÜberschriftZur vorigen Überschrift

Bevor Sie mit einer Datenbank arbeiten, müssen Sie zunächst eine neue erzeugen. Dies können Sie mit folgendem Befehl erreichen:

CREATE DATABASE dvd_archiv;

Abbildung 24.3 Eine Datenbank wurde erstellt.

Mit diesem SQL-Kommando erzeugen Sie eine neue Datenbank mit dem Namen dvd_archiv. Wie Sie es bereits von C her kennen, wird der Befehl mit einem Semikolon abgeschlossen.


Hinweis

Es ist übrigens egal, ob Sie die SQL-Anweisung in Groß-, Klein- oder einer Mischung aus Groß- und Kleinbuchstaben schreiben. Sie können beispielsweise folgende Schreibweisen verwenden: Create Database oder create database.


Existiert eine Datenbank bereits, wird eine Fehlermeldung mit ausgegeben. Wollen Sie eine Bedingung beim Anlegen einer neuen Datenbank erstellen, können Sie so vorgehen:

CREATE DATABASE IF NOT EXISTS dvd_archiv;

Mit IF NOT EXISTS wird erst überprüft, ob eine Datenbank mit dem Namen dvd_archiv noch nicht vorhanden ist. Ist dies der Fall, wird der Befehl CREATE DATABASE ausgeführt.


Hinweis

Der Name der Datenbank darf nicht mehr als 64 Zeichen lang sein. Für Zeichen gelten dieselben Regeln wie schon bei der Namensvergabe für Variablen in C, außer dass der Name mit einem x-beliebigen Zeichen beginnen darf. Im Gegensatz zu Windows unterscheidet Linux, zumindest was den Namen der Datenbank betrifft, zwischen Groß- und Kleinschreibung.



Rheinwerk Computing - Zum Seitenanfang

24.3.4 Eine Datenbank löschen Zur nächsten ÜberschriftZur vorigen Überschrift

Als Nächstes soll die neu erstellte Datenbank wieder gelöscht werden. Falls Sie den Namen der neu erstellten Datenbank vergessen haben, lassen Sie sich am besten einen Überblick aller Datenbanken geben. Hierfür verwenden Sie den SQL-Befehl:

SHOW DATABASES;

Abbildung 24.4 Anzeigen aller vorhandenen Datenbanken

Jetzt ist es also wieder Zeit, die Datenbank dvd_archiv zu löschen:

DROP DATABASE dvd_archiv;

Wollen Sie auch hier eine Fehlermeldung mit einer Bedingung abfangen, können Sie das Löschen auch so schreiben:

DROP DATABASE IF EXISTS dvd_archiv;

Hiermit wird nur dann versucht, die Datenbank zu löschen, wenn diese auch existiert. Erstellen Sie wieder die Datenbank dvd_archiv, damit Sie mit den folgenden Beispielen weitermachen können.


Rheinwerk Computing - Zum Seitenanfang

24.3.5 Datenbank wechseln Zur nächsten ÜberschriftZur vorigen Überschrift

Wenn Sie zwischen verschiedenen Datenbanken wechseln wollen, können Sie den Befehl USE verwenden. Beispiel:

USE dvd_archiv;

Rheinwerk Computing - Zum Seitenanfang

24.3.6 Eine Tabelle erstellen Zur nächsten ÜberschriftZur vorigen Überschrift

Nachdem Sie eine Datenbank erstellt haben, wollen Sie sicherlich auch Daten darin speichern. Zuerst müssen Sie aber noch eine Tabelle anlegen. Eine Tabelle erzeugen Sie mit folgender SQL-Anweisung:

CREATE TABLE filmdaten (
titel CHAR(255),
hauptrolle CHAR(255),
gedreht YEAR
);

Mit diesem SQL-Kommando erstellen Sie in der Tabelle filmdaten die Spalten titel mit dem Datentyp CHAR(255), hauptrolle mit dem Datentyp CHAR(255) und gedreht mit dem Datentyp YEAR. Die Tabelle (Datensatz) mit dem Namen filmdaten (maximal sind 64 Zeichen erlaubt) wird in der Datenbank dvd_archiv erzeugt – vorausgesetzt, Sie sind mit USE zur entsprechenden Datenbank gewechselt. Als Inhalt der Tabelle wurden drei Variablen deklariert: zwei Datentypen für Strings mit jeweils 255 Zeichen, die den Titel (titel) und den Hauptdarsteller (hauptrolle) eines bestimmten Films enthalten, sowie ein Datentyp, der das Jahresdatum des Films speichern kann.

Die Schreibweise, die hier verwendet wurde, ist nicht unbedingt so vorgeschrieben. Die Tabelle kann auch mit einer Zeile auf einmal erzeugt werden:

CREATE TABLE filmdaten (titel CHAR(255),hauptrolle CHAR(255),
gedreht YEAR);

Die Syntax setzt sich aber immer folgendermaßen zusammen:

CREATE TABLE tbl (Spaltenname Datentyp_der_Spalte,
                  Spaltenname Datentyp_der_Spalte,
                  Spaltenname Datentyp_der_Spalte);

Im Gegensatz zu C wird also hier der Bezeichner vor dem Datentyp geschrieben.


Rheinwerk Computing - Zum Seitenanfang

24.3.7 Die Tabelle anzeigen Zur nächsten ÜberschriftZur vorigen Überschrift

Einen Überblick zu der Tabelle, die Sie mit CREATE erstellt haben, können Sie sich wieder mit dem SQL-Kommando SHOW anzeigen lassen:

SHOW TABLES;

Rheinwerk Computing - Zum Seitenanfang

24.3.8 Tabellendefinition überprüfen Zur nächsten ÜberschriftZur vorigen Überschrift

Wissen Sie nicht mehr genau, was Sie alles in der Tabelle angegeben haben, können Sie sich mit dem Befehl EXPLAIN einen Überblick verschaffen:

EXPLAIN filmdaten;

Hinweis

In Abbildung 24.5 sehen Sie in der Default-Spalte den Wert NULL. Dieser ist nicht mit dem Wert NULL gleichzusetzen, den Sie von C her kennen. NULL bedeutet in MySQL einfach: Es ist kein Wert dafür vorhanden. Verwenden Sie hingegen die doppelten Anführungszeichen (""), bedeutet dies in MySQL, dass der Wert unbekannt ist. Das mag zwar auf dem ersten Blick dasselbe sein, ist es aber nicht. Dies ist ein häufig gemachter MySQL-Fehler.


Abbildung 24.5 Überprüfen der Tabellendefinition


Rheinwerk Computing - Zum Seitenanfang

24.3.9 Tabelle löschen Zur nächsten ÜberschriftZur vorigen Überschrift

Benötigen Sie eine Tabelle nicht mehr, können Sie diese mit demselben SQL-Befehl wie zum Löschen einer Datenbank entfernen:

DROP TABLE IF EXISTS filmdaten;

Wobei IF EXISTS hier wieder optional ist. Sie sehen, wie einfach es ist, mit MySQL etwas zu löschen. Daher ist es oft sinnvoll, regelmäßig ein Backup einer Datenbank durchzuführen. Wenn Sie ein Backup erstellen wollen, können Sie sich den Client mysqldump ansehen, der ebenfalls bei einer normalen MySQL-Installation dabei ist. Wollen Sie beispielsweise die vollständige MySQL-Datenbank sichern, dann geben Sie Folgendes im Prompt ein:

mysqldump -u root -p -opt -all -databases > my_backup.sql

Nach dieser Eingabe müssen Sie noch schnell Ihr Passwort eingeben, und die Daten sind gesichert. Wollen Sie das Backup wiederherstellen, können Sie dies mit dem Client mysql so erreichen:

mysql -u root -p < my_backup.sql

Rheinwerk Computing - Zum Seitenanfang

24.3.10 Struktur einer Tabelle ändern Zur nächsten ÜberschriftZur vorigen Überschrift

Jetzt wollen Sie die Struktur einer Tabelle ändern. Dies können Sie unabhängig davon, ob diese Tabelle schon Daten beinhaltet, mit dem SQL-Kommando ALTER vornehmen. In der Tabelle filmdaten fehlt noch die Altersbeschränkung der einzelnen Filme. Diese soll jetzt hinter der Reihe hauptrolle eingefügt werden:

ALTER TABLE filmdaten ADD fsk TINYINT AFTER hauptrolle;

Bei gewissen Englischkenntnissen lässt sich diese Zeile doch schon fast wie ein Satz lesen: »Ändere Tabelle filmdaten und füge fsk vom Typ TINYINT hinter hauptrolle hinzu.« Mit dem SQL-Kommando ALTER lässt sich noch so manches mehr anstellen. Wollen Sie etwa ein Element in der Tabelle entfernen, schreiben Sie:

ALTER TABLE filmdaten DROP fsk;

Hier würde zum Beispiel die Spalte fsk von der Tabelle filmdaten entfernt. Eine Spaltenbezeichnung können Sie mit folgendem Kommando ändern:

ALTER TABLE filmdaten CHANGE fsk alter INT;

Hiermit würden Sie die Spalte fsk in alter umbenennen. Außerdem ist das neue Element jetzt vom Datentyp INT. Falls Sie beim Titel der Tabelle filmdaten mehr als 255 Zeichen eingeben wollen, schreiben Sie:

ALTER TABLE filmdaten MODIFY titel CHAR(300);

Das ALTER-Kommando ist sehr vielfältig einsetzbar, sodass es sich lohnen würde, dieses Kommando noch genauer zu untersuchen.


Rheinwerk Computing - Zum Seitenanfang

24.3.11 Datensätze eingeben Zur nächsten ÜberschriftZur vorigen Überschrift

Mit dem Kommando INSERT können Sie Daten in die Tabelle einfügen. Es gibt drei Möglichkeiten, wie INSERT verwendet werden kann. In diesem Abschnitt folgt zunächst die einfachste Variante. Jetzt fügen Sie Ihre ersten Daten in die Tabelle filmdaten ein:

INSERT INTO filmdaten (titel, hauptrolle, fsk, gedreht) VALUES
(’Der Patriot’, ’Mel Gibson’, 16, 2001);

Wichtig ist, dass der Inhalt in der zweiten Klammerung mit der Reihenfolge der ersten Klammerung der Tabelle übereinstimmen muss. Sie könnten diese Daten auch in einer anderen Reihenfolge in die Tabelle einlesen:

INSERT INTO filmdaten (hauptrolle, titel, gedreht, fsk) VALUES
(’Mel Gibson’, ’Der Patriot’, 2001, 16);

Sie müssen also immer darauf achten, dass die in VALUES angegebenen Werte mit denen der ersten Klammerung übereinstimmen. Sie können natürlich auch mehrere Daten auf einmal in eine Tabelle einfügen:

INSERT INTO filmdaten (titel, hauptrolle, fsk, gedreht) VALUES
(’Braveheart’, ’Mel Gibson’, 16, 1998),
(’Hello Mr. President’, ’Michael Douglas’, 6, 1995);

Die einzelnen Datensätze der Tabelle werden dabei jeweils durch Kommata getrennt. Die Strings wurden hier zwar zwischen einzelne Hochkommata gestellt, können bei MySQL aber auch – wie Sie es aus C kennen – zwischen doppelte Hochkommata gestellt werden.


Rheinwerk Computing - Zum Seitenanfang

24.3.12 Datensätze auswählen Zur nächsten ÜberschriftZur vorigen Überschrift

Jetzt kommen wir zum wohl wichtigsten und am meisten angewandten Befehl in SQL: SELECT. Mit SELECT können Sie aus einer oder mehreren Tabellen Informationen zusammentragen. Zuerst sollen mittels SELECT alle Daten der Tabelle filmdaten angezeigt werden:

SELECT * FROM filmdaten;

Abbildung 24.6 Datensätze selektieren

Das Sternchen steht hier als ein Platzhalter für alle in der Tabelle vorhandenen Spalten. Dieser Platzhalter hat dieselbe Bedeutung, als wenn Sie Folgendes schreiben würden:

SELECT titel, hauptrolle, fsk, gedreht FROM filmdaten;

Auch hiermit werden alle Daten einer Tabelle ausgegeben. Mit FROM geben Sie die Tabelle an, die selektiert werden soll. Interessieren Sie sich nur für die Titel der Filme, können Sie SELECT folgendermaßen verwenden:

SELECT titel FROM filmdaten;

Wollen Sie hingegen nur die Daten der Filme ausgeben, bei denen Mel Gibson der Hauptdarsteller ist, verwenden Sie zusätzlich das SQL-Kommando WHERE:

SELECT * FROM filmdaten WHERE hauptrolle=’Mel Gibson’;

Falls Sie nicht mehr genau wissen, wie der Hauptdarsteller geschrieben wird, verwenden Sie Folgendes:

SELECT * FROM filmdaten WHERE hauptrolle LIKE ‘Mel%’;

Hier wurde der Unschärfe-Operator LIKE eingesetzt. Wollen Sie alle Filme sortiert nach Datum ausgeben lassen, erreichen Sie dies mit:

SELECT * FROM filmdaten ORDER BY gedreht ASC;

Mit dem SQL-Befehl ORDER BY sagen Sie dem Server, dass er die Daten geordnet ausgeben soll; in welcher Reihenfolge das geschieht, geben Sie mit ASC (aufsteigend) oder DESC (absteigend) an. Sie können natürlich auch die Vergleichsoperatoren verwenden, die Sie bereits von C her kennen.


Rheinwerk Computing - Zum Seitenanfang

24.3.13 Ein fortgeschrittenes Szenario Zur nächsten ÜberschriftZur vorigen Überschrift

Ein Blick auf Ihre Datenbank dvd_archiv zeigt Ihnen, dass Sie einige Filme verliehen haben. Leider wissen Sie nicht mehr, an wen. Da Sie sich ein wenig mit MySQL auskennen, lösen Sie das Problem mit der Datenbank. Zuerst erstellen Sie eine neue Tabelle kontakt in der Datenbank dvd_archiv:

CREATE TABLE kontakt(nname CHAR(30), vname CHAR(30),
telefon BIGINT);

Als Nächstes geben Sie die Daten für die Tabelle kontakt ein:

INSERT INTO kontakt(nname, vname, telefon) VALUES
(’Meier’, ’Hans’, 12345676),
(’Müller’, ’Franz’, 3691215),
(’Schiller’, ’Johann’, 48121620);

Jetzt benötigen Sie noch eine Tabelle, in der sich die Filme befinden, die Sie verliehen haben, zusammen mit der Information, an wen sie verliehen wurden:

CREATE TABLE verliehen(name CHAR(30), titel CHAR(255));

Sie lernen jetzt eine weitere Methode kennen, wie Sie Datensätze mit INSERT einlesen können:

INSERT INTO verliehen (name, titel) SELECT
kontakt.nname, filmdaten.titel FROM
kontakt, filmdaten WHERE
filmdaten.titel = ’Der Patriot’ AND
kontakt.nname = ’Meier’;

Hier fügen Sie mittels SELECT Daten in die Tabelle verliehen ein. Mit den Zeilen kontakt.nname und filmdaten.titel haben Sie eine Verknüpfung zweier Tabellen realisiert und zum ersten Mal Kontakt mit dem relationalen Modell gehabt. Denn obwohl beide Tabellen physisch voneinander getrennt sind, können diese mit SELECT verknüpft werden. Neu ist auch die logische AND-Verknüpfung, die Sie als C-Programmierer als && kennen. Wenn Sie nun einen Blick auf die Tabelle verliehen werfen, befindet sich jetzt darin tatsächlich der Titel des Films und der Name, an wen Sie den Film verliehen haben:

SELECT * FROM verliehen;

Nun wollen Sie die Telefonnummer der Person ermitteln, damit Sie sich mit dieser in Verbindung setzen können. Versuchen Sie es einmal selbst in Worte zu fassen. Beispiel: »Suche die Telefonnummer von einer Person, der ich einen Film geliehen habe.« So setzen Sie dies in MySQL um:

SELECT telefon FROM kontakt, verliehen
WHERE verliehen.name = kontakt.nname;

Ein echter MySQL-Guru geht dabei sicherlich noch eleganter zu Werke. Aber das ist jetzt nicht das Ziel dieses Kapitels. Das Beispiel soll Ihnen zeigen, warum Sie gut beraten sind, eigene Client-Programme in C zu schreiben.


Rheinwerk Computing - Zum Seitenanfang

24.3.14 Datensatz löschen Zur nächsten ÜberschriftZur vorigen Überschrift

Hat Ihnen der Bekannte den Film wieder zurückgebracht, ist es an der Zeit, ihn aus der Tabelle verliehen zu löschen. Dies können Sie mit dem SQL-Befehl DELETE erledigen:

DELETE FROM verliehen WHERE titel = 'Der Patriot';

Rheinwerk Computing - Zum Seitenanfang

24.3.15 Datensatz ändern Zur nächsten ÜberschriftZur vorigen Überschrift

Mit dem SQL-Kommando UPDATE können Sie die einzelnen oder auch mehrere Datensätze in einer Tabelle ändern. Zusätzlich wird der Befehl SET dazu verwendet. Wollen Sie beispielsweise die Altersbeschränkung für einen Film verändern, können Sie dabei so vorgehen:

UPDATE filmdaten SET fsk=12 WHERE fsk=6;

Damit werden alle Daten fsk, bei denen der Wert 6 beträgt, in den Wert 12 umgeändert.


Hinweis

Löschen Sie die Datenbank dvd_Archiv bitte nicht. Sie wird später bei der C-API wieder benötigt.



Rheinwerk Computing - Zum Seitenanfang

24.3.16 Zugriffsrechte in MySQL Zur nächsten ÜberschriftZur vorigen Überschrift

Auf die Zugriffsrechte von MySQL soll hier nur kurz eingegangen werden. Die Zugriffsrechte von MySQL werden ebenfalls in Tabellen verwaltet. Wechseln Sie in die Datenbank, und sehen Sie sich die Tabellen darin an:

USE mysql;
SHOW TABLES;

Sechs Tabellen werden aufgelistet. Die haben folgende Bedeutung:


Tabelle 24.6 Tabellen für die Erteilung der Zugriffsrechte von MySQL

Tabelle Bedeutung
user

Darin befinden sich die Zugriffsrechte der Anwender, die auf alle Datenbanken und Tabellen zugreifen können.

db

Darin befinden sich die Zugriffsrechte der Anwender, die auf eine bestimmte Datenbank zugreifen können.

tables_priv

Darin befinden sich die Zugriffsrechte der Anwender, die auf eine bestimmte Tabelle zugreifen können.

columns_priv

Darin befinden sich die Zugriffsrechte der Anwender, die auf eine bestimmte Spalte zugreifen können.

host

Darin befinden sich die Zugriffsrechte für bestimmte Rechner, von denen aus auf die Datenbank zugegriffen werden kann.

func

Diese Tabelle ist bisher noch undokumentiert. Darin sollen in Zukunft die Zugriffsrechte einzelner user defined functions eingetragen werden.


Anhand dieser Tabelle lassen sich folgende Zugriffslevel zur Vergabe von Benutzerrechten vergeben:

  • globale Rechte – Bezieht sich auf alle Datenbanken.
  • Datenbank – Bezieht sich auf eine bestimmte Datenbank.
  • Tabelle – Bezieht sich auf eine bestimmte Tabelle in einer Datenbank.
  • Spalte – Bezieht sich auf eine bestimmte Spalte in einer Tabelle.

Benutzerrechte vergeben können Sie mit dem SQL-Kommando GRANT, und die Benutzerrechte entziehen Sie mit REVOKE. Da das Thema recht umfangreich ist, sei hierfür auf die MySQL-Dokumentation verwiesen.


Hinweis

Bei einer Neuinstallation von MySQL ist das root-Passwort nicht gesetzt. Das ist logisch, sonst könnten Sie den Client nicht starten. In der Praxis empfiehlt es sich, ein Passwort zu verwenden. Die Listings, die Sie in den folgenden Abschnitten erstellen, gehen davon aus, dass noch kein Passwort für root vergeben wurde. Falls Sie bereits das Passwort für root verändert haben, ändern Sie dies auch in den Listings ab.



Rheinwerk Computing - Zum Seitenanfang

24.3.17 Übersicht über einige SQL-Kommandos topZur vorigen Überschrift

Damit Sie im weiteren Verlauf nicht immer wieder zu den einzelnen Abschnitten zurückblättern müssen, folgt hier ein kurzer Überblick über die SQL-Kommandos, die Sie bisher kennengelernt haben, und ihre jeweilige Bedeutung:


Tabelle 24.7 Übersicht zu einigen gängigen MySQL-Kommandos

SQL-Kommando Bewirkt
CREATE DATABASE datenbank;

eine Datenbank erzeugen

SHOW DATABASES;

eine Datenbank anzeigen

DROP DATABASE datenbank;

eine Datenbank löschen

USE datenbank;

Datenbank wechseln

CREATE TABLE tabelle
(Spaltenname Datentyp,
 Spaltenname Datentyp,
 Spaltenname Datentyp);

eine Tabelle erstellen

SHOW TABLES;

Tabelle anzeigen

EXPLAIN tabelle;

Tabellendefinition überprüfen

DROP TABLE IF EXISTS tabelle;

Tabelle löschen

ALTER TABLE tabelle
ADD bezeichner_neu datentype
AFTER bezeichner;

Daten in die Tabelle einfügen

ALTER TABLE tabelle
->DROP spaltennamen;

Daten aus der Tabelle entfernen

ALTER TABLE tabelle
CHANGE alter_bezeichner
neuer_bezeichner Datentyp;

den Bezeichner ändern

ALTER TABLE tabelle MODIFY
bezeichner datentype_neu;

den Datentyp des Bezeichners ändern

INSERT INTO tabelle
(bezeichner1, bezeichner2,
 bezeichner3, bezeichner4)
VALUES
('foo', 'baa', 99, 66);

Datensätze in Tabelle eingeben

SELECT * FROM tabelle;

alle Datensätze einer Tabelle ausgeben

SELECT bezeichner FROM tabelle;

einzelne Datensätze einer Tabelle ausgeben

SELECT * FROM filmdaten
WHERE hauptrolle='foo';

Datensätze einer Tabelle mit bestimmtem Inhalt ausgeben

SELECT * FROM tabelle
ORDER BY bezeichner ASC;

Datensätze sortiert ausgeben (aufsteigend)

SELECT * FROM tabelle
ORDER BY bezeichner DESC;

Datensätze sortiert ausgeben (absteigend)

DELETE FROM tabelle
WHERE bezeichner = 'foo';

Datensatz aus Tabelle mit bestimmtem Inhalt löschen

UPDATE tabelle
SET bezeichner=12
WHERE bezeichner=6;

Datensatz aus Tabelle mit bestimmtem Inhalt ändern

GRANT ALL ON tabelle
TO benutzername

Benutzerrechte vergeben

REVOKE ALL ON tabelle
TO benutzername

Benutzerrechte entziehen




Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: C/C++






 C/C++


Zum Katalog: Einstieg in C






 Einstieg in C


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
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.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de