Registrierung
leer
leer
newposts
Users
search
FAQ
Login
Start

Hallo Gast, und Willkommen im Forum. Sie müssen sich einloggen oder registrieren, um alle Funktionen nutzen zu können.


PN's Forum \ Computer \ Programmierung \ Webentwicklung \ Kurzeinführung Datenbanken/MySQL


 Poison Nuke  *

#1 Verfasst am 01.03.2008, um 09:05:34



Hallo,

in diesem Tutorial will ich euch kurz die Datenbanksprache MySQL näherbringen. Dabei soll dies aber nur eine sehr grobe Einführung sein, damit man die wichtigsten Aktionen ausführen kann. Weil MySQL ist an sich so komplex, dass man damit einen mehrmonatigen Lehrgang für absolvieren könnte, wobei es dort aber dann viel um die Spezialfunktionen geht. Der Threadtitel ist also so gesehen nicht als Scherz oder so gemeint. :prost


Also, was ist MySQL überhaupt?
Es ist ein kostenloses Datenbankmanagementsystem. D.h. mit MySQL hat man einen Datenbankserver laufen, auf dem dann die Daten gespeichert sind und die man über Abfragen abrufen kann. Dabei sind diese "Abfragen" das wichtigste dabei, weshalb auch "SQL" selbst soviel wie "Strukturierte Abfrage Sprache" (Structured query language) heißt.




Wie sieht so eine Datenbank grundlegend aus?

im Prinzip kann man es mit einer Excel Tabelle vergleichen. Eine Datenbank in MySQL enthält beliebig viele solcher Tabellen, in denen einfach untereinander die Daten gespeichert sind. Die Anzahl der Spalten und Zeilen wird dabei vom Datenbankdesigner festgelegt.
Nur im Gegensatz zu Excel sieht man diese Daten nicht einfach so offen. Denn MySQL selbst hat keine Oberfläche. Das einzige was man von MySQL zu sehen bekommt, ist eine Kommandozeile, ähnlich der bekannten "DOS-Box", oder auch einfach "Shell" genannt.

Der Vorteil ist nun, man kann die Daten aus diesen Tabellen in jeder beliebigen Form abrufen. Am einfachsten kann man sich z.B. einfach alle Zellen ausgegeben lassen, dann sieht es ähnlich aus wie in Excel. Nur das interessant ist, man kann sich die Daten nach jeder beliebigen Regel anzeigen lassen. Z.B. hat man eine Tabelle, in der die Namen und Anschriften von Kunden drinstehen:

Max Mustermann, Auenallee 23, 25352 Ostern
Heinz Harald, Sempergasse 5, 29053 Hammeln
Tim Zimmermann, Ochsenstraße 12, 35024 Wegeritz


Man kann jetzt MySQL sagen, dass man nur alle Nachnamen sehen möchte von den Personen, die in einem Postleitzahlengebiet mit 2xxxx wohnen.
Als Ergbenis würden dann dies angezeigt werden:

Mustermann
Harald

Genausogut kann man sich auch alle Orte anzeigen lassen, in denen ein "Harald" wohnt, oder wie auch immer.
Noch interessanter wird, dass MySQL in der Lage ist, mehrere Tabelle zu verknüpfen und man sich auf diese Weise anzeigen lassen kann, welcher Kunde welche Produkte gekauft hat, wenn man in einer zweiten Tabelle stehen hat, welche Kunden was alles gekauft haben.





Aber erstmal grundlegend zur installation von MySQL

Am besten man lädt sich hier:
http://www.apachefriends.org...

das Paket XAMPP runter. Dort enthalten ist ein kompletter Webserver mit Apache, MySQL, PHP und noch einigen anderen sehr nützlichen Serverprogrammen.
Dieses Paket installiert man dann am besten auf C:\XAMPP oder vergleichbar. Zumindest am besten ein verzeichnis, dass einfach erreichbar ist, weil man häufiger drauf zugreifen muss.
Nach der Installation wird man noch gefragt, ob man die Server als Dienst installieren lassen will, wenn man häufiger damit arbeiten will, dann ja, ansonsten kann man die Programme auch über das XAMPP Controlpanel manuell starten.




