

	\documentclass[a4paper,11pt]{article}
	\usepackage{ngerman}
	\usepackage[latin1]{inputenc}
	\setlength\parskip{\medskipamount}
	\setlength\parindent{0pt}
	\begin{document}

	
 % mysql
 % Copyright Alexander Fischer
 % Lizenz: GFDL
 % 
 % $Name: $
 % $Revision: 1.1.2.23 $
 % $Source: /cvsroot/selflinux/tutorial/software/datenbanken/mysql/mysql,v $
 % SelfLinux-0.7.2
 %
 % Diese Datei ist Teil von SelfLinux http://www.selflinux.de
 %
 %%% $Id: mysql,v 1.1.2.23 2002/12/21 23:14:37 fboerner Exp $

	\title{MySQL - Datenbanken}


	
	    \author{Alexander Fischer}
	    %\url{mailto:selflinux@tbanus.org}
    

	\maketitle

	
	
	%\ref{../index.tex}
	
		%\ref{anwendungen.tex}
		Anwendungs-Software
		%\ref{datenbank1.tex}
		Datenbanken
	\ref{mysql}

    \par{Layout}
    Torsten Hemm
	    %\url{mailto:T.Hemm@gmx.de}
    
    	\par{Lizenz}
	GFDL
 
	\tableofcontents{}

        
	\section{Einleitung} \label{d70e50}
        
  
  
  \par
  
Vorweg ein ''Herzliches Willkommen'' bei der Dokumentation von MySQL.
Da Sie die Einführung lesen, gehe ich davon aus, daß Sie ein
allgemeines Interesse an relationalen Datenbanken und insbesondere einen
gesteigerten Informationsbedarf an MySQL haben.
  
  
  \par
  
Die erste Datenbank entstand schon weit früher, als es die erste
Rechenmaschine gab. Erstaunt? Nun ja, zugegeben, es waren an sich
keine Datenbanken, wie wir sie heute kennen, aber immerhin hatten sie
nahezu die gleichen Aufgaben. Primäres Ziel ist heute wie früher,
Datenbestände aufzubewahren, sie zu speichern, sie in eine bestimmte
Form bringen und sie bei Bedarf jederzeit wieder abrufen und nutzen zu
können.
  
  
  \par
  
Da wir ja schon bei geschichtlichen Abläufen sind, ist es nicht
vermessen, wenn ich behaupte, dass MySQL zu den bedeutenden
relationalen Datenbanksystemen gezählt werden kann. Es ist trotz aller
Einschränkungen, sehr leistungsfähig, ausreichend sicher und stabil
und führt sozusagen einen Quasi-Standard bei der Verwendung als
Web-Datenbanksystem ein.
  
 \section{Folgende Voraussetzung sollten Sie erfüllen} \label{d70e76}
        
  
  \begin{list}{*}{}
   
	\item 
Sie besitzen einen Computer
   
   
	\item 
Sie wissen was Linux ist, und können das System starten
   
   
	\item 
Sie wissen auch, dass WWW keine Automarke ist und -surfen- so ab und
zu durch die Weiten des Web's.
   
   
	\item 
Sie sind eventuell Inhaber einer Website und möchten diese mit einer
Datenbank ein wenig aufpäppeln.
   
   
	\item  
Sie sind eventuell Programmierer und möchten Ihr Programm um eine
Datenbanklösung erweitern
   
   
	\item 
Sie gehören nicht zu den Enthusiasten, dessen größtes Glück auf
Erden darin besteht, daß Sie Tag und Nacht vor einem eckigen Kasten
verbringen, seltsam verzückt auf Plastikknöpfchen herumtippen,
gerade die 26. Programmiersprache gelernt und nebenbei Fehler in
Datenbanksystemen aufgespürt haben.
   
  \end{list}
 \section{Die Geschichte der Datenbanken} \label{d70e108}
        
  
  
  \par
  
In dieser Geschichte müssen wir ein wenig ausschweifen, da der
Grundsatz der Datenbanken schon sehr viel früher entstand als Sie zu
glauben wagen. Vor vielen tausenden von Jahren entwickelte der Mensch
ein regelrechtes Zahlenbewusstsein. Dieses Bewusstsein ist die
Grundlage für die Rechenvorschriften und die daraus später
entstehenden ersten Rechenhilfen.
Zum Beispiel der Abakus war eine davon. Ein Rechengerät, das nahezu
perfekt ist. Bis heute hat es sich nicht groß verändert, da es keinen
Bedarf für eine Verbesserung gab, und bis heute wird es noch verwendet
- immerhin geschah das bereits vor der Geburt Christi.
Der Professor Willhelm Schickart erfand 1623 die Rechenuhr 
(es war die erste Rechenmaschine), die nachweislich die 4 Grundrechenarten
beherrschte. Nach einer kurzen Wartezeit, befinden wir uns im Jahre
1833. Der Engländer Charles Babbage erfand eine dampfgetriebene
Differenziermaschine und später ein Modell, das unter dem Namen
analytical Engine bekannt wurde. Beide funktionierten nicht so
richtig, aber stellten ein grundlegendes Konzept für die heutige
Computertechnologie dar. Auch eine Dame war an der Entwicklung
beteiligt. Die Gräfin Augusta Ada Lovelace (1815-1852), galt 
als erste Programmiererin in der Datenverarbeitung. Sie verstand die
Programmierung bereist 100 Jahre bevor es die ersten technischen
Möglichkeiten dazu gab. 1890 gab die amerikanische Regierung die
Volkszählung in Auftrag. Hermann Hollerith (1860-1929) verwendete
dafür eine Lochkarte zur Auswertung. Die geschätzte Dauer von zehn
Jahren für die Auswertung, bewerkstelligte er innerhalb von nahezu
sechs Wochen. Dieser Erfindung zu Grunde, wurde 1896 die Firma
Tabulating Machine Company gegründet. Aus ihr ging 1924 
die Firma IBM hervor. Zum Schluss bleibt noch Professor 
Dr. Konrad Zuse zu nennen. Er ist der Erfinder und Konstrukteur
des ersten funktionstüchtigen, frei programmierbaren Rechners der Welt - der
ZUSE Z 3. 1941 wurde dieser fertig gestellt, und arbeitete bereits
mit Dualzahlen und Gleitkommadarstellung.
  
  
  \par
  
Dies war ein ''kurzer'' Auszug aus der Geschichte. Sicherlich hat es
noch vieles mehr gegeben, aber dies soll ja ein Dokument zu MySQL
und nicht zur Computer-Geschichte werden.
  
  
  \par
  
Nähere Informationen finden Sie unter: \linebreak 

 http://www.konrad-zuse-computermuseum.de

 \linebreak 

 http://www.computergeschichte.de
	
  
 \section{Die Geschichte von MySQL} \label{d70e165}
        
  
  
  \par
  
Die Entstehung vom MySQL befand sich ähnlich wie bei 
Linus Torvalds (der finnische Erfinder von Linux) auch in
den nördlichen Breiten. Michael Widenius entwickelte 1979
für die schwedische Firma (nein nicht IKEA) TcX
ein Datenbankwerkzeug mit dem Namen UNIREG. Die zahlreichen
Weiterentwicklungen von UNIREG führten allerdings nicht zu 
den Bekanntheitsgrad wie ORACLE, SYBASE oder
INFORMIX.Dieses allerdings von TcX auch nicht
beabsichtigt war.
  
  Das offizielle Logo von MySQL
  
  \par
  
Als einige Jahre später durch das WWW (World Wide Web) der Bedarf an
dynamischen, datenbankgestützten Websites und Web-Applikationen
aufkam, erkannte die Firma TcX sehr schnell, dass in den 
Erfahrungen, die bei der Entwicklung und Weiterentwicklung von 
UNIREG gesammelt wurden, erhebliches Potential lag, um ein
System für die Anforderungen im WWW zu kreieren.Gleichzeitig
arbeitete David Hughes an seinem Mini SQL (mSQL), das insbesondere
durch die freie und kostenlose Nutzung große Verbreitung erlangen konnte und
in Sachen Geschwindigkeit so etwas wie eine Messlatte setzte. TcX
entschied, dass MySQL mindestens so schnell werden müsste wie 
mSQL, zusätzlich aber noch einige Funktionen mehr bieten sollte,
die der Konkurrent nicht abdeckte.
  
 \section{Bezugsquellen} \label{d70e245}
        
  
  
  \par
   
MySQL ist normalerweise bei jeder Linux-Distribution dabei.
Die Installation erfolgt dabei mit dem mitgelieferten
Installationswerkzeug meist problemlos (und einfacher).
Dennoch möchte ich Ihnen zeigen, wo Sie die Programme beziehen können,
da nicht alle eine Distribution haben, bzw. die Programme nicht bei
der Linux-Zusammenstellung dabei waren.
Wenn Sie Ihre Datenbanksoftware mal auf dem neuesten Stand haben
wollen, dann brauchen Sie die neueste Version von MySQL, um
das bestehende Updaten zu können.
  
  
  \par
  
Die erste Anlaufstelle ist die Website von MySQL AB Company.
Durch dieses Unternehmen wird MySQL weltweit vermarktet und
vertrieben. Sie erhalten auf deren Homepage jeden erdenklichen Support
bei Fragen rund um MySQL, die Lizenzsierung oder können sogar bei 
dem Projekt mitarbeiten. Die Präsenz von MySQL AB Company ist 
unter 
http://www.mysql.com erreichbar.
  
  
  \par
  
