Suche nach als

MySQL:

Auf dieser Seite:

Einführung in Datenbanken

Daten die ich sammle, beware ich in einer Datenbank auf, dadurch werden die Inhalte in Tabellen strukturiert. Doch die ganze Fülle der Datenbank will niemand gleichzeitig sehen. Lieber will jemand eine für ihn speziel zusammengestellte Auswahl einzelner Inhalte einsehen.

Wie eine Datenbank ansprechen?

Eine Datenbank erstellt man am besten auf dem Datenbank-Server direkt. Via Controllpannel erreicht man meisst ein Tool: 'php MyAdmin'. Hardcore Cracks können auch die 'MySQL Konsole' aufrufen.

Das Abfragen, Erweitern oder Verändern der Datenbank kann aber auch über Benutzereingaben durch serverseitige Skripte geschehen. Das ist eigentlich das Glatte an einer Datenbank und wird am Ende beschrieben.

Aufbau einer Datenbank

Es gibt 'Object Orientierte' Datenbanksysteme (welche mich hier noch nicht interessieren) und 'Relationale'. Eine 'Relationale' Datenbank besteht aus mehreren Tabellen in die Informationen abgelegt und zu gegebener Zeit aufgerufen werden. Ein Datensatz entspricht einer Tabellenzeile mit mehreren Feldern.
Wenn in vielen Feldern der gleiche Wert steht spricht man von Redundanz (Überflüssigkeit). Möchte man diesen Wert ändern, dann müssen alle Datensätze durchsucht und geändert werden was leicht zu einem Fehler führt; eine Datenbank mit fehlerhaften Datensätzen nennt man inkonsistent.
Um Redundanz wie Inkonsistent zu vermeiden, werden die sich wiederholenden Werte einer Kolonne (Spalte) in eine zweite Tabelle ausgelagert, welche mit der ersten Tabelle in Relation steht. Die Verbindung dieser zweiten Tabelle zur ersten Tabelle geschiet durch ein ID-Feld welches einen eindeutigen, exklusiven Eintrag enthält, auch Primärschlüssel genannt, und jeden Datensatz identifiziert. In der ersten Tabelle wird in die entsprechenden Felder dann immer nur noch dieser Primärschlüssel des in die zweite Tabelle ausgelagerten Wertes notiert. Eine Änderung muss folglich nur noch einmalig in der zweiten Tabelle vorgenommen werden (Beispiel folgt weiter unten). Dies kann so weit getrieben werden, dass die erste Tabelle nur noch aus Primärschlüsselangaben besteht und für jede Spalte eine eigene Tabelle erstellt wird.

MySQL Konsole

MySQL ist ein OpenSource Datenbanksystem welches auf der Datanbank-Abfragesprache SQL (structured query language) aufbaut. MySQL ist ein Relationales Datenbanksystem.
Ein Doppelklick auf die Datei 'mysql.exe' im Verzeichnis 'bin' des Apache Servers (mein Pfad im Xampp-Packet von Apache-Friends ist: c:\Programme\Xampp\mysql\bin\mysql.exe ) im WindowsExplorer, öffnet ein Eingabefenster, welches so rudimentär wie ein Dos-Eingabefenster aussieht und Konsole (MySQL monitor) genannt wird. Ich arbeite hier also direkt auf dem Apache-Server unter der UNIX-Umgebung.
MySQL sollte durch Benutzername und Passwort vor Zugriff von aussen geschützt werden im Ordener: C:\Programme\xampp\mysql\bin\ die Datei:'winmysqladmin.exe' (bei mir zuhause, aber normalerweise erhält man den Zugang zum separaten Datenbankserver vorkonfiguriert vom Hoster).

Namenskonventionen und Regeln:

Verwendung finden alle Zahlen, Buchstaben (ohne Umlaute etc.) und der Unterstrich_ und noch das Dollarzeichen $. Ein Name darf nicht mehr als 64 Zeichen haben und darf nicht nur aus Zahlen bestehen.
SQL-Schlüsselworte werden immer GROSS geschrieben und Namen von Datenbanken, Tabellen und Spalten werden immer klein geschrieben. Felderinhalte 'können Gross-Kleinschreibung und Leerschläge nutzen, solche Strings werden in einfachen Anführungszeichen gefasst.'
Jede Anweisung in der Konsole wird mit einem Semikolon ; abgeschlossen und mit der Enter-Taste ausgeführt.

mysql im batch mode

SQL Befehle
Oberbefehle
help; oder \h gibt Übersicht aller Befehle aus
source text_file_name; oder \. übergeben eines SQL-Scripts als Parameter eines Befehls
Hier kommt der Name des Textfiles (welches den auszuführenden Code beinhaltet)
clear; oder \c löscht den Befehlspuffer
exit; schliesst die Konsole
Pfeiltasten hoch/runter kopiert eine vorher gemachte Befehlszeile, die dann statt neu eingegeben nur korrigiert werden muss
Datenbankbefehle
CREATE DATABASE pflanzen; Erstellt eine neue Datenbank namens 'pflanzen'
DROP DATABASE pflanzen; Löscht die Datenbank namens 'pflanzen' unwiederruflich
STATUS datenbankname; gibt Status der MySQL-Datenbank aus
USE pflanzen; Wählt zu bearbeitende Datenbank, alle folgenden Befehle beziehen sich nun auf die Datenbank 'pflanzen'
Tabellenbefehle erste Tabelle erstellen:
Zuerst werden die Spalten (Kollonen oder Felder) benannt und deren Eigenschaften angegeben (alles in einer Linie bis zur ENTER-Taste). Erst danach (weiter unten) wird die Tabelle mit Datensätzen (Zeilen oder Linien) gefüllt.
CREATE TABLE blumen
Erstellt eine neue Tabelle namens 'blumen'
(id INTEGER AUTO_INCREMENT, Die erste Spalte heist 'id' sie beinhaltet nur Zahlen der Wert steigt automatisch um 1 an
name VARCHAR (60), die zweite Spalte heist 'name' beinhaltet 'variable Charakter' also Buchstaben und Zahlen mit maximal 60 Zeichen
standort VARCHAR (20), die dritte Spalte heist 'standort', Inhalt wie oben aber nur 20 Zeichen sind erlaubt
farbe INTEGER, die vierte Spalte heist 'farbe', Inhalt nur Zahlen - in dieser Spalte wird lediglich die Kennnummer des Datensatzes mit der Farbangabe aus einer zweiten Tabelle stehen
PRIMARY KEY (id)); legt die Spalte 'id' als den Primary Key dieser Tabelle fest. Klammern für Spalten und letzter Option werden geschlossen und mit Semikolon wird der Befehl Abgeschlossen.
Enter-Taste Mit der Enter-Taste wird der Befehl auf die Reise geschickt, bei erfolgreicher Ausführung antwortet die Konsole mit 'Query OK'
Die Tabelle 'blumen':