Nach der Installation startet man dann die Shell von Windows, indem man auf "Start - Ausführen" geht und dort "cmd" eintippt.
Im folgenden Fenster wechselt man über das CD ... Kommando in das xampp\mysql\bin Verzeichnis, hier liegen alle wichtigen Dateien von MySQL.

jetzt tippt man "mysql -u root" ein und drückt Enter und sollte nun eine Willkommensmeldung von MySQL erhalten. Ab nun ist man in MySQL drin :prost


In der Shell gibt es aufjedenfall eins zu beachten: ALLE Befehle müssen mit einem Semikolon ( ; ) abgeschlossen werden. Erst damit wird das Ende von einem Befehl gekennzeichnet. Wenn man einfach nur Enter drückt, gelangt man einfach in die nächste Zeile, auf diese Weise kann man allerdings auch längere, mehrzeilige Befehle eintippen.
Weiterhin sollte man bei den Tabellennamen usw immer auf die Groß- und Kleinschreibung achten. Meist sind die Server zwar unempfindlich daraufhin eingestellt, aber wenn man seine Scripte auf einen anderen Server transferiert, der auf Groß- und Kleinschreibung achtet, hat man ein Problem ;)

Als erstes sollte man grundlegend erstmal zwei Sachen ausführen: den aktuellen Root Zugang mit einem Passwort schützen und einen zweiten Zugang anlegen mit dem man dann die eigentlichen Arbeiten durchführt. Denn das Problem ist, MySQL läuft auf dem eigenen Rechner und ist dann von außen erreichbar. Würde man den root-Zugang nicht mit einem Passwort schützen, könnten Angreifer von außen mit vollen Rechten auf den Server zugreifen und damit die Datenbanken verändern uvm.
Um das Root-Passwort zu ändern, muss man sich zuerst an der MySQL Datenbank anmelden. Dazu einfach in der Shell
CONNECT mysql;
eingeben und schon besteht eine Verbindung zu dieser Datenbank. Statt "mysql" kann man dann später den Namen einer beliebigen Datenbank eingeben, die auf diesem Server vorhanden ist. Über den Connect Befehl wird diese Datenbank geöffnet und alle folgenden Befehle gelten nur innerhalb dieser.
Jetzt gibt man folgenden Befehl ein:
UPDATE user SET Password=PASSWORD('passwort') WHERE User='root';
Es sollte nun die Meldung kommen, dass zwei Einträge erfolgreich geändert wurden.

Den zweiten Zugang legt man in der mySQL Shell mit folgendem Befehl an:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' INDENTIFIED BY 'passwort';

Damit wird der Benutzer "username" angelegt, mit dem Passwort "passwort". Mit "localhost" wird bezeichnet, dass dieser User lediglich vom localhost aus zugreifen kann. Sollte einer von außen versuchen, sich mit diesem Konto anzumelden, wird die Verbindung abgelehnt. AUf diese Weise kann man allerdings auch festlegen, dass sich der User nur von einer bestimmten IP oder Domain von außen einloggen kann, wenn man z.B. einen dedizierten MySQL Server am laufen hat.
Statt "ALL PRIVILEGES" kann man auch bestimmte Aktionen eingeben, z.B. dass der User nur bestimmte Befehle ausführen kann usw. Bei "on *.*" könnte man weiterhin noch einzelne Datenbanken (der Teil vor dem Punkt), oder gar nur einzelne Tabellen in diesen Datenbanken (der Teil nach dem Punkt) definieren, bei denen die vorher angesagten Rechte gelten.


Jetzt loggt man sich erstmal wieder aus der Shell aus, in dem man einfach exit eingibt. Damit wird die Verbindung zur mysql Datenbank beendet. Nun loggt man sich auf den neu erstellten Benutzer wieder ein:
"mysql -u username -p"
durch -p wird dabei angeben, dass man ein Passwort eingeben möchte, dieses wird nach dem Drücken von Enter auch abgefragt.