Durch die auf der Seite entsprechenden Links kommen Sie recht schnell
auf den zutreffenden Downloadbereich. Spätestens jetzt müssen Sie sich
für die Versionsnummer entscheiden, die Sie einsetzen möchten.
Fast wie bei jedem Programm (od. Projekt) gibt es auch hier
so genannte Versionsnummern und eine Attribute. Sie sollten unter
normalen Umständen die Attribute ''stable'' (stabil / für den produktiven Einsatz)
benutzen. Unter der stable Version handelt sich um eine Version die
keine weiteren, neuen Funktionen mehr bekommt. Es wird zwar weiterhin
an der Beseitigung einzelner Fehler gearbeitet, aber die Grundstruktur
wird nicht mehr verändert. Neue Versionen erhalten der Reihe nach die
Attribute alpha, beta, gamma und abschließend dann stable.
  
  
  \par
  
Beim Downloaden sollten Sie dabei beachten, einen Mirror in Ihrer
nähe zu wählen, da ansonsten der FTP-Server von MySQL 
sehr schnell überlastet wäre und der Download nur unnötig lange dauern 
würde.
  
 \section{Installation} \label{d70e292}
        
  
  
  \par
  
Je Distribution unterschiedlich stehen mehrere Programmpakete zur
Auswahl. Nachfolgend liste ich die wichtigsten auf.
Je nach Distribution stehen noch mehrere zur Verfügung.
  
  
    
    %table
    \begin{tabular}{|l|l|}
    \hline 
            
               
		\begin{minipage}{60mm}
              {\bf kmysql}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              ein grafischer Client für MySQL
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf mysql}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Das Datenbanksystem MySQL
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf mysql-client}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Die Client-Applikation für MySQL
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf mysql-bench}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              So genannte Benchmarktools zur Überprüfung der 
	    Performance des Datenbanksystems
	
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf mysql-devel}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Das Developer-Paket inklusive aller Include-Dateien
	    und Bibliotheken für Programmierer
	
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf mysql-shared}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Fehlermeldungen in verschiedenen Sprachen und weitere Libraries
		\end{minipage}
	      \\ \hline
    \end{tabular}
  
  
  \par
  
Wenn Sie die MySQL von Ihrem Paketmanager installieren können, 
tun Sie es. Für alle anderen erkläre ich kurz die ''zu-Fuß-Installation''.
Genauere Hinweise und Erklärung zu Installation entnehmen Sie bitte
dem Buch (selbstverständlich auch bei SelfLinux ) ''Installation''
  
  
  \par
  
Für das kompilieren brauchen Sie zu Anfang einige Variable.
Diese legen Sie mit dem Tool {\bf configure} fest.
Als Beispiel verwende ich folgende Variable: \linebreak 
{\bf MySQL-Verzeichnis = /usr/local/mysql} \linebreak 
{\bf Daten-Verzeichnis = /var/local/mysql} \linebreak 
  
  
  \par
  
Ich möchte ich nochmal darauf Hinweisen, dass sämtliche
Verzeichnisangaben als Beispiel zu sehen sind! Bitte passen Sie die
Parameter auf Ihre Bedürfnisse an. - Erspart Ihnen eine Menge Ärger...
  
  
  \par
  
Aus diesen Variablen entsteht folgendes configure-Kommando, daß Sie in
dem Verzeichnis ausführen, wo die Quell-Dateien liegen
(Standardmäßig wäre es das Verzeichnis:
{\bf /usr/scr/mysql-4.0.0} von diesem Beispiel gehe ich in 
folgenden Abschnitten aus.):
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
/configure --prefix=/usr/local/mysql --localstatedir=/var/local/mysql
    \end{scriptsize} \end{tt} \linebreak 
  
  
  \par
  
Nach dem betätigen der Taste ''Enter'' fängt auch schon die Festplatte
an zu rattern. Je nach Systemleistung kann sich der Prozess von ein
paar Sekunden bis zu etlichen Minuten hinziehen.
  
  
  \par
  
Nachdem {\bf configure} seine Arbeit erfolgreich zu Ende
gebracht hat, können Sie mit dem kompilieren beginnen. Viel Spaß...
  
  
  \par
  
Was? Sie wissen nicht wie das geht? Nagut ich will nun nicht so sein:
Die Kompilierung verläuft eigentlich wie bei jeder anderen
Installation auch:
  
  
    \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
make
     \end{scriptsize} \end{tt} \linebreak 
    \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
make install
     \end{scriptsize} \end{tt} \linebreak 
   	
   
  \par
  
Auch diese beiden Befehle sollten Sie - da ja ein Ergebnis erwünscht
ist - mit ''Enter'' abschließen.
Nun ist es an der Zeit, einen Kaffee zu trinken, denn die Aufgabe die
Sie Ihrem grauen Blechkasten aufgetragen haben wird sich ein wenig
hinziehen.
   
   
  \par
  
Der Kompiliervorgang hat sein Werk fertiggestellt? Gut.
MySQL legt automatisch eine MySQL-Start-Datei an, mit der Sie
den MySQL-Dämon starten können, und auch nun tun werden.
Wechseln Sie hierzu in das Verzeichnis:
{\bf usr/src/mysql-4.0.0/support-files/}(kann bei Ihnen Abweichen )
   
   
  \par
  
Um den MySQL-Dämonen zu starten müssen Sie die Start-Datei in Ihr
Verzeichnis mit des Auszuführenden Dateien kopieren
Standardmäßig ist das folgendes Verzeichnis:
{\bf /sbin/} oder {\bf /usr/sbin/}
   
   
  \par
  
Wenn eines von diesen Verzeichnissen nicht vorhanden sein sollte, dann
lesen Sie bitte in dem Handbuch Ihrer Distribution nach.
Der Kopiervorgang sieht dann so aus:
   
   
    \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
cp mysql.server /sbin/mysqld   (mit ''Enter'' bestätigen)
     \end{scriptsize} \end{tt} \linebreak 
   
   
  \par
  
Um damit Arbeiten zu können müssen Sie die Datei mit den
entsprechenden Zugriffsrechten versehen. Normalerweise sollte dies so
sein, daß der Besitzer der Datei alle Rechte hat, und der Rest nur
Lese- und Ausführrechte hat.
  
  
  \par
  
Geben Sie nun folgenden Befehl ein:
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
chmod 755 /sbin/mysqld
    \end{scriptsize} \end{tt} \linebreak 
  
  
  \par
  
Ihr Dämon ist nun fertig zum starten:
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqld start
    \end{scriptsize} \end{tt} \linebreak 
  
 
  \par
  
Damit Sie mit MySQL arbeiten können, benötigen Sie noch die
Standard-Datenbanken (was genau das ist, erkläre ich Ihnen später)
Zuerst wechseln Sie in das Verzeichnis:
{\bf  /usr/src/mysql-4.0.0/scripts/}
und geben anschließend diesen Befehl ein:
 
 
  \begin{tt} \begin{scriptsize} user@linux /usr/src/mysql-4.0.0/scripts/ \$ 
./mysql\_install\_db
   \end{scriptsize} \end{tt} \linebreak 
 
 
  \par
  
Nun werden die Datenbanken ''mysql'' und ''test'' angelegt
Ihr System ist nun bereit konfiguriert und administriert zu werden.
 
\section{Der erste Kontakt} \label{d70e502}
        
 
 
  \par
  
Um die zu erfahren ob der Server aktiv ist, geben sie bitte folgendes
Kommando in die Konsole ein:
 
 
  \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqladmin -u root -h localhost ping
   \end{scriptsize} \end{tt} \linebreak 
 
 
  \par
  
Nun sollten Sie die Meldung ''mysqld is alive'' erhalten.
Ist dem so, dann läuft Ihr Server. Andernfalls erhalten Sie eine
Hinweismeldung, daß die Verbindung nicht hergestellt werden konnte
und wie Sie eventuell Fehler beseitigen können.
Wenn Sie das ausprobieren möchten, kann müssen Sie den Datenbankserver
herunterfahren:
 
 
  \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqladmin -u root -h localhost shutdown
   \end{scriptsize} \end{tt} \linebreak 
 
 
  \par
  
Anschließend noch einmal den ''ping''-Befehl eingeben und Sie müssten
die entsprechende Fehlermeldung erhalten. Anschließend den Server bitte 
wieder mit dem Befehl {\bf mysqld start}
starten, damit wir damit arbeiten können.
 
 
  \par
  
Abschließend zu den Test's geben Sie noch folgenden Befehl ein:
 
 
  \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqladmin -u root -h localhost status
   \end{scriptsize} \end{tt} \linebreak 
 
 
  \par
  
Der Befehl liefert bei laufendem Server noch einige Informationen zum
System. Sie erkennen auf einfache Art, wie lange der Server schon
aktiv ist, wie viele Threads er gerade bearbeitet und all die anderen
Dinge.
 
 
  \par
  
Soweit der erste Kontakt mit dem MySQL-Datenbankserver.
Nun starten wir gemeinsam den Client mysql. Dazu geben Sie am Prompt
den Befehl
 
 
  \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysql -u root -h localhost
   \end{scriptsize} \end{tt} \linebreak 
 
 
  \par
  
ein und bestätigen mit ''Enter''. Eine Bildschirmmeldung begrüßt Sie
und dort, wo Ihr Eingabecursor blinkt, steht nun mysql\verb+>+
 
 
  \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysql -u root -h localhost
   \end{scriptsize} \end{tt} \linebreak 
  \begin{tt} \begin{scriptsize} Welcome to the MySQL monitor. Commands end with ; or $\backslash$g. \linebreak Your MySQL connection id is 2 to server version: 4.0.0 \linebreak  \linebreak Type 'help;' or '$\backslash$h' for help. Type '$\backslash$c' to clear the buffer \linebreak  \linebreak mysql\verb+>+ \_\end{scriptsize} \end{tt} \linebreak
 
 
  \par
  