(Tabelle füllen siehe weiter unten)
Das Beispiel zeigt, wie an Stelle von 'rot' bloss der entsprechende PRIMARY KEY aus der zweiten Tabelle 'farbe' eingetragen wird.
id name
(60zeichen)
standort
(20zeichen)
farbe
(Zahl)
1 Rose sonnig 103
2 Veilchen schattig 104
3 Tulpe halbschatten 103
4 Orchidee feucht 100
Die zweite Tabelle 'farbe' würde den anzusprechenden Schlüssel und die entsprechende Farbangabe bereit halten. Eigentlich müsste diese zweite Tabelle vor der ersten erstellt werden, damit der für 'rot' entsprechende Schlüssel vorhanden ist.
id farbe
(60zeichen)
100 weiss
101 gelb
102 orange
103 rot
104 violett
105 blau
106 grün
EXPLAIN blumen Tabelle 'blumen' wird dargestellt (siehe weiter unten)
DROP TABLE blumen Tabelle 'blumen' wird unwiederruflich gelöscht
weitere Datentypen (nebst VARCHAR und INTEGER)
TEXT Text-Inhalte max. 65535 Byte
BLOB Bilder oder Sounds max. 65535 Byte
DATETIME YYYY-MM-DD/HH:MM:SS
hier Link erstellen zu einer vollständigen Liste am Ende
weitere Optionen (nebst AUTO_INCREMENT und PRIMARY KEY)
UNIQUE Jeder Wert muss einmalig sein
DEFAULT Standart Wert
BINARY Daten werden binär gespeichert
hier Link erstellen zu einer vollständigen Liste am Ende
Spalten verändern
ALTER TABLE blumen
ADD bluetezeit VARCHAR (40);
Struktur der Tabelle 'blumen' wird verändert
hinzufügen der Spalte 'bluetezeit' (40 Zeichen sind möglich)
ALTER TABLE blumen
DROP standort;
die Spalte 'standort' wird gelöscht
ALTER TABLE blumen
DROP PRIMARY KEY;
löscht den Primary Key (nicht die Spalte)
ALTER TABLE blumen
ADD PRIMARY KEY (id);
legt die Spalte 'id' als den Primary Key fest
ALTER TABLE blumen
CHANGE standort klima INTEGER;
ändert den Spaltennamen von 'standort' zu 'klima' und die Spaltendefinition (von varchar) zu integer
ALTER TABLE blumen
MODIFY klima VARCHAR (20)
ändert nur die Definition des Tateityps der Spalte 'klima' (nicht den Namen) von 'integer' zu 'varchar'
Abbildung: Die MySQL Konsole beim Erstellen der Datenbank 'pflanzen' und der Tabelle 'blumen' .
Schön zu sehen die Darstellung der Tabelle 'blumen' in der Konsole durch 'EXPLAIN blumen;' (noch ohne Inhalte)
Die ERROR Nachricht wurde ausgegeben, weil beim ändern des Datentyps der Spalte 'klima' in VARCHAR kein Wert (20) eingegeben wurde.
Datenbank 'pflanzen' und Tabelle 'blumen' in der MySQL-Konsole
Datensätze in Tabellen füllen, löschen, verändern
INSERT INTO blumen
(name, klima, farbe)
VALUES
('Rose', 'sonnig', 101),
('Umbra Veilchen', 'schattig', 102),
('Tulpe', 'halbschatten', 101),
('Orchidee', 'feucht', 103);
Die 'id' braucht nicht eingetragen zu werden, denn die wächst so wie sie oben angelegt wurde automatisch.
Achtung - der Befehl wird nach dem ersten Datensatz nicht durch ein ; beendet sondern nur durch ein , abgeteilt und die weiteren Datensätze folgen sogleich!
Zeichenketten (Strings) werden in einfache Anführungszeichen gesetzt: z.B.: 'Umbra Veilchen'.
DELETE FROM blumen; alle Datensätze der Tabelle 'blumen' löschen
DELETE FROM blumen
WHERE name = 'Rose';
den ganzen Datensatz löschen, in welchem in der Spalte 'name' 'Rose' steht
Auch bei Bedingungen wird der String in Anführungszeichen gesetzt.
UPDATE blumen
SET name = 'Tiger Orchidee',
klima = 'hohe Luftfeuchtigkeit'
WHERE name = 'Orchidee';
in der Tabelle 'blumen' setze in die Spalte 'name' 'Tiger Orchidee' und in die Spalte 'klima' 'hohe Luftfeuchtigkeit' in den Datensatz in dem in der Spalte 'name' jetzt noch 'Orchidee' steht
Achtung - ohne WHERE würde in allen Datensätzen die Spalten 'name' und 'klima' ersetzt!
Tabellen exportieren
SELECT * FROM blumen
INTO OUTFILE '/blumen.txt';
Zum erstellen einer Sicherungskopie kann die Tabelle als .txt - Datei gespeichert werden.
Der Stern * steht für alles und meint alle Datensätze aus allen Spalten.
Der Slash speichert die Datei in das gleiche Verzeichnis in dem MySQL installiert ist.
Also in etwa: WÄHLE alles VON der Tabelle 'blumen' und schreibe es IN EIN SEPERATES text-FILE in das Wurzelverzeichnis unter dem Namen blumen.txt
Standartmässig werden die Felder (Spalten) durch Tabulatoren \t getrennt und die Datensätze (Zeilen) durch ein \r\n
SELECT * FROM blumen
INTO OUTFILE '/blumen.csv'
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
Eine Excel-kompatible-Datei wird geschrieben, csv heisst comma separted values. Diese trennt die Felder durch Komma , die Zeilen auch durch \r\n.
Tabellen importieren
LOAD DATA INFILE 'dateipfadname'
INTO TABLE tabellenname
IMPORTOPTIONEN
INFILE meint die Datei in welcher die zu importierenden Daten sich befinden. Zu beachten: der 'dateipfadname' steht in einfachen Anführungszeichen.
LOAD DATA INFILE
'd:\\pflanzen_site\\blumen.txt'
INTO TABLE blumen
auf der Windows-Festplatte wird mit \ gearbeitet, da der Backslash unter MySQL als Einleitung für spezielle Steuerzeichen verwendet wird, muss er doppelt verwendet werden, der erste verpufft. Die Datei 'blumen.txt' befände sich in einem Ordner 'planzen_site' auf dem Laufwerk 'd'.
LOAD DATA INFILE '/blumen.txt'
INTO TABLE blumen
unter UNIX/Linux Rechnern kann der normale, einfache / slash benutzt werden (um die oben angelegte Sicherungsdatei zu laden).
LOAD DATA INFILE
'/blumen.csv'
INTO TABLE blumen
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
Damit eine Excel-kompatible Datei verstanden werden kann, muss deren Trennregeln als Importoption hinzugefügt werden (siehe Tabelle exportieren).
Uff, das wars vorläuffig, weiter unten komme ich darauf zurück.