Nun erneut angemeldet, erstellen wir eine erste, leere Datenbank:
CREATE DATABASE test;

Über den Befehl "Connect test;", oder "Use test;" können wir dann zu dieser Datenbank verbinden. Noch ist sie aber leer.



Grundlegende Regeln beim Erstellen von Datenbanken

1. es sollte so wenig Redundanz (mehrfaches Vorkommen gleicher Daten) wie möglich vorkommen. Z.B. wenn man jetzt einen Kundendatenbank hat und es für jeden Kunden Quartalsweise oder so eine Rechnung gibt, dann könnte man natürlich eine Tabelle erstellen, die folgendermaßen aussieht:

Max Mustermann, Auenallee 23, 25352 Ostern, ReNr: 100201, ReDatum: 31.11.2007, Artikel1: Notebook, Preis1: 900€, ....
Max Mustermann, Auenallee 23, 25352 Ostern, ReNr: 100202, ReDatum: 29.02.2008, Artikel1: Beamer, Preis1: 700€, ....

Wie man sieht, kommt der gesamte Adresssatz mehrmals vor. Würde nun Max Mustermann umziehen, dann müsste man in jeder Zeile erneut die Adresse anpassen.
Oder wenn man mehrere Kunden hat und sich der Preis für einen Artikel ändert, dann müsste man für jeden Kunden diesen Preis ändern, solang die Rechnung noch nicht erstellt wurde. usw.

Um jetzt diese Redundanzen zu verhindern, sollte man die Datenbestände in soviele Tabellen aufteilen, dass am Ende in jeder Tabelle nur noch eindeutige Datensätze ohne mehrfache Einträge vorkommen.
In diesem Beispiel würden wir 4 Tabellen brauchen:

Tabelle 1, Kunden:
Kundennummer, Name, Vorname, Straße, Hausnummer, Postleitzahl, Ort

Tabelle 2, Produkte:
Produktnummer, Bezeichnung, Preis

Tabelle 3, Rechnungspositionen:
Rechnungsnummer, Produktnummer

Tabelle 4, Rechnungen:
Kundennummer, Rechnungsnummer, Rechnungsdatum

An dieser Tabellenaufgliederung erkennt man schonmal zwei wichtige Sachen: erstens wurde für die Kundendatenbank jeder Teil der Anschrift einzeln aufgeführt. Dies ist WICHTIG! Denn würde man z.B. die gesamte Anschrift in ein Feld reinpacken, dann könnte man diese Einträge nicht mehr über Abfragen zur Suche oder so nutzen, da sich nur sehr schwer innerhalb vom Textfeldern suchen lässt.

Weiterhin wurden die Tabellen so aufgeteilt, dass in keiner Spalte mehr doppelte Informationen vorkommen (Ort und Postleitzahl mal ausgelassen, die bekommt man nur mit unnötigem Aufwand raus). Wer sich jetzt wundert, warum 4 Tabellen:
Einmal hat man ja eine ganze Liste voll Kunden. Jeder Kunde kann mehrere Rechnungen haben (Tabelle 4). Auf jeder Rechnung können aber auch weiterhin mehrere Artikelpositionen sein (Tabelle 3).
Für die Artikel gibt es dann natürlich auch eine extra Tabelle, denn ein Artikel kann ja auf mehreren Rechnungen vorkommen.

Durch diese Tabellenstruktur ist nun gewährleistet, dass man recht einfach alle Daten verwalten kann, die Datenmenge selbst so klein wie möglich gehalten wird und man durch die Fähigkeiten von SQL sogar sehr gut nun die Daten miteinander verknüpfen kann. Man kann jetzt z.B. eine Abfrage machen, welche Kunden ein bestimmtes Produkt gekauft haben, oder wie oft ein bestimmtes Produkt verkauft wurde usw.