Durch die Begrüßung wurde Ihnen mitgeteilt, daß alle Befehle mit einem
Semikolon abgeschlossen werden müssen. Wenn Sie sich einmal vertippen
sollten, machen Sie sich keinen Kopf, MySQL schmeißt lediglich eine
Fehlermeldung aus, sonst passiert aber nichts weiter. Gehen Sie nun
folgende Befehle durch, und verlassen den Clienten mit dem Befehl
{\bf quit} wieder.
 
 
  \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysql -u root -h localhost
   \end{scriptsize} \end{tt} \linebreak 
  \begin{tt} \begin{scriptsize} Welcome to the MySQL monitor. Commands end with ; or $\backslash$g. \linebreak Your MySQL connection id is 2 to server version: 4.0.0 \linebreak  \linebreak Type 'help;' or '$\backslash$h' for help. Type '$\backslash$c' to clear the buffer \linebreak  \linebreak mysql\verb+>+; USE mysql; \linebreak Database changed \linebreak mysql\verb+>+; SHOW TABLES; \linebreak +-----------------+ \linebreak | Tables\_in\_mysql | \linebreak +-----------------+ \linebreak | columns\_priv\verb+  +\verb+  +| \linebreak | db\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak | host\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak | tables\_priv\verb+  +\verb+  + | \linebreak | user\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak +-----------------+ \linebreak 5 rows in set\verb+  +\verb+<+0.00 sec\verb+>+ \linebreak  \linebreak mysql\verb+>+; quit; \linebreak Bye\end{scriptsize} \end{tt} \linebreak
		\begin{tt} \begin{scriptsize}  \linebreak user@linux \~{}/ \$ 
   \end{scriptsize} \end{tt} \linebreak 
 
 
  \par
  
Nun haben Sie bereits den Datenbankserver und den Client verwendet.
Zum Server ist grundsätzlich nicht mehr viel zusagen, als daß er
gestartet werden muß. Dies geschieht automatisch oder manuell, wie sie
das schon ausprobiert haben. Der Client hingegen wird Sie nun noch
eine Weile beschäftigen.
 
\section{Administration} \label{d70e594}
        
 
 
  \par
  
In diesem Kapitel erfahren Sie die wichtigsten Aufgaben eines
Administrators. Ich zeige Ihnen die wichtigsten Werkzeuge und
erläutere die ersten Schritte bei der Erstellung einer kleinen
Datenbank. Sie erfahren weiterhin die nötigen Grundlagen und die
Reihenfolge der notwendigen Arbeitsschritte.
Sie können sich mit dem System erst einmal vertraut machen,
obwohl Sie den wichtigsten Schritt vornehmen:
Die Absicherung des Datenbank-Management-System.
Dieser Abschnitt ist wichtig, damit ihr Datenbanksystem vor
unberechtigten Zugriff geschützt ist. Gerade bei Verwendung
im Netzwerk (oder im WWW) ist wichtig, daß Sie Ihr System
absichern.
 



 \subsection{Aufgaben eines Administrators} \label{d70e604}
        
  
  
  \par
  
Der Begriff Administrator hört sich immens wichtig an, aber anders
als bei vielen anderen Begriffen, trifft das in diesem speziellen
Fall sogar zu. Sie sind wie bei Linux selbst der Allmächtige!
Diese folgenden Aufgaben kommen dabei auf Sie zu:
  
  \begin{list}{*}{}
   
	\item Installation und Updates
   
	\item Systemkonfiguration
   
	\item Verwaltung von Benutzer- und Zugriffsrechten
   
	\item Pflege und Wartung des Systems
   
	\item Fehlerlokalisierung und Fehlerbehebung
   
	\item Durchführen von Datensicherungen
  \end{list}
  
  \par
  
Für diese Aufgaben ist alleine der Administrator zuständig und
nur er alleine hat den vollständigen Zugriff auf das System.
Das heißt, daß Sie mit dem Privileg an keinerlei Beschränkungen
gebunden sind und eine große Verantwortung haben.
Aus diesem Grunde sollten Sie mit den administrativen Rechten nur
arbeiten, wenn es wirklich nicht mehr anders geht.
  
  
  \par
  
Unter Linux/Unix ist der Benutzer ''root'' ein alter Bekannter.
root ist der Superuser, also gewissermaßen der Obermotz des
gesamten Systems und genau einen solchen finden Sie auch bei MySQL.
Dieser Kerl existiert bereits, nachdem sie MySQL auf die Platte
gezwängt haben, und Mutter Datenbank fackelt da nicht lange mit der
Aufgabenverteilung. Somit kann er kurz nach seiner Geburt schon die
folgenden Arbeiten verrichten:
  
  \begin{list}{*}{}
   
	\item Erstellen und Verwalten von Benutzerkonten sowie Passwortvergabe
   
	\item Anlage von neuen Datenbanken
   
	\item Löschen von vorhandenen Datenbanken
   
	\item Allgemeine Kontrollfunktionen
  \end{list}
  
  \par
  
Zu diesem Zweck stellt Ihnen MySQL ein Tool Namens ''mysqladmin'' zur
Verfügung. Die meisten der vorher aufgeführten Aufgaben verrichten
Sie mit diesem Programm. Der Start Ihrer Karriere als
MySQL-Administrator beginnt mit der Absicherung Ihres Systems.
  
 


 \subsection{Absichern des Systems} \label{d70e669}
        
  
  
  \par
  
Nach der Neuinstallation ist Ihr MySQL-System offen wie das
Brandenburger-Tor. Wenn Sie nun mit einem Netzwerk verbunden sind,
und auf Ihr Netzwerk auch von außerhalb zugegriffen werden kann
(Remote-Technik), dann haben Sie einen kritischen Punkt.
Theoretisch könnte Ihnen ein Fremder alle administrative Rechte
nehmen und Ihr System lahm legen.
Sie haben vorher schon einen Blick in die vorhandenen Tabellen
geworfen, diese Sie mit dem Benutzerkonto ''root''
OHNE Passwort aufrufen konnten.
Sämtliche Zugriffsrechte und Benutzerkonten werden in MySQL in
Form einer dafür angelegten Datenbank verwaltet.
In diesen Tabellen stehen die Benutzernamen, die Passwörter und
die zugeteilten Rechte an den vorhandenen Datenbanken und Tabellen.
Schreib- und Leserechte werden mit so genannten ''Flags'' erteilt.
  
  
  \par
  
MySQL verwaltet die Benutzerkonten sowie die Rechtevergabe in einer
Datenbank mit dem sinnigen Namen mysql. In dieser Datenbank
finden Sie die folgenden Tabellen:
  
  
    
    %table
    \begin{tabular}{|l|l|}
    \hline 
            
               
		\begin{minipage}{60mm}
              columns\_priv
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              In und mit der Tabelle vergeben Sie Zugriffsbeschränkungen auf einzelne
	    Tabellenspalten und die darauf anwendbaren Befehle
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              db
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              In dieser Tabelle werdenZugriffsrechte für die  gesamte Datenbank
	    gespeichert. Dort wird gespeichert, welcher Benutzer auf welche Datenbank
		Zugriff hat und welche weiteren Rechte er darauf hat. 
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              host
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Hier besteht die Möglichkeit einzelnen Rechnern, also
		 den Hosts, den Zugriff auf MySQL zu beschränken/verbieten.
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              user
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Hier werden die Benutzer mitsamt ihren Passwörtern eingetragen
		\end{minipage}
	      \\ \hline
    \end{tabular}
  
  
  \par
  
Mit dem Befehl mysqlshow bekommen Sie eine Liste aller verfügbaren
Datenbanken:
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqlshow -u root -h localhost
    \end{scriptsize} \end{tt} \linebreak 
   \begin{tt} \begin{scriptsize} +-----------+ \linebreak | Databases | \linebreak +-----------+ \linebreak | mysql\verb+  +\verb+  + | \linebreak | test\verb+  +\verb+  +\verb+  +| \linebreak +-----------+\end{scriptsize} \end{tt} \linebreak
  \begin{tt} \begin{scriptsize}  \linebreak user@linux \~{}/ \$ 
   \end{scriptsize} \end{tt} \linebreak 
  
  
  \par
  
Wenn Sie nun die Tabelle user aus der Datenbank mysql auf dem
Bildschirm ausgeben lassen würden, dann hätten Sie folgende Einträge:
  
  
   \begin{tt} \begin{scriptsize} +-----------+--------+------------------+ \linebreak | Host\verb+  +\verb+  +\verb+  +| User\verb+  + | Password\verb+  +\verb+  +\verb+  +\verb+  + | \linebreak +-----------+--------+------------------+ \linebreak | localhost | root\verb+  + |\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak | %\verb+  +\verb+  +\verb+  +\verb+  + |\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak | localhost |\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak | %\verb+  +\verb+  +\verb+  +\verb+  + | root\verb+  + |\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak | localhost | tbanus | 68d4f47c49a579c9 | \linebreak +-----------+--------+------------------+\end{scriptsize} \end{tt} \linebreak
   
  
  \par
  
Kurz zur Erklärung:
Mit Localhost ist der Rechner gemeint, auf dem auch der MySQL-Server
installiert wurde. Wahrscheinlich der, vor dem Sie sitzen.
Das %-Zeichen ist ein Platzhalter für beliebige andere Rechner
  
  
  \par
  
