MySQL:
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
| 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. |
|
||||||||||||||||||||
| 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. |
|
||||||||||||||||||||
| 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. |
|||||||||||||||||||||
![]() |
|||||||||||||||||||||
| 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)

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

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.

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:

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.)