Um sich den Tabellenaufbau einfacher zu merken kann man folgende Beziehungen festlegen:
Alle eindeutigen Daten (Adresse, Name usw) kommen in eine Tabelle. Die Bezeihung der Daten untereinander wird auch als 1 zu 1 Beziehung bezeichnet.

Gibt es zu jedem Datensatz der ersten Tabelle mehrere mögliche weitere Datensätze (Ein Kunde hat mehrere Rechnungen, so wird eine zweite Tabelle angelegt.
Die Daten der ersten Tabelle stehen über eine 1 zu N Beziehung mit den Daten der zweiten Tabelle in Verbindung.

Hat man zwei Tabellen, bei denen zu jedem Eintrag der ersten Tabelle mehrere der zweiten Tabelle zugeordnet werden können, aber auch umgedreht jeder Eintrag der zweiten mehrere Einträge der ersten entsprechen kann, so spricht man von einer N zu M beziehung. Dies wäre z.B. die Kundenliste und die Produktliste.
Es ist unmöglich, diese zwei Tabellen direkt miteinandern zu verknüpfen. Dafür ist mindestens eine Zwischentabelle notwendig, welche die eine N-M Beziehung in zwei oder mehrere 1-N Beziehungen auflöst.


Bei der Planung von Datenbanken sollte man sich also immer vor Augen halten, dass erstens jede Zeile einer Tabelle immer absolut eindeutig sein muss (es darf niemals eine zweite Zeile mit identischem Inhalt geben), und zweitens sollte die Darstellung so abstrakt wie möglich gemacht werden, auch wenn es am Anfang eventuell ungewohnt ist.



Erstellen von Tabellen

nachdem wir nun die Tabellenstruktur geplant haben, können diese nun in MySQL erstellt werden.
Dazu kommt folgender Befehl zum Einsatz:
CREATE TABLE `Tabellenname` (
`Feldname1` Datentyp auto_increment NOT NULL,
`Feldname2` Datentyp NOT NULL default '0',
PRIMARY KEY (`Feldname1`)
);


Tabellenname und Feldname sollte denke ich mal klar sein 8)
Bei Datentyp wird der Datentyp des Feldes eingetragen. Hauptsächlich verwendet wird:

int (für Integer). Da kann man dann einfache, ganze Zahlen im Bereich von -2 bis +2 Mia eintragen.
float ist ebenfalls für Zahlen, nur halt für Fließkommazahlen.
varchar(länge) ist für Zeichen oder Sätze. Die Länge gibt an, wieviele Zeichen das Textfeld umfassen soll
bool hier kann nur Ja oder Nein gespeichert werden, bzw "TRUE" und "FALSE"

mit der Option auto_increment hinter dem Datentyp legt man fest, dass dieses Feld automatisch beim Erstellen des betreffenden Datensatzes um 1 erhöht wird. Dieses Feld ist in jeder Haupttabelle zwingend notwendig, denn nur so kann man für jeden Datensatz eine absolut eindeutige Kennung erhalten. Das wäre z.B. die Kundennummer, die automatisch beim Erstellen eines neuen Kunden erzeugt wird, oder die Rechnungsnummer usw.
NOT NULL bedeuted, dass das Nichteintragen eines Wertes nicht akzeptiert wird. Man muss beim Erzeugen von einem neuen Datensatz in diesem Feld etwas eintragen, ansonsten verweigert MySQL den Vorgang. Ist ganz sinnvoll, um später fehlerhaften Abfrage zu vermeiden, die über solche leeren Felder stolpern würden.
Mit der abschließenden Funktion PRIMARY KEY (Feldname) legt man fest, welches Feld als eindeutige Indentifizierung dienen soll. Sinnvollerweise trägt man hier das Feld ein, welches eh schon mit "auto_increment" ausgestattet ist, nämlich die Kundennummer oder so.
Wenn man nun aber Tabellen hat, die zwei Haupttabellen verbinden sollen (n-m Beziehung), dann kann man in diesen schlecht eine eigene ID eintragen, da sie lediglich als Verbindungsglied dienen.
Nun ist es aber so, dass bei solchen Verbindungstabellen jede Spalte für sich nicht eindeutig ist und somit nicht zur Identifizierung dienen könnte. Aber beide Spalten zusammen sind IMMER absolut eindeutig. Daher werden bei solchen Zwischentabellen beide Feldnamen, durch ein Komma getrennt, beim "PRIMARY KEY" eingetragen, auf diese Weise weiß MySQL nun, dass beide Spalten zusammen eine eindeutige Identifizierung von jedem Datensatz ermöglichen