In der Spalte User finden Sie zwei Benutzernamen den root und
eventuell finden Sie wo der Benutzer tbanus steht Ihren Vornamen.
Dies Bedeutet, daß es auf dem System einen Benutzer mit dem Namen
tbanus gibt. Da der Benutzer nicht mit einem Prozentzeichen
aufgelistet wird, kann dieser MySQL nicht von einem anderen Rechner
aus bedienen.
  
  
  \par
  
Die vier Zeilen, die den Administrator root betreffen, ergeben
alle Kombinationen, die notwendig sind, damit Sie sich als root
immer auch ohne Passwort von jedem System aus zugreifen können.
Das ist äußerst brisant und wird nun schnellstens abgestellt.
  
  
  \par
  
Als ersten Schritt vergeben Sie dem root ein Passwort.
Danach löschen Sie alle Datensätze, in denen Prozentzeichen oder
leere Datenfelder vorkommen. Erst dann ist Ihr System abgesichert.
  
  
  \par
  
Sie müssen sich nun ein sicheres Kennwort überlegen.
Verwenden Sie dabei bitte nicht Ihr Kennwort von root bei Linux
oder eines der anderen Benutzerkennwörter.
Die folgende Befehlszeile geben Sie in Ihrer Console ein, wobei Sie
das Wort ''rootpasswort'' durch Ihr Passwort ersetzen
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqladmin -u root -h localhost password ''rootpasswort''
    \end{scriptsize} \end{tt} \linebreak 
  
  
  \par
  
Wenn nach der Bestätigung des Befehls nix passiert, dann hat es
geklappt. Wenn Sie nun als root auf eine Funktion zugreifen wollen und
nicht Ihr Passwort mit angeben {\bf mysql -u root} geschieht
folgendes:
  
  
   \begin{tt} \begin{scriptsize} ERROR 1045: Access denied for user: ...\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Verwenden Sie stattdessen {\bf mysql -u root -p}, werden Sie nach 
Ihrem Passwort gefragt. Nachdem Sie es eingegeben haben stehen Sie wieder im
Clienten.
  
  
  \par
  
Genau dort müssen Sie nun für folgende Schritte der Systemabsicherung
auch hin. Nun befolgen Sie bitte die folgenden Anweisungen:
  
  
  \par
  
Um die Datenbank MYSQL zu aktivieren, geben Sie den SQL-Befehl
{\bf USE mysql;} ein. Anschließend verwenden Sie den Befehl
{\bf SELECT Host, User, Password FROM user;}
und erhalten eine Liste von Datensätzen, die ähnlich der vorherigen
Tabelle aussehen sollte, nur das bei dem Benutzer root nun auch eine
Passwort-Kodierung aufgeführt ist.
  
  
  \par
  
Mit dem folgenden Befehl löschen Sie nun alle Datensätze, die zu einem
Teil leer sind oder ein Prozentzeichen besitzen \linebreak 
{\bf DELETE FROM user WHERE Host=''%'';} \linebreak 
{\bf DELETE FROM user WHERE User='''';} \linebreak 
  
  
  \par
  
Das Ergebnis können Sie sich mit einem erneuten Aufruf von dem
{\bf SELECT} Befehl anschauen.
Zu guter Letzt verlassen Sie den Client und starten den MySQL-Server
neu, damit die Änderungen übernommen werden.
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqladmin -u root -h localhost -p reload
    \end{scriptsize} \end{tt} \linebreak 
  
  
  \par
  
Dadurch wird das System neu initialisiert und ist ab sofort vor
anonymen Zugriff geschützt. Es können sich nun nur noch die Benutzer
root und in meinem Beispiel der Benutzer tbanus einloggen und damit
arbeiten, weil diese alleine Eingetragen sind.
  
  
  \par
  
Das folgende Listing zeigt Ihnen noch einmal alle Schritte der Reihe
nach, so daß Sie das Beispiel komplett nachvollziehen können:
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqladmin -u root -h localhost password ''rootpasswort''
    \end{scriptsize} \end{tt} \linebreak 
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysql -u root -h localhost -p
    \end{scriptsize} \end{tt} \linebreak 
   \begin{tt} \begin{scriptsize} Enter password: *******\linebreak\end{scriptsize} \end{tt} \linebreak
  
  
   \begin{tt} \begin{scriptsize} Welcome to the MySQL monitor. Commands end with ; or $\backslash$g \linebreak Your MySQL connection id is 12 to server version 4.0.0 \linebreak Type 'help;' or '$\backslash$h' for help. Type '$\backslash$c' to clear the buffer \linebreak  \linebreak mysql\verb+>+ USE mysql; \linebreak Database changed \linebreak mysql\verb+>+ SELECT Host, User, Password FROM user; \linebreak +-----------+--------+------------------+ \linebreak | Host\verb+  +\verb+  +\verb+  +| User\verb+  + | Password\verb+  +\verb+  +\verb+  +\verb+  + | \linebreak +-----------+--------+------------------+ \linebreak | localhost | root\verb+  + | 111e97222dab1dd7 | \linebreak | %\verb+  +\verb+  +\verb+  +\verb+  + |\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak | localhost |\verb+  +\verb+  +\verb+  +\verb+  +|\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak | %\verb+  +\verb+  +\verb+  +\verb+  + | root\verb+  + |\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak | localhost | tbanus | 68d4f47c49a579c9 | \linebreak +-----------+--------+------------------+ \linebreak 5 rows in set (0.03 sec) \linebreak  \linebreak mysql\verb+>+ DELETE FROM user WHERE Host=''%''; \linebreak Query OK, 2 rows affected (0,57 sec) \linebreak  \linebreak mysql\verb+>+ DELETE FROM user WHERE User=''''; \linebreak Query OK, 1 row affected (0,36 sec) \linebreak  \linebreak mysql\verb+>+ SELECT Host, User, Password FROM user; \linebreak +----------+---------+------------------+ \linebreak |Host\verb+  +\verb+  +\verb+  +| User\verb+  +\verb+  +| Password\verb+  +\verb+  +\verb+  +\verb+  + | \linebreak +----------+---------+------------------+ \linebreak |localhost | root\verb+  +\verb+  +| 111e97222dab1dd7 | \linebreak |localhost | michael | 68d4f47c49a579c9 | \linebreak +----------+---------+------------------+ \linebreak 2 rows in set (0.01 sec) \linebreak  \linebreak mysql\verb+>+ quit \linebreak Bye\end{scriptsize} \end{tt} \linebreak
   \begin{tt} \begin{scriptsize}  \linebreak user@linux \~{}/ \$ 
mysqladmin -u root -h localhost -p reload
    \end{scriptsize} \end{tt} \linebreak 
   \begin{tt} \begin{scriptsize} Enter password: *******\linebreak\end{scriptsize} \end{tt} \linebreak
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
    \end{scriptsize} \end{tt} \linebreak 
  
 
\section{Die Datenbank-Planung} \label{d70e877}
        
 
 
  \par
  
Auf den Punkt Datenbank-Planung gehe ich in diesem Dokument nicht
näher ein, aber es wird in den späteren Releasen von Selflinux
nachgeholt;  Versprochen ;)
Damit dennoch Ihre Datenbanken planen können,
können Sie der einfachheitshalber auf folgende Tools zurückgreifen:
Die letzten 2 Einträge sind Mysql-Frontends ( Grafische Oberflächen
zur Verwaltung und Konfiguration von MySQL )
 
 
    
    %table
    \begin{tabular}{|}
    \hline\hline Programm &\hline System &\hline Version &\hline Preis &\hline Bezugsquelle &\\ \hline 
            
               
		\begin{minipage}{60mm}
               ERwin 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               Win/Linux 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               Demoversion 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               unbekannt 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               http://www.cai.com 
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
               DeZign 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               Windows 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               Demoversion 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               130 US\$ 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               http://www.datanamic.com/dezign
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
               MySQLFront 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               Windows 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               Freeware 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               kostenlos 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               http://www.anse.de 
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
               KMySql 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               Linux 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               Freeware 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               kostenlos 
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
               bei den Distributionen dabei. 
		\end{minipage}
	      \\ \hline
    \end{tabular}
  
\section{Die Datenbank} \label{d70e989}
        
 
 
  \par
  
Gut nun haben Sie MySQL erfolgreich installiert und konfiguriert.
Prima!!!
Aber was bringt Ihnen das beste und sicherste Datenbank-System, wenn
Sie nix damit anfangen können? In diesem Kapitel werde ich Ihnen Zeigen,
wie Sie eine Datenbank anlegen, verwalten, zuweisen und löschen können.
 

 \subsection{Eine Datenbank erzeugen} \label{d70e999}
        
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ CREATE DATABASE [IF NOT EXISTS] db\_name;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Mit diesem Kommando erstellen Sie eine neue Datenbank.
Falls diese schon vorhanden sein sollte, erhalten Sie eine
entsprechende Fehlermeldung. Wenn Sie keine Fehlermeldung erhalten
wollen, dann  sollten Sie die Option in den Eckigen Klammern
verwenden. Sie können auch alternativ mittels mysqladmin unter der
Eingabeaufforderung eine neue Datenbank anlegen.
  
 
 
 \subsection{Datenbanken löschen} \label{d70e1016}
        
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ DROP DATABASE [IF EXISTS] db\_name;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Auch hier können Sie mittels der Option {\bf IF EXISTS}
die Fehlermeldung einer nicht vorhandenen Datenbank verbergen lassen.
  
  
  \par
   