php MyAdmin

MySQL-Datenbank administrier-Tool

Wer nicht zum Hardcore Crack berufen ist, der installiere ein Programm mit einer Browser Benutzeroberfläche (ersetzt Konsole), das auf der Scriptsprache PHP basierend die Erstellung und die Administration von MySQL Datenbanken und deren Tabellen vereinfacht. PhpMyAdmin ist ein solches (DaDaBIK ein anderes).

Hat man MySQL mit einem Benutzernamen und Passwort geschützt muss im Ordner phpmyadmin die Datei 'config.inc.php' mit einem Texteditor geändert werden:
$cfg['Servers'][$i]['user'] = 'root'; //Benutzername
$cfg['Servers'][$i]['password'] = 'sagichnicht'; //Passwort

Datenbank und Tabellen anlegen oder öffnen

Die Datei 'index.php' im Verzeichnis 'phpmyadmin' des Apache Servers (mein Pfad im Xampp-Packet von Apache-Friends ist: http://localhost/phpmyadmin/ ) im Browser öffnet die Startseite. Zuerst muss (links) eine bestehende Datenbank aus dem Dropdownmenu ausgewählt werden (ich hatte ja mit der SQL-Konsole schon eine namens 'pflanzen' angelegt, welche dort tatsächlich zu finden war), oder es muss (unten) eine neue Datenbank angelegt werden (dazu ist vorerst nur der Name der Datenbank nötig). Schon lande ich auf einer etwas verwirrenden Seite (mit einer Tabelle voller Icons); dies ist die Datenbank-Seite. Dort kann ich die Datenbank ändern oder jetzt entweder (links) eine bestehende Tabelle auswählen oder (unten) eine neue Tabelle in der Datenbank erstellen (dazu muss ich nur den Tabellennamen eingeben und die Anzahl gewünschter Spalten). Ich öffnete die Tabelle 'blumen' und lande auf einer änlichen Seite; dies ist die Tabellen-Seite welche die Struktur der Tabelle anzeigt, welche ich hier auch verändern kann, z.B. Spaltennamen oder Datentypen etc.

Tabelle füllen mit php MyAdmin

Auf den 5. Reiter 'Einfügen' klicken und eine Formularseite öffnet sich, dort kann Datensatz um Datensatz in die Tabelle eingefügt werden.
Zurück gekehrt zeigt der 2. Reiter 'Anzeigen' jetzt anklickbar die Tabelle und auch grad noch die SQL-Befehle an. (Abbildung unten)

Tabelle 'blumen' in phpMyAdmin

Exeltabelle importieren

Tabellen können in Excel einfach erstellt werden und als csv Dateien abgelegt werden.

Tabelle 'rosen.csv' im Excel

CSV 'comma separted values' sind Dateien in der die Datensätze beispielsweise als eigene Zeilen und die Feld-Werte durch Semikolon, Tabs oder Kommas etc. getrennt werden. Eine csv-Datei in Exel (oben) - mit Editor (unten) geöffnet.

Tabelle 'rosen.csv' im Editor

Ganz unten in der 'Struktur'-Seite von PHP MyAdmin befindet sich ein Link 'Textdatei in Tabelle einfügen'; ein paar Einstellungen sind dort vorzunehmen: Der Pfad zur Importierten Datei, ob etwas in der bestehenden Datei durch die importierte überschrieben werden soll, wie dort getrennt wurde, und die 'LOAD-Methode' - falls sich jene Datei nicht auf dieser Partition der Festplatte befindet: 'Data'. 'Abschicken' und schwuppdiwupp (geht wirklich einfach) ist meine Tabelle fertig.

Wo sind sie nun?

Die Datenbanken werden unter Xamp von phpMyAdmin wie von MySQL in einem automatisch erstellten Ordner abgelegt:

Datenbank mit Windows Explorer gefunden

Wo kommen sie hin?

Die Datenbank

Auf den externen Server bei Hostpoint ist eine Datenbank nicht transferierbar; sie muss dort neu erstellt und administriert werden! Die Datenbank erhällt dabei mehr oder weniger automatisch einen Namen: 'bieferc_pflanzen', einen Pfad: 'localhost', einen Benutzernamen: 'bieferc_root' und ein Passwort: 'sagichnicht', (wobei letzteres sowie jeweils das nach dem _ also 'pflanzen' und 'root' wählbar waren).

Die Tabellen

Die Tabellen, sind sie denn schon auf einer Festplatte vorhanden, können hingegen durch php myAdmin exportiert und auf den Server importiert werden.

Daten aus Bank abfragen

Die Datenbank (auf dem Datenbank-Server liegend) kann über 'PHP'-Scripts angesprochen, welche den SQL BEFEHL 'SELECT' mit Einschränkungen verwenden. (Andere Scriptsprachen sind: 'Perl', 'ASP', 'JSP'). In dem ein bestimmter Link im HTML-Dokument angeklickt wird, wird ein solches Script aufgerufen, welches die entsprechende Abfrage der Datenbank tätigt und die Antwort dem Browser zur Darstellung übergibt. Teile dieser Scripte können als eigene Dateien (wie dbconnect.php etc) in ein Programm mittels include() importiert werden.
In der PHP_sammlung hat es viele praktische Beispiele mit Abfragen von Werten aus Datenbank-Tabellen, und diese verändern oder ausgeben. Alle sind sogenannt: db_*.php (Die SQL-Befehle dort im Zusammenhang anschauen.)


Valid XHTML 1.0 Check den Code.

Verbindung herstellen >> << Bild verkleinert Script
Ich bin hier: > PHP Lehrling >> MySQL:
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 08.12.2010