Auf diese Weise erstellen wir jetzt erstmal die 4 oben gezeigten Tabellen.
So sieht z.B. der Befehl für die Tabelle mit den Rechnungen aus:
CREATE TABLE 'Rechnungen' (
'RechnungNr' int auto_increment NOT NULL,
'RDatum' int NOT NULL,
'Bearbeiter' varChar(50),
`KundenNr` int NOT NULL default '0',
PRIMARY KEY (`Rechnungsnummer`)
);

Wenn man nun sehen will, ob die Tabelle korrekt erzeugt wurde, kann man sich mit zwei Befehlen anzeigen lassen, welche Tabellen vorhanden sind, und wie diese in ihrer Stuktur aussehen:
SHOW TABLES;
Damit werden einfach nur die Tabellennamen angezeigt, die in der aktuellen Datenbank vorhanden sind.
DESCRIBE Tabellenname;
Dieser Befehl zeigt dann an, wie die Tabelle aufgebaut ist, welche Felder es gibt, welchen Datentyp diese haben und welche Eigenschaften jedes Feld hat.



Hinzufügen von neuen Datensätzen

Um mit den Tabellen arbeiten zu können, müssen diese natürlich erstmal befüllt werden.
Dies macht man mit dem "INSERT" Befehl. Im Prinzip erzeugt man damit einfach nur einen neuen Datensatz, bei dem automatisch das Feld mit der Eigenschaft "auto_increment" um eins vergrößert wird und dann werden weiterhin alle die Felder ausgefüllt, die beim INSERT angebeben wurden.
INSERT INTO Tabellenname ('Feldname1', 'Feldname2', ...) VALUES ('Wert1', 'Wert2', ... );

Dabei muss man halt darauf achten, dass man NICHT das Schlüsselfeld mit der Eigenschaft "auto_increment" mit angibt, dieses wird immer automatisch mit erzeugt.
Wenn man ein Feld nicht angibt, dann wird dort der Default-Wert eingetragen, den man bei der Tabellendefinition vorher festlegen kann. Ist kein Defaul-Wert angeben und hat das betreffende Feld die Eigenschaft "NOT NULL", dann gibt es eine Fehlermeldung.

Fügen wird unserer Datenbank mal ein paar Datensätze hinzu, zuerst ein paar Kunden, danach ein paar Produkte und dann noch ein oder zwei Rechnungen:
INSERT INTO Kunden (Name, Vorname, Straße, HausNr, PLZ, Ort) VALUES ('Mustermann', 'Max', 'Auenallee', 23, 25352, 'Ostern');
INSERT INTO Kunden (Name, Vorname, Straße, HausNr, PLZ, Ort) VALUES ('Harald', 'Heinz', 'Sempergasse', 5, 29053, 'Hammeln');
INSERT INTO Kunden (Name, Vorname, Straße, HausNr, PLZ, Ort) VALUES ('Zimmerman', 'Tim', 'Ochsengasse', 12, 35024, 'Wegeritz');

INSERT INTO Produkte (Bezeichnung, Preis) VALUES ('Notebook XY', 650,49);
INSERT INTO Produkte (Bezeichnung, Preis) VALUES ('BigTower ZA', 1280,20);
INSERT INTO Produkte (Bezeichnung, Preis) VALUES ('TFT, 19"', 350,90);

INSERT INTO Rechnungen (RDatum, Bearbeiter, KundenNr) VALUES (DATE(), 'Herr Wolf', 2);