Vorsicht: \linebreak 
Mit DROP löschen Sie alle Tabellen einer Datenbank! Es gibt keine
Möglichkeit die Daten wieder zurückzuholen!
  
 
 
 \subsection{Datenbankwechsel} \label{d70e1041}
        
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ USE db\_name\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Wenn Sie mit einer Datenbank arbeiten wollen, müssen Sie diese
zunächst aktivieren. Wenn sie während Ihrer Arbeit die Datenbanken
wechseln wollen, können sie mit dem Befehl {\bf USE} genau das 
erreichen.
  
 
\section{Das Backup} \label{d70e1065}
        
 
 
  \par
  
Die wichtigste Aufgabe eines Administrators ist die Sicherung der
Datenbanken. Der Befehl mysqldump erzeugt eine Textdatei, in der
unter anderem typische MySQL-Kommandos gespeichert werden,
die eine Wiederherstellung der Datenbanken ermöglichen.
 

 \subsection{Sichern der Daten} \label{d70e1075}
        
  
  
   \begin{tt} \begin{scriptsize}  \linebreak shell\verb+>+ mysqldump [OPTIONS] database [tables] \linebreak oder\verb+  + mysqldump [OPTIONS] --database [OPTIONS] DB1 [DB2 DB3...] \linebreak oder\verb+  + mysqldump [OPTIONS] --all-databases [OPTIONS] \linebreak \verb+  +\end{scriptsize} \end{tt} \linebreak
  
  
  \par
   
Die vielen Optionen die mysqldump Ihnen anbietet erhalten Sie
wenn Sie den Befehl mit dem Parameter --help aufrufen.
Für den Anfang reicht es, wenn Sie den Parameter --opt mit anhängen.
Diese Option enthält alle nötigen Einstellungen, die bei einer
Sicherung berücksichtigt werden müssen.
Diesen Parameter sollten Sie immer setzen wenn Sie eine
vollständige Sicherung durchführen wollen.
  
  
  \par
  
Beispiel-Befehl:
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqldump -u root -p --opt --all-databases \verb+>+ backup.sql
    \end{scriptsize} \end{tt} \linebreak 
  
  
  \par
  
In diesem Fall bewirkt die Option {\bf --opt} einen read lock 
für alleTabellen! Das heisst, daß sie für eine kurzen Augenblick für alle
Zugriffe gesperrt werden. Die Backup-Datei wird dabei möglichst klein
gehalten und es werden Kommandos eingefügt, die bei einer
Wiederherstellung eventuell vorhanden Tabellen zuerst löschen, um sie
dann neu erzeugen zu können. Während dieser Operation ist die
komplette Datenbank auch blockiert.
  
 

 \subsection{Wiederherstellen der Daten} \label{d70e1107}
        
  
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
  mysql -u root -p \verb+>+ backup.sql
    \end{scriptsize} \end{tt} \linebreak 
  
  
  \par
  
Mit diesem Befehl wird ein Restore (Wiederherstellung) durchgeführt
    
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
  mysqldump -u root --password=testpassword --opt gelddatenbank \verb+<+ save\_gdb.sql
    \end{scriptsize} \end{tt} \linebreak 
  
  
  \par
  
Damit können Sie einen bestimmten Datensatz wiederherstellen.
  
  
\section{Tabellen (Relationen)} \label{d70e1137}
        
 
 
  \par
  
Tabellen speichern Informationen.
Wie Sie aber die Tabellen erstellen, löschen und verändern, zeige ich
Ihnen in den folgenden Kapiteln
  

 \subsection{Tabellen erzeugen} \label{d70e1147}
        
  
  
  \par
  
Es kommt gleich eine mordsmäßige Syntax-Definition. Bitte nicht
erschrecken! Der CREATE-Befehl ist mit Abstand der aufwändigste
Befehl, den MySQL zu bieten hat. Das ganze könnte nun 
ein wenig''trocken'' werden.
  
  
  \subsubsection{Syntax-Definition} \label{d70e1160}
        
   
   
    \begin{tt} \begin{scriptsize} mysql\verb+>+ CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl\_name \linebreak \verb+  +\verb+  +\verb+  + [(erstellungs-definition,...)] [tabellen\_optionen] \linebreak \verb+  +\verb+  +\verb+  + [select\_statement]\end{scriptsize} \end{tt} \linebreak
    
   
  \par
  
{\bf Erstellungs-Definition:}
   
   
    \begin{tt} \begin{scriptsize} spaltenname datentyp [NOT NULL | NULL] [DEFAULT default\_value] \linebreak [AUTO\_INCREMENT] [PRIMARY KEY] [reference\_definition] \linebreak \verb+  +oder\verb+  +\verb+  +PRIMARY KEY (index\_col\_name,...) \linebreak \verb+  +oder\verb+  +\verb+  +KEY [index\_name] (index\_col\_name,...) \linebreak \verb+  +oder\verb+  +\verb+  +INDEX [index\_name] (index\_col\_name,...) \linebreak \verb+  +oder\verb+  +\verb+  +UNIQUE [INDEX] [index\_name] (index\_col\_name,...) \linebreak \verb+  +oder\verb+  +\verb+  +FULLTEXT [INDEX] [index\_name] (index\_col\_name,...) \linebreak \verb+  +oder\verb+  +\verb+  +[CONSTRAINT symbol] FOREIGN KEY index\_name \linebreak \verb+  +\verb+  +\verb+  +\verb+  +\verb+  +(index\_col\_name,...)[reference\_definition] \linebreak \verb+  +oder\verb+  +\verb+  +CHECK (expr)\end{scriptsize} \end{tt} \linebreak
   
   
			
  \par
  
{\bf index\_col\_name:}
   
   
    \begin{tt} \begin{scriptsize} \verb+  +col\_name [(length)]\end{scriptsize} \end{tt} \linebreak
   
   
  \par
  
{\bf reference\_definition:}
   
   
    \begin{tt} \begin{scriptsize} \verb+  +\verb+  +\verb+  + REFERENCES tbl\_name [(index\_col\_name,...)] \linebreak \verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +[MATCH FULL | MATCH PARTIAL] \linebreak 		\verb+  +[ON DELETE reverence\_option] \linebreak 		\verb+  +[ON UPDATE reverence\_option] \linebreak \end{scriptsize} \end{tt} \linebreak
   
   
  \par
  
{\bf reference\_option:}
   
   
    \begin{tt} \begin{scriptsize} \verb+  +\verb+  +\verb+  + RESTRICT | CASCADE | SET NULL | NO AKTION | SET DEFAULT\end{scriptsize} \end{tt} \linebreak
   
   
  \par
  
{\bf tabellen\_optionen:}
   
   
    \begin{tt} \begin{scriptsize} TYPE = {BDB | HEAP | ISAM | InnDB | MERGE | MRG\_MYISAM | MYSISAM } \linebreak \verb+  +oder\verb+  +AUTO\_INCREMENT = \# \linebreak \verb+  +oder\verb+  +AVG\_ROW\_LENGTH = \# \linebreak \verb+  +oder\verb+  +CHECKSUM = {0 | 1} \linebreak \verb+  +oder\verb+  +COMMENT = ''string'' \linebreak \verb+  +oder\verb+  +MAX\_ROWS = \# \linebreak \verb+  +oder\verb+  +MIN\_ROWS = \# \linebreak \verb+  +oder\verb+  +PACK\_KEYS = {0 | 1 | DEFAULT} \linebreak \verb+  +oder\verb+  +PASSWORD = ''string'' \linebreak \verb+  +oder\verb+  +DELAY\_KEY\_WRITE = {0 | 1} \linebreak \verb+  +oder\verb+  +ROW\_FORMAT = { default | dynamic | fixed | compressed } \linebreak \verb+  +oder\verb+  +RAID\_TYPE = {1 | STRIPED | RAIDO} RAID\_CHUNKS=\# \linebreak \verb+  +\verb+  +\verb+  +\verb+  +RAID\_CHUNKSIZE=\# \linebreak \verb+  +oder\verb+  +UNION = {table\_name.[table\_name...]) \linebreak \verb+  +oder\verb+  +INSERT\_METHOD = { NO | FIRST | LAST } \linebreak \verb+  +oder\verb+  +DATA DIRECTORY=''directory'' \linebreak \verb+  +oder\verb+  +INDEX DIRECTORY=''directory'' \linebreak  \linebreak select\_statement: \linebreak \verb+  +[INGORE | REPLACE] SELECT ...\verb+  +(Irgendein korrektes SELECT-Kommando \linebreak \verb+  +ist zulässig)\end{scriptsize} \end{tt} \linebreak
   
  

  \subsubsection{Anwendungsbeispiel} \label{d70e1234}
        
   
   
  \par
  
Als kleines Beispiel für ich Ihnen vor, wie Sie eine Adressentabelle
erstellen können.
Folgende Anforderungen soll diese mindestens erfüllen:
   
   \begin{list}{*}{}
    
	\item 
Es gibt eine Kundennummer die als Primärschlüssel definiert wird.
Die Datenbank soll maximal 100 Kunden aufnehmen und automatisch
mittels des Primärschlüssels hochgezählt werden.
Es gibt keine negativen Schlüssel.
    
    
	\item 
Es dürfen keine Datensätze ohne Name, Vorname, PLZ und Ort angelegt
werden.
    
    
	\item 
Die Postleitzahl ist ein Zahlenwert und darf nicht negativ sein
    
    
	\item 