INSERT INTO RechnungPos (RechnungsNr, ProduktID, Anzahl) VALUES (1, 2, 1);
INSERT INTO RechnungPos (RechnungsNr, ProduktID, Anzahl) VALUES (1, 3, 1);

So, jetzt hätten wir schonmal eine kleine Datenbank mit 3 Kunden, 3 Produkten und einer Rechnung, auf der zwei Artikel sind. Wie euch sicher aufgefallen ist, habe ich bei "RechnungsNr" und "KundenNr" und "ProduktNr" einfach so ein paar Zahlen eingetragen. Dass liegt daran: MySQL zählt bei den "auto_increment" Feldern immer ab 1 los und dann halt nach oben. Daher kann man beim neuerstellen einer Datenbank auch immer schon vorher sagen, dass beim dritten INSERT in eine Tabelle der neue Datensatz die Nummer 3 hat. Wenn die Datenbank natürlich schon größer ist, wird man die Nummern vorher abfragen bzw es gibt dann auch die Möglichkeit, nach dem INSERT direkt abzufragne, welche Nummer der neue Datensatz hat, aber dazu später mehr.



Abfragen mit MySQL

Dies ist der wichtigste Teil bei MySQL, denn nur mit Abfragen bekommt man die Daten aus den Tabellen auch wieder raus 8)
Hier erstmal grundsätzlich der Aufbau der dazu notwendigen Anweisung:
SELECT Tabellenname.Feldname1, Tabellenname.Feldname2 FROM Tabellenname WHERE Tabellenname.Feldname3='Wert' ORDER BY Tabellenname.Feldname4;

Natürlich gibt es gerade bei diesem Befehl eine Unzahl an Variantionsmöglichkeiten, aber hier erstmal die wichtigsten. Bei den Feldnamen habe ich immer durch einen Punkt getrennt den Tabellennamen davorgeschrieben. In den meisten Fällen, wenn man eine Abfrage nur aus einer Tabelle macht, braucht man dies nicht zu machen, da reicht es einfach, die Feldnamen reinzuschreiben. Nur es ist halt auch möglich, Abfragen aus mehr als einer Tabelle zu machen, was SQL so interessant macht. Und dann muss man die Felder so schreiben, damit MySQL weiß, in welcher Tabelle es nach dem Feld suchen muss. Insbesondere wenn in beiden Tabellen zwei Felder mit gleichem Namen vorkommen.
Die SELECT Anweisung gibt selbst immer eine Tabelle aus, wobei hier die Spalten aber durch die Feldnamen zwischen "SELECT" und "FROM" festgelegt werden. Auf diese Weise kann man sich z.B. die Namen von den Kunden ausgeben lassen, die im PLZ Bereich 3xxxx wohnen, ohne dass man aber die PLZ selbst mit dazuschreibt.
Die einfachste SELECT Anweisung ist nebenbei diese:

SELECT * FROM Kunden;

Damit gibt man alle Datensätze aus der Tabelle Kunden aus mit allen darin enthaltenen Feldern. So kann man sich eine Tabelle in ihrer Grundform ansehen, wie man sie auch in Excel sehen würde. Nur bei größeren Tabellen mit mehreren tausend bis millionen Einträgen macht es keinen Sinn mehr.
Um jetzt nur Datensätze mit einem bestimmten Kriterium auszugeben, hat man die "WHERE" Klausel. Hinter ihr können Eigenschaften definiert werden, die ein Feld haben muss, damit der betroffene DAtensatz ausgegeben wird.
Z.B. bei der Anweisung
SELECT * FROM Kunden WHERE PLZ>=30000 AND PLZ<40000;
Würde eben nur den Datensatz von "Tim Zimmermann" ausgeben.

Wenn man die Ausgabe sortiert haben will, lässt sich das mit dem "ORDER BY" Statement arrangieren. Dazu gibt man direkt nach dem ORDER BY einfach nur das oder die Felder an, nach denen sortiert werden soll, wobei das erste Feld für die primäre Sortierung zuständig ist und sollte es da mehrere gleiche Werte geben wird über das zweite Feld eine weitere Sortierung durchgeführt. Mit einem direkt anschließend folgendenden "DESC" kann man angeben, ob die Sortierung in umgedrehter Reihenfolge ausgeführt werden soll. Normalerweise wird standardmäßig "ASC" angenommen, also aufsteigende Sortierung.


Kommen wir nun zum interessanteren Teil: Abfragen über mehrere Tabellen. Wir wollen z.B. herausfinden, von welchen Mitarbeitern die Rechnungen für Heinz erstellt wurden. Dazu bedienen wir uns dem "INNER JOIN". Mit diesem Befehl kann man für eine Abfrage ein oder mehrere Tabellen über 1-N Beziehungen verbinden. Hier erstmal die Abfrage, um herauszufinden, welche Bearbeiter es sind:
SELECT Rechnungen.Bearbeiter FROM Kunden INNER JOIN Rechnungen ON Kunden.KundenNr=Rechnungen.KundenNr WHERE Kunden.Name=Harald;

Das INNER JOIN wird direkt nach dem "FROM" verwendet, hier wird gesagt, welche beiden Tabellen miteinander verbunden werden sollen. Über das nachfolgende "ON" wird dann gesagt, über welche Felder die Verbindung gemacht werden soll. Hier MUSS mindestens ein Schlüsselfeld eingetragen sein, welches man bei der Tabellenerstellung als "PRIMARY KEY" definiert hat, ansonsten bekommt man unverwertbare Ergebnisse. Denn mindestens ein Feld muss eindeutige Werte haben, damit es eine saubere Zuordnung geben kann.




Ändern von Datensätzen

Was nun, wenn sich ein Datensatz ändert, weil z.B. ein Kunde umgezogen ist, oder sich der Preis von einem Produkt geändert hat? Dazu gibt es den UPDATE Befehl:
UPDATE Tabellenname SET Feldname='wert' WHERE Feldname='Eigenschaft';

Wenn man z.B. den Preis für den Big Tower anpassen will, sähe das folgendermaßen aus:
UPDATE Produkte SET Preis=1250,50 WHERE ProduktID=2;

Bei diesem Befehl muss man aber extrem aufpassen! Denn wenn man außversehen die WHERE Klause vergisst, dann setzt MySQL einfach ALLE Felder auf diesen Wert. Schlimm wäre das z.B. bei größeren Datenbanken, z.B. von einem Forum. Wenn man nun ein Update auf die Tabelle mit den Postings macht und dabei den Inhalt von einem bestimmten Posting auf "..." setzen will man dabei aber das WHERE vergisst oder falsch formuliert, hämmert es einem aufeinmal bei ALLEN Postings den Text raus und das Forum ist mit einem Schlag komplett leer. Gut das ein Forenbetreiber normalerweise immer Backups anfertigt :D




Sichern und Wiederherstellen einer Datenbank

Wenn man nun eine größere Datenbank am Laufen hat, dann sollte man diese tunlichst regelmäßig sichern. Weil falls eben ein Befehl mal fehlerhaft arbeitet oder durch irgendeinen anderen Einfluss die Datenbank zerstört oder unbrauchbar gemacht wird, wäre man ohne Backup teilweise ziemlich am A***.
Bei MySQL geht es recht einfach:



Über den Befehl mysqldump wird die Datenbank in eine Textdatei geschrieben. Über die Option -u und -p meldet man sich an, hinter dem -p steht dann die Datenbank, die man sichern will, in meinem Fall ist es die Forendatenbank. Über den ">" wird dann die Datei angegeben, in die das Backup gespeichert werden soll. Sinnvoll ist es, wenn man in den Dateinamen das Datum schreibt, damit man immer weiß, von wann dieses Backup ist. Die Dateiendung ist eigentlich egal, ich nehme immer .sql, weil ich dann sofort erkenne, das es eine SQL Datenbank ist.
Das Backup kann man über mysql direkt wieder herstellen, Syntax ist dann die gleiche wie beim Dump, nur dass der Pfeil diesmal in eine andere Richtung geht, man will ja schließlich den Inhalt der Datei in MySQL haben.