Es soll nach dem Namen und Ort gesucht werden.
Deswegen sollen diese mit einem Index verknüpft werden
    
   \end{list}
   
    \begin{tt} \begin{scriptsize} mysql\verb+>+ CREATE TABLE kunden( \linebreak \verb+  +\verb+  +-\verb+>+ kunden\_nr TINYINT UNSIGNED NOT NULL AUTO\_INCREMENT, \linebreak \verb+  +\verb+  +-\verb+>+ name CHAR(30) NOT NULL, \linebreak \verb+  +\verb+  +-\verb+>+ vorname CHAR (30) NOT NULL, \linebreak \verb+  +\verb+  +-\verb+>+ strasse CHAR (30), \linebreak \verb+  +\verb+  +-\verb+>+ plz INT(5) UNSIGNED NOT NULL, \linebreak \verb+  +\verb+  +-\verb+>+ ort CHAR (30) NOT NULL, \linebreak \verb+  +\verb+  +-\verb+>+ PRIMARY KEY(kunden\_nr), \linebreak \verb+  +\verb+  +-\verb+>+ INDEX(name, ort); \linebreak  \linebreak Query OK, 0 rows affected (0.00 sec) \linebreak  \linebreak mysql\verb+>+ SHOW TABLES; \linebreak +-------------------------+ \linebreak | Tables\_in\_testdatenbank | \linebreak +-------------------------+ \linebreak | kunden\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +\verb+  +| \linebreak +-------------------------+ \linebreak 1 row in set (0.00 sec) \linebreak  \linebreak mysql\verb+>+\end{scriptsize} \end{tt} \linebreak
   
   
  \par
  
Mit dem Befehl {\bf SHOW TABLES} können Sie nachsehen, ob die 
Tabelle angelegt wurde.
   
   
  \par
   
Ein weiterer sehr interessanter Befehl ist {\bf EXPLAIN}. Mit 
diesem Kommando können sie die Tabellendefinition überprüfen.
   
    
 

 \subsection{Tabellen (Relationen) löschen} \label{d70e1279}
        
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ DROP TABLE [IF EXISTS] tbl\_name [, tbl\_name, ...]\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Alles was kommt muß auch mal wieder gehen. Manche netten Nachbarn
nehmen den Zeitpunkt zwar nicht immer so genau, aber bei einer
Datenbank  bestimmen Sie, wann es Zeit ist, zu verschwinden.
  
  
  \par
  
Bei MySQL ist es nicht wie bei anderen Programmen, bei denen Sie 75
Mal gefragt werden, ob Sie sich auch wirklich sicher sind! MySQL
löscht nach bestätigen der Eingabetaste gnadenlos.
  
  
  \par
  
Aus diesem Grunde ist es ratsam, bevor Sie mit der Arbeit an
einer Datenbank anfangen eine Sicherheitskopie anzulegen.
(Wie, wird in den vorangegangenen Kapiteln beschrieben)
  
 

 \subsection{Indexierung} \label{d70e1308}
        
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ CREATE [UNIQUE|FULLTEXT] INDEX index\_name ON tbl\_name \linebreak \verb+  +\verb+  +\verb+  + (spalten\_name{(länge)]....];\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Sie legen normalerweise die Indizes bereist bei Tabellenerstellung
fest. Hin und Wieder kommt es aber vor, daß Sie einen weiteren Index
brauchen. \linebreak 
Löschen können Sie einen Index mittels des Befehls
{\bf DROP INDEX}.
  
 

 \subsection{Tabellen verändern} \label{d70e1330}
        
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE tbl\_name tabellen\_optionen;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Wenn Sie bei einer bestehenden Tabelle eine Spalte hinzufügen wollen,
brauchen Sie nicht eine neue Tabelle erzeugen und diese verknüpfen.
Sie können mittels des Befehls {\bf ALTER} Veränderungen an
bestehenden Tabellen vornehmen.
  
  
  \par
  
Folgen zeige ich Ihnen einige Syntax, an denen Sie sehen können,
was {\bf ALTER} alles kann.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE kunden ADD email CHAR(30);\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Damit legen erzeugen Sie eine neue Spalte namens Email.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE kunden DROP email;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Keine gute Idee? Dann löschen Sie doch einfach die Spalte Email
wieder...
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE kunden DROP INDEX name;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Damit löschen Sie den Index der bei dem Nachnamen angelegt wurde.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE kunden DROP PRIMERY KEY;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Somit wird der Primärschlüssel der auf die Kundennummer gelegt war,
gelöscht.

  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE kunden ADD PRIMERY KEY (kunden\_nr);\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
War ein Fehler? Dann erstellen Sie ihn einfach wieder.

  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE kunden MODIFY ort CHAR(50);\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Mit der MODIFY-Option ändern Sie den Datentyp. In dem Beispiel wir die
Zeichenlänge bei der Spalte ort von 30 auf 50 angehoben.

  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE kunden CHANGE ort wohnort CHAR(50);\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Hiermit können Sie nicht nur den Datentyp sondern auch gleich die
Bezeichnung ändern

  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE kunden RENAME kunden;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Sie können sogar ganze Tabellen umbenennen. Aber achten Sie bitte auf
die von Ihnen gesetzten Beziehungen! Diese ändert MySQL leider nicht
automatisch.

  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ ALTER TABLE kunden ALTER plz SET DEFAULT 85253;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Mit dieser Option können Sie der Postleitzahl einen Vorgabewert von
85253 zuweisen.
  
 
\section{Das Arbeiten mit dem Datensätzen} \label{d70e1444}
        
 
 
  \par
   
Nun haben Sie gelernt wie sie Datenbanken und Tabellen erstellen,
löschen und verändern können. Da dies aber nicht der einzige Sinn und
Zweck von MySQL ist, sehen Sie jetzt wie sie diese Datensätze auch
noch füllen, löschen und ändern.
 

 \subsection{Das Füllen} \label{d70e1457}
        
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ INSERT [LOW\_PRIORITY | DELAYED] [IGNORE] [INTO] tbl\_name \linebreak \verb+  +\verb+  +\verb+  + [(spaltenname]...)] VALUES (datum1,...),(...).....;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
oder:
  
  
   \begin{tt} \begin{scriptsize}  mysql\verb+>+ INSERT [LOW\_PRIORITY | DELAYED] [IGNORE] [INTO] tbl\_name \linebreak \verb+  +\verb+  +\verb+  + [(spaltenname]...)] SELECT ...;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
oder:
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ INSERT [LOW\_PRIORITY | DELAYED] [IGNORE] [INTO] tbl\_name \linebreak \verb+  +\verb+  +\verb+  + SET spaltenname1=datum1, spaltenname2=datum2, ....;\end{scriptsize} \end{tt} \linebreak
   
  
  \par
  
Das INSERT-Kommando dient dazu, (wie sie bereits ahnen)
neue Daten in die Tabelle aufzunehmen.
Sie können zwischen den drei Varianten wählen. Aber der wohl am
meisten verwendete Befehl wird der erste sein. Mit diesem Befehl
können Sie die Daten einfügen die Sie gerne möchten.
An dem folgenden Beispiel möchte ich Ihnen gerne zeigen, wie das in
etwa aussieht:
(Ich beziehe mich hierbei wieder auf die kunden-beispiels-Datenbank)
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ INSERT INTO kunden (name, vorname, strasse, plz, ort) VALUES \linebreak \verb+  +\verb+  +-\verb+>+ ('Sommerfeld', 'Frank', 'Waldweg 12', 85221, 'Dachau');\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Die Kundennummer wird (da ja mit der Option auto\_increment belegt)
automatisch von 1 weg hochgezählt.
  
  
  \par
  
Möchten Sie z.B. mehrere Datensätze auf einmal eingeben, dann
verwenden Sie einfach mehrere Klammerpaare die durch ein Komma
getrennt sind:
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ INSERT INTO kunden (name, vorname, strasse, plz, ort) VALUES \linebreak \verb+  +\verb+  +-\verb+>+ ('Brunninger', 'Jasmin', 'Giechstrasse 1', 81249, 'Muenchen'), \linebreak \verb+  +\verb+  +-\verb+>+ ('Stadler', 'Matthias', 'Glonntalstrasse 15', 85253, 'Erdweg'), \linebreak \verb+  +\verb+  +-\verb+>+ ('Sistig', 'Marianne', 'Linztal 1', 82149, 'Olching');\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Die zweite Methode ist die Option SELECT.
Meist werden SELECT-Befehle mittels eines MySQL-Frontends ausgeführt.
Diese können in einer Internetseite eingebunden sein. Dabei wird ein
Script die Tipparbeit für Sie abnehmen.
Aber um Ihnen zu zeigen, wie Sie auch ''händisch'' damit arbeiten
können, zeige ich Ihnen 2 Beispiele wie Sie das bewerkstelligen:
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT * FROM kunden;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
damit erhalten Sie (das ganze ist nun sehr unübersichtlich) alle
Spalten und Datensätze der Tabelle kunden aufgelistet.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT kunden\_nr, vorname, name, ort FROM kunden;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Sie können auch einzelne Spalten auswählen!
  
 

 \subsection{Die Select-Anweisung} \label{d70e1531}
        
  
  
  \par
  