So, das war erstmal die grundlegende Einführung in MySQL. Ich habe hier nur sehr grob die ganzen Funktionen erklärt, aber mit diesem Wissen kann man schon einen Großteil der Aufgaben bewältigen.
Wer mehr Informationen benötigt, kann entweder hier im Forum fragen, oder die offizielle Dokumentation nutzen:
http://dev.mysql.com/doc/ind...

:prost




Achja, bevor sich jetzt einige Fragen, was einem mysql bringen soll, wenn man es nur über so eine Kommandozeile nutzen kann:
Im Endeffekt ist MySQL nur im Hintergrund und man programmiert dann ein sog. "FrontEnd" dazu, z.B. in PHP oder mit einer anderen Sprache. Z.b. dieses Forum ist ein grafisches FrontEnd für eine MySQL Datenbank, die im Hintergrund läuft. ALLES was hier im Forum steht, ist in dieser MySQL Datenbank auf meinem Server gespeichert.
Man kann also durch ein gutes FrontEnd eine Datenbank auch optisch sehr schön nutzen.
Wie man ein einfaches FrontEnd programmiert, werde ich im PHP Forum in einem weiteren Tutorial erläutern. :prost


greetz
Poison Nuke

bearbeitet von Poison Nuke, am 02.06.2008, um: 16:41:20


TimB

#2 Verfasst am 30.03.2011, um 14:10:36



Eine etwas komfortablere Möglichkeit für Leute, die nicht so gerne die Konsole nutzen wäre das Webprogramm phpmyadmin welches auch bei xampp standartmäßig mit dabei ist
zu erreichen über den Browser über die Adresse http://127.0.0.1/phpmyadmin
natürlich nur wenn auch der Apache-Server läuft


"Beim Beschleunigen müssen die Tränen der Ergriffenheit waagerecht zum Ohr hin abfließen" (Walter Röhrl)

 Poison Nuke  *

#3 Verfasst am 30.03.2011, um 14:43:33



welches allerdings auch viele Sicherheitslücken in der Vergangenheit hatte, bzw bei welchem man sehr leicht eine Sicherheitslücke entstehen lassen kann, wenn man mit der Konfiguration nicht genaustens aufpasst. In meinen Errorlogs vom Webserver ist fast jede zweite Anfrage ein Hackversuch auf das bei mir nicht vorhandene phpmyadmin. Das kommt nicht von ungefähr.


Zudem auch phpmyadmin nichts weiter als eine grafische Oberfläche für die Shell ist. Die SQL Syntax muss man trotzdem beherrschen und genau das ist das Ziel vom Thread gewesen ;)


greetz
Poison Nuke

TimB

#4 Verfasst am 30.03.2011, um 14:46:10



mit dem phpmyadmin kann man sich aber viele SQL Befehle zusammen "basteln"


"Beim Beschleunigen müssen die Tränen der Ergriffenheit waagerecht zum Ohr hin abfließen" (Walter Röhrl)

 Poison Nuke  *

#5 Verfasst am 30.03.2011, um 14:55:58



gut zu der Zeit wo ich damit mal herumgespielt hatte, konnte es das noch nicht so wirklich, nur die Frage ist, bringt einem das wirklich was, wenn man mal eben etwas Code zusammenbastelt, ohne die Funktion zu verstehen :X


greetz
Poison Nuke

PN's Forum \ Computer \ Programmierung \ Webentwicklung \ Kurzeinführung Datenbanken/MySQL


- Zurück zur Homepage - Eigene Beiträge - Neue Beiträge - Wer ist online? - Impressum - Datenschutz - Statistiken -



Board coded and provided by: Poison Nuke
Copyright 2007-2014, Robert Menger