Sie erhalten hier wiederum den Syntax von dem Befehl {\bf SELECT}.
Ich werde Ihnen das Kommando anschließend anhand von Beispielen
erklären und zeigen was es für Möglichkeiten gibt.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT [STRAIGHT\_JOIN] [SQL\_SMALL\_RESULTS] [SQL\_BIG\_RESULTS] \linebreak \verb+  +\verb+  +\verb+  + [SQL\_BUFFER\_RESULTS] \linebreak \verb+  +\verb+  +\verb+  + [HIGH\_PRIORITY] \linebreak \verb+  +\verb+  +\verb+  + [DISTINCT | DISTINCTROW | ALL] \linebreak  \linebreak \verb+  +\verb+  +select\_ausdruck.... \linebreak \verb+  +\verb+  +[INTO {OUTFILE | DUMPFILE} 'datei\_name' export\_optionen] \linebreak \verb+  +\verb+  +[FROM tbl\_name \linebreak \verb+  +\verb+  +\verb+  +\verb+  +[WHERE where\_definitionen] \linebreak 	[GROUP BY {unsigned\_integer | spalten\_name | formula} [ASC | DESC], \linebreak  ...] \linebreak 	[HAVING where\_definition] \linebreak 	[ORDER BY {unsigned\_integer | spalten\_name | formula} [ASC | DESC], \linebreak  ...] \linebreak 	[LIMIT [offset,] zeilen] \linebreak 	[PROCEDURE prozedur\_name] \linebreak 	[FOR UPDATE | LOCK IN SHARE MODE]]\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Die Ausgabe von {\bf SELECT} erzeugt immer eine Tabelle.
Der wohl simpelste Befehl lautet {\bf SELECT 1;}.
  
  
  \par
  
Ich führe Ihnen nun einige Beispiele auf, die Ihnen die Möglichkeiten
von {\bf SELECT} zeigen sollen.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT kunden\_nr AS Kundennummer, vorname AS Vorname, name AS \linebreak \verb+  +\verb+  +\verb+  + Name, -\verb+>+ ort AS Ort FROM kunden;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Damit vergeben Sie für die vorhanden Spaltenbezeichnungen, schönere
und einprägsamere Namen.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT COUNT(kunden\_nr) FROM kunden;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Mit {\bf COUNT} können Sie die Anzahl der Datensätze anzeigen lassen.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT * FROM kunden LIMIT 0, 5; \linebreak \end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Ein tolles feature ist LIMIT. Sie können so die Anzahl der zu
anzeigenden, Datensätze auf eine bestimmte Anzahl (hier 5) beschränken
lassen. In diesem Beispiel heisst es: Zeige mir maximal 5 Treffer ab
den ersten Datensatz. Folgend wäre es dann: LIMIT 5,5 LIMIT 10,5
usw. somit erhalten Sie immer die nächsten 5 Sätze auf Ihrem
Bildschirm. Verwendet wird diese Anweisung meist bei Suchmaschinen.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT auftrags\_nr, wert AS Netto, wert*1.16 AS Brutto FROM \linebreak auftraege;\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Sie können auch mittels SELECT Berechnungen ausgeben lassen.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT vorname, name, strasse, plz, ort FROM kunden WHERE \linebreak \verb+  +\verb+  +-\verb+>+ ort = 'Dachau';\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Wer wohnt eigentlich alles von den Kunden in Dachau?
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT vorname, name, strasse, plz, ort FROM kunden WHERE \linebreak \verb+  +\verb+  +-\verb+>+ name LIKE 'Sch%';\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Hier werden alle Nachnahmen mit Sch..... aufgelistet.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ SELECT SUM(wert) FROM auftraege WHERE \linebreak \verb+  +\verb+  +-\verb+>+ kunden\_nr = 45350\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Lassen Sie MySQL einfach mal für Sie rechnen
  
 

 \subsection{Das löschen von Datensätzen} \label{d70e1632}
        
  
  
  \par
  
Es soll auch mal vorkommen, daß Sie Datensätze löschen müssen.
Dies ist eigentlich weiter nicht tragisch.
Sie erhalten vom mir wieder einen Syntax und ein Beispiel dazu.
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ DELETE [LOW\_PRIORITY | QUICK] FROM tbl\_name \linebreak \verb+  +\verb+  +\verb+  +\verb+  +\verb+  + [WHERE where\_definition] \linebreak 	\verb+  + [ORDER BY ...] \linebreak 	\verb+  + [LIMIT rows]\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
{\bf Beispiel:}
  
  
   \begin{tt} \begin{scriptsize} mysql\verb+>+ DELETE FROM auftraege WHERE kunden\_nr = 1000\end{scriptsize} \end{tt} \linebreak
  
  
  \par
  
Damit löschen Sie den angegebenen Datensatz...
Viel Erfolg ;)
  
 
\section{Die Zusammenfassung der administrativen Befehlsketten} \label{d70e1668}
        
 
 
  \par
  
{\bf Passwortvergabe für den Benutzer root:}
 
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysqladmin -u root -h localhost password rootpasswort
    \end{scriptsize} \end{tt} \linebreak 
  
 
  \par
  
MySQL Absichern:
 
  
   \begin{tt} \begin{scriptsize} user@linux \~{}/ \$ 
mysql -u root -p
    \end{scriptsize} \end{tt} \linebreak 
  \begin{tt} \begin{scriptsize} 	Enter password: *******\linebreak\end{scriptsize} \end{tt} \linebreak
		\begin{tt} \begin{scriptsize} 	Welcome to the MySQL monitor, ... \linebreak  \linebreak 	mysql\verb+>+ USE mysql; \linebreak 	Database changed \linebreak  \linebreak 	mysql\verb+>+ DELETE FROM user WHERE users='root' AND host='%'; \linebreak 	Query OK, 1 rows affected (0,00 sec) \linebreak  \linebreak 	mysql\verb+>+ FLUSH PRIVILEGES; \linebreak 	Query OK, 0 rows affected (0,00 sec) \linebreak  \linebreak 	mysql\verb+>+ quit\end{scriptsize} \end{tt} \linebreak
  
 
  \par
  
ANMERKUNG: Mit FLUSH PRIVILEGES machen Sie die Änderungen
wirksam. Sie könnten genauso den Befehl mysqladmin
mit dem Parameter -reload benutzen.
 
 
  \par
  
Für den Standard-Benutzer die uneingeschränkten Rechte entziehen
 
 
  \begin{tt} \begin{scriptsize} user@linux ¯/ \$ 
mysql -u root -p
   \end{scriptsize} \end{tt} \linebreak 
  \begin{tt} \begin{scriptsize} 	Enter password: *******\linebreak\end{scriptsize} \end{tt} \linebreak
		\begin{tt} \begin{scriptsize} 	Welcome to the MySQL monitor, ... \linebreak  \linebreak 	mysql\verb+>+ USE mysql; \linebreak 	Database changed \linebreak  \linebreak 	mysql\verb+>+ REVOKE ALL ON *.* FROM ''@localhost; \linebreak 	Query OK, 1 rows affected (0,00 sec) \linebreak  \linebreak 	mysql\verb+>+ REVOKE GRANT OPTION ON *.* FROM ''@localhost; \linebreak  \linebreak 	mysql\verb+>+ FLUSH PRIVILEGES; \linebreak 	Query OK, 0 rows affected (0,00 sec) \linebreak  \linebreak 	mysql\verb+>+ quit\end{scriptsize} \end{tt} \linebreak
  
 
  \par
  
ANMERKUNG: Wenn Sie die Absicherung bereits durchgeführt haben,
dann wird Ihnen MySQL mitteilen, daß es keinen User gibt, dem
Sie die Rechte entziehen können.
 
 
  \par
  
Aktionen ohne Kennwort verbieten:
 
 
  \begin{tt} \begin{scriptsize} user@linux ¯/ \$ 
mysql -u root -p
   \end{scriptsize} \end{tt} \linebreak 
  \begin{tt} \begin{scriptsize} 	Enter password: *******\linebreak\end{scriptsize} \end{tt} \linebreak
		\begin{tt} \begin{scriptsize} 	Welcome to the MySQL monitor, ... \linebreak  \linebreak 	mysql\verb+>+ USE mysql; \linebreak 	Database changed \linebreak  \linebreak 	mysql\verb+>+ DELETE FROM user WHERE user='' AND host='localhost'; \linebreak 	Query OK, 1 rows affected (0,00 sec) \linebreak  \linebreak 	mysql\verb+>+ DELETE FROM user WHERE user='' AND host='%'; \linebreak 	Query OK, 1 rows affected (0,00 sec) \linebreak  \linebreak 	mysql\verb+>+ FLUSH PRIVILEGES; \linebreak 	Ouery OK, 0 rows affected (0,00 sec) \linebreak  \linebreak 	mysql\verb+>+ quit\end{scriptsize} \end{tt} \linebreak
 
\section{MySQL Sprachreferenz} \label{d70e1742}
        
 

 \subsection{Datentypen} \label{d70e1749}
        
  
  
    
    %table
    \begin{tabular}{|l|l|}
    \hline 
            
               
		\begin{minipage}{60mm}
              Bezeichner
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erklärung
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TINYINT[(x)]}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              1 Byte
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf SMALLINT[(x)]}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              2 Byte
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf MEDIUMINT[(x)]}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              3 Byte
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf INT[(x)]}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              4 Byte
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf BIGINT[(x)]}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              8 Byte
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf FLOAT[(x[, y])]}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              4 Byte
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DOUBLE[(x[, y])]}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              8 Byte
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DECIMAL(x, y)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
                x Byte bei MySQL\verb+<+3.23,x+2 Byte bei \verb+>+=3.23
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DATE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Datums-Format JJJJ-MM-TT
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TIME}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Zeit-Format hh:mm:ss
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DATETIME}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Kombination JJJJ-MM-TT hh:mm:ss
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TIMESTAMP}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Zeitstempel JJJMMTThhmmss
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf YEAR}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Vierstellige Jahresangabe JJJJ
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CHAR(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Zeichenkette mit fester Länge x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf VARCHAR(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Zeichenkette mit variabler Länge x (x+1 Byte)
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TINYTEXT}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Zeichenkette mit variabler Länge 1 (1+1 Byte)
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TINYBLOB}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Binärdaten mit variabler Länge 1 (1+1 Byte)
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TEXT}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Zeichenkette mit variabler Länge 1 (1+2 Byte)
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf BLOB}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Binärdaten mit variabler Länge 1 (1+2 Byte)
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf MEDIUMTEXT}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Zeichenkette mit variabler Länge 1 (1+3 Byte)
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf MEDIUMBLOB}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Binärdaten mit variabler Länge 1 (1+3 Byte)
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf LONGTEXT}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Zeichenkette mit variabler Länge 1 (1+4 Byte)
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf LONGBLOB}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Binärdaten mit variabler Länge 1 (1+4 Byte)
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf ENUM(''wert1'',''wert2'',.)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Aufzählung von maximal 65.535 Zeichenketten
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf SET(''wert1'',''wert2'',)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Aufzählung von maximal 255 Zeichenketten
		\end{minipage}
	      \\ \hline
    \end{tabular}
  
 

 \subsection{Administration} \label{d70e1996}
        
  
  
    
    %table
    \begin{tabular}{|l|l|}
    \hline 
            
               
		\begin{minipage}{60mm}
              SQL-Kommando
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erklärung
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CREATE DATABASE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erzeugt eine neue Datenbank
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DROP DATABASE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Löscht eine vorhandene Datenbank incl. aller Tabellen
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf FLUSH}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Leert und aktualisiert interne Caches
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf GRANT}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Vergabe von Zugriffsrechten
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf KILL}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Beendet einen angegebenen Prozess
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf REVOKE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Schränkt vergebene Zugriffsrechte wieder ein
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf USE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Wechselt zu einer anderen Datenbank
		\end{minipage}
	      \\ \hline
    \end{tabular}
   
 

 \subsection{Definition} \label{d70e2079}
        
  
  
    
    %table
    \begin{tabular}{|l|l|}
    \hline 
            
               
		\begin{minipage}{60mm}
              SQL-Kommando
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erklärung
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf ALTER TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Ändert oder fügt neue Spalten, Indices etc. hinzu
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CREATE FUNCTION}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Gibt eine benutzerdefinierte Funktion (UDF) an,	
       die geladen werden soll
    
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CREATE INDEX}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Fügt einer Tabelle einen neuen Index hinzu
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CREATE TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erzeugt eine neue Tabelle
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DESCRIBLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert Informationen über die Tabellenstruktur
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DROP INDEX}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Löscht einen Tabellenindex
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DROP TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Löscht eine Tabelle inkl. aller Datensätze
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf RENAME TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Benennt eine existierende Tabelle um
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf SHOW}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Zeigt Informationen über Datenbanken,Tabellen, 
        Zugriffsrechten etc. an
    
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf EXPLAIN}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Wie DESCRIBLE, kann aber auch Informationen über das
			Ergebnis einer SELECT-Anweisung liefern
    
		\end{minipage}
	      \\ \hline
    \end{tabular}
  
 

 \subsection{Manipulation} \label{d70e2192}
        
  
  
    
    %table
    \begin{tabular}{|l|l|}
    \hline 
            
               
		\begin{minipage}{60mm}
              SQL-Kommando
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erklärung
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DELETE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Löscht angegebene Datensätze aus einer Tabelle
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf INSERT}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Neuen Datensatz in eine Tabelle einfügen
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf LOAD DATA}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Nimmt neue Datensätze in eine Tabelle auf, die in einer	ASCII-Datei
        definiert wurden
    
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf REPLACE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Ersetzt einen bereits vorhandenen Datensatz durch einen anderen
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf SELECT}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Fragt vorhandene Datensätze in Tabellen ab
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TRUNCATE TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Löscht alle Datensätze einer Tabelle
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf UPDATE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Verändert den Inhalt eines vorhandenen Datensatzes
		\end{minipage}
	      \\ \hline
    \end{tabular}
  
  

 \subsection{Wartung} \label{d70e2276}
        
  
  
    
    %table
    \begin{tabular}{|l|l|}
    \hline 
            
               
		\begin{minipage}{60mm}
              SQL-Kommando
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erklärung
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf BACKUP TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erstellt ein Backup einer Tabelle
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf LOCK TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Blockiert eine Tabelle für Schreib- und Lesezugriffe
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf RESTORE TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Stellt eine mit BACKUP gesicherte Tabelle wieder her
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf UNLOCK TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Gibt eine mit LOCK blockierte Tabelle wieder frei
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf ANALYZE TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert Informationen über die Aktualität der Schlüssel\# 
        einer Tabelle. Funktioniert nur mit MyISAM und BDB-Tabellen
    
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CHECK TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Überprüft eine MyISAM-Tabelle auf Fehler
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf OPTIMIZE TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Optimiert die Speicherzuordnung einer MyISAM- und BDB-Tabelle
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf REPAIR TABLE}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              In absoluten Notfällen hilft vielleicht dieses Kommando,
    	denn es versucht, beschädigte MyISAM-Tabellen zu reparieren
    
		\end{minipage}
	      \\ \hline
    \end{tabular}
  
  


 \subsection{Funktionen} \label{d70e2374}
        
  
  
    
    %table
    \begin{tabular}{|l|l|}
    \hline 
            
               
		\begin{minipage}{60mm}
              SQL-Kommando
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erklärung
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CEILING(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert nächsthöhere, aufgerundete ganze Zahl x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf FLOOR(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert nächstkleinere, abgerundete Zahl x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf MOD(x, y)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert Modulo von x und y
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf PI( )}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die Konstante PI
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf POW(x, y)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert das Ergebnis von x{hoch y}
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf RAND()}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert eine Zufallszahl zwischen 0.0 und 0.1
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf ROUND(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Rundet zur nächstliegenden Ganzzahl
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf ROUND(x, y)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Rundet auf y Nachkommastellen
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf SIGN(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Erwirkt einen Vorzeichenwechsel
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TRUNCATE(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert den ganzzahligen Teil einer Kommazahl
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TRUNCATE(X, y)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert eine Kommazahl mit y Nachkommastellen
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CREATEST(x, y, ...)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert das Maximum von x,y,...
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf IFNULL(adr1, adr2)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert adr2, wenn adr1 NULL ist, ansonsten adr1
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf ISNULL(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert 1, wenn x NULL ist, ansonsten 0
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf STRCMP(str1, str2)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert 1, wenn str1 gleich str2 ist
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CURDATE()}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert das aktuelle Datum als Zeichenkette
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CURTIME()}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die aktuelle Zeit als Zeichenkette
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DATE\_ADD(dat, x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die Addition von dat + x als Datum
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DATE\_FORMAT(format)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Formatiert einen Datum- oder Zeitwert
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf HOUR(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die Stunde einer Zeitangabe x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf MINUTE(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die Minute einer Zeitangabe x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf MONTH(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert den Monat des Datums x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf NOW()}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert das aktuelle Datum und die aktuelle Uhrzeit
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf SECOND(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die Sekunden einer Zeitangabe x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TIME\_FORMAT(formate)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Formatiert eine Zeitangabe
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf YEAR(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert das Jahr des Datums x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf AVG(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Ermittelt den arithmetischen Mittelwert einer Spalte x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf COUNT(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Ermittelt die Anzahl von Datensätzen in der Spalte x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf MAX(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Ermittelt den Maximumwert einer Spalte x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf MIN(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Ermittelt den Minimumwert einer Spalte x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf SUM(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die Summa aller Werte in Spalte x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf DATABASE()}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert den Namen der aktuellen Datenbank als Zeichenkette
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf LAST\_INSERT()}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert den zuletzt verwendeten AUTO-INCREMENT zurück
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf PASSWORT(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Verschlüsselt den Wert x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf USER()}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert den aktuellen Benutzernamen des Clients
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf VERSION()}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die aktuelle Version des Datenbank-Clients
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CHAR\_LENGTH(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die Länge der Zeichenkette x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf CONCAT(s1, s2, ...)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Verbindet die einzelnen Zeichenketten s1,s2 zu s
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf INSERT(s1, p, 0, s2)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Fügt die Zeichenkette s2 an der Position p in der Zeichenkette s1 ein
    
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf LENGTH(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert die Anzahl der Zeichen in x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf LOWER(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Wandelt alle Großbuchstaben in Kleinbuchstaben um
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf LTRIM(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Entfernt vorangestellte Leerzeichen von x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf RTRIM(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Entfernt nachgestellte Leerzeichen von x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf TRIM(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Entfernt vorangestellte und nachfolgende Leerzeichen von x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf UCASE(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Wandelt alle Zeichen in x in Großbuchstaben um
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf BIN(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert den Dualcode der Dezimalzahl x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf HEX(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert den Hexadezimalcode der Dezimalzahl x
		\end{minipage}
	      \\ \hline 
            
               
		\begin{minipage}{60mm}
              {\bf OCT(x)}
		\end{minipage}
	      & 
            
               
		\begin{minipage}{60mm}
              Liefert den Oktalcode der Dezimalzahl x
		\end{minipage}
	      \\ \hline
    \end{tabular}
   
 

	\ref{inhalt.tex}


	\end{document}
	
