summaryrefslogtreecommitdiff
path: root/Docs
diff options
context:
space:
mode:
authorunknown <arjen@george.bitbike.com>2003-02-12 14:15:04 +1000
committerunknown <arjen@george.bitbike.com>2003-02-12 14:15:04 +1000
commitaf751714e5de47244a19c10474a6ad5000808f9e (patch)
tree4bca07f2d1582f365937722961bbc2022f57b719 /Docs
parentb16e8d58f1e751400ecc2888796514355d791cfd (diff)
downloadmariadb-git-af751714e5de47244a19c10474a6ad5000808f9e.tar.gz
Moved mysql.de.texi from mysql-4.0 tree to mysqldoc tree.
Replaced mysql.de.texi in mysql-4.0 tree with dummy placeholder. Moved world.sql sample database to mysqldoc tree. BitKeeper/deleted/.del-world.sql~6603b5c62c5bac53: Delete: Docs/world.sql Docs/manual.de.texi: Moved mysql.de.texi from mysql-4.0 tree to mysqldoc tree. Replaced mysql.de.texi in mysql-4.0 tree with dummy placeholder.
Diffstat (limited to 'Docs')
-rw-r--r--Docs/manual.de.texi56134
-rw-r--r--Docs/world.sql5386
2 files changed, 38 insertions, 61482 deletions
diff --git a/Docs/manual.de.texi b/Docs/manual.de.texi
index 01d1b008ebe..902a9496bbb 100644
--- a/Docs/manual.de.texi
+++ b/Docs/manual.de.texi
@@ -1,18 +1,28 @@
\input texinfo @c -*-texinfo-*-
-@c Copyright 1997-2002 TcX AB, Detron HB und MySQL Finland AB
@c
@c *********************************************************
-@c Note that @node names are used on our Website.
-@c So do not change node names without checking
-@c Makefile.am und SitePages first.
+@c
+@c This is a dummy placeholder file for manual.de.texi in the
+@c MySQL source trees.
+@c
+@c Note, that the manual has been moved into a separate
+@c BitKeeper source tree named "mysqldoc" - do not attempt
+@c to add NEWS entries or documentation to this file! All
+@c changes to the manual should be done in the mysqldoc tree.
+@c
+@c See http://www.mysql.com/doc/en/Installing_source_tree.html
+@c for information about how to work with BitKeeper source trees.
+@c
+@c This dummy file is being replaced with the real manual from the
+@c mysqldoc tree when building the official source distribution.
+@c
+@c Please e-mail docs@mysql.com for more information or if
+@c you are interested in doing a translation.
+@c
@c *********************************************************
@c
@c %**start of header
-@c there's a better way to do this.. i just don't know it yet
-@c sed will remove the "@c ifnusphere " to make this valid
-@c ifnusphere @set nusphere 1
-
@setfilename mysql.de.info
@c We want the types in the same index
@@ -26,32 +36,22 @@
@finalout
@end ifclear
-@c Set background f�r HTML
+@c Set background for HTML
@set _body_tags BGCOLOR=silver TEXT=#000000 LINK=#101090 VLINK=#7030B0
-@c Set some style elements f�r the manual in HTML form. 'suggested'
+@c Set some style elements for the manual in HTML form. 'suggested'
@c natural language colors: aqua, black, blue, fuchsia, gray, green,
-@c lime, maroon, navy, olive, purple, red, silver, teal, white, und
+@c lime, maroon, navy, olive, purple, red, silver, teal, white, and
@c yellow. From Steeve Buehler <ahr@YogElements.com>
@set _extra_head <style> code {color:purple} tt {color:green} samp {color:navy} pre {color:maroon} </style>
-@settitle MySQL-Referenzhandbuch f�r Version @value{mysql_version}
+@settitle Dummy MySQL Reference Manual for version @value{mysql_version}.
@c We want single-sided heading format, with chapters on new pages. To
@c get double-sided format change 'on' below to 'odd'
-@ifclear nusphere
@setchapternewpage on
-@end ifclear
-
-@ifset nusphere
-@setchapternewpage odd
-@end ifset
@paragraphindent 0
-@ifset nusphere
-@smallbook
-@end ifset
-
@c %**end of header
@ifinfo
@@ -64,56102 +64,44 @@ END-INFO-DIR-ENTRY
@titlepage
@sp 10
-@center @titlefont{MySQL-Referenzhandbuch}
+@center @titlefont{Empty placeholder for the MySQL Reference Manual}
@sp 10
-@center Copyright @copyright{} 1997-2002 MySQL AB
+@center Copyright @copyright{} 1995-2002 MySQL AB
@c blank page after title page makes page 1 be a page front.
@c also makes the back of the title page blank.
@page
@end titlepage
-@c Short contents, blank page, long contents.
-@c until i can figure out the blank page, no short contents.
-@c @shortcontents
-@c @page
-@c @page
-@contents
-
@c This should be added. The HTML conversion also needs a MySQL version
-@c Anzahl somewhere.
+@c number somewhere.
@iftex
-@c change this to double if you want formatting f�r double-sided
+@c change this to double if you want formatting for double-sided
@c printing
@headings single
@oddheading @thischapter @| @| @thispage
-@evenheading @thispage @| @| MySQL - Technische Referenz f�r Version @value{mysql_version}
-
-@end iftex
-
-
-@node Top, Introduction, (dir), (dir)
-@c German node Top
-
-@c @ifhtml
-@c <IMG SRC="Images/mysql-logo.gif">
-@c <!--Image doesn't exist. Can't find suitable replacement. (Matt) -->
-@c @end ifhtml
-
-@ifinfo
-Das ist das Handbuch f�r das MySQL-Datenbanksystem. Diese Version geh�rt
-zur MySQL-Version @value{mysql_version}. Sie finden ein Handbuch zu jeder
-�lteren Version von MySQL in der Bin�r- oder Quelldistribution der
-entsprechenden Version.
-@end ifinfo
-
-
-
-@menu
-* Introduction::
-* Deutsch::
-* Installing::
-* Tutorial::
-* MySQL Database Administration::
-* MySQL Optimisation::
-* Reference::
-* Table types::
-* Clients::
-* Extending MySQL::
-* Problems::
-* Benutzer::
-* MySQL-Benutzung durch Kunden::
-* Contrib::
-* Credits::
-* News::
-* Porting::
-* Environment variables::
-* Regexp::
-* GPL license::
-* LGPL license::
-* Function Index::
-* Concept Index::
-@end menu
-
-@node Introduction, Deutsch, Top, Top
-@c German node Einf�hrung
-@chapter Allgemeine Informationen �ber MySQL
-
-@cindex �berblick
-@cindex Allgemeine Informationen
-
-MySQL ist ein sehr schneller und robuster, Multi-Thread und Multi-User
-SQL-Datenbank-Server (SQL = Structured Query Language, strukturierte
-Abfrage-Sprache).
-Die Einsatzgebiete des MySQL Server liegen in Hochleistungsapplikationen
-und in der Einbindung in weit verbreitete Massen-Software.
-@code{MySQL} ist eine Schutzmarke von @code{MySQL AB}.
-
-Die MySQL Software steht unter einer @code{Doppellizenz}. Sie
-k�nnen sie entweder frei im Sinne der @code{GNU GENERAL PUBLIC LICENSE}
-(@uref{http://www.gnu.org/licenses/}) verwenden, oder Sie erwerben eine
-komerzielle Lizenz, wenn Sie nicht durch die Restriktionen der GPL
-gebunden sein wollen.
-@xref{Lizenzpolitik}.
-
-@uref{http://www.mysql.com/, die MySQL Homepage}
-enth�lt die letzten Informationen �ber MySQL.
-
-Die folgende Liste beschreibt n�tzliche Teile des Handbuchs.
-
-@itemize @bullet
-@item
-Informationen zu dem Unternehmen hinter MySQL: @ref{What is MySQL AB}.
-
-@item
-Eine Diskussion der F�higkeiten von MySQL: @ref{Features}.
-
-@item
-Installationsanweisungen: @ref{Installing}.
-
-@item
-Tipps zur Portierung von MySQL auf neue Architekturen oder Betriebssysteme:
-@ref{Porting}.
-
-@item
-Informationen zum Upgrade von einem Release der Version 3.23:
-@ref{Upgrading-from-3.23}.
-
-@item
-Informationen zum Upgrade von einem Release der Version 3.22:
-@ref{Upgrading-from-3.22}.
-
-@item
-Einf�hrungs-Tutorial zu MySQL: @ref{Tutorial}.
-
-@item
-SQL-Beispiele und Informationen zu Benchmarks befinden sich im
-Benchmark-Verzeichnis (@file{sql-bench} in der Distribution).
-
-@item
-Die Geschichte neuer Features und Bugfixes: @ref{News}.
-
-@item
-@c German FIX was @nqs{Feature-Probleme}; no idea what @nqs is??
-Eine Liste bekannter Bugs und Feature-Probleme: @ref{Bugs}.
-
-@item
-Zukunftspl�ne: @ref{TODO}.
-
-@item
-Eine Liste aller Beteiligten, die zu diesem Projekt beitrugen: @ref{Credits}.
-@end itemize
-
-@strong{WICHTIG:}
-
-Berichte zu Fehlern (oft Bugs genannt) sowie Fragen und Bemerkungen sollten
-an die Mailingliste geschickt werden: @email{mysql@@lists.mysql.com}.
-@xref{Bug reports}.
-Das @code{mysqlbug} Skript sollte benutzt werden, um Fehlerberichte zu
-erzeugen.
-@c FIX! RPMs are also binary
-Bei Quelltext-Distributionen liegt das @code{mysqlbug} Skript im
-@file{scripts} Verzeichnis. Bei Bin�rdistributionen liegt @code{mysqlbug}
-im @file{bin} Verzeichnis. Wenn Sie einen empfindlichen Sicherheits-Bug in
-MySQL gefunden haben, sollten Sie eine E-Mail an
-@email{security@@mysql.com} schicken.
-
-@cindex Fehler, berichten
-@cindex Berichten, Fehler
-@cindex Mailing-Listen-Adresse
-@cindex @code{mysqlbug}-Skript, Speicherort
-
-
-
-
-@node Deutsch, Installing, Introduction, Top
-@c German node <no English equivalent>
-@chapter Vorbemerkungen zum deutschen Handbuch
-
-Die �bersetzung einer so umfangreichen technischen Dokumentation wie des
-MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung.
-Zumindest f�r jemanden, der seine Zielsprache ernst nimmt:
-
-@itemize @bullet
-@item
-In diesem Handbuch wird nicht geupdated, sondern aktualisiert.
-@item
-Eine MySQL-Distribution wird nicht gedownloaded, sondern herunter
-geladen.
-@item
-Und Transaktionen werden nicht gerollbackt, sondern zur�ckgerollt.
-@end itemize
-
-Womit wir auch schon bei der besonderen Herausforderung w�ren: Jeder,
-der sich mit Transaktionen auskennt, wei�, dass beim Fehlschlagen einer
-solchen ein Rollback-Befehl ausgef�hrt wird. Dieses Hauptwort ins
-Deutsche zu �bersetzen, w�rde zum Verst�ndnis wenig beitragen - im
-Gegenteil.
-
-Damit bleiben alle technischen Fachbegriffe, die sich so und nicht
-anders etabliert haben, englisch:
-
-@itemize @bullet
-@item
-Ein SQL-Statement wird nicht als "Erkl�rung in der Strukturierten
-AbfrageSprache (SAS)" �bersetzt.
-@item
-Abk�rzungen wie TCP/IP werden nicht zu �SP/ZP
-(�bertragungsSteuerungsProtokoll/ZwischennetzProtokoll).
-@item
-Ein Client bleibt ein Client, und ein Server ein Server.
-@end itemize
-
-Die Fallstricke einer �bersetzung stecken allerdings in den Details:
-
-@itemize @bullet
-@item
-Jeder SQL-Kenner wei�, was eine "query" ist. In diesem Handbuch ist
-das eine Anfrage.
-@item
-Gibt es Probleme bei der �bermittlung einer Anfrage, kann es sein,
-dass eine Zeit�berschreitung eintritt. Der Profi h�tte wahrscheinlich
-nach "Timeout" gesucht.
-@item
-Manche Dinge sind einfacher: Ein "string" ist eine Zeichenkette
-(obwohl f�r Profis vielleicht ungewohnt), ein "hex value" ein
-hexadezimaler Wert.
-@end itemize
-
-Richtig spannend wird die �bersetzung bei W�rtern, die in der deutschen
-Fachsprache zumeist englisch verwendet werden, obwohl es passende
-deutsche Entsprechungen gibt:
-
-@itemize @bullet
-@item
-Im Hauptspeicher ("RAM") zwischengespeicherte Daten werden auf die
-Festplatte zur�ckgeschrieben. Im Englischen hei�t das "flushed to
-disk", und im Deutschen werden die Daten h�ufig "geflushed".
-@item
-Daten werden zwischengespeichert ("gecached").
-@item
-Speicher wird zugewiesen. Man kann auch "alloziert" sagen, was dem
-englischen "allocated" n�her kommt.
-@end itemize
-
-Alle diese Entsprechungen, bei denen die deutsche Sprache eher in
-Vergessenheit geraten ist, wurden zweisprachig aufgenommen. Beispiele:
-
-@itemize @bullet
-@item
-Alle Daten werden zwischen Anfragen auf die Festplatte zur�ck
-geschrieben (flush).
-@item
-Aktualisieren Sie (Update), wenn alles in Ordnung ist.
-@item
-Auf eine h�here Version von MySQL aktualisieren (Upgrade) ...
-@end itemize
-
-Gelegentlich wird auch in diesem Handbuch die "Performance getuned",
-neue "Features" eines MySQL-"Release" werden beschrieben usw. Anregungen
-f�r eine weiter gehende Eindeutschung nimmt der �bersetzer gern
-entgegen. Insbesondere gilt das auch f�r Hinweise zur Verk�rzung
-deutscher Ausdr�cke. Beispielsweise hei�t "case sensitive" (14
-Buchstaben) im Handbuch "abh�ngig von der verwendeten
-Gro�-/Kleinschreibung" (44 Buchstaben).
-
-Letzter Punkt: Die �bersetzung erfolgte in �u�erst enger Anlehnung an
-das englischsprachige Original. Nichts wurde hinzugef�gt (ausser diesem
-Vorwort), ge�ndert oder weggelassen (Ausnahme: die Geschichte der
-�nderungen (ChangeLog) vor Version 3.23). Es liegt in der Natur der
-Dinge, dass weder Original noch �bersetzung frei von Fehlern sind
-(obwohl wir das anstreben). Berichten Sie bitte �bersetzungsfehler,
-stilistische "Bugs", die das Verst�ndnis beeintr�chtigen und sonstige
-Anmerkungen zur �bersetzung direkt an:
-
-@c German FIX added escape @@ in e-mail address.
-Stefan Hinz, @email{handbuch@@mysql.com}
-
-Berlin, im Februar 2002
-
-Stefan Hinz, @uref{http://iConnect.de,iConnect GmbH Berlin}
-
-
-@menu
-* Manual-info::
-* What-is::
-* What is MySQL AB::
-* Licensing and Support::
-* MySQL 4.0 In A Nutshell::
-* MySQL Information Sources::
-* Compatibility::
-* TODO::
-* Comparisons::
-@end menu
-
-@node Manual-info, What-is, Deutsch, Deutsch
-@c German node Handbuch-Informationen
-@section �ber dieses Handbuch
-
-@cindex Speicherort des Online-Handbuchs
-@cindex Handbuch, Online-Speicherort
-
-Das ist ein Referenzhandbuch. Es enth�lt keine allgemeinen Anleitungen zu
-SQL oder relationalen Datenbankkonzepten.
-@c German FIX these references don't exist:
-@c Wenn Sie allgemeine Informationen �ber SQL suchen,
-@c finden Sie diese hier: @ref{SQL allgemein}.
-@c B�cher, die sich speziell mit MySQL besch�ftigen,
-@c finden Sie hier: @ref{MySQL-B�cher}.
-
-Da die MySQL Datenbank Software eine laufende Weiterentwicklung erf�hrt, wird
-das Handbuch regelm��ig aktualisiert.
-Die jeweils aktuellste Version dieses Handbuchs befindet sich unter
-@uref{http://www.mysql.com/documentation/}.
-Dieses Handbuch ist gegenw�rtig verf�gbar in Texinfo, als Klartext
-(plain text), Info, HTML, PostScript und PDF. Das Prim�rdokument ist die
-Texinfo-Datei.
-Die HTML-Version wird automatisch produziert, indem eine modifizierte
-Version von @code{texi2html} benutzt wird. Die Klartext- und Info-
-Versionen werden mit @code{makeinfo} hergestellt. Die PostScript-Version
-wird mit @code{texi2dvi} und @code{dvips} produziert. Die PDF-Version
-wird mit @code{pdftex} hergestellt.
-
-Wenn Sie Schwierigkeiten haben, Informationen zu finden, beachten Sie bitte
-auch die durchsuchbare PHP Version des Handbuchs unter
-@uref{http://www.mysql.com/doc/}.
-
-Wenn Sie Vorschl�ge f�r Hinzuf�gungen oder Korrekturen dieses Handbuchs
-haben, schicken Sie sie bitte an das Handbuch-Team:
-@email{docs@@mysql.com}.
-
-@cindex Handbuch, verf�gbare Formate
-@cindex Texinfo
-
-Dieses Handbuch wurde geschrieben und wird gewartet von David Axmark,
-Michael (Monty) Widenius, Jeremy Cole, und Paul DuBois. Andere
-Kontributoren sind unter @ref{Credits} aufgelistet.
-Die deutsche �bersetzung stammt von Stefan Hinz. F�r die
-Aktualit�t ist Jan Lehnardt zust�ndig.
-
-Das Copyright (2002) f�r dieses liegt bei der schwedischen Firma
-@code{MySQL AB}. @xref{Copyright}.
-
-
-@menu
-* Manual conventions::
-@end menu
-
-@node Manual conventions, , Manual-info, Manual-info
-@c German node Handbuch-Konventionen
-@subsection Konventionen in diesem Handbuch
-
-Dieses Handbuch benutzt bestimmte typographische Konventionen:
-
-@cindex Handbuch, typografische Konventionen
-@cindex Typografische Konventionen
-@cindex Konventionen, typografische
-
-@table @asis
-@item @code{constant}
-Schriftart gleicher Breite (nicht-proportionale Schrift) wird f�r
-Befehle und Optionen benutzt, f�r SQL-Statements, Datenbank-, Tabellen-
-und Spaltennamen, f�r C- und PERL-Code und f�r Umgebungsvariablen.
-Beispiel: ``Um festzustellen, wie @code{mysqladmin} funktioniert, rufen
-Sie den Befehl mit der @code{--help} Option auf.''
-
-@item @file{filename}
-Schriftart gleicher Breite, die von Anf�hrungszeichen umgeben ist, wird
-f�r Datei- und Pfadnamen benutzt. Beispiel: ``Die Distribution wird im
-Verzeichnis @file{/usr/local/} installiert.''
-
-@item @samp{c}
-Schriftart gleicher Breite, die von Anf�hrungszeichen umgeben ist, wird
-auch benutzt um Zeichenfolgen anzuzeigen. Beispiel: ``Um ein
-Platzhalterzeichen einzugeben, benutzen Sie das @samp{%} Zeichen.''
-
-@item @emph{italic}
-Kursivschrift wird f�r Hervorhebungen verwendet, @emph{wie in diesem
-Beispiel}.
-
-@item @strong{boldface}
-Fettschrift wird f�r Namen von Zugriffsrechten verwendet (zum Beispiel:
-``Gew�hren Sie das @strong{process} Zugriffsrecht nicht leichtfertig'')
-und gelegentlich, um @strong{besonders starke Hervorhebungen} zu kennzeichnen.
-@end table
-
-Wenn Befehle gezeigt werden, die durch ein bestimmtes Programm
-ausgef�hrt werden sollen, wird dieses Programm durch einen Prompt
-(Eingabeaufforderung) vor dem Befehl angezeigt. Der @code{shell>} Prompt
-zum Beispiel zeigt an, dass Sie den Befehl von Ihrer Login-Shell aus
-ausf�hren sollen. @code{mysql>} zeigt an, dass Sie den Befehl vom
-@code{mysql} Client-Programm aus ausf�hren sollen:
-
-@example
-shell> geben sie hier ein shell-kommando ein
-mysql> geben sie hier ein mysql-kommando ein
-@end example
-
-Shell-Befehle werden mit der Bourne-Shell-Syntax dargestellt. Wenn Sie
-eine @code{csh}-Shell benutzen, m�ssen die Befehle evtl. etwas anders
-eingegeben werden. Das folgende Beispiel zeigt, wie mit der Bourne-Shell eine
-Umgebungsvariable gesetzt wird und anschlie�end ein Befehl abgesetzt
-wird:
-
-@example
-shell> VARNAME=wert irgendein_befehl
-@end example
-
-@cindex Shell-Syntax
-@cindex Befehlssyntax
-
-Um @code{csh} auszuf�hren, w�rden Sie folgende Sequenz ausf�hren:
-
-@example
-shell> setenv VARNAME wert
-shell> irgendein_befehl
-@end example
-
-Oft m�ssen Datenbank-, Tabellen- und Spaltennamen in konkreten Befehlen
-ersetzt werden. Um anzuzeigen, dass eine solche Ersetzung notwendig ist,
-benutzt dieses Handbuch @code{db_name}, @code{tbl_name} und
-@code{col_name}. Sie k�nnten zum Beispiel folgendes Statement sehen:
-
-@example
-mysql> SELECT spalten_name FROM datenbank_name.tabellen_name;
-@end example
-
-Wenn Sie ein �hnliches Statement eingeben wollen, m�ssen Sie Ihre
-eigenen Datenbank-, Tabellen- und Spaltennamen eingeben, zum Beispiel
-wie folgt:
-
-@example
-mysql> SELECT autor_name FROM bibliothek.autorenliste;
-@end example
-
-SQL-Statements k�nnen in Gro�- und Kleinschreibung geschrieben werden.
-Wenn dieses Handbuch SQL-Statements darstellt, wird Gro�schreibung
-verwendet, um spezielle Schl�sselworte in diesem Kontext hervorzuheben.
-Kleinschreibung wird f�r den Rest des Statements verwendet. Folgendes
-k�nnten Sie im Kontext des @code{SELECT} Statements sehen:
-
-@example
-mysql> SELECT count(*) FROM tabellen_name;
-@end example
-
-Im Kontext der @code{COUNT()} Funktion hingegen k�nnte dasselbe
-Statement wie folgt geschrieben werden:
-
-@example
-mysql> select COUNT(*) from tabellen_name;
-@end example
-
-Wenn keine besondere Hervorhebung beabsichtigt wird, werden alle
-Schl�sselworte in Gro�schreibung dargestellt.
-
-In Syntax-Beschreibungen werden eckige Klammern (@samp{[} und @samp{]})
-benutzt, um wahlfrei (optionale) W�rter oder Klauseln anzuzeigen:
-
-@example
-DROP TABLE [IF EXISTS] tabellen_name
-@end example
-
-Wenn ein Syntaxelement aus einer Anzahl von Alternativen besteht, werden
-die Alternativen durch gerade Striche (@samp{|}) voneinander getrennt.
-Wenn genau ein Element aus einer Anzahl von M�glichkeiten ausgew�hlt
-werden (@strong{kann}), werden die Alternativen mit eckigen Klammern
-aufgelistet (@samp{[} und @samp{]}):
-
-@example
-TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
-@end example
-
-Wenn genau ein Element aus einer Anzahl von M�glichkeiten ausgew�hlt
-werden @strong{muss}, werden die Alternativen innerhalb geschweifter
-Klammern aufgelistet (@samp{@{} und @samp{@}}):
-
-@example
-@{DESCRIBE | DESC@} tbl_name @{col_name | wild@}
-@end example
-
-
-@node What-is, What is MySQL AB, Manual-info, Deutsch
-@c German node Was ist MySQL?
-@section Was ist MySQL?
-
-@cindex MySQL, Definition
-@cindex MySQL, Einf�hrung
-
-
-MySQL, die popul�rste Open Source SQL-Datenbank, wird von MySQL AB zur
-Verf�gung gestellt. MySQL AB ist ein kommerzielles Unternehmen, dessen
-Gesch�ft darin besteht, Serviceleistungen rund um die MySQL-Datenbank
-zur Verf�gung zu stellen. @xref{What is MySQL AB}.
-
-@table @asis
-
-@item MySQL ist ein Datenbank-Managementsystem.
-
-Eine Datenbank ist eine strukturierte Sammlung von Daten. Das kann alles
-sein - von einer einfachen Einkaufsliste �ber eine Bildergalerie bis zu
-riesigen Informationsmengen in einem Unternehmensnetzwerk. Um Daten zu
-einer Computer-Datenbank hinzuzuf�gen, auf sie zuzugreifen und sie zu
-verarbeiten, ben�tigen Sie ein Datenbank-Managementsystem wie MySQL. Weil
-Computer sehr gut darin sind, gro�e Datenmengen zu handhaben, spielt
-Datenbank-Management eine zentrale Rolle im Computer-Bereich, sowohl bei
-Anwendungen, die allein laufen (Stand-Alone-Utilities) als auch als Teil
-anderer Anwendungen.
-@cindex Datenbanken, Definition
-
-@item MySQL ist ein relationales Datenbank-Managementsystem.
-
-Eine relationale Datenbank speichert Daten in separaten Tabellen,
-anstatt sie alle in einem einzigen gro�en Speicherraum unterzubringen.
-Hierdurch werden hohe Geschwindigkeit und Flexibilit�t erreicht. Die
-Tabellen werden durch definierte Beziehungen verbunden (Relationen), was
-es m�glich macht, Daten aus verschiedenen Tabellen auf Nachfrage zu
-kombinieren. Der SQL-Teil von MySQL steht f�r "Structured Query
-Language" (strukturierte Abfragesprache) - die verbreitetste
-standardisierte Sprache f�r Datenbankzugriffe.
-
-@cindex Relationale Datenbanken, Definition
-@cindex SQL, Definition
-@item MySQL ist Open-Source-Software.
-
-Open Source bedeutet, dass es f�r jeden m�glich ist, solche Software zu
-benutzen und zu ver�ndern. Jeder kann MySQL aus dem Internet herunter
-laden und benutzen, ohne irgend etwas zu bezahlen. Jeder, der daran
-interessiert ist, kann den Quelltext studieren und den eigenen
-Bed�rfnissen entsprechend ver�ndern. MySQL benutzt die GPL (GNU
-General Public License) @uref{http://www.gnu.org}, um festzulegen, was
-Sie mit der Software tun d�rfen und was Sie nicht tun d�rfen, abh�ngig
-von unterschiedlichen Situationen. Wenn Ihnen die GPL Probleme bereitet
-oder wenn Sie MySQL in eine kommerzielle Anwendung einbetten m�ssen,
-k�nnen Sie eine kommerziell lizensierte Version von uns erwerben.
-
-@cindex Open Source, Definition
-@cindex General Public License
-
-@item Warum sollten Sie MySQL benutzen?
-
-MySQL ist sehr schnell, zuverl�ssig und leicht zu benutzen. Wenn Sie
-nach diesen Eigenschaften suchen, sollten Sie MySQL ausprobieren. MySQL
-besitzt eine ganze Reihe praktischer Features, die in enger Kooperation
-mit unseren Benutzern entwickelt wurden. Einen Performance-Vergleich
-zwischen MySQL und einigen anderen Datenbank-Managementsystemen finden
-Sie auf unserer Benchmark-Seite.
-@xref{MySQL Benchmarks}.
-
-MySQL wurde urspr�nglich entwickelt, um sehr gro�e Datenbanken
-handhaben zu k�nnen, und zwar sehr viel schneller als existierende
-L�sungen. Es wurde mehrere Jahre in h�chst anspruchsvollen
-Produktionsumgebungen eingesetzt. Heutzutage bietet MySQL eine
-umfangreiche Reihe sehr n�tzlicher Funktionen. Connectivity,
-Geschwindigkeit und Sicherheit machen MySQL �u�erst geeignet, um auf
-Datenbanken �ber das Internet zuzugreifen.
-
-@item Die technischen Features von MySQL
-
-Weiter f�hrende technische Informationen finden Sie unter
-@ref{Reference}. MySQL ist ein Client-Server-System, das aus einem
-multi-thread SQL-Server besteht, der unterschiedliche Backends,
-verschiedene Client-Programme und -Bibliotheken, Verwaltungswerkzeuge
-und etliche Programmschnittstellen unterst�tzt.
-
-Wir stellen MySQL auch als multi-thread Bibliothek zur Verf�gung, die
-Sie mit Ihren Anwendungen verkn�pfen k�nnen, um ein kleineres,
-schnelleres und leichter zu bedienendes Produkt zu erhalten.
-
-@item MySQL stellt beigesteuerte (contributed) Software in gro�er Menge
-zur Verf�gung.
-
-Es ist sehr wahrscheinlich, dass Ihre Lieblingsanwendung oder -sprache
-bereits MySQL unterst�tzt.
-
-@end table
-
-@cindex Aussprache, MySQL
-@cindex MySQL, Aussprache
-@cindex Ziele von MySQL
-Offiziell wird MySQL 'Mai Ess Ku Ell' ausgesprochen (nicht 'Mai
-Siekwel'). Wir vermeiden allerdings, Leute zu korrigieren, die
-Mai-Siekwel sagen.
-
-@cindex MySQL-Geschichte
-@cindex Geschichte von MySQL
-@cindex MySQL, Name
-@cindex My, Ursprung
-
-Wir fingen urspr�nglich mit der Intention an, den @code{mSQL}-Code zu
-benutzen, um unsere eigenen Tabellen anzusprechen, wobei wir unsere
-eigenen schnellen Low-Level-Routinen (ISAM) benutzten. Nach einigem
-Testen gelangten wir allerdings zur �berzeugung, dass @code{mSQL} weder
-schnell noch flexibel genug w�re, um unsere Anforderungen abzudecken.
-Dies resultierte in einer neuen SQL-Schnittstelle zu unserer Datenbank,
-allerdings mit fast derselben API-Schnittstelle, wie sie @code{mSQL}
-benutzt. Diese API wurde gew�hlt, weil sie es erlaubte, Code von
-Drittanbietern einfach zu portieren. Die Entstehung des Namens MySQL ist
-nicht v�llig gekl�rt. Unser Basis-Verzeichnis und eine gro�e Anzahl
-unserer Bibliotheken und Werkzeuge hatten immer schon das Pr�fix ``my''
-w�hrend mehr als 10 Jahren. Wie auch immer, auch Montys Tochter (einige
-Jahre j�nger) hei�t My. Welcher der beiden Umst�nde MySQL den Namen
-gab, ist immer noch ein R�tsel, sogar f�r uns.
-
-
-@menu
-* Features::
-* Stability::
-* Table size::
-* Year 2000 compliance::
-@end menu
-
-@node Features, Stability, What-is, What-is
-@c German node Features
-@subsection Die wichtigsten Features von MySQL
-
-@cindex Haupt-Features von MySQL
-@cindex Features von MySQL
-
-Die folgende Liste beschreibt einige wichtige Charakteristika von MySQL:
-
-@c This list is too technical und should be divided into one feature
-@c list comparable to commercial competition und a very technical on
-@c with max limits (from crash-me) und so on.
-@itemize @bullet
-@item
-Voll multi-thread unter Benutzung von Kernel-Threads. Das bedeutet, dass
-Sie sehr einfach mehrere Prozessoren benutzen k�nnen, falls verf�gbar.
-
-@item
-C-, C++-, Eiffel-, Java-, Perl-, PHP-, Python- und Tcl-APIs. @xref{Clients}.
-
-@item
-L�uft auf vielen verschiedenen Plattformen. @xref{Which OS}.
-
-@item
-Viele Spaltentypen: vorzeichenbehaftete / vorzeichenlose Ganzzahlen
-(Integer), die 1, 2, 3, 4 und 8 Byte lang sind, @code{FLOAT},
-@code{DOUBLE}, @code{CHAR}, @code{VARCHAR}, @code{TEXT}, @code{BLOB},
-@code{DATE}, @code{TIME}, @code{DATETIME}, @code{TIMESTAMP},
-@code{YEAR}, @code{SET}, und @code{ENUM} Typen.
-@xref{Column types}.
-
-@item
-Sehr schnelle Joins durch Benutzung eines optimierten Multi-Joins in
-einem Durchgang (one-sweep multi-join).
-
-@item
-Volle Operator- und Funktionsunterst�tzung in @code{SELECT}- und
-@code{WHERE}-Teilen von Anfragen. Beispiel:
-
-@example
-mysql> SELECT CONCAT(vorname, " ", nachname) FROM tabellen_name
- WHERE einkommen/dependents > 10000 AND age > 30;
-@end example
-
-@item
-SQL-Funktionen sind durch eine hoch optimierte Klassenbibliothek
-implementiert und sollten so schnell sein, wie es geht! �blicherweise
-gibt es �berhaupt keine Speicherzuordnung (memory allocation) nach der
-Initialisierung von Anfragen.
-
-@item
-Volle Unterst�tzung f�r SQL-@code{GROUP BY} und @code{ORDER BY}-
-Klauseln. Unterst�tzung f�r Gruppierungsfunktionen (@code{COUNT()},
-@code{COUNT(DISTINCT ...)}, @code{AVG()}, @code{STD()}, @code{SUM()},
-@code{MAX()} und @code{MIN()}).
-
-@item
-Unterst�tzung f�r @code{LEFT OUTER JOIN} und @code{RIGHT OUTER JOIN} mit
-ANSI-SQL und ODBC-Syntax.
-
-@item
-Sie k�nnen Tabellen aus unterschiedlichen Datenbanken in ein und
-derselben SQL-Anfrage benutzen (ab Version 3.22).
-
-@item
-Ein System von Zugriffsberechtigungen und Passw�rtern, das sehr flexibel
-und sicher ist, und das Host-basierende Verifizierung erlaubt.
-Passw�rter sind sicher, weil jeder Passwort-Verkehr verschl�sselt wird,
-wenn Sie sich mit einem Server verbinden.
-
-@item
-ODBC (Open-DataBase-Connectivity) Unterst�tzung f�r Win32 (mit
-Quelltext). Alle ODBC 2.5 Funktionen und viele weitere. Sie k�nnen zum
-Beispiel MS Access benutzen, um sich mit Ihrem MySQL-Server zu
-verbinden. @xref{ODBC}.
-
-@item
-Sehr schnelle B-tree disk Tabellen mit Index-Kompression.
-
-@item
-Bis zu 32 Indexe pro Tabelle erlaubt. Jeder Index kann aus 1 bis 16
-Spalten oder Teilen von Spalten bestehen. Die maximale Indexl�nge
-betr�gt 500 Bytes (das �ndert sich evtl., wenn MySQL kompiliert wird).
-Ein Index kann das Pr�fix eines @code{CHAR}- oder @code{VARCHAR}-Felds
-benutzen.
-
-@item
-Datens�tze fester und variabler L�nge.
-
-@item
-Im Arbeitsspeicher gehaltene Hash-Tabellen, die als tempor�re Tabellen
-benutzt werden.
-
-@item
-Kann gro�e Datenbanken handhaben. Wir selbst benutzen MySQL bei einigen
-Datenbanken, die 50 Mio. Datens�tze haben und wir kennen Benutzer, die
-MySQL mit 60.000 Tabellen und etwa 5 Milliarden Zeilen benutzen.
-
-@item
-Alle Spalten k�nnen Vorgabewerte (Defaults) haben. Sie k�nnen @code{INSERT}
-benutzen, um eine Untermenge der Tabellenspalten mit Werten zu
-best�cken. Diejenigen Spalten, die nicht explizit angesprochen werden,
-werden auf ihre Vorgabewerte gesetzt.
-
-@item
-Benutzt GNU Automake, Autoconf und Libtool aus Portabilit�tsgr�nden.
-
-@item
-Geschrieben in C und C++. Getestet mit gro�en Anzahl verschiedener
-Compiler.
-
-@item
-Ein sehr schnelles Thread-basierendes Speicherzuordnungs-System (memory
-allocation system).
-
-@item
-Keine Speicherlecks (memory leaks). MySQL wurde mit Purify getestet,
-einem kommerziellen Werkzeug zur Entdeckung von Speicherlecks.
-
-@item
-Beinhaltet @code{myisamchk}, ein sehr schnelles Dienstprogramm zur �berpr�fung,
-Optimierung und Reparatur von Tabellen. Die gesamte Funktionalit�t von
-@code{myisamchk} steht auch �ber die SQL-Schnittstelle zur Verf�gung.
-@xref{MySQL Database Administration}.
-
-@item
-Volle Unterst�tzung f�r mehrere unterschiedliche Zeichens�tze, incl. ISO-
-8859-1 (Latin1), big5, ujis und weitere. So sind zum Beispiel die
-skandinavischen Zeichen `@ringaccent{a}', `@"a' und `@"o' in Tabellen-
-und Spaltennamen erlaubt.
-
-@item
-Alle Daten werden mit dem ausgew�hlten Zeichensatz gespeichert. Alle
-Vergleiche f�r normale Zeichenkettenvergleiche sind unabh�ngig von
-Gro�- und Kleinschreibung.
-
-@item
-Die Sortierung ist abh�ngig vom gew�hlten Zeichensatz (schwedisch als
-Vorgabe). Das kann beim Start des MySQL-Servers ge�ndert werden. Um
-beispielsweise eine sehr fortgeschrittene Sortierung zu sehen, sehen Sie
-sich den tschechischen Sortier-Code an. MySQL unterst�tzt viele
-unterschiedliche Zeichens�tze, die bei der Kompilierung und w�hrend der
-Laufzeit festgelegt werden k�nnen. Der neue Zeichensatz 'latin_de' sorgt
-f�r eine korrekte deutsche Sortierreihenfolge.
-
-@item
-Aliase auf Tabellen und Spalten sind erlaubt, wie im SQL92-Standard
-festgelegt.
-
-@item
-@code{DELETE}, @code{INSERT}, @code{REPLACE} und @code{UPDATE} geben die
-Anzahl der Zeilen zur�ck, die ge�ndert wurden (bzw. betroffen sind). Es
-ist statt dessen auch m�glich, die Anzahl der �bereinstimmenden Zeilen
-zur�ckzugeben, indem beim Verbindungsstart zum Server ein entsprechendes
-Flag gesetzt wird.
-
-@item
-Funktionsnamen kollidieren nicht mit Tabellen- oder Spaltennamen.
-@code{ABS} zum Beispiel ist ein g�ltiger Spaltenname. Die einzige
-Einschr�nkung besteht drin, dass in einem Funktionsaufruf keine
-Leerzeichen zwischen Funktionsname und der �ffnenden runden Klammer, die
-diesem folgt @samp{(}, erlaubt ist. @xref{Reserved words}.
-
-@item
-Alle MySQL-Programme k�nnen mit der @code{--help} oder @code{-?} Option
-aufgerufen werden, um Online-Hilfe zu erhalten.
-
-@item
-Der Server kann Clients Fehlermeldungen in verschiedenen Sprachen zur
-Verf�gung stellen.
-@xref{Languages}.
-
-@item
-Clients k�nnen sich mit dem MySQL-Server �ber TCP/IP Sockets,
-Unix Sockets (Unix) oder Named Pipes (NT) verbinden.
-
-@item
-Der MySQL-spezifische @code{SHOW}-Befehl kann benutzt werden, um
-Informationen �ber Datenbanken, Tabellen und Indexe zu erhalten. Der
-@code{EXPLAIN}-Code kann benutzt werden um festzustellen, wie der
-Optimierer eine Anfrage aufl�st.
-@end itemize
-
-
-@node Stability, Table size, Features, What-is
-@c German node Stabilit�t
-@subsection Wie stabil ist MySQL?
-
-@cindex Stabilit�t
-
-Dieser Abschnitt besch�ftigt sich mit den Fragen ``Wie stabil ist
-MySQL?'' und ``Kann ich mich auf MySQL bei diesem Projekt verlassen?''
-Wir werden versuchen, einige Dinge klar zu stellen und einige der
-wichtigeren Fragen zu beantworten, die offensichtlich viele Leute
-besch�ftigen. Dieser Abschnitt wurde aus Informationen zusammen
-gestellt, die aus der Mailing-Liste gesammelt wurden (die sehr aktiv
-beim Berichten von Bugs ist).
-
-Bei TcX funktioniert MySQL ohne jegliche Probleme in unseren Projekten
-seit Mitte 1996. Als MySQL einer breiteren �ffentlichkeit zug�nglich
-gemacht wurde, fiel uns auf, dass es einige Teile von ``ungetestetem
-Code'' gab, die schnell von neuen Benutzern gefunden wurden, die
-Anfragen machten, die von unseren eigenen abwichen. Seitdem hat jedes
-neue Release weniger Portabilit�tsprobleme als das vorhergehende (obwohl
-jedes viele neue Features hat).
-
-Jedes Release von MySQL war benutzbar. Probleme gab es nur, wenn
-Benutzer anfingen, Code aus den ``Grauzonen'' zu benutzen. Nat�rlich
-wissen Benutzer von ausserhalb nicht, was diese Grauzonen sind, daher
-versucht dieser Abschnitt, die momentan bekannten aufzuzeigen. Die
-Beschreibungen hier beziehen sich auf Version 3.23 von MySQL. Alle
-bekannten und berichteten Bugs werden in der letzten Version behoben,
-mit Ausnahme der Bugs, die im Bugs-Abschnitt aufgelistet sind, was Dinge
-sind, die auf das Design zur�ckzuf�hren sind. @xref{Bugs}.
-
-MySQL ist in mehrfachen Ebenen (Layers) und verschiedenen unabh�ngigen
-Modulen geschrieben. Diese Module sind im Folgenden aufgef�hrt, wobei
-angezeigt wird, wie gut getestet jedes von ihnen ist:
-
-@cindex Module, Auflistung
-
-@table @strong
-@item Der ISAM Tabellen-Handler --- stabil
-Dieser verwaltet Speicherung und Abfrage aller Daten in MySQL Version
-3.22 und fr�her. In allen Releases von MySQL gab es nicht einen einzigen
-(berichteten) Bug in diesem Code. Die einzige M�glichkeit, eine
-zerst�rte (korrumpierte) Tabelle zu erhalten, besteht darin, den Server
-mitten w�hrend eines Updates zu killen. Selbst dadurch ist es
-unwahrscheinlich, dass Daten unwiederbringlich zerst�rt werden, denn
-alle Daten werden zwischen Anfragen auf die Festplatte zur�ck
-geschrieben (flush). Es hat nicht einen einzigen Bug-Bericht gegeben, in
-dem von verlorenen Daten aufgrund von MySQL-Bugs berichtet wurde.
-
-@cindex ISAM-Tabellen-Handler
-@cindex Speicherung, Daten
-@cindex Abfrage, Daten
-@cindex Daten, ISAM-Tabellen-Handler
-
-@item Der MyISAM Tabellen-Handler --- stabil
-Dieser wurde in MySQL Version 3.23 hinzu gef�gt. Er basiert zum gro�en
-Teil auf dem ISAM Tabellen-Code, hat aber eine Menge neuer und sehr
-n�tzlicher Features.
-
-@item Der Parser und lexikalische Analysator --- stabil
-Es hat seit sehr langer Zeit keinen einzigen berichteten Bug in diesem
-System gegeben.
-
-@item Der C Client-Code --- stabil
-Keine bekannten Probleme. Im fr�hen 3.20 Release gab es einige
-Einschr�nkungen hinsichtlich der Gr��e des Sende- / Empfangs-Puffers
-(buffer size). Ab Version 3.21 ist die Puffergr��e jetzt dynamisch, bis
-zu einem Vorgabewert von 16 M.
-
-@item Standard-Client-Programme --- stabil
-Dies beinhaltet @code{mysql}, @code{mysqladmin}, @code{mysqlshow},
-@code{mysqldump} und @code{mysqlimport}.
-
-@item Basis-SQL --- stabil
-Die grundlegenden SQL-Funktionen, Zeichenketten-Klassen und dynamisches
-Speicher-Handling. Nicht ein einziger berichteter Bug in diesem System.
-
-@item Anfragen-Optimierer (Query optimizer) --- stabil
-
-@item Bereichs-Optimierer (Range optimizer) --- stabil
-
-@item Join-Optimierer (Join optimizer) --- stabil
-
-@item Sperren (Locking) --- Gamma
-Dies ist sehr system-abh�ngig. Auf einigen Systemen gibt es gro�e
-Probleme, wenn Standard-Betriebssystem-Sperren verwendet wird
-(@code{fcntl()}). In solchen F�llen sollten Sie den MySQL-Daemon mit dem
-Flag @code{--skip-locking} laufen lassen. Bekannt ist, dass solche
-Probleme auf manchen Linux-Systemen vorkommen sowie auf SunOS, wenn NFS-
-gemountete Dateisysteme verwendet werden.
-
-@item Linux-Threads --- stabil
-Das haupts�chliche Problem fand sich im @code{fcntl()}-Aufruf, der durch
-Benutzung der @w{@code{--skip-locking}}-Option bei @code{mysqld} behoben
-werden kann. Einige Leute haben Lockup-Probleme mit Version 0.5
-berichtet. Linux-Threads m�ssen rekompiliert werden, wenn Sie mehr als
-1000 gleichzeitige Verbindungen benutzen wollen. Obwohl es m�glich ist,
-so viele Verbindungen mit den vorgabem��igen Linux-Threads laufen zu
-lassen (obwohl man nie �ber 1021 kommen wird), macht das vorgabem��ige
-Stack-Spacing von 2 MB die Applikation unstabil, und wir konnten einen
-Coredump reproduzieren, nachdem 1021 Verbindungen im Leerlauf (idle
-connections) hergestellt wurden. @xref{Linux}.
-
-@item Solaris 2.5+ pthreads --- stabil
-Wir benutzen dies f�r unsere gesamte Produktionsarbeit.
-
-@item MIT-pthreads (andere Systeme) --- stabil
-Seit Version 3.20.15 gab es keine berichteten Bugs mehr, und keine
-bekannten Bugs seit Version 3.20.16. Auf einigen Systemen gibt es ein
-``Misfeature'', das hei�t einige Operationen sind recht langsam (1/20
-Sekunde Schlafzyklus zwischen jeder Anfrage). Nat�rlich k�nnen MIT-
-Threads alles ein bisschen verlangsamen, aber Index-basierende
-@code{SELECT}-Statements werden �blicherweise in einem Zeit-Frame
-ausgef�hrt, also sollte es kein mutex locking/thread juggling geben.
-
-@item Andere Thread-Implementierungen --- Beta - Gamma
-Die Ports zu anderen Systemen sind noch sehr neu und k�nnen Bugs haben,
-m�glicherweise auch in MySQL, aber in den meisten F�llen in der Thread-
-Implementierung selbst.
-
-@item @code{LOAD DATA ...}, @code{INSERT ... SELECT} --- stabil
-Einige Leute dachten, hier Bugs gefunden zu haben, aber �blicherweise
-haben sich diese als Missverst�ndnisse heraus gestellt. Bitte sehen Sie
-zuerst im Handbuch nach, bevor Sie Bugs berichten!
-
-@item @code{ALTER TABLE} --- stabil
-Einige �nderungen in Version 3.22.12.
-
-@item DBD --- stabil
-Wird jetzt von Jochen Wiedmann gewartet
-(@email{wiedmann@@neckar-alb.de}). Danke!
-
-@item @code{mysqlaccess} --- stabil
-Geschrieben und gewartet von Yves Carlier
-(@email{Yves.Carlier@@rug.ac.be}). Danke!
-
-@item @code{GRANT} --- stabil
-gro�e �nderungen in MySQL Version 3.22.12.
-
-@item @strong{MyODBC} (benutzt ODBC SDK 2.5) --- Gamma
-Scheint mit einigen Programmen gut zu laufen.
-
-@item Replikation -- Beta / Gamma
-Wir arbeiten noch an der Replikation, also erwarten Sie nicht, dass
-diese schon felsenfest steht. Auf der anderen Seite benutzen MySQL-
-Benutzer diese bereits mit guten Resultaten.
-
-@item BDB-Tabellen -- Beta
-Der Berkeley-Datenbank-Code ist sehr stabil, aber wir verbessern immer
-noch die Schnittstelle zwischen MySQL und BDB-Tabellen, also wird es
-einige Zeit dauern, bevor dies so gut wie andere Tabellentypen getestet
-ist.
-
-@item InnoDB-Tabellen -- Beta
-Diese wurden @code{MySQL} k�rzlich hinzu gef�gt. Sie scheinen gut zu
-funktionieren und k�nnen nach einigen anf�nglichen Tests benutzt werden.
-
-@item Automatische Wiederherstellung von MyISAM-Tabellen - Beta
-Dies betrifft nur den neuen Code, der beim �ffnen einer Tabelle
-nachsieht, ob diese korrekt geschlossen wurde und ein automatisches
-�berpr�fen / Reparieren der Tabelle ausf�hrt, falls das nicht der Fall
-war.
-
-@item MERGE-Tabellen -- Beta / Gamma
-Die Benutzung von Schl�sseln bei @code{MERGE}-Tabellen ist noch nicht
-sehr ausgetestet. Der restliche Teile des @code{MERGE}-Codes ist recht
-gut getestet.
-
-@item FULLTEXT -- Beta
-Textsuche scheint zu funktionieren, wird aber noch nicht viel
-eingesetzt.
-
-@end table
-
-MySQL AB stellt E-Mail-Support f�r zahlende Kunden bereit, aber die
-MySQL-Mailingliste bietet �blicher Weise Antworten f�r die meisten
-Fragen. Bugs werden meist direkt mit einem Patch behoben; f�r
-schwerwiegende Bugs gibt es fast immer ein neues Release.
-
-
-@node Table size, Year 2000 compliance, Stability, What-is
-@c German node Tabellengr��e
-@subsection Wie gro� k�nnen MySQL-Tabellen sein?
-
-@cindex Tabellen, maximale Gr��e
-@cindex Gr��e von Tabellen
-@cindex Betriebssysteme, Dateigr��en-Beschr�nkungen
-@cindex Beschr�nkungen, Dateigr��e
-@cindex Dateien, Dateigr��e
-
-MySQL Version 3.22 hat eine Begrenzung auf 4G bei der Tabellengr��e.
-Mit dem neuen @code{MyISAM} in MySQL Version 3.23 wurde die maximale
-Tabellengr��e auf 8 Millionen Terabytes (2 ^ 63 bytes) hochgeschraubt.
-
-Beachten Sie allerdings, dass Betriebssysteme ihre eigenen Dateigr��en-
-Beschr�nkungen haben. Hier sind einige Beispiele:
-
-@multitable @columnfractions .5 .5
-@item @strong{Betriebssystem} @tab @strong{Dateigr��en-Beschr�nkung}
-@item Linux-Intel 32 bit @tab 2G, 4G oder mehr, abh�ngig von der Linux-Version
-@item Linux-Alpha @tab 8T (?)
-@item Solaris 2.5.1 @tab 2G (m�glich sind 4G mit Patch)
-@item Solaris 2.6 @tab 4G
-@item Solaris 2.7 Intel @tab 4G
-@item Solaris 2.7 ULTRA-SPARC @tab 8T (?)
-@end multitable
-
-Auf Linux 2.2 kann man gr��ere Tabellen als 2G benutzen, wenn man den
-LFS-Patch f�r das ext2 Dateisystem benutzt. Auf Linux 2.4 existiert
-zus�tzlich ein Patch f�r das ReiserFS, um Unterst�tzung f�r gro�e
-Dateien zu erhalten.
-
-Letztlich wird die Tabellengr��e f�r MySQL normalerweise durch das
-Betriebssystem begrenzt.
-
-Vorgabem��ig haben MySQL-Tabellen eine maximale Gr��e von etwa 4G. Sie
-k�nnen die maximale Tabellengr��e f�r eine Tabelle mit dem @code{SHOW
-TABLE STATUS}-Befehl �berpr�fen oder mit @code{myisamchk -dv
-tabellen_name}. @xref{SHOW}.
-
-Wenn Sie gr��ere Tabellen als 4G ben�tigen (und Ihr Betriebssystem dies
-unterst�tzt), sollten Sie die @code{AVG_ROW_LENGTH}- und
-@code{MAX_ROWS}-Parameter benutzen, wenn Sie Ihre Tabelle anlegen.
-@xref{CREATE TABLE}. Sie k�nnen diese auch sp�ter setzen, mit
-@code{ALTER TABLE}. @xref{ALTER TABLE}.
-
-Falls auf Ihre gro�e Tabelle nur mit Lesezugriff zugegriffen wird
-(read-only), k�nnen Sie auch @code{myisampack} benutzen, um mehrere
-Tabellen zu vereinen (merge) und sie zu einer zu komprimieren.
-@code{myisampack} komprimiert eine Tabelle �blicherweise mindestens um
-50%, also k�nnen Sie effektiv viel gr��ere Tabellen benutzen.
-@xref{myisampack, ,@code{myisampack}}.
-
-Sie k�nnen die Dateibegrenzung des Betriebssystems f�r @code{MyISAM}
-Daten-Dateien umgehen, indem Sie die @code{RAID}-Option benutzen.
-@xref{CREATE TABLE}.
-
-Eine weitere L�sung kann die MERGE-Bibliothek darstellen, die Ihnen
-erlaubt, eine Sammlung identischer Tabellen zugleich zu benutzen.
-@xref{MERGE, MERGE tables}.
-
-
-@node Year 2000 compliance, , Table size, What-is
-@c German node Jahr-2000-Konformit�t
-@subsection Jahr-2000-Konformit�t
-
-@cindex Jahr-2000-Konformit�t
-@cindex Kompatibilit�t, Y2K, Jahr 2000
-@cindex Datumsfunktionen, Y2K, Jahr-2000-Konformit�t
-
-MySQL selbst hat keine Probleme mit der Jahr-2000-Konformit�t:
-
-@itemize @bullet
-@item
-MySQL benutzt Unix-Zeitfunktionen und hat keine Probleme mit
-Datumsangaben bis @code{2069}. Alle zweistelligen Jahresangaben werden
-als Angaben zwischen @code{1970} und @code{2069}, betrachtet, was
-bedeutet, dass, wenn Sie @code{01} in einer Spalte speichern, MySQL dies
-als @code{2001} behandelt.
-
-@item
-Alle MySQL Datumsfunktionen sind in einer Datei @file{sql/time.cc}
-gespeichert und sehr sorgf�ltig kodiert, um Jahr-2000-sicher zu sein.
-
-@item
-In MySQL Version 3.22 und sp�ter kann der neue Spaltentyp @code{YEAR}
-Jahre @code{0} und von @code{1901} bis @code{2155} in 1 Byte speichern
-und sie mit 2 oder 4 Ziffern anzeigen.
-@end itemize
-
-Probleme k�nnen Sie bekommen, wenn Sie MySQL mit Applikationen benutzen,
-die MySQL auf eine Art benutzen, die nicht Jahr-2000-sicher ist. Zum
-Beispiel speichern oder �ndern viele alte Applikationen Jahresangaben,
-indem sie zweistellige Werte benutzen (was mehrdeutig ist), anstatt
-vierstellige Werte zu nehmen. Dieses Problem kann durch Applikationen
-verschlimmert werden, die Werte wie @code{00} oder @code{99} als Anzeiger
-``fehlender'' Werte benutzen.
-
-Leider sind diese Probleme m�glicherweise schwer zu beheben, weil
-verschiedene Applikationen von unterschiedlichen Programmierern
-geschrieben sein k�nnen, von denen jeder einen anderen Satz von
-Konventionen und Funktionen benutzt haben kann, was die Handhabung von
-Datumsangaben betrifft.
-
-Hier ist eine einfache Demonstration, die zeigt, dass MySQL keine
-Probleme mit Datumsangaben bis zum Jahr 2030 hat:
-
-@example
-mysql> DROP TABLE IF EXISTS y2k;
-Query OK, 0 rows affected (0.01 sec)
-
-mysql> CREATE TABLE y2k (date date, date_time datetime, time_stamp timestamp);
-Query OK, 0 rows affected (0.00 sec)
-
-mysql> INSERT INTO y2k VALUES
- -> ("1998-12-31","1998-12-31 23:59:59",19981231235959),
- -> ("1999-01-01","1999-01-01 00:00:00",19990101000000),
- -> ("1999-09-09","1999-09-09 23:59:59",19990909235959),
- -> ("2000-01-01","2000-01-01 00:00:00",20000101000000),
- -> ("2000-02-28","2000-02-28 00:00:00",20000228000000),
- -> ("2000-02-29","2000-02-29 00:00:00",20000229000000),
- -> ("2000-03-01","2000-03-01 00:00:00",20000301000000),
- -> ("2000-12-31","2000-12-31 23:59:59",20001231235959),
- -> ("2001-01-01","2001-01-01 00:00:00",20010101000000),
- -> ("2004-12-31","2004-12-31 23:59:59",20041231235959),
- -> ("2005-01-01","2005-01-01 00:00:00",20050101000000),
- -> ("2030-01-01","2030-01-01 00:00:00",20300101000000),
- -> ("2050-01-01","2050-01-01 00:00:00",20500101000000);
-Query OK, 13 rows affected (0.01 sec)
-Records: 13 Duplicates: 0 Warnings: 0
-
-mysql> SELECT * FROM y2k;
-+------------+---------------------+----------------+
-| date | date_time | time_stamp |
-+------------+---------------------+----------------+
-| 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 |
-| 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 |
-| 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 |
-| 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 |
-| 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 |
-| 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 |
-| 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 |
-| 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 |
-| 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 |
-| 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 |
-| 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 |
-| 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 |
-| 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 |
-+------------+---------------------+----------------+
-13 rows in set (0.00 sec)
-
-@end example
-
-Das zeigt, dass die @code{DATE}- und @code{DATETIME}-Typen f�r zuk�nftige
-Datumsangaben keine Probleme bereiten werden (sie handhaben Datumsangaben
-bis zum Jahr 9999).
-
-Der @code{TIMESTAMP}-Typ, der zur Speicherung der aktuellen Zeit benutzt
-wird, hat nur einen Bereich bis zu @code{2030-01-01}. @code{TIMESTAMP} hat
-einen Bereich von @code{1970} bis @code{2030} auf 32-Bit-Maschinen
-(vorzeichenbehafteter Wert). Auf 64-Bit-Maschinen handhabt dieser
-Spaltentyp bis zu @code{2106} (vorzeichenloser Wert).
-
-Obwohl MySQL Jahr-2000-kompatibel ist, sind Sie daf�r verantwortlich,
-mehrdeutige Eingaben zu vermeiden. Siehe @ref{Year 2000 compliance} wegen
-der Regeln, die MySQL anwendet, wenn mehrdeutige Datumsangaben gemacht
-werden (Datumsangaben, die zweistellige Jahreswerte verwenden).
-
-
-
-@node What is MySQL AB, Licensing and Support, What-is, Deutsch
-@c German node Was ist MySQL AB?
-@section Was ist MySQL AB?
-
-@cindex MySQL AB, Definition
-
-@code{MySQL AB} ist das Unternehmen der MySQL Gr�nder und Hauptentwickler.
-MySQL AB wurde urspr�nglich in Schweden von David Axmark, Allan Larsson
-und Michael @code{Monty} Widenius gegr�ndet.
-
-Alle Entwickler des MySQL Servers sind Angestellte dieses Unternehmens.
-Wir sind eine virtuelle Firma mit Mitarbeitern, die �ber die ganze Welt
-verstreut in aller Herren L�nder sitzen. Der Hauptteil unserer Kommunikation
-untereinander, mit unseren Anwendern, Unterst�tzern und Partnern wird �ber
-das Internet abgewickelt
-
-Wir haben uns der Entwicklung und Verbreitung des MySQL Datenbankservers
-verschrieben. MySQL h�lt das Copyright der MySQL Quelltexte, des MySQL Logos
-und dieses Handbuchs.. @xref{What-is}.
-
-
-Die MySQL-Kernwerte zeigen unsere Verpflichtung gegen�ber MySQL und Open
-Source.
-
-Wir wollen, dass MySQL folgendes ist:
-
-@itemize @bullet
-@item
-Die beste und meist benutzte Datenbank der Welt.
-@item
-Verf�gbar f�r alle. Alle sollen sich MySQL leisten k�nnen.
-@item
-Leicht zu benutzen.
-@item
-Kontinuierlich verbessert, trotzdem immer schnell und sicher bleibend.
-@item
-Es soll Spass machen, MySQL zu benutzen und zu verbessern.
-@item
-Frei von Bugs.
-@end itemize
-
-
-MySQL AB und die Leute von MySQL AB:
-
-@itemize @bullet
-@item
-Verbreiten die Open-Source-Philosophie und unterst�tzen die
-Open-Source-Community.
-@item
-Bem�hen sich, gute B�rger zu sein.
-@item
-Bevorzugen Partner, die unsere Werte und unsere Geisteshaltung teilen.
-@item
-Beantworten Mail und geben Support.
-@item
-Sind ein virtuelles Unternehmen, das mit anderen im Netzwerk
-zusammenarbeitet (networking).
-@item
-Arbeiten gegen Software-Patente.
-@end itemize
-
-@menu
-* MySQL AB business model and services::
-@end menu
-
-@node MySQL AB business model and services, , What is MySQL AB, What is MySQL AB
-@c German node MySQL AB Gesch�ftsmodell und Services
-@subsection Gesch�ftsmodell und Dienstleistungen von MySQL AB
-
-Eine der uns h�ufig gestellten Fragen ist: Wie kann man von etwas leben,
-das man kostenlos abgibt? Hier ist die Antwort:
-MySQL AB verdient Geld mit Support, Dienstleistungen, kommerziellen
-Lizenzen und Lizenzgeb�hren, das wir dazu verwenden, die
-Produktentwicklung zu finanzieren und die MySQL-Gesch�ftsfelder
-auszubauen.
-
-
-Unser Unternehmen l�uft seit der Gr�ndung profitabel. Im Oktober 2001
-akzeptierten wir eine Risikokapitalfinanzierung durch f�hrende
-skandinavische Investoren und eine Handvoll Business-Angels. Die
-Investitionen werden genutzt, um unser Gesch�ftsmodell auf solide F��e
-zu stellen und eine Grundlage f�r nachhaltiges Wachstum zu schaffen.
-
-@menu
-* Business Services Support::
-* Business Services Training::
-* Business Services Consulting::
-* Business Services Commercial licenses::
-* Business Services Partnering::
-* Business Services Advertising::
-* Contact information::
-@end menu
-
-@node Business Services Support, Business Services Training, MySQL AB business model and services, MySQL AB business model and services
-@c German node Business Services Support
-@subsubsection Support
-
-MySQL AB geh�rt den Gr�ndern und Haupt-Entwicklern der MySQL-Datenbank
-und wird von ihnen betrieben. Die Entwickler f�hlen sich verpflichtet,
-Kunden und anderen Benutzern Support zu bieten, um mit deren
-Bed�rfnissen und Problemen in Kontakt zu bleiben. Unser gesamter Support
-wird durch qualifizierte Entwickler geleistet. Wirklich schwierige
-Fragen werden von Michael @code{Monty} Widenius beantwortet, der der
-erste Entwickler des MySQL-Servers ist. @xref{Support}.
-
-Um Support unterschiedlicher Grade zu bestellen, besuchen Sie bitte die
-Bestellseite unter @uref{https://order.mysql.com/}. Wenn Sie nur
-beschr�nkten Zugriff auf das Internet haben, setzen Sie sich bitte mit
-unserem Vertrieb unter @email{sales@@mysql.com} in Verbindung.
-
-@node Business Services Training, Business Services Consulting, Business Services Support, MySQL AB business model and services
-@c German node Business Services Training
-@subsubsection Training und Zertifizierung
-
-MySQL AB f�hrt Schulungen zu MySQL und verwandten Themen weltweit durch.
-Wir bieten sowohl offene Kurse als auch In-house-Trainings an, die auf
-die speziellen Bed�rfnisse Ihres Unternehmens zugeschnitten sind.
-MySQL-Schulungen werden auch durch unsere Partner durchgef�hrt, die
-Authorised MySQL Training Center.
-
-Unsere Schulungsmaterialien benutzen dieselben Beispiel-Datenbanken wie
-unsere Dokumentation und unsere Beispiel-Applikationen und werden
-st�ndig aktualisiert, um den Entwicklungsstand der neusten MySQL-Version
-widerzuspiegeln. Unsere Trainer erhalten R�ckhalt vom Entwicklungsteam,
-um die Trainingsqualit�t und die kontinuierliche Entwicklung des
-Schulungsmaterials sicherzustellen. Das stellt auch sicher, dass keine
-w�hrend der Kurse aufgetretenen Fragen unbeantwortet bleiben.
-
-Wenn Sie an unseren Schulungen teilnehmen, k�nnen Sie sicher sein, die
-Ziele zu erreichen, die Sie mit Ihren MySQL-bezogenen Applikationen
-anstreben. Ausserdem haben Sie folgende Vorteile:
-
-@itemize @bullet
-@item
-Sie sparen Zeit.
-@item
-Sie verbessern die Performance Ihrer Applikation(en).
-@item
-Sie verringern die Notwendigkeit zus�tzlicher Hardware, was Kosten
-spart.
-@item
-Sie verbessern Ihre Sicherheit.
-@item
-Sie erh�hen die Zufriedenheit Ihrer Kunden und Mitarbeiter.
-@item
-Sie bereiten sich auf die MySQL-Zertifizierung vor.
-@end itemize
-
-Wenn Sie an unseren Schulungen Interesse als m�glicher Teilnehmer oder
-Trainingspartner haben, besuchen Sie bitte die Seite unter
-@uref{http://www.mysql.com/training/}. Wenn Sie nur beschr�nkten Zugriff
-auf das Internet haben, setzen Sie sich bitte mit unserem
-Trainingspersonal unter @email{training@@mysql.com} in Verbindung.
-
-Die Ver�ffentlichung des MySQL-Zertifizierungsprogramms ist f�r 2002
-geplant. Details finden Sie unter
-@uref{http://www.mysql.com/training/certification.html}. Wenn Sie stets
-die neusten Informationen �ber das MySQL-Zertifizierungsprogramm haben
-wollen, schicken Sie bitte eine E-Mail an
-@email{certification@@mysql.com}.
-
-
-@c German FIX this node entry was missing but the section was there...
-@node Business Services Consulting, Business Services Commercial licenses, Business Services Training, MySQL AB business model and services
-@c German node Business Services Consulting
-@subsubsection Beratung
-MySQL AB und seine authorisierten Partner bieten Benutzern des
-MySQL-Servers und denen, die ihn in ihre Software einbetten wollen,
-Beratungsleistungen, weltweit.
-
-Unsere Berater k�nnen Ihnen helfen, Ihre Datenbanken zu entwerfen und zu
-optimieren, effiziente Anfragen zu konstruieren, Ihre Plattform auf
-optimale Performance zu tunen, Migrationsprobleme zu l�sen, Replikation
-aufzusetzen, robuste transaktionale Applikationen zu bauen und vieles
-mehr. Wir helfen auch Kunden dabei, den MySQL-Server f�r den
-Gro�fl�chigen Einsatz in ihre Produkte und Applikationen einzubauen.
-
-Unsere Berater arbeiten in enger Kooperation mit unserem
-Entwicklungsteam, was die technische Qualit�t unserer Dienstleistungen
-sicherstellt. Beratungsaufgaben erstrecken sich von zweit�gigen
-Power-Start-Sessions bis zu Projekten, die Wochen und Monate dauern.
-Unsere Kompetenz deckt nicht nur den MySQL-Server ab, sondern auch
-Programmier- und Skripting-Sprachen wie PHP, Perl und andere.
-
-Wenn Sie an unseren Beratungsleistungen interessiert sind oder ein
-Consulting-Partner werden wollen, besuchen Sie bitte unsere Seite unter
-@uref{http://www.mysql.com/consulting/}. Wenn Sie nur beschr�nkten
-Zugriff auf das Internet haben, setzen Sie sich bitte mit unserem
-Beratungspersonal unter @email{consulting@@mysql.com} in Verbindung.
-
-@node Business Services Commercial licenses, Business Services Partnering, Business Services Consulting, MySQL AB business model and services
-@c German node Business Services Commercial Licenses
-@subsubsection Kommerzielle Lizenzen
-
-Die MySQL-Datenbank wird unter der @code{GNU General Public License}
-ver�ffentlicht (@code{GPL}). Das bedeutet, dass die MySQL-Software
-kostenlos unter der GPL benutzt werden darf. Wenn Sie nicht an die
-GPL-Bedingungen gebunden sein wollen (was in der Folge bedeutet, dass
-auch Ihre eigenen Applikationen GPL werden), k�nnen Sie eine
-kommerzielle Lizenz f�r dasselbe Produkt unter
-@uref{https://order.mysql.com/} erwerben.
-
-Weil MySQL AB das Copyright am MySQL-Server besitzt, k�nnen wir eine
-@code{duale Lizensierung} einsetzen, was hei�t, dass dasselbe Produkt
-sowohl unter der GPL als auch unter einer kommerziellen Lizenz
-erh�ltlich ist. Das ber�hrt in keiner Weise die Verpflichtung von MySQL
-AB gegen�ber @code{Open Source}. Wegen Details, wann eine kommerzielle
-Lizenz erforderlich ist, sehen Sie bitte unter
-@ref{Lizenzpolitik} nach.
-
-Wir verkaufen auch kommerzielle Lizenzen von Open-Source-GPL-Software
-Dritter. Ein gutes Beispiel hierf�r ist der
-@code{InnoDB}-Tabellen-Handler, der ACID-Unterst�tzung, Sperren auf
-Zeilenebene, Wiederherstellung nach Abst�rzen, Multiversionierung,
-Fremdschl�sselunterst�tzung und vieles mehr bietet.
-
-@node Business Services Partnering, Business Services Advertising, Business Services Commercial licenses, MySQL AB business model and services
-@c German node Business Services Partnering
-@subsubsection Partnerprogramme
-@cindex Partnerschaft mit MySQL AB
-
-MySQL AB hat ein weltweites Partnerprogramm, dass Schulungskurse,
-Support, Beratung, L�sungen, Publikationen plus Weiterverkauf und
-Vertrieb von MySQL und verwandten Produkten beinhaltet. Partner
-erscheinen unter @uref{http://www.mysql.com/} auf der Website und
-erhalten das Recht, spezielle Versionen der MySQL-Schutzmarken zu
-benutzen, um ihre Produkte zu identifizieren und ihr Gesch�ft
-voranzutreiben. Wenn Sie interessiert sind, ein MySQL-AB-Partner zu
-werden, schicken Sie bitte eine E-Mail an @email{partner@@mysql.com}.
-
-Das Wort @code{MySQL} und das MySQL-Delphin-Logo sind Schutzmarken von
-MySQL AB. @xref{MySQL AB Logos and Trademarks}.
-
-@node Business Services Advertising, Contact information, Business Services Partnering, MySQL AB business model and services
-@c German node Business Services Advertising
-@subsubsection Werbung
-
-Die MySQL-Website (@uref{http://www.mysql.com/}) ist bei Entwicklern und
-Benutzern beliebt. Im Oktober 2001 bedienten wir 10 Millionen
-Seitenanfragen (PageViews). Unsere Besucher repr�sentieren eine Gruppe,
-die Kaufentscheidungen und Empfehlungen sowohl f�r Software als auch f�r
-Hardware trifft. 12% unserer Besucher genehmigen Kaufentscheidungen,
-lediglich 9% sind �berhaupt nicht an Kaufentscheidungen beteiligt. Mehr
-als 65% haben innerhalb des letzten halben Jahres online eingekauft, 70%
-planen, in den n�chsten Monaten einzukaufen. Wenn Sie Interesse haben,
-Werbebanner auf unserer Website @uref{http://www.mysql.com/} zu
-schalten, setzen Sie sich bitte mit @email{advertising@@mysql.com} in
-Kontakt.
-
-@node Contact information, , Business Services Advertising, MySQL AB business model and services
-@c German node Kontaktinformationen
-@subsubsection Kontaktinformationen
-
-@cindex Kontaktinformationen
-@cindex Lizensierung, Kontaktinformationen
-@cindex Werbung, Kontaktinformationen
-@cindex Anstellung, Kontaktinformationen
-@cindex Partnerschaft mit MySQL
-@cindex Anstellung bei MySQL
-@cindex Jobs bei MySQL
-
-Die MySQL Website (@uref{http://www.mysql.com/})
-enth�lt die neusten Informationen �ber MySQL und MySQL AB.
-
-F�r Presseservice und Anfragen aller Art, die in unseren
-Ver�ffentlichungen (@uref{http://www.mysql.com/news/}) nicht
-behandelt werden, wenden Sie sich bitte an
-@email{press@@mysql.com}.
-
-Zeitnahe, pr�zise Antworten auf technische Fragen erhalten Sie, wenn Sie
-unter @uref{https://order.mysql.com/, order} einen unserer
-@uref{http://www.mysql.com/Support/arrangements/types.html,
-Support-Vertr�ge} abschlie�en.
-MySQL-Support wird von den MySQL-Entwicklern geleistet, weshalb der
-Standard extrem hoch ist.
-
-Informationen �ber MySQL Trainig erhalten Sie unter
-@uref{http://www.mysql.com/training/}. Wenn Sie einen
-eingeschr�nkten Internetzugang haben, kontaktieren Sie
-bitte unser Trainingspersonal unter @email{training@@mysql.com}.
-@xref{Business Services Training}.
-
-F�r Informationen �ber das MySQL Zertifizierungsprogramm
-erhalten Sie unter @uref{http://www.mysql.com/training/certification.html}.
-Wenn Sie weiterhin �ber das MySQL Zertifizierungsprogramm informiert
-werden wollen, schreiben Sie eine E-Mail an @email{certification@@mysql.com}.
-@xref{Business Services Consulting}.
-
-Kommerzielle Lizenzen k�nnen online unter @uref{https://order.mysql.com/}
-abgewickelt werden. Dort finden Sie ausserdem Informationen dar�ber,
-wie Sie ihre Bestellung per Fax erledigen k�nnen. Wenn Sie Fragen bez�glich
-der Lizensierung haben, oder Sie ein Angebot �ber eine gr��ere Lizenzerteilung
-erhalten wollen, f�llen Sie bitte Das Kontaktformular auf unserer Website
-(@uref{http://www.mysql.com/}) aus, oder schicken Sie eine E-Mail
-an @email{licensing@@mysql.com} (f�r Lizenzfragen) oder an
-@email{sales@@mysql.com} (f�r Verkaufsinformationen).
-@xref{Lizenzpolitik}.
-
-Wenn Sie daran interessiert sind, ein Werbebanner auf unserer Website
-(@uref{http://www.mysql.com/}) zu schalten, schicken Sie bitte
-eine E-Mail an @email{advertising@@mysql.com}.
-@xref{Business Services Advertising}.
-
-Wenn Sie ein Unternehmen vertreten, dass an einer Partnerschaft mit MySQL
-interessiert ist, schicken Sie bitte eine E-Mail an
-@email{partner@@mysql.com}.
-
-F�r weitere Informationen �ber die MySQL Schutzmarkenbestimmungen, beachten
-Sie bitte @uref{http://www.mysql.com/company/trademark.html} oder kontaktieren
-Sie @email{trademark@@mysql.com}.
-@c German FIX changed 'and' to 'und' to make German xref work
-@xref{MySQL AB Logos and Trademarks}.
-
-Wenn Sie an einem der Jobs interessiert sind, die im
-@uref{http://www.mysql.com/development/jobs/, jobs}-Abschnitt aufgef�hrt
-sind, schicken Sie bitte eine E-Mail an @email{jobs@@mysql.com}. Bitte
-senden Sie ihre CV nicht als Anhang an dieser mail mit, sondern
-f�gen Sie sie lieber am Ende ihrer mail als Klartext (plain text) ein.
-
-Allgemeine Diskussionen mit vielen unserer Benutzer k�nnen Sie auf den
-entsprechenden @uref{http://www.mysql.com/documentation/lists.html,
-Mailing-Listen} f�hren.
-
-Fehlerberichte (Auch Bugreporte genannt), sowie Fragen und Kommentare, sollten
-an die Mailingliste @email{mysql@@lists.mysql.com} gehen. Wenn Sie
-ein empfindliches Sicherheitsloch im MySQL Server gefunden haben, sollten
-@c German FIX added . after schreiben and after the xref.
-Sie eine E-Mail an @email{security@@mysql.com} schreiben.
-@xref{Bug reports}.
-
-Wenn Sie Benchmarkergebnis haben, die wir ver�ffentlichen k�nnen, kontaktieren
-Sie uns unter @email{benchmarks@@mysql.com}.
-
-Wenn Sie Vorschl�ge f�r Hinzuf�gungen oder Korrekturen dieses Handbuchs
-haben, schicken Sie sie bitte an das Handbuch-Team:
-@email{docs@@mysql.com}.
-
-Fragen zur Arbeitsweise oder zu Inhalten unserer Website(@uref{http://www.mysql.com/})
-stellen Sie bitte an @email{webmaster@@mysql.com}.
-
-Fragen �ber das MySQL Portal (@uref{http://www.mysql.com/portal/})
-k�nnen an @email{portals@@mysql.com} geschickt werden.
-
-Die Datenschutzbestimmungen von MySQL AB k�nnen Sie unter
-@uref{http://www.mysql.com/company/privacy.html} einsehen.
-F�r irgendwelche Fragen dar�ber, wenden Sie sich bitte an
-@email{privacy@@mysql.com}.
-
-Allgemeine Informationsanfragen schicken Sie bitte an @email{info@@mysql.com}.
-
-
-@node Licensing and Support, MySQL 4.0 In A Nutshell, What is MySQL AB, Deutsch
-@c German node Lizensierung and Support
-@section MySQL Support and Lizensierung
-
-@cindex Lizensierungsbedingungen
-@cindex Supportbedingungen
-
-Dieser Abschnitt beschreibt die MySQL Support und Lizensierungsvereinbarungen
-
-
-@menu
-* Support::
-* Copyright::
-* MySQL AB Logos and Trademarks::
-* Lizenzpolitik::
-@end menu
-
-@node Support, Copyright, Licensing and Support, Licensing and Support
-@c German node Support
-@subsection Support den MySQL AB anbietet
-
-@cindex Support, Arten
-@cindex Arten von Support
-@cindex Kommerzieller Support, Arten
-@cindex Kosten, Support
-@cindex Lizensierungskosten
-@cindex Supportkosten
-@cindex Preise, Support
-
-Wir versuchen, technischen Support in einem breiten und umfassenden
-Blickwinkel zu sehen. Fast jedes Problem im Zusammenhang mit
-MySQL-Software ist f�r uns wichtig, wenn es f�r Sie wichtig ist.
-Typischerweise suchen Kunden Hilfe dabei, wie man unterschiedliche
-Befehle und Dienstprogramme zum Funktionieren bringt, wie
-Performance-Flaschenh�lse beseitigt werden k�nnen, wie man besch�digte
-Systeme repariert, wie sich Betriebssysteme oder Netzwerkkonfigurationen
-auf MySQL auswirken, wie man Datensicherung und Wiederherstellung
-optimal konfiguriert, wie man APIs benutzt usw.
-Unser Support deckt nur den MySQL-Server und unsere eigenen
-Dienstprogramme ab, nicht Produkte Dritter, die auf den MySQL-Server
-zugreifen, obwohl wir auch hierbei versuchen, zu helfen wo wir k�nnen.
-
-Detaillierte Informationen �ber unsere unterschiedlichen
-Support-Optionen finden Sie auf @uref{https://order.mysql.com/}, wo auch
-Support-Vertr�ge online bestellt werden k�nnen. Wenn Sie nur
-beschr�nkten Zugriff auf das Internet haben, setzen Sie sich mit unserem
-Vertrieb unter @email{sales@@mysql.com} in Verbindung.
-
-Technischer Support ist wie eine Lebensversicherung. Sie k�nnen
-jahrelang ohne solches gl�cklich sein, doch wenn die Stunde schl�gt,
-kann es zu sp�t sein, diese(n) zu kaufen!
-Wenn Sie den MySQL-Server f�r wichtige Applikationen nutzen und
-pl�tzlich Problemen begegnen, kann es m�glicherweise zu lange dauern,
-alle Antworten selbst herauszufinden. Es kann daher sein, dass Sie
-unmittelbaren Zugriff auf die erfahrensten MySQL-Probleml�ser ben�tigen,
-und da
-
-@node Copyright, MySQL AB Logos and Trademarks, Support, Licensing and Support
-@c German node Copyright
-@subsection Copyrights und Lizenzen, die von MySQL verwendet werden.
-
-@cindex copyrights
-@cindex licenses
-
-@code{MySQL AB} besitzt das Copyright des MySQL Quellcodes,
-der MySQL Logos and Schutzmarken und dieses Handbuch
-@xref{What is MySQL AB}.
-Es gibt einige verschiedene Lizenzen, die f�r die MySQL Distribution
-relevant sind:
-
-@enumerate
-@item
-
-Der MySQL-spezifische Quelltext, der ben�tigt wird, um die
-@code{mysqlclient}-Bibliothek zu kompilieren, ist unter der @code{LGPL}
-lizensiert. Programme im @file{client}-Verzeichnis sind GPL. Jede Datei hat
-einen Header, aus dem ersichtlich ist, welches Copyright f�r diese Datei
-gilt.
-
-@item Die Client-Bibliothek und die (GNU @code{getopt})-Bibliothek werden
-von der ``GNU LIBRARY GENERAL PUBLIC LICENSE'' abgedeckt. @xref{LGPL license}.
-
-@item
-Der gesamte Quelltext des Servers und der (GNU @code{readline})-Bibliothek
-werden von der ``GNU GENERAL PUBLIC LICENSE'' abgedeckt. @xref{GPL license}.
-Diese findet sich unter anderem als Datei @file{COPYING} in den
-Distributionen.
-
-@item Einige Teile des Quelltextes (die @code{regexp}-Bibliothek) werden
-von einem Copyright in Berkeley-Art abgedeckt.
-
-@item
-�ltere Versionen von (3.22 und fr�her) stehen unter einer
-strikteren Lizenz
-(@uref{http://www.mysql.com/support/arrangements/mypl.html}).
-Bitte beachten sie die Dokumentation der speziellen Version f�r
-weitere Informationen.
-
-
-@item
-Das Handbuch steht @emph{nicht} unter einer GPL-artigen Lizenz.
-Die Benutzung des Handbuchs unterliegt den folgenden Bestimmungen.
-@itemize @bullet
-@item
-Die Konvertierung in andere Formate ist erlaubt, der Inhalt jedoch
-darf auf keinen Fall ge�ndert oder bearbeitet werden.
-@item
-Sie k�nnen eine gedruckte Version f�r den Privaten Gebrauch erstellen
-@item
-F�r alle anderen Zwecke, wie den Verkauf von gedruckten Kopien
-oder die Verwendung (auch in Teilen) des Handbuchs in anderen
-Ver�ffentlichungen, ist eine vorherige Vereinbarung mit MySQL AB
-erforderlich.
-@end itemize
-Bitte senden Sie eine E-Mail an @email{docs@@mysql.com} f�r weitere Informationen
-oder wenn Sie daran interessiert sind, eine �bersetzung zu erstellen.
-@end enumerate
-
-F�r Informationen dar�ber, wie die MySQL Lizenzen in der Praxis arbeiten
-beachten Sie bitte @ref{Lizenzpolitik}.
-Siehe auch @ref{MySQL AB Logos and Trademarks}.
-
-
-
-@menu
-* Verwendung des MySQL Servers unter einer kommerziellen Lizenz::
-* Webserver::
-@end menu
-
-@node Verwendung des MySQL Servers unter einer kommerziellen Lizenz, Webserver, Copyright, Copyright
-@c German node <no English equivalent>
-@subsubsection Verwendung des MySQL Servers unter einer kommerziellen Lizenz
-
-@c German FIX added . after schreiben and after the xref.
-@cindex ISP-Services
-@cindex Services, ISP
-@cindex Services, Web
-@cindex Internet Service Provider
-
-Internet Service Provider (ISP) hosten oft MySQL-Server f�r ihre Kunden.
-Aufgrund der GPL-Lizenz ist hierf�r keine Lizensierung erforderlich.
-
-Auf der anderen Seite ermutigen wir Leute, ISPs zu benutzen, die
-MySQL-Support haben, und das wird ihnen Vertrauen geben, dass ihr ISP im
-Falle von Problemen mit ihrer MySQL-Installation helfen wird, das Problem
-zu l�sen (in manchen F�llen mit der Hilfe des MySQL-Entwicklungsteams).
-
-Alle ISPs, die auf dem neuesten Stand der Dinge bleiben wollen, sollten sich
-in die @code{announce}-Mailing-Liste eintragen, um auf der Hut zu sein vor
-schwerwiegenden Problemen, die f�r ihre MySQL-Installationen relevant sein
-k�nnten.
-
-Beachten Sie bitte, dass ein ISP ohne MySQL-Lizenz seinen Kunden zumindest
-Lesezugriff auf den Quelltext der MySQL-Installation geben sollte, damit
-die Kunden feststellen k�nnen, dass diese korrekt gepatcht ist.
-
-
-@node Webserver, , Verwendung des MySQL Servers unter einer kommerziellen Lizenz, Copyright
-@c German node <no English equivalent>
-@subsubsection Einen Webserver betreiben, der MySQL benutzt
-
-@cindex Webserver, betreiben
-@cindex Einen Webserver betreiben
-
-Wenn Sie MySQL in Verbindung mit einem Webserver unter Unix betreiben,
-brauchen Sie nicht f�r eine Lizenz zu bezahlen.
-
-Das gilt selbst dann, wenn Sie einen kommerziellen Webserver betreiben, der
-MySQL benutzt, weil Sie nicht selbst eine eingebettete MySQL-Version
-verkaufen. Dennoch bitten wir Sie, in einem solchen Fall MySQL-Support zu
-kaufen, weil MySQL Ihrem Unternehmen hilft.
-
-
-@node MySQL AB Logos and Trademarks, Lizenzpolitik, Copyright, Licensing and Support
-@c German node MySQL AB Logos und Schutzmarken
-@subsection MySQL-AB-Logos und -Schutzmarken
-
-@cindex Logos
-@cindex Schutzmarken
-
-Viele MySQL-Datenbankbenutzer wollen auf Ihren Websites, ihren B�chern
-und Packungsprodukten das MySQL-AB-Delphin-Logo zeigen. Wir begr��en
-das und ermuntern dazu, weisen aber darauf hin, dass das Wort
-@code{MySQL} und das MySQL-Delphin-Logo Schutzmarken von MySQL AB sind
-und nur so benutzt werden d�rfen, wie in unserer Schutzmarken-Richtlinie
-unter @uref{http://www.mysql.com/company/trademark.html} festgelegt.
-
-
-
-
-@menu
-* The Original MySQL logo::
-* MySQL Logos that may be Used Without Written Permission::
-* When need MySQL logo permission::
-* MySQL AB Partnership Logos::
-@end menu
-
-@node The Original MySQL logo, MySQL Logos that may be Used Without Written Permission, MySQL AB Logos and Trademarks, MySQL AB Logos and Trademarks
-@c German node Das Original-MySQL-Logo
-@subsubsection Das Original-MySQL-Logo
-
-@c FIX: picture: MySQL logo
-
-Das MySQL-Delphin-Logo wurde von der finnischen Werbeagentur Priority im
-Jahr 2001 entworfen. Der Delphin wurde als passendes Symbol f�r die
-MySQL-Datenbank gew�hlt, weil er schlau, schnell und schlank ist und
-m�helos durch die Daten-Ozeane navigiert. Ausserdem m�gen wir Delphine.
-
-Das Original-MySQL-Logo darf nur von Repr�sentanten von MySQL AB und von
-Personen benutzt werden, die eine schriftliche Erlaubnis hierf�r haben.
-
-@node MySQL Logos that may be Used Without Written Permission, When need MySQL logo permission, The Original MySQL logo, MySQL AB Logos and Trademarks
-@c German node MySQL-Logos die ohne schriftliche Erlaubnis benutzt werden d�rfen
-@subsubsection MySQL-Logos die ohne schriftliche Erlaubnis benutzt werden d�rfen
-
-@c FIX: pictures: powered by, works with, included - logos
-
-Wir haben einen Satz spezieller Logos f�r @emph{vorbehaltliche
-Benutzung} angelegt, die von unserer Website unter
-@uref{http://www.mysql.com/downloads/logos.html} herunter geladen werden
-k�nnen und von Dritten auf ihren Websites ohne schriftliche Erlaubnis
-von MySQL AB benutzt werden d�rfen. Der Gebrauch dieser Logos ist - wie
-der Name anzeigt - nicht v�llig uneingeschr�nkt, sondern unterliegt
-unseren Schutzmarken-Richtlinien, die Sie auf unserer Website finden.
-Sie sollten diese Richtlinien lesen, wenn Sie planen, die Logos zu
-benutzen. Die Anforderungen sind im Wesentlichen:
-
-@itemize @bullet
-@item
-Benutzen Sie das gew�nschte Logo von der @uref{http://www.mysql.com/}-
-Site. Sie d�rfen die Gr��e nach Ihren Bed�rfnissen anpassen, aber keine
-Farben oder das Design �ndern noch die Grafik in sonstiger Form
-ver�ndern.
-
-@item
-Heben Sie hervor, dass Sie - und nicht MySQL AB - der Betreiber und
-Eigner der Site ist, auf der die MySQL-Schutzmarke gezeigt wird.
-
-@item
-Sie d�rfen die Schutzmarke nicht auf eine Weise benutzen, die MySQL AB
-oder dem Wert der MySQL-AB-Schutzmarken schadet. Wir behalten uns das
-Recht vor, das Recht zur Benutzung der MySQL-AB-Schutzmarke zu
-widerrufen.
-
-@item
-Wenn Sie die Schutzmarke auf einer Website benutzen, machen Sie sie
-anklickbar, wobei direkt nach @uref{http://www.mysql.com/} verlinkt
-wird.
-
-@item
-Wenn Sie die MySQL-Datenbank unter GPL in einer Applikation benutzen,
-muss Ihre Applikation (i) Open Source sein, (ii) in der Lage sein, sich
-mit einem MySQL-Server zu verbinden.
-@end itemize
-
-Setzen Sie sich unter @email{trademark@@mysql.com} mit uns in
-Verbindung, um wegen spezieller Arrangements anzufragen, die Ihren
-Bed�rfnissen entsprechen.
-
-@node When need MySQL logo permission, MySQL AB Partnership Logos, MySQL Logos that may be Used Without Written Permission, MySQL AB Logos and Trademarks
-@c German node Wann Sie eine Erlaubnis f�r die Benutzung des MySQL-Logos ben�tigen
-@subsubsection Wann Sie eine Erlaubnis f�r die Benutzung des MySQL-Logos ben�tigen
-
-In folgenden F�llen ben�tigen Sie eine schriftliche Erlaubnis von MySQL
-AB, bevor Sie die MySQL-Logos benutzen:
-
-@itemize @bullet
-@item
-Wenn Sie irgend ein MySQL-AB-Logo irgendwo ausser auf Ihrer Website
-zeigen.
-
-@item
-Wenn Sie irgend ein MySQL-AB-Logo ausser den oben erw�hnten Logos zur
-@emph{vorbehaltlichen Benutzung} auf Websites oder anderswo anzeigen.
-@end itemize
-
-Aus rechtlichen und kommerziellen Gr�nden m�ssen wir die Benutzung der
-MySQL-Schutzmarken auf Produkten, B�chern usw. beobachten. �blicherweise
-verlangen wir eine Geb�hr f�r das Anzeigen von MySQL-AB-Logos auf
-kommerziellen Produkten, weil wir der Meinung sind, das es vertretbar
-ist, dass einige der Erl�se f�r die Weiterentwicklung der MySQL-
-Datenbank zur�ckflie�en.
-
-@node MySQL AB Partnership Logos, , When need MySQL logo permission, MySQL AB Logos and Trademarks
-@c German node MySQL-AB-Partnerschafts-Logos
-@subsubsection MySQL-AB-Partnerschafts-Logos
-
-@c FIX: pictures: partnership logos - Bertrand?
-
-@c German FIX part of the this paragraph was at the end of Lizenzpolitik.
-@c (i.e. that section was pasted into the middle of this one ;-)
-MySQL-Partnerschafts-Logos d�rfen nur von Unternehmen und Personen
-benutzt werden, die eine schriftliche Partnerschaftsvereinbarung mit
-MySQL AB haben. Partnerschaften beinhalten eine Zertifizierung als
-MySQL-Trainer oder -Berater. Sehen Sie bitte unter
-@c German FIX change @xref into @ref 'cos it's not a separate sentence.
-@ref{Business Services Partnering,,Partnerschaft} nach.
-
-@node Lizenzpolitik, , MySQL AB Logos and Trademarks, Licensing and Support
-@c German node <no English equivalent>
-@subsection MySQL-Lizenzpolitik
-
-@cindex Lizenzpolitik
-@cindex technischer Support, Lizensierung
-@cindex Support, Lizensierung
-@cindex General Public License, MySQL
-
-Die formalen Bedingungen der GPL-Lizenz stehen unter @ref{GPL license}.
-Im Wesentlichen ist unsere Lizenzpolitik und die Interpretation der
-GPL wie folgt:
-
-Beachten Sie bitte, dass �ltere Versionen von MySQL immer noch einer
-@uref{http://www.mysql.com/Support/arrangements/mypl.html, strengeren
-Lizenz} unterliegen. Sehen Sie in der Dokumentation der betreffenden
-Version wegen entsprechender Informationen nach. Wenn Sie eine kommerzielle
-Lizenz ben�tigen, weil die GPL-Lizenz nicht zu den Anforderungen Ihrer
-Applikation passt, k�nnen Sie eine Lizenz unter
-@uref{https://order.mysql.com/} kaufen.
-
-F�r normalen internen Gebrauch kostet MySQL nichts. Sie brauchen uns nichts
-zu bezahlen, wenn Sie nicht wollen.
-
-Eine Lizenz wird ben�tigt:
-
-@itemize @minus
-@item
-Wenn Sie ein Programm, das nicht freie Software ist, mit Code des
-MySQL-Servers oder der Client-Programme verbinden, die den GPL-Copyrights
-unterliegen. Das ist zum Beispiel der Fall, wenn Sie MySQL als
-eingebetteten Server (Embedded Server) in Ihren Applikationen benutzen,
-oder wenn Sie dem MySQL-Server Erweiterungen hinzuf�gen, die nicht freie
-Software sind. In diesen F�llen w�rden Ihre Applikation bzw. Ihr Code
-ebenfalls GPL werden, weil die GPL in solchen F�llen wie ein Virus wirkt.
-Sie k�nnen dieses Problem vermeiden, wenn Sie den MySQL-Server mit einer
-kommerziellen Lizenz von MySQL AB erwerben.
-Siehe @uref{http://www.gnu.org/copyleft/gpl-faq.html}.
-@item
-Wenn Sie eine kommerzielle Applikation haben, die NUR mit MySQL
-funktioniert, und wenn Sie die Applikation zusammen mit dem MySQL-Server
-ausliefern. Wir betrachten so etwas als Einbindung, selbst wenn es �ber das
-Netzwerk geschieht.
-
-@item
-Wenn Sie eine Distribution von MySQL besitzen und nicht den Quelltext f�r
-Ihre Kopie des MySQL-Servers zur Verf�gung stellen, so wie es in der
-GPL-Lizenz festgelegt ist.
-xxx You have a Distribution of MySQL und you xxx Arjen: What does this mean: ...don't provide the
-source code for your copy of the MySQL server ... xxx Shouldn't it be: for your application ... ??? xxx
-, as defined in the GPL license. xxx
-@end itemize
-
-Eine Lizenz wird @strong{NICHT} ben�tigt:
-
-@itemize @minus
-
-@item
-Sie ben�tigen keine Lizenz, wenn Sie den Client-Code in kommerzielle
-Programme einschliessen. Der Client-Teil von MySQL unterliegt der
-LGPL @code{GNU Library General Public License}-Lizenz. Der
-@code{mysql}-Kommandozeilen-Client beinhaltet Code der
-@code{readline}-Bibliothek, die unter @code{GPL} steht.
-
-@item
-Wenn Sie f�r Ihre Art der Benutzung von MySQL keine Lizenz ben�tigen, aber
-MySQL m�gen und die weitere Entwicklung f�rdern wollen, sind Sie herzlich
-eingeladen, in jedem Fall eine Lizenz zu erwerben.
-
-@item
-Wenn Sie MySQL in einem kommerziellen Zusammenhang benutzen und davon
-profitieren, bitten wir Sie, dass Sie die Weiterentwicklung von MySQL
-f�rdern, indem Sie einen bestimmten Grad von Support kaufen. Wir meinen,
-dass es vern�nftig ist, wenn wir Sie bitten, MySQL zu unterst�tzen, wenn
-MySQL Ihren Gesch�ften hilft. (Ansonsten w�rde es bei Support-Anfragen
-bedeuten, dass Sie nicht nur etwas f�r umsonst benutzen, in das wir eine
-Menge Arbeit gesteckt haben, sondern dass Sie uns auch noch auffordern,
-kostenlosen Support zu liefern.)
-@end itemize
-
-In Situationen, wo eine MySQL-Lizenz ben�tigt wird, brauchen Sie eine
-Lizenz pro Maschine, auf der der MySQL-Server l�uft. Eine
-Mehrprozessor-Maschine z�hlt jedoch als eine einzelne Maschine, und es gibt
-keine Beschr�nkung hinsichtlich der Anzahl von MySQL-Servern, die auf einer
-Maschine laufen, oder hinsichtlich der Anzahl von Clients, die zur gleichen
-Zeit mit einem Server verbunden sind, der auf dieser Maschine l�uft!
-
-Falls Sie nicht sicher sind, ob f�r Ihre spezielle Benutzung von MySQL eine
-Lizenz erforderlich ist, lesen Sie diesen Abschnitt bitte nochmals, bevor
-Sie uns kontaktieren. @xref{Contact information}.
-
-Wenn Sie eine MySQL-Lizenz ben�tigen, ist die Bezahlung am einfachsten,
-wenn Sie das Lizenzformular auf dem Secure-Server von MySQL unter
-@uref{https://order.mysql.com/} benutzen.
-@c German FIX this section no longer exists (no price info in manual)
-@c Andere Zahlungsformen werden unter @ref{Zahlungsinformationen} besprochen.
-
-
-@menu
-* Using MySQL word in presentations::
-* Using MySQL word in company and product names::
-@end menu
-
-@node Using MySQL word in presentations, Using MySQL word in company and product names, Lizenzpolitik, Lizenzpolitik
-@c German node Benutzung des Worts MySQL in Pr�sentationen
-@subsubsection Benutzung des Worts @code{MySQL} in Druckmaterialien oder
-Pr�sentationen
-
-MySQL AB begr��t Verweise auf die MySQL-Datenbank, aber das Wort
-@code{MySQL} ist eine Schutzmarke von MySQL AB. Deshalb m�ssen Sie der
-ersten oder deutlichsten Erw�hnung des Worts @code{MySQL} das
-Schutzmarken-Symbol @code{TM} hinzuf�gen, und wo angebracht deutlich
-machen, dass @code{MySQL} eine Schutzmarke von MySQL AB ist. Details
-entnehmen Sie bitte unserer Schutzmarken-Richtlinie unter
-@uref{http://www.mysql.com/company/trademark.html}.
-
-
-@node Using MySQL word in company and product names, , Using MySQL word in presentations, Lizenzpolitik
-@c German node Benutzung des Worts MySQL in Unternehmens- und Produktnamen
-@subsubsection Benutzung des Worts @code{MySQL} in Unternehmens- und
-Produktnamen
-
-Die Benutzung des Worts @code{MySQL} in Produkt- und Unternehmensnamen
-oder in Internet-Dom�nen-Namen ist nur mit vorheriger schriftlicher
-Erlaubnis durch MySQL AB gestattet.
-
-
-@node MySQL 4.0 In A Nutshell, MySQL Information Sources, Licensing and Support, Deutsch
-@c German node MySQL 4.0 kurz und b�ndig
-@section MySQL 4.0 kurz und b�ndig
-
-Dateline: 16. Oktober 2001, Uppsala, Schweden
-
-Lange durch MySQL AB angek�ndigt und lange von unseren Benutzern
-erwartet: Der MySQL-Server 4.0 ist jetzt in der Alpha-Version zum
-Herunterladen von @uref{http://www.mysql.com/} und unseren Mirrors
-verf�gbar.
-
-Die neuen Haupt-Features des MySQL-Servers 4.0 sind eng mit unserem
-bestehenden Gesch�ft und den Community-Nutzern verzahnt. Durch ihn wird
-die MySQL-Datenbank-Software als L�sung f�r gesch�ftskritische
-Schwerlast-Datenbanksysteme verbessert. Weitere neue Features zielen auf
-die Benutzer eingebetteter Datenbanken.
-
-
-
-@menu
-* Nutshell Stepwise Rollout::
-* Nutshell Ready for Immediate Development Use::
-* Nutshell Embedded MySQL::
-* Nutshell Other features::
-* Nutshell Future features::
-* Nutshell 4.1 development release::
-@end menu
-
-@node Nutshell Stepwise Rollout, Nutshell Ready for Immediate Development Use, MySQL 4.0 In A Nutshell, MySQL 4.0 In A Nutshell
-@c German node Kurz und b�ndig - Schritt f�r Schritt
-@subsection Schritt f�r Schritt
-
-Das Erscheinen des MySQL-Servers 4.0 wird in mehreren Schritten
-erfolgen, wobei die erste Version 4.0.0 genannt wird und bereits die
-meisten neuen Features enth�lt. Zus�tzliche Features werden in die
-Versionen 4.0.1, 4.0.2 usw. eingebaut, h�chstwahrscheinlich innerhalb
-weniger Monate. MySQL 4.0 wird als Beta gekennzeichnet. In MySQL 4.1
-werden dann weitere neue Features hinzugef�gt. Es wird angestrebt, das
-Alpha-Release Anfang 2002 herauszubringen.
-
-
-@node Nutshell Ready for Immediate Development Use, Nutshell Embedded MySQL, Nutshell Stepwise Rollout, MySQL 4.0 In A Nutshell
-@c German node Kurz und b�ndig - f�r den sofortigen Entwicklungseinsatz
-@subsection F�r den sofortigen Entwicklungseinsatz
-
-Es wird nicht empfohlen, Produktionssysteme auf den MySQL-Server 4.0
-umzustellen, bis dieser in der Beta-Version ver�ffentlicht wird. Selbst
-das anf�ngliche Release hat unsere ausgiebigen Tests ohne jegliche
-Fehler durchlaufen, auf allen Plattformen, auf denen wir testen. Wegen
-der gro�en Zahl neuer Features empfehlen wir daher den MySQL-Server
-selbst in der Alpha-Version f�r Entwicklungsarbeiten, wobei in Betracht
-gezogen werden kann, dass der MySQL-Server 4.0 das Stadium "stabil"
-erreichen wird, bevor Applikationen hiermit ver�ffentlicht werden, die
-jetzt im Entwicklungsstadium sind.
-
-
-@node Nutshell Embedded MySQL, Nutshell Other features, Nutshell Ready for Immediate Development Use, MySQL 4.0 In A Nutshell
-@c German node Kurz und b�ndig - eingebettetes MySQL
-@subsection Eingebettetes MySQL
-
-@code{libmysqld} macht den MySQL-Server f�r einen erheblich ausgedehnten
-Bereich von Applikationen geeignet. Wenn man die eingebettete MySQL-
-Server-Bibliothek benutzt, kann man den MySQL-Server in
-unterschiedlichste Applikationen und elektronische Ger�te einbetten, bei
-denen der Endbenutzer keinerlei Ahnung davon hat, dass ihnen eine
-Datenbank unterlegt ist. Der eingebettete MySQL-Server ist ideal f�r
-Benutzung hinter den Kulissen in Internet-Ger�ten, �ffentlichen Kiosken,
-schl�sselfertigen Hardware-/Software-Einheiten, Hochlast-Internet-
-Servern oder Datenbanken, die auf CD-ROM vertrieben werden.
-
-Viele Benutzer von eingebettetem MySQL k�nnen von der @emph{dualen
-Lizensierung} der MySQL-Software profitieren. Neben der GPL-Lizenz sind
-auch kommerzielle Lizenzen f�r diejenigen verf�gbar, die nicht an die
-GPL gebunden sein wollen. Die eingebettete MySQL-Bibliothek benutzt
-dieselbe Schnittstelle wie die normale Client-Bibliothek und ist daher
-angenehm und leicht zu benutzen. @xref{libmysqld}.
-
-
-@node Nutshell Other features, Nutshell Future features, Nutshell Embedded MySQL, MySQL 4.0 In A Nutshell
-@c German node Kurz und b�ndig - weitere Features
-@subsection Weitere ab MySQL 4.0.0 verf�gbare Features
-
-@itemize @bullet
-@item
-Version 4.0 erh�ht die @emph{Geschwindigkeit des MySQL-Servers} in
-einigen Bereichen noch weiter, zum Beispiel bei Massen-@code{INSERT}s,
-beim Suchen auf komprimierten Indexen, der Erzeugung von
-@code{FULLTEXT}-Indexen oder auch bei @code{COUNT(DISTINCT)}.
-
-@item
-Der Tabellen-Handler @code{InnoDB} wird jetzt als Feature des
-standardm��igen MySQL-Servers angeboten und enth�lt vollst�ndige
-Unterst�tzung f�r @code{Transaktionen} und @code{Sperren auf
-Zeilenebene}.
-
-@item
-Der MySQL-Server 4.0 unterst�tzt sichere Kommunikation zwischen Client
-und Server, wodurch die Sicherheit gegen b�swilliges Eindringen und
-unbefugten Zugriff erheblich erh�ht wird. Bei Web-Applikationen, die ein
-Grundpfeiler der MySQL-Benutzung sind, konnten Web-Entwickler immer
-schon SSL verwenden, um den Verkehr zwischen Endbenutzer-Browser und der
-Web-Applikation zu sichern, sei sie nun in PHP, Perl, ASP oder mit
-irgend einem anderen Web-Entwicklungswerkzeug geschrieben. Der Verkehr
-zwischen dem Entwicklungswerkzeug und dem mysqld-Serverprozess konnte
-bislang aber nur dadurch gesichert werden, dass die Prozesse auf
-Computern innerhalb derselben Firewall residierten. Ab MySQL-Server 4.0
-kann der @emph{mysqld}-Server-Daemon-Prozess selbst @code{Secure Sockets
-Layer} (@code{SSL}) benutzen, was ihn in die Lage versetzt, eine sichere
-Daten�bertragung zwischen einer MySQL-Datenbank und beispielsweise einer
-Windows-Applikation ausserhalb der Firewall aufzubauen.
-
-@item
-Unsere deutschen, �sterreichischen und schweizerischen Benutzer werden
-bemerken, dass es einen neuen Zeichensatz latin_de gibt, der die
-@emph{deutsche Sortierreihenfolge} beinhaltet, indem deutsche Umlaute in
-derselben Sortierung erscheinen wie bei deutschen Telefonb�chern �blich.
-
-@item
-Zu den Features, die die @code{Migration} von anderen Datenbanksystemen
-zum MySQL-Server erleichtern, geh�ren @code{TRUNCATE TABLE} (wie in
-Oracle) und @code{IDENTITY} a1s Synonym f�r automatisch hochgez�hlte
-Schl�ssel (wie in Sybase). viele Benutzer werden sich auch dar�ber
-freuen, dass der MySQL-Server jetzt das @code{UNION}-Statement
-unterst�tzt, ein lang erwartetes Standard-SQL-Feature.
-
-@item
-Bei der Erstellung neuer Features f�r neue Benutzer haben wir die
-Gemeinschaft treuer Benutzer nicht vergessen. Es gibt jetzt Multi-
-Tabellen-@code{DELETE}-Statements. Durch das Hinzuf�gen von
-Unterst�tzung f�r @code{symbolisches Verkn�pfen} von @code{MyISAM} auf
-Tabellenebene (und nicht nicht - wie bisher - auf Datenbankebene), sowie
-durch das vorgabem��ige Anschalten der Verkn�pfungen unter Windows
-hoffen wir zeigen zu k�nnen, dass wir Verbesserungsvorschl�ge ernst
-nehmen. Funktionen wie @code{SQL_CALC_FOUND_ROWS} und
-@code{FOUND_ROWS()} erm�glichen herauszufinden, wie viele Zeilen eine
-Anfrage ohne eine @code{LIMIT}-Klausel zur�ckgegeben h�tte.
-@end itemize
-
-
-@node Nutshell Future features, Nutshell 4.1 development release, Nutshell Other features, MySQL 4.0 In A Nutshell
-@c German node Kurz und b�ndig - zuk�nftige Features
-@subsection Zuk�nftige Features in MySQL 4.0
-
-F�r die kommenden Releases des MySQL-Servers 4.0 (4.0.1, 4.0.2 usw.)
-k�nnen Sie folgende Features erwarten, die noch in der Entwicklung sind:
-
-@itemize @bullet
-@item
-Benutzer des MySQL-Servers f�r gesch�ftskritische Hochlast-Anwendungen
-werden die Erg�nzungen unseres Replikationssystems und unsere Online-
-"Hot"-Datensicherung begr��en. Sp�tere Versionen von 4.0 werden
-@code{absturzsichere Replikation} beinhalten, die es bereits in Version
-4.0.0 gibt, sowie den @code{LOAD DATA FROM MASTER}-Befehl, der bald das
-Aufsetzen von Slaves automatisieren wird. @code{online backup} wird das
-Hinzuf�gen eines neuen Replikations-Slaves erleichtern, ohne dass man
-den Master herunterfahren muss, und es gibt auf Systemen mit vielen
-Aktualisierungen nur geringe Geschwindigkeitseinbussen.
-
-@item
-Als Bequemlichkeits-Feature f�r Datenbank-Administratoren wird
-hinzugef�gt, dass mysqld-Parameter (Startoptionen) bald ohne das
-Herunterfahren des Servers gesetzt werden k�nnen.
-
-@item
-Die neuen Eigenschaften des MySQL-Servers 4.0 f�r die Volltext-
-(@code{FULLTEXT})-Suche erm�glichen die @code{FULLTEXT}-Indexierung
-gro�er Texte sowohl mit bin�rer wie auch mit nat�rlichsprachiger
-Suchlogik. Benutzer k�nnen minimale Wortl�ngen anpassen und ihre
-eigenen Stopp-Wort-Listen in jeder menschlichen Sprache festlegen,
-wodurch g�nzlich neue Applikationen erm�glicht werden, die auf dem
-MySQL-Server aufbauen.
-
-@item
-Viele Applikationen mit starkem Lesezugriff werden durch die noch weiter
-erh�hte Geschwindigkeit des neu geschriebenen @code{Schl�ssel-Caches}
-profitieren.
-
-@item
-Viele Entwickler wird auch die @code{MySQL-Befehlshilfe} im Client
-freuen.
-@end itemize
-
-
-@node Nutshell 4.1 development release, , Nutshell Future features, MySQL 4.0 In A Nutshell
-@c German node Kurz und b�ndig - Entwicklungs-Release
-@subsection MySQL 4.1, das folgende Entwicklungs-Release
-
-Intern wird durch das neue .frm-Dateiformat f�r Tabellendefinitionen in
-MySQL-Server 4.0 die Grundlage f�r neue Features in MySQL-Server 4.1
-gelegt, beispielsweise @code{verschachtelte Unterabfragen},
-@code{gespeicherte Prozeduren} und @code{Fremdschl�ssel-
-Integrit�tsregeln}, die ganz oben auf der Wunschliste vieler unserer
-Kunden stehen. Daneben werden auch einfachere Erweiterungen wie Multi-
-Tabellen-@code{UPDATE}-Statements hinzugef�gt.
-
-Nach diesen Erg�nzungen werden Kritiker des MySQL-Datenbankservers es
-noch schwerer haben, auf Schw�chen des MySQL-Datenbank-Managementsystems
-hinzuweisen. MySQL, das seit langem f�r seine Stabilit�t,
-Geschwindigkeit und Einfachheit der Benutzung bekannt ist, wird dann den
-Anforderungen sehr anspruchsvoller K�ufer gen�gen.
-
-
-@node MySQL Information Sources, Compatibility, MySQL 4.0 In A Nutshell, Deutsch
-@c German node MySQL-Informationsquellen
-@section MySQL-Informationsquellen
-
-
-
-@menu
-* Portals::
-* Questions::
-@end menu
-
-@node Portals, Questions, MySQL Information Sources, MySQL Information Sources
-@c German node Portale
-@subsection MySQL-Portale
-
-@cindex MySQL-Portale
-@cindex Handb�cher, �ber MySQL
-@cindex B�cher, �ber MySQL
-@cindex MySQL-Testimonials
-@cindex Benutzer, von MySQL
-@cindex News-Sites
-@cindex Suchmaschinen, Web
-@cindex Web-Suchmaschinen
-@cindex Online-Magazine
-@cindex Magazine, online
-@cindex Websites
-@cindex Dienstleistungen
-@cindex PHP, Websites
-@cindex Berater, Liste
-@cindex Web-Seiten, verschiedene
-@cindex @code{Contrib}-Verzeichnis
-@cindex URLs zu MySQL-Informationen
-@cindex MySQL-bezogene Informations-URLs
-
-Die MySQL-Portale (@uref{http://www.mysql.com/portal/}) auf unserer
-Website bieten ein breites Spektrum MySQL-bezogener Informationen und
-Links. Sie sind so aufgebaut, dass Sie leicht die Dinge finden, die Sie
-interessieren.
-
-Sie k�nnen sich als Benutzer registrieren. In diesem Fall k�nnen Sie
-alle Dinge in den Portalen kommentieren und bewerten und auch selbst
-Dinge beisteuern. Bei der Registrierung k�nnen Sie auch angeben, ob und
-- wenn ja - welche Newsletter aus welchen Kategorien Sie beziehen
-wollen.
-
-Einige der momentanen MySQL-Portal-Kategorien:
-
-@itemize @bullet
-@item B�cher
-Hier finden Sie alle m�glichen MySQL- oder Computer-bezogenen B�cher, die
-Sie kommentieren, bewerten oder kaufen k�nnen. W�hrend dieses Handbuch
-(insbesondere die Online-Version) immer noch der richtige Platz f�r
-aktuellste technische Informationen ist, ist sein vorrangiges Ziel,
-alles zu enthalten, was man �ber das MySQL-Datenbanksystem wissen kann.
-Manchmal ist es nett, ein gebundenes Buch zu haben, dass man im Bett
-oder auf Reisen lesen kann. Wenn Sie ein Buch �ber die angegebenen
-Hyperlinks kaufen, tragen Sie zur Entwicklung der MySQL-Software bei.
-
-@item Entwicklung
-Dieses Portal hat Links auf Seiten, die den MySQL-Server f�r
-unterschiedliche Zwecke benutzen, mit einer Beschreibung jeder Site.
-Diese Informationen k�nnen Ihnen eine gute Vorstellung davon geben, wer
-MySQL-Datenbank-Software benutzt und wie der MySQL-Server ihre
-Anforderungen erf�llt.
-Teile Sie uns auch @emph{Ihre} Site oder Erfolgsgeschichte mit!
-
-@item Software
-Hier finden Sie eine Vielzahl von Applikationen und Wrappern, die den
-MySQL-Server benutzen, die Sie auch herunter laden k�nnen.
-
-@item Distributionen
-Hier finden Sie die verschiedenen Linux-Distributionen und weitere
-Software-Pakete, die die MySQL-Software enthalten.
-
-@item Berater
-Hier finden Sie Informationen �ber MySQL-Berater.
-
-@item Partner
-Hier finden Sie alle MySQL-Partner.
-@end itemize
-
-
-@node Questions, , Portals, MySQL Information Sources
-@c German node Fragen
-@subsection MySQL-Mailing-Listen
-
-@cindex Berichten, Fehler
-@cindex MySQL-Mailing-Listen
-
-
-Dieser Abschnitt f�hrt Sie in die MySQL-Mailing-Listen ein und zeigt einige
-Richtlinien und ihre Benutzung auf.
-
-
-@menu
-* Mailing-list::
-* Asking questions::
-* Bug reports::
-* Answering questions::
-@end menu
-
-@node Mailing-list, Asking questions, Questions, Questions
-@c German node Mailing-Listen
-@subsubsection Die MySQL-Mailing-Listen
-
-@cindex Mailing-Listen
-@cindex E-Mail-Listen
-
-Um die MySQL-Haupt-Mailing-Liste zu abonnieren, schicken Sie eine Nachricht
-an die E-Mail-Adresse @email{mysql-subscribe@@lists.mysql.com}.
-
-Um sich aus der MySQL-Haupt-Mailing-Liste auszutragen, schicken Sie eine
-Nachricht an die E-Mail-Adresse @email{mysql-unsubscribe@@lists.mysql.com}.
-
-Von Bedeutung ist nur die Adresse, unter der Sie Ihre Nachrichten
-abschicken. Betreffzeile und Text der Nachricht werden ignoriert.
-
-@c the last two addresses in this paragraph are NOT @email because they
-@c shouldn't be live links.
-Wenn Ihre Antwortadresse nicht g�ltig ist, k�nnen Sie Ihre Adresse explizit
-angeben. F�gen Sie einen Bindestrich zum Abonnement- oder
-Abmelde-Kommando hinzu, gefolgt von Ihrer Adresse, wobei das
-@samp{@@}-Zeichen in Ihrer Adresse durch @samp{=} ersetzt wird. Um sich zum
-Beispiel mit @code{your_name@@host.domain} einzutragen, schicken Sie eine
-Nachricht an @code{mysql-subscribe-your_name=host.domain@@lists.mysql.com}.
-
-Mails an @email{mysql-subscribe@@lists.mysql.com} oder
-@email{mysql-unsubscribe@@lists.mysql.com} werden automatisch vom ezmlm
-Mailing-Listen-Prozessor bearbeitet. Informationen �ber ezmlm sind
-auf @uref{http://www.ezmlm.org, The ezmlm Website} verf�gbar.
-
-Um eine Nachricht an die Liste selbst zu schicken, schicken Sie eine Mail
-an @code{mysql@@lists.mysql.com}. Schicken aber bitte @emph{keine} Mail an
-@email{mysql@@lists.mysql.com}, die das Abonnieren oder Austragen betrifft,
-denn Mails an diese Adresse werden automatisch an tausende anderer Benutzer
-verteilt.
-
-@c __review__jan_2001_11_13
-Wenn Ihre lokale Site viele Abonnenten f�r @email{mysql@@lists.mysql.com}
-hat, sollten Sie evtl. eine lokale Mailing-Liste einrichten, so dass
-Nachrichten, die von @code{lists.mysql.com} an Ihre Site gesandt werden, an
-die lokale Liste verteilt werden. In solchen F�llen wenden Sie sich bitte
-an Ihre Systemadministrator, um zur lokalen Mailing-Liste hinzugef�gt oder
-aus ihr gel�scht zu werden.
-
-Wenn Sie wollen, dass der Traffic einer Mailing-Liste in eine separate
-Mailbox Ihres E-Mail-Programms geleitet wird, setzen Sie einen Filter,
-der auf die E-Mail-Header (Kopfdaten) reagiert. Sie k�nnen dazu entweder
-den @code{List-ID:}- oder den @code{Delivered-To:}-Header benutzen, um die
-Listennachrichten zu erkennen.
-
-Die folgenden MySQL-Mailing-Listen existieren:
-
-@table @code
-@item @email{announce-subscribe@@lists.mysql.com} announce
-Diese Liste k�ndigt neue Versionen von MySQL und verwandter Programme an.
-Sie hat geringen Traffic; alle MySQL-Benutzer sollten sie abonnieren.
-
-@item @email{mysql-subscribe@@lists.mysql.com} mysql
-Die Hauptliste f�r allgemeine MySQL-Diskussionen. Bitte beachten Sie, dass
-bestimmte Themen besser in spezialisierteren Listen diskutiert werden. Wenn
-Sie an die falsche Liste posten, erhalten Sie vielleicht keine Antwort!
-
-@item @email{mysql-digest-subscribe@@lists.mysql.com} mysql-digest
-Die @code{mysql}-Liste in Digest-Form (zusammengefasst). Anstelle
-individueller Nachrichten wird einmal pro Tag eine gro�e Mail mit allen
-Nachrichten dieses Tages geschickt.
-
-@item @email{bugs-subscribe@@lists.mysql.com} bugs
-An diese Liste sollte Sie ausschlie�lich komplette, wiederholbare
-Bug-Berichte schicken, indem Sie das @code{mysqlbug}-Skript benutzen. (Wenn
-Sie unter Windows arbeiten, sollten Sie eine Beschreibung des
-Betriebssystems und der MySQL-Version hinzuf�gen.)
-Vorzugsweise sollten Sie den Problemfall mit der letzten stabilen oder
-Entwicklungs-Version von MySQL testen, bevor Sie den Bericht posten! Jeder
-sollte in der Lage sein, den Bug zu wiederholen, indem einfach @code{mysql
-test < Skript} auf den beigef�gten Testfall angewandt wird. Alle Bugs, die
-auf dieser Liste gepostet werden, werden im n�chsten MySQL-Release behoben
-oder dokumentiert! Wenn nur kleinere Code-�nderungen betroffen sind, werden
-wir zus�tzlich ein Patch bereitstellen, das das Problem behebt.
-
-@item @email{bugs-digest-subscribe@@lists.mysql.com} bugs-digest
-Die Digest-Version (zusammengefasst) der @code{bugs}-Liste.
-
-@item @email{internals-subscribe@@lists.mysql.com} internals
-Eine Liste f�r Leute, die am MySQL-Code arbeiten. Auf dieser Liste kann man
-auch die MySQL-Entwicklung diskutieren und Patches posten.
-
-@item @email{internals-digest-subscribe@@lists.mysql.com} internals-digest
-Die Digest-Version (zusammengefasst) der @code{internals}-Liste.
-
-@item @email{java-subscribe@@lists.mysql.com} java
-Diskussionen �ber MySQL und Java, haupts�chlich �ber JDBC-Treiber.
-
-@item @email{java-digest-subscribe@@lists.mysql.com} java-digest
-Eine @code{java}-Liste.
-
-@item @email{win32-subscribe@@lists.mysql.com} win32
-Alles betreffend MySQL auf Microsoft-Betriebssystemen wie Win95, Win98, NT, XP,
-und Win2000.
-
-@item @email{win32-digest-subscribe@@lists.mysql.com} win32-digest
-Die Digest-Version (zusammengefasst) der @code{win32}-Liste.
-
-@item @email{myodbc-subscribe@@lists.mysql.com} myodbc
-Alles betreffend ODBC-Verbindungen zu MySQL.
-
-@item @email{myodbc-digest-subscribe@@lists.mysql.com} myodbc-digest
-Die Digest-Version (zusammengefasst) der @code{myodbc}-Liste.
-
-@item @email{plusplus-subscribe@@lists.mysql.com} plusplus
-Alles, was das Programmieren mit der C++-API von MySQL betrifft.
-
-@item @email{plusplus-digest-subscribe@@lists.mysql.com} plusplus-digest
-Die Digest-Version (zusammengefasst) der @code{plusplus}-Liste.
-
-@c __review_jan_2001_11_13
-@item @email{msql-mysql-modules-subscribe@@lists.mysql.com} msql-mysql-modules
-Eine Liste zur Perl-Unterst�tzung in MySQL. msql-mysql-modules
-
-@item @email{msql-mysql-modules-digest-subscribe@@lists.mysql.com} msql-mysql-modules-digest
-Die Digest-Version (zusammengefasst) der @code{msql-mysql-modules}-Liste.
-@end table
-
-Alle Listen abonnieren Sie - und tragen sich wieder aus - auf dieselbe Art
-wie oben beschrieben. Tragen Sie in Ihre Mail zum Abonnieren oder Austragen
-die entsprechende Mailing-Liste ein anstelle von @code{mysql}. Um sich zum
-Beispiel f�r die @code{myodbc}-Liste einzutragen, schicken Sie eine
-Nachricht an @email{myodbc-subscribe@@lists.mysql.com} oder
-@email{myodbc-unsubscribe@@lists.mysql.com}.
-
-Wenn Sie keine Antwort auf Ihre Fragen von der Mailing-Liste erhalten, ist
-eine Option, f�r den Support von MySQL AB zu bezahlen, was Sie in direkten
-Kontakt mit den MySQL-Entwicklern bringt. @xref{Support}.
-
-Die folgende Tabelle listet einige Mailing-Listen in anderen Sprachen als
-englisch auf. Beachten Sie, dass diese nicht von MySQL AB unterhalten
-werden. Daher k�nnen wir nicht f�r die Qualit�t dieser Listen garantieren.
-
-@table @code
-@item @email{mysql-france-subscribe@@yahoogroups.com} Eine franz�sische Mailing-Liste
-@item @email{list@@tinc.net} Eine koreanische Mailing-Liste
-Schicken Sie eine E-Mail mit dem Betreff @code{subscribe mysql
-your@@email.address} an diese Liste.
-@item @email{mysql-de-request@@lists.4t2.com} Eine deutsche Mailing-Liste
-Schicken Sie eine E-Mail mit dem Betreff @code{subscribe mysql-de
-your@@email.address} an diese Liste.
-Informationen �ber diese Liste finden Sie unter
-@uref{http://www.4t2.com/mysql}.
-@item @email{mysql-br-request@@listas.linkway.com.br} Eine portugiesische Mailing-Liste.
-Schicken Sie eine E-Mail mit dem Betreff @code{subscribe mysql-br
-your@@email.address} an diese Liste.
-@item @email{mysql-alta@@elistas.net} Eine spanische Mailing-Liste.
-Schicken Sie eine E-Mail mit dem Betreff @code{subscribe mysql
-your@@email.address} an diese Liste.
-@end table
-
-
-@node Asking questions, Bug reports, Mailing-list, Questions
-@c German node Fragen stellen
-@subsubsection Wie man Fragen stellt oder Bugs berichtet
-
-@cindex Netz-Etikette
-@cindex Mailing-Listen, Speicherort der Archive
-@cindex Durchsuchen, MySQL-Webseiten
-
-Bevor Sie einen Bug berichten oder eine Frage stellen, tun Sie bitte
-folgendes:
-
-@itemize @bullet
-@item
-Suchen Sie im MySQL-Online-Handbuch:
-@*
-@uref{http://www.mysql.com/documentation/manual.php}
-@*
-Wir bem�hen uns, das Handbuch aktuell zu halten, indem wir es h�ufig mit
-L�sungen f�r neu bekannt gewordene Probleme aktualisieren!
-
-@item
-Durchsuchen Sie die MySQL-Mailing-Listen-Archive:
-@*
-@uref{http://www.mysql.com/documentation/}
-@*
-@item
-Sie k�nnen ausserdem @uref{http://www.mysql.com/search.html} benutzen, um
-alle Webseiten zu durchsuchen (inklusive des Handbuchs), die unter
-@uref{http://www.mysql.com/} zu finden sind.
-@end itemize
-
-Wenn Sie weder im Handbuch noch in den Archiven eine Antwort finden k�nnen,
-versuchen Sie es mit Ihrem lokalen MySQL-Experten. Wenn Sie immer noch
-keine Antwort auf Ihre Frage finden, lesen Sie den n�chsten Abschnitt �ber
-die Mailing-Listen unter @email{mysql@@lists.mysql.com}.
-
-
-@node Bug reports, Answering questions, Asking questions, Questions
-@c German node Bug-Berichte
-@subsubsection Wie man Bugs oder Probleme berichtet
-
-@cindex Bugs, berichten
-@cindex Berichten, Bugs
-@cindex Probleme, berichten
-@cindex Fehler, berichten
-@cindex @code{mysqlbug}-Skript
-@cindex Erzeugen, Bug-Berichte
-@cindex Skripts, @code{mysqlbug}
-
-Einen guten Bug-Bericht zu schreiben braucht Geduld, aber es gleich beim
-ersten Mal richtig zu machen spart Ihnen und uns Zeit. Ein guter
-Bug-Bericht enth�lt einen kompletten Testfall f�r den Bug, der es sehr
-wahrscheinlich macht, dass wir ihn im n�chsten Release beheben. Dieser
-Abschnitt hilft Ihnen, Ihren Bericht korrekt zu schreiben, damit Sie Ihre
-Zeit nicht damit verschwenden, etwas zu schreiben, was uns wenig oder gar
-nicht weiterhilft.
-
-Wir ermutigen jeden, das @code{mysqlbug}-Skript zu benutzen, um einen
-Bug-Bericht anzufertigen (oder einen Bericht �ber irgendein anderes
-Problem), falls das m�glich ist. Der @code{mysqlbug} findet sich im
-@file{Skripts}-Verzeichnis der Quelldistribution, bzw. im
-@file{bin}-Verzeichnis der Bin�rdistribution, im Verzeichnis unterhalb
-Ihres MySQL-Installationsverzeichnisses. Falls es Ihnen nicht m�glich ist,
-@code{mysqlbug} zu benutzen, sollten Sie trotzdem alle notwendigen
-Informationen mitliefern, die in diesem Abschnitt aufgef�hrt sind.
-
-Das @code{mysqlbug}-Skript hilft Ihnen, einen Bericht zu erstellen, der
-viele der folgenden Informationen automatisch einschlie�t, aber falls
-etwas Wichtiges fehlt, f�gen Sie es bitte Ihrer Nachricht hinzu! Bitte
-lesen Sie diesen Abschnitt sorgf�ltig und stellen Sie sicher, dass alle
-hier beschriebenen Informationen in Ihrem Bericht enthalten sind.
-
-@cindex Bug-Berichte, E-Mail-Adresse
-F�r gew�hnlich sollten Sie Ihren Bug-Bericht und Probleme an
-@email{mysql@@lists.mysql.com} schicken. Wenn Sie einen Testfall erzeugen
-k�nnen, der den Bug klar demonstriert, sollten Sie ihn an die
-@email{bugs@@lists.mysql.com}-Liste schicken. Beachten Sie, dass Sie nur
-einen kompletten, nachvollziehbaren Bug-Bericht an diese Liste schicken
-sollten, indem Sie das @code{mysqlbug}-Skript benutzen. Falls Sie unter
-Windows arbeiten, sollten Sie eine Beschreibung des Betriebssystems und der
-MySQL-Version hinzuf�gen. Vorzugsweise sollten Sie den Problemfall mit der
-letzten stabilen oder Entwicklungs-Version von MySQL testen, bevor Sie den
-Bericht posten! Jeder sollte in der Lage sein, den Bug zu wiederholen,
-indem einfach @code{mysqltest < Skript} auf den beigef�gten Testfall
-angewandt wird. Alle Bugs, die auf dieser Liste gepostet werden, werden im
-n�chsten MySQL-Release behoben oder dokumentiert! Wenn nur kleinere
-Code-�nderungen betroffen sind, werden wir zus�tzlich ein Patch
-bereitstellen, das das Problem behebt.
-
-Denken Sie daran, dass es immer m�glich ist, auf eine Nachricht zu
-antworten, die zu viele Informationen enth�lt, aber nicht immer auf eine,
-die zu wenige Informationen enth�lt. Oft lassen Leute Fakten aus, weil sie
-denken, die Ursache eines Probleme zu kennen und annehmen, dass einige
-Details nicht von Wichtigkeit sind. Ein gutes Prinzip ist folgendes: Falls
-Sie im Zweifel sind, ob Sie etwas Bestimmtes mitteilen sollten, teilen Sie
-es mit! Es ist tausendmal schneller und weniger �rgerlich, ein paar Zeilen
-mehr in Ihrem Bericht zu schreiben, als gezwungen zu sein, noch einmal zu
-fragen und auf die Antwort zu warten, weil Sie beim ersten Mal nicht genug
-Informationen geliefert haben.
-
-Die h�ufigste Fehler besteht darin, dass Leute die Versionsnummer der
-MySQL-Distribution, die sie benutzen nicht angeben, oder vergessen anzugeben,
-auf welcher Plattform sie MySQL installiert haben (inklusive der
-Betriebssystem-Version). Diese Informationen sind �u�erst relevant, und in
-99 von 100 F�llen ist der Bug-Bericht ohne sie nutzlos! Sehr oft erhalten
-wir Fragen wie 'Warum funktioniert das bei mir nicht?', nur um
-herauszufinden, dass das beschriebene Feature nicht in der benutzten
-MySQL-Version implementiert war, oder dass der Bug, der im Bericht
-beschrieben wurde, bereits in einer neueren MySQL-Version behoben wurde.
-Manchmal ist der Fehler plattformabh�ngig; in solchen F�llen ist es
-praktisch unm�glich, irgend etwas zu beheben, ohne das Betriebssystem und
-die Versionsnummer des Betriebssystems zu kennen.
-
-Denken Sie auch daran, Informationen �ber Ihren Compiler einzuschlie�en,
-falls sie MySQL selbst kompilieren. Oft finden Leute Fehler in
-Compilern und denken, dass das Problem MySQL-bezogen ist. Die meisten
-Compiler werden permanent weiter entwickelt und werden von Version zu
-Version besser. Um festzustellen, ob ein Problem von Ihrem Compiler abh�ngt
-oder nicht, m�ssen wir wissen, welcher Compiler benutzt wird. Beachten Sie,
-dass jedes Compiler-Problem als Bug-Bericht betrachtet und deshalb
-entsprechend berichtet werden sollte.
-
-Es ist �u�erst hilfreich, wenn eine gute Beschreibung des Probleme in
-Ihrem Bug-Bericht eingeschlossen ist, das hei�t ein gutes Beispiel aller
-Dinge, die Sie getan haben, die zu dem Problem f�hrten, sowie das Problem
-selbst. Die besten Bug-Berichte sind diejenigen, die ein komplettes
-Beispiel zeigen, wie man den Bug oder das Problem reproduzieren kann.
-@xref{Reproduceable test case}.
-
-Wenn ein Programm eine Fehlermeldung produziert, ist es sehr wichtig,
-diese in Ihren Bericht einzuschlie�en! Wenn wir in den Archiven der
-Programme suchen, ist es besser, wenn die Fehlernachricht exakt mit
-derjenigen �bereinstimmt, die das Programm produziert. (Sogar
-Gro�-/Kleinschreibung sollte ber�cksichtigt werden!) Sie sollten nie
-versuchen, sich daran zu erinnern, was die Fehlernachricht war; stattdessen
-sollten Sie die gesamte Nachricht per Kopieren und Einf�gen in Ihrem
-Bericht unterbringen!
-
-Wenn Sie ein Problem mit MyODBC haben, sollten Sie versuchen, eine
-MyODBC-Trace-Datei zu erstellen. @xref{MyODBC bug report}.
-
-Bitten denken Sie daran, dass viele Leute, die Ihren Bericht lesen, dabei
-ein 80-Spalten-Anzeigeger�t benutzen. Wenn Sie Berichte oder Beispiele
-erzeugen, indem Sie das @code{mysql}-Kommandozeilen-Werkzeug benutzen, sollten
-Sie deshalb die @code{--vertical}-Option (oder den
-@code{\G}-Statement-Begrenzer) f�r Ausgaben benutzen, die ansonsten die
-verf�gbare Anzeigebreite �berschreiten w�rden (zum Beispiel beim
-@code{EXPLAIN SELECT}-Statement; siehe dazu das Beispiel weiter unten).
-@cindex Bug-Berichte, Kriterien f�r
-Bitte schlie�en Sie folgende Informationen in Ihren Bug-Bericht ein:
-
-@itemize @bullet
-@item
-Die Versionsnummer der MySQL-Distribution, die Sie benutzen (zum Beispiel
-MySQL Version 3.23.22). Sie finden heraus, welche Version Sie benutzen,
-indem Sie @code{mysqladmin version} eingeben. @code{mysqladmin} findet
-sich im @file{bin}-Verzeichnis unterhalb Ihres
-MySQL-Installationsverzeichnisses.
-
-@item
-Hersteller und Modell der Maschine, auf der Sie arbeiten.
-
-@item
-Name und Version des Betriebssystems. Bei den meisten Betriebssystemen
-l��t sich diese Information herausfinden, indem man das Unix-Kommando
-@code{uname -a} ausf�hrt.
-
-@item
-Manchmal ist die Gr��e des Arbeitsspeichers (real und virtuell) relevant.
-Im Zweifelsfall schlie�en Sie diese Werte ein.
-
-@item
-Wenn Sie eine Quelldistribution von MySQL benutzen, werden Name und
-Versionsnummer des Compilers ben�tigt. Wenn Sie eine Bin�rdistribution
-haben, geben Sie den Namen der Distribution an.
-
-@item
-Wenn das Problem w�hrend der Kompilation auftritt, schlie�en Sie die
-exakte Fehlermeldung (bzw. -meldungen) ein und zus�tzlich ein paar Zeilen
-des Kontextes um den problembehafteten Code herum in der Datei, wo der
-Fehler auftrat.
-
-@item
-Falls @code{mysqld} abst�rzt, sollten Sie auch die Anfrage (Query)
-mitteilen, die @code{mysqld} zum Absturz brachte. Gew�hnlich k�nnen Sie das
-herausfinden, indem Sie @code{mysqld} mit angeschaltetem Logging laufen
-lassen. @xref{Using log files}.
-
-@item
-Falls irgend eine Datenbanktabelle mit dem Problem zu tun hat, schlie�en
-Sie die Ausgabe von @code{mysqldump --no-data db_name tbl_name1 tbl_name2
-...} ein. Das ist sehr leicht zu bewerkstelligen und eine sehr hilfreiche
-M�glichkeit, Informationen �ber jegliche Tabelle in einer Datenbank zu
-erhalten, die uns hilft, eine Situation herzustellen, die mit derjenigen
-�bereinstimmt, die Sie haben.
-
-@item
-Bei Bugs, die sich auf Geschwindigkeitsprobleme beziehen, oder bei
-Problemen mit @code{SELECT}-Statements, sollten Sie immer die Ausgabe von
-@code{EXPLAIN SELECT ...} einschlie�en, und zumindest die Anzahl der
-Zeilen, die das @code{SELECT}-Statement produziert. Je mehr Informationen
-Sie uns �ber Ihre Situation geben, desto wahrscheinlicher ist es, dass
-Ihnen jemand helfen kann! Das folgende Beispiel ist ein sehr gutes Beispiel
-eines Bug-Berichts (es sollte nat�rlich mit dem @code{mysqlbug}-Skript
-berichtet werden):
-
-Beispiel unter Benutzung des @code{mysql}-Kommandozeilen-Werkzeugs (achten Sie
-auf die Benutzung des @code{\G}-Statement-Begrenzers f�r Statements, deren
-Ausgabebreite ansonsten die von 80-Zeilen-Ausgabeger�ten �berschreiten
-w�rde):
-
-@example
-mysql> SHOW VARIABLES;
-mysql> SHOW COLUMNS FROM ...\G
- <Ausgabe von SHOW COLUMNS>
-mysql> EXPLAIN SELECT ...\G
- <Ausgabe von EXPLAIN>
-mysql> FLUSH STATUS;
-mysql> SELECT ...;
- <Eine Kurzfassung der Ausgabe von SELECT,
- inclusive der Zeit, die die Anfrage ben�tigte>
-mysql> SHOW STATUS;
- <Ausgabe von SHOW STATUS>
-@end example
-
-@item
-Wenn ein Problem auftritt, w�hrend @strong{mysqld} l�uft, legen Sie nach
-M�glichkeit ein Eingabeskript bei, das die Anomalie reproduziert. Dieses
-Skript sollte alle notwendigen Quelltextdateien beinhalten. Je exakter das
-Skript Ihre Situation reproduzieren kann, desto besser. Wenn Sie einen
-wiederholbaren Testfall erstellen k�nnen, sollten Sie ihn an
-@email{bugs@@lists.mysql.com} schicken, damit er mit hoher Priorit�t
-behandelt wird!
-
-Falls Sie kein Skript zur Verf�gung stellen k�nnen, sollten Sie zumindest
-die Ausgaben von @code{mysqladmin variables extended-status processlist} in
-Ihrer Mail mitschicken, um einige Informationen dar�ber zu geben, wie Ihr
-System arbeitet!
-
-@item
-Falls Sie keinen Testfall mit ein paar Zeilen produzieren k�nnen oder falls
-Ihre Tabelle zu Gro� ist, um an die Mailing-Liste geschickt zu werden
-(mehr als 10 Zeilen), sollten Sie mit @code{mysqldump} einen Dump Ihrer
-Tabellen machen und eine @file{README}-Datei erzeugen, die Ihr Problem
-beschreibt.
-
-Erzeugen Sie ein komprimiertes Archiv Ihrer Dateien, indem Sie @code{tar}
-und @code{gzip} oder @code{zip} benutzen, und benutzen Sie @code{ftp}, um
-das Archiv nach @uref{ftp://Support.mysql.com/pub/mysql/secret/} zu
-transferieren. Schicken Sie danach eine kurze Beschreibung des Probleme an
-@email{bugs@@lists.mysql.com}.
-
-@item
-Wenn Sie glauben, dass MySQL auf eine Anfrage hin merkw�rdige Ergebnisse
-liefert, f�gen Sie nicht nur das Ergebnis bei, sondern auch, wie das
-Ergebnis Ihrer Meinung nach aussehen sollte, sowie eine Erkl�rung, wie Sie
-zu dieser Meinung gelangt sind.
-
-@item
-Wenn Sie ein Beispiel Ihres Problems schildern, ist es besser, die
-Variablen-, Tabellen- etc. Namen zu verwenden, die in Ihrer aktuellen
-Situation existieren, anstatt sich neue Namen auszudenken. Das Problem
-k�nnte n�mlich etwas mit dem Namen der Variablen oder Tabelle zu tun haben!
-Diese F�lle sind zwar selten, aber hier sollte man lieber auf Nummer sicher
-gehen. Letztlich sollte es f�r Sie auch leichter sein, ein Beispiel zur
-Verf�gung zu stellen, das Ihre tats�chliche Situation schildert, und es ist
-in jedem Fall besser f�r uns. Falls Sie mit Daten arbeiten, die Sie keinen
-anderen zeigen wollen, k�nnen Sie @code{ftp} benutzen, um die Daten nach
-@uref{ftp://Support.mysql.com/pub/mysql/secret/} zu transferieren. Falls
-die Daten streng geheim sind und Sie sie nicht einmal uns zeigen wollen,
-legen Sie bitte ein Beispiel mit anderen Namen an, betrachten Sie dies aber
-bitte als allerletzte M�glichkeit.
-
-@item
-F�gen Sie alle Optionen ein, die den relevanten Programmen �bergeben
-wurden, falls m�glich. Geben Sie zum Beispiel die Optionen an, die Sie
-benutzt haben, als Sie den @code{mysqld}-Daemon gestartet haben, und die
-Sie f�r Client-Programme wie @code{mysql} benutzen, sowie
-diejenigen, die Sie f�r die Konfiguration des @code{configure}-Skripts
-nehmen, denn diesen sind oft der Schl�ssel f�r Antworten und deshalb
-�u�erst relevant!
-Es ist immer eine gute Idee, sie in jedem Fall anzugeben! Wenn Sie Module
-wie Perl oder PHP benutzen, f�gen Sie bitte die Versionszahl von diesen mit
-ein.
-
-@item
-Wenn sich Ihre Frage auf das Berechtigungssystem (Zugriffsberechtigungen auf
-den Datenbank-Server) bezieht, f�gen Sie bitte die Ausgabe von
-@code{mysqlaccess}, die Ausgabe von @code{mysqladmin reload} und alle
-Fehlermeldungen, die Sie erhalten, wenn Sie versuchen, sich zu verbinden,
-bei! Wenn Sie Ihre Zugriffsberechtigungen testen, sollten Sie zun�chst
-@code{mysqlaccess} ausf�hren. F�hren Sie danach @code{mysqladmin reload
-version} aus und versuchen Sie dann, sich mit dem Programm zu verbinden,
-das Probleme macht. @code{mysqlaccess} liegt im @file{bin}-Verzeichnis
-unter Ihrem MySQL-Installationsverzeichnis.
-MySQL-Installationsverzeichnis.
-
-@item
-Wenn Sie einen Patch f�r ein Bug haben, ist das gut, aber nehmen Sie bitte
-nicht an, dass der Patch alles ist, was wir brauchen. Gehen Sie auch nicht
-davon aus, dass wir den Patch benutzen werden, wenn Sie nicht auch einige
-notwendige Informationen mitschicken, zum Beispiel Testf�lle, die den Bug
-zeigen, der durch Ihren Patch behoben wird. M�glicherweise finden wir
-Probleme, die Ihr Patch verursacht, oder wir verstehen ihn �berhaupt nicht.
-Wenn das der Fall ist, k�nnen wir ihn nicht benutzen.
-
-Wenn wir nicht genau feststellen k�nnen, wof�r der Patch gedacht ist,
-werden wir ihn nicht benutzen. In diesen F�llen werden uns Testf�lle weiter
-helfen. Zeigen Sie darin auf, dass der Patch all die Situationen bew�ltigt,
-die eintreten k�nnen. Falls wir einen Grenzfall finden (sogar, wenn es ein
-seltener ist), bei dem der Patch nicht funktioniert, ist er vielleicht
-nutzlos.
-
-@item
-Vermutungen, worin der Bug besteht, warum er auftritt oder wovon er
-abh�ngt, sind meist falsch. Selbst das MySQL-Team kann solche Dinge nicht
-erraten, sondern muss einen Debugger benutzen, um den wahren Grund des Bugs
-feststellen zu k�nnen.
-
-@item
-Geben Sie in Ihrer Mail zu erkennen, dass Sie das Referenzhandbuch gelesen
-und die Mail-Archive durchgesehen haben, damit andere wissen, dass Sie
-versucht haben, das Problem selbst zu l�sen.
-
-@item
-Wenn Sie einen @code{parse error} erhalten, �berpr�fen Sie bitte genau Ihre
-Syntax! Wenn Sie nichts Falsches darin finden k�nnen, ist es sehr
-wahrscheinlich, dass Ihre aktuelle Version von MySQL die Anfrage, die Sie
-formuliert haben, nicht unterst�tzt. Wenn Sie die aktuelle Version benutzen
-und das Handbuch unter @uref{http://www.mysql.com/documentation/manual.php}
-die Syntax, die Sie benutzen, nicht beschreibt, unterst�tzt MySQL Ihre
-Anfrage nicht. In diesem Fall bleibt Ihnen nur, die Syntax entweder selbst
-zu implementieren oder per E-Mail an @email{mysql-licensing@@mysql.com}
-nach einem Angebot f�r die Implementation anzufragen!
-
-Wenn das Handbuch die Syntax, die Sie benutzen, beschreibt, Sie aber eine
-�ltere Version von MySQL benutzen, sollten Sie in der
-MySQL-�nderungsgeschichte (Change History) nachsehen, wann die Syntax
-implementiert wurde. In diesem Fall haben Sie die M�glichkeit, ein Upgrade
-auf eine neuere Version von MySQL vorzunehmen.
-@xref{News}.
-
-@item
-Wenn Sie ein Problem in der Art haben, dass Ihre Daten anscheinend
-besch�digt sind oder Sie Fehlermeldungen bekommen, wenn Sie auf eine
-bestimmte Tabelle zugreifen, sollten Sie zun�chst Ihre Tabellen �berpr�fen
-und anschlie�end reparieren, indem Sie @code{myisamchk} oder @code{CHECK
-TABLE} und @code{REPAIR TABLE} benutzen.
-@xref{MySQL Database Administration}.
-
-@item
-Wenn Sie oft besch�digte Tabellen erhalten, sollten Sie versuchen
-herauszufinden, wann und warum das geschieht! In diesem Fall kann die
-@file{mysql-data-directory/'hostname'.err}-Datei einige Informationen
-dar�ber enthalten, was geschehen ist. @xref{Error log}. Bitte f�gen Sie
-jede relevante Information aus dieser Datei in Ihren Bug-Bericht ein!
-Normalerweise sollte @code{mysqld} @strong{NIE} eine Tabelle zerst�ren,
-ausser wenn der Server mitten w�hrend eines Updates gekillt wurde! Wenn Sie
-den Grund f�r den Absturz von @code{mysqld} herausfinden k�nnen, ist es
-sehr viel einfacher f�r uns, Ihnen eine L�sung des Problems an die Hand zu
-geben!
-@xref{What is crashing}.
-
-@item
-Falls m�glich, sollten Sie die aktuellste Version von MySQL herunter laden,
-installieren und �berpr�fen, ob das Ihr Problem l�st. Alle Versionen
-von MySQL werden gr�ndlich getestet und sollten ohne Probleme
-funktionieren! Wir halten uns daran, alles so abw�rtskompatibel wie
-m�glich zu machen. Daher sollte es Ihnen m�glich sein, innerhalb von
-Minuten die MySQL-Version auszutauschen!
-@xref{Which version}.
-@end itemize
-
-@cindex Technischer Support, E-Mail-Adresse
-@cindex Support, E-Mail-Adresse
-@cindex Kunden-Support, E-Mail-Adresse
-@cindex E-Mail-Adresse, f�r Kunden-Support
-Wenn Sie ein Support-Kunde sind, schicken Sie bitte den Bug-Bericht an
-@email{mysql-Support@@mysql.com}, damit dieser eine h�here Priorit�t in der
-Bearbeitung erf�hrt. Schicken Sie ihn gleichzeitig an die entsprechende
-Mailing-Liste, um zu sehen, ob schon jemand anderes das selbe Problem hatte
-(und vielleicht gel�st hat).
-
-Informationen zu Bug-Berichten siehe @strong{MyODBC} und @ref{ODBC Problems}.
-
-L�sungen f�r h�ufig auftretende Probleme siehe @xref{Problems}.
-
-Wenn Ihnen Antworten individuell zugesandt werden und nicht an die
-Mailing-Liste, wird es als gute Etikette betrachtet, die Antworten
-zusammenzufassen und die Zusammenfassung an die Mailing-Liste zu schicken,
-damit andere von den Antworten profitieren k�nnen, die Ihnen geholfen
-haben, Ihr Problem zu l�sen!
-
-
-@node Answering questions, , Bug reports, Questions
-@c German node Fragen beantworten
-@subsubsection Richtlinien f�r die Beantwortung von Fragen auf der Mailing-Liste
-
-@cindex Netz-Etikette
-@cindex Fragen, Antworten
-@cindex Fragen beantworten, Etikette
-@cindex Mailing-Listen, Richtlinien
-
-Wenn Sie davon ausgehen, dass Ihre Antwort auf breites Interesse st��t,
-sollten Sie an die Mailing-Liste posten, statt direkt der Person zu
-antworten, die die Frage stellte. Versuchen Sie, Ihre Antwort so allgemein
-zu halten, dass auch andere als der urspr�nglich Fragende von Ihrer Antwort
-profitieren k�nnen. Wenn Sie an die Liste posten, stellen Sie bitte sicher,
-dass Ihre Antwort kein Duplikat einer vorhergehenden Antwort ist.
-
-Versuchen Sie, den wesentlichen Teil der Frage in Ihrer Antwort
-zusammenzufassen. F�hlen Sie sich nicht verpflichtet, die gesamte
-urspr�ngliche Nachricht zu zitieren.
-
-Bitte schicken Sie Ihre Mailnachrichten nicht im HTML-Format! Viele
-Benutzer lesen Nachrichten mit nicht HTML-f�higen Anwendungen!
-
-
-
-@node Compatibility, TODO, MySQL Information Sources, Deutsch
-@c German node Kompatibilit�t
-@section Wie Standard-kompatibel ist MySQL?
-
-@cindex Kompatibilit�t mit ANSI SQL
-@cindex Standard-Kompatibilit�t
-@cindex Erweiterungen von ANSI SQL
-@cindex ANSI SQL92, Erweiterungen
-
-
-Dieser Abschnitt beschreibt, wie sich MySQL zum ANSI SQL-Standard verh�lt.
-MySQL hat viele Erweiterungen zum ANSI SQL-Standard, und hier steht, welche
-das sind und wie man sie benutzt. Hier finden Sie auch Informationen �ber
-Funktionalit�t, die MySQL fehlt, und wie man mit diesen Unterschieden
-umgeht.
-
-
-@menu
-* Standards::
-* ANSI mode::
-* Extensions to ANSI::
-* Differences from ANSI::
-* Bugs::
-@end menu
-
-@node Standards, ANSI mode, Compatibility, Compatibility
-@c German node Standards
-@subsection An welche Standards h�lt sich MySQL?
-
-Entry-Level-SQL92. ODBC-Levels 0-2.
-
-Wir beabsichtigen ANSI SQL99 vollst�ndig zu unterst�tzen. Dies
-wollen wir jedoch keinesfalls auf Kosten von Geschwindigkeit
-oder Codequalit�t erreichen.
-
-@node ANSI mode, Extensions to ANSI, Standards, Compatibility
-@c German node ANSI-Modus
-@subsection MySQL im ANSI-Modus laufen lassen
-
-@cindex Laufen lassen, ANSI-Modus
-@cindex ANSI-Modus, laufen lassen
-
-Wenn Sie @code{mysqld} mit der @code{--ansi}-Option starten, �ndert sich
-folgendes Verhalten von MySQL:
-
-@itemize @bullet
-@item
-@code{||} ist Zeichenketten-Verkettung (Konkatenation) anstelle von
-@code{OR}.
-
-@item
-Sie k�nnen eine beliebige Anzahl von Leerzeichen zwischen Funktionnamen und
-@samp{(} eingeben. Das f�hrt zwangsl�ufig dazu, dass alle Funktionsnamen
-als reservierte W�rter behandelt werden.
-
-@item
-@samp{"} ist dann ein Quotierungsbezeichner (wie das MySQL-
-@samp{`}-Anf�hrungszeichen) und kein Zeichen, dass einen String einschlie�t.
-
-@item
-@code{REAL} wird zu einem Synonym f�r @code{FLOAT} anstelle eines Synonyms
-f�r @code{DOUBLE}.
-
-@item
-Der Standard-Isolationslevel f�r Transaktionen ist @code{SERIALIZABLE}.
-@xref{SET TRANSACTION}.
-@end itemize
-
-Das ist dasselbe, als w�rde man
-@code{--sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,SERIALIZE,ONLY_FULL_GROUP_BY}
-benutzen.
-
-@node Extensions to ANSI, Differences from ANSI, ANSI mode, Compatibility
-@c German node Erweiterungen zu ANSI
-@subsection MySQL-Erweiterungen zu ANSI SQL92
-
-@cindex Hinweise
-MySQL beinhaltet einige Erweiterungen, die Sie in anderen SQL-Datenbanken
-wahrscheinlich nicht finden werden. Passen Sie auf, wenn Sie diese
-benutzen, denn Ihr Code ist dann nicht mehr kompatibel mit anderen
-SQL-Servern. In einigen F�llen k�nnen Sie Code schreiben, der
-MySQL-Erweiterungen enth�lt und dennoch portabel ist, indem Sie Kommentare
-in der Form @code{/*! ... */} benutzen. In diesem Fall wird MySQL den Code
-innerhalb des Kommentars parsen und ausf�hren wie jedes andere
-MySQL-Statement, aber andere SQL-Server werden die Erweiterungen
-ignorieren. Zum Beispiel:
-
-@example
-SELECT /*! STRAIGHT_JOIN */ col_name FROM tabelle1, tabelle2 WHERE ...
-@end example
-
-Wenn Sie hinter @code{'!'} die Versionsnummer angeben, wird die Syntax nur
-ausgef�hrt, wenn die MySQL-Version gleich oder neuer als die benutzte
-Versionsnummer ist:
-
-@example
-CREATE /*!32302 TEMPORARY */ TABLE (a int);
-@end example
-
-Je h�her bedeutet, wenn Sie Version 3.23.02 oder neuer haben, wird MySQL
-das @code{TEMPORARY}-Schl�sselwort benutzen.
-
-MySQL-Erweiterungen sind:
-
-@itemize @bullet
-@item
-Die Feldtypen @code{MEDIUMINT}, @code{SET}, @code{ENUM} und die
-unterschiedlichen @code{BLOB}- und @code{TEXT}-Typen.
-
-@item
-Die Feldattribute @code{AUTO_INCREMENT}, @code{BINARY}, @code{NULL},
-@code{UNSIGNED} und @code{ZEROFILL}.
-
-@item
-Alle Zeichenkettenvergleiche achten vorgabem��ig nicht auf
-Gro�-/Kleinschreibung, wobei die Sortierreihenfolge vom aktuell
-verwendeten Zeichensatz abh�ngig ist (ISO-8859-1 Latin1 als Vorgabe). Wenn
-Sie das nicht wollen, sollten Sie Ihre Spalten mit dem
-@code{BINARY}-Attribut deklarieren oder den @code{BINARY}-Cast
-benutzen, der daf�r sorgt, dass Vergleiche mit der ASCII-Sortierung
-durchgef�hrt werden, die der MySQL-Server-Host benutzt.
-
-@item
-MySQL legt jede Datenbank als Verzeichnis unterhalb des MySQL-data-
-Verzeichnisses an und Tabellen innerhalb einer Datenbank als Dateien in dem
-Datenbank-Verzeichnis.
-
-Das hat ein paar Auswirkungen:
-
-@cindex Datenbanknamen, Gro�-/Kleinschreibung
-@cindex Tabellennamen, Gro�-/Kleinschreibung
-@cindex Gro�-/Kleinschreibung von Datenbanknamen
-@cindex Gro�-/Kleinschreibung von Tabellennamen
-
-@itemize @minus
-
-@item
-Bei Datenbanknamen und Tabellennamen wird auf Unterschiede in der
-Gro�-/Kleinschreibung geachtet, wenn das Betriebssystem auf
-Gro�-/Kleinschreibung achtet (wie auf den meisten Unix-Systemen).
-@xref{Case sensitivity}.
-
-@item
-Datenbank-, Tabellen-, Index-, Spalten- oder Alias-Namen d�rfen mit einer
-Ziffer beginnen (aber nicht ausschlie�lich aus Ziffern bestehen).
-
-@item
-Sie k�nnen Standard-Kommandos des Betriebssystems benutzen, um Tabellen zu
-sichern (Datensicherung), umzubenennen, zu verschieben, zu l�schen und zu kopieren.
-Um zum Beispiel eine Tabelle umzubennen, benennen Sie die Dateien
-@file{.MYD}, @file{.MYI} und @file{.frm} um, die der Tabelle entsprechen.
-@end itemize
-
-@item
-In SQL-Statements k�nnen Sie Tabellen aus verschiedenen Datenbanken mit der
-@code{db_name.tbl_name}-Syntax ansprechen. Einige SQL-Syntax stellen
-dieselbe Funktionalit�t zur Verf�gung, nennen dies aber @code{User space}.
-MySQL unterst�tzt keine Tablespaces wie in folgendem Beispiel:
-@code{create tabelle ralph.meine_tabelle...IN mein_tablespace}.
-
-@item
-@code{LIKE} ist f�r numerische Spalten erlaubt.
-
-@item
-Die Benutzung von @code{INTO OUTFILE} und @code{STRAIGHT_JOIN} in einem
-@code{SELECT}-Statement. @xref{SELECT, , @code{SELECT}}.
-
-@item
-Die Option @code{SQL_SMALL_RESULT} in einem @code{SELECT}-Statement.
-
-@item
-@code{EXPLAIN SELECT}, um eine Beschreibung zu erhalten, wie Tabellen
-verkn�pft werden (Join).
-
-@item
-Die Benutzung von Index-Namen, Indexen auf ein Prefix eines Feldes, und die
-Benutzung von @code{INDEX} oder @code{KEY} in einem @code{CREATE TABLE}-
-Statement. @xref{CREATE TABLE, , @code{CREATE TABLE}}.
-
-@item
-Die Benutzung von @code{TEMPORARY} oder @code{IF NOT EXISTS} mit @code{CREATE TABLE}.
-
-@item
-Die Benutzung von @code{COUNT(DISTINCT list)}, wobei 'list' mehr als ein
-Element ist.
-
-@item
-Die Benutzung von @code{CHANGE spalten_name}, @code{DROP spalten_name}, oder
-@code{DROP INDEX}, @code{IGNORE} oder @code{RENAME} in einem @code{ALTER
-TABLE}-Statement. @xref{ALTER TABLE, , @code{ALTER TABLE}}.
-
-@item
-Die Benutzung von @code{RENAME TABLE}. @xref{RENAME TABLE, , @code{RENAME TABLE}}.
-
-@item
-Die Benutzung mehrfacher @code{ADD}-, @code{ALTER}-, @code{DROP}-, oder
-@code{CHANGE}-Klauseln in einem @code{ALTER TABLE} Statement.
-
-@item
-Die Benutzung von @code{DROP TABLE} mit the keywords @code{IF EXISTS}.
-
-@item
-Sie k�nnen mehrere Tabellen l�schen mit einem einzigen @code{DROP
-TABLE}-Statement.
-
-@item
-Die @code{LIMIT}-Klausel des @code{DELETE}-Statements.
-
-@item
-Die @code{DELAYED}-Klausel der @code{INSERT}- und @code{REPLACE}-
-Statements.
-
-@item
-Die @code{LOW_PRIORITY}-Klausel der @code{INSERT}-, @code{REPLACE}-,
-@code{DELETE}- und @code{UPDATE}-Statements.
-
-@cindex Oracle-Kompabilit�t
-@cindex Kompatibilit�t, mit Oracle
-@item
-Die Benutzung von @code{LOAD DATA INFILE}. In vielen F�llen ist diese
-Syntax kompatibel mit Oracles @code{LOAD DATA INFILE}. @xref{LOAD DATA, ,
-@code{LOAD DATA}}.
-
-@item
-Die @code{ANALYZE TABLE}-, @code{CHECK TABLE}-, @code{OPTIMIZE TABLE}- und
-@code{REPAIR TABLE}-Statements.
-
-@item
-Das @code{SHOW}-Statement.
-@xref{SHOW, , @code{SHOW}}.
-
-@item
-Zeichenketten d�rfen sowohl durch @samp{"} als auch durch @samp{'}
-eingeschlossen werden, nicht nur durch @samp{'}.
-
-@item
-Die Benutzung des Escape(@samp{\})Zeichens.
-
-@item
-Das @code{SET OPTION}-Statement. @xref{SET OPTION, , @code{SET OPTION}}.
-
-@item
-Sie m�ssen nicht alle ausgew�hlten Spalten im @code{GROUP BY}-Teil nennen.
-Hierdurch ergibt sich eine bessere Performance f�r einige sehr spezifische,
-aber recht gew�hnliche Anfragen.
-
-@item
-Man kann @code{ASC} und @code{DESC} bei @code{GROUP BY} spezifizieren.
-
-@item
-Um es Benutzern leichter zu machen, die von anderen SQL-Umgebungen kommen,
-unterst�tzt MySQL Aliase f�r viele Funktionen. Zum Beispiel unterst�tzen
-alle Zeichenketten-Funktionen sowohl die ANSI-SQL-Syntax als auch die
-ODBC-Syntax.
-
-@item
-MySQL kennt die Operatoren @code{||} und @code{&&}, die logisches Oder und
-logisches Und bedeuten, wie in der Programmiersprache C. In MySQL sind
-@code{||} und @code{OR} Synonyme, wie auch @code{&&} und @code{AND}.
-Aufgrund dieser freundlichen Syntax unterst�tzt MySQL nicht den
-ANSI-SQL-@code{||}-Operator f�r Zeichenketten-Verkettung (Konkatenation);
-benutzen Sie statt dessen @code{CONCAT()}. Weil @code{CONCAT()} eine
-beliebige Anzahl von Argumenten entgegennimmt, ist es leicht, die Benutzung
-des @code{||}-Operators zu MySQL zu konvertieren.
-
-@item
-@code{CREATE DATABASE} oder @code{DROP DATABASE}.
-@xref{CREATE DATABASE, , @code{CREATE DATABASE}}.
-
-@cindex PostgreSQL-Kompatibilit�t
-@cindex Kompatibilit�t, mit PostgreSQL
-@item
-Der @code{%}-Operator ist ein Synonym f�r @code{MOD()}. Das hei�t @code{N
-% M} ist �quivalent zu @code{MOD(N,M)}. @code{%} wird f�r C-Programmierer
-und f�r Kompatibilit�t mit PostgreSQL unterst�tzt.
-
-@item
-Die @code{=}-, @code{<>}-, @code{<=}-, @code{<}-, @code{>=}-, @code{>}-,
-@code{<<}-, @code{>>}-, @code{<=>}-, @code{AND}-, @code{OR}- oder
-@code{LIKE}-Operatoren k�nnen in Spaltenvergleichen links von @code{FROM}
-in @code{SELECT} Statements benutzt werden. Beispiel:
-
-@example
-mysql> SELECT spalte1=1 AND spalte2=2 FROM tabelle_name;
-@end example
-
-@item
-Die @code{LAST_INSERT_ID()}-Funktion.
-@xref{mysql_insert_id, , @code{mysql_insert_id()}}.
-
-@item
-Die @code{REGEXP}- und @code{NOT REGEXP}-Operatoren f�r erweiterte regul�re
-Ausdr�cke.
-
-@item
-@code{CONCAT()} oder @code{CHAR()} mit einem Argument oder mehr als zwei
-Argumenten. (In MySQL k�nnen diese Funktionen jede beliebige Anzahl von
-Argumenten entgegennehmen.)
-
-@item Die Funktionen @code{BIT_COUNT()}, @code{CASE}, @code{ELT()},
-@code{FROM_DAYS()}, @code{FORMAT()}, @code{IF()}, @code{PASSWORD()},
-@code{ENCRYPT()}, @code{md5()}, @code{ENCODE()}, @code{DECODE()},
-@code{PERIOD_ADD()}, @code{PERIOD_DIFF()}, @code{TO_DAYS()} oder
-@code{WEEKDAY()}.
-
-@item
-Die Benutzung von @code{TRIM()}, um Teile von Zeichenketten zu entfernen.
-ANSI SQL unterst�tzt nur die Entfernung einzelner Zeichen.
-
-@item
-Die @code{GROUP BY}-Funktionen @code{STD()}, @code{BIT_OR()} und
-@code{BIT_AND()}.
-
-@item
-Die Benutzung von @code{REPLACE} anstelle von @code{DELETE} + @code{INSERT}.
-@xref{REPLACE, , @code{REPLACE}}.
-
-@item
-Das @code{FLUSH flush_option}-Statement.
-
-@item
-Die M�glichkeit, Variablen in einem Statement mit @code{:=} zu setzen:
-@example
-SELECT @@a:=SUM(total),@@b=COUNT(*),@@a/@@b AS avg FROM test_tabelle;
-SELECT @@t1:=(@@t2:=1)+@@t3:=4,@@t1,@@t2,@@t3;
-@end example
-
-@end itemize
-
-
-@node Differences from ANSI, Bugs, Extensions to ANSI, Compatibility
-@c German node Unterschiede zu ANSI
-@subsection MySQL-Unterschiede im Vergleich zu ANSI SQL92
-
-Wir versuchen m�glichst, dass MySQL dem ANSI-SQL-Standard und dem
-ODBC-SQL-Standard folgt, aber in einigen F�llen macht MySQL Dinge auf
-andere Weise:
-
-@itemize @bullet
-@item
-@code{--} ist nur dann ein Kommentar, wenn darauf Whitespace folgt.
-@xref{ANSI diff comments}.
-
-@item
-Bei @code{VARCHAR}-Spalten werden Leerzeichen am Ende entfernt, wenn der
-Wert gespeichert wird. @xref{Bugs}.
-
-@item
-In einigen F�llen �ndern sich @code{CHAR}-Spalten automatisch (silent) in
-@code{VARCHAR}-Spalten. @xref{Silent column changes}.
-
-@item
-Zugriffsrechte f�r eine Tabelle werden nicht automatisch widerrufen, wenn
-Sie eine Tabelle l�schen. Sie m�ssen explizit ein @code{REVOKE}-Statement
-absetzen, um die Zugriffsrechte f�r eine Tabelle zu widerrufen.
-@xref{GRANT, , @code{GRANT}}.
-
-@item
-@code{NULL AND FALSE} werden zu @code{NULL} ausgewertet und nicht zu
-@code{FALSE}. Der Grund hierf�r liegt darin, dass wir meinen, dass es keine
-gute Idee ist, eine Menge von Sonderkonditionen f�r diesen Fall auswerten
-zu m�ssen.
-@end itemize
-
-
-@menu
-* ANSI diff Sub-selects::
-* ANSI diff SELECT INTO TABLE::
-* ANSI diff Transactions::
-* ANSI diff Triggers::
-* ANSI diff Foreign Keys::
-* Besch�digte Fremdschl�ssel::
-* ANSI diff Views::
-* ANSI diff comments::
-@end menu
-
-@node ANSI diff Sub-selects, ANSI diff SELECT INTO TABLE, Differences from ANSI, Differences from ANSI
-@c German node Fehlende Sub-Selects
-@subsubsection Sub-Selects
-
-@cindex Sub-Selects
-
-MySQL unterst�tzt momentan nur Sub-Selects der Form @code{INSERT
-... SELECT ...} und @code{REPLACE ... SELECT ...}. In anderen
-Zusammenh�ngen k�nnen Sie allerdings die Funktion @code{IN()} benutzen.
-
-In vielen F�llen k�nnen Sie Ihre Anfragen ohne Sub-Selects schreiben:
-
-@example
-SELECT * FROM tabelle1 WHERE id IN (SELECT id FROM tabelle2);
-@end example
-
-Das kann wie folgt umgeschrieben werden:
-
-@example
-SELECT tabelle1.* FROM tabelle1,tabelle2 WHERE tabelle1.id=tabelle2.id;
-@end example
-
-Die Anfragen:
-@example
-SELECT * FROM tabelle1 WHERE id NOT IN (SELECT id FROM tabelle2);
-SELECT * FROM tabelle1 WHERE NOT EXISTS (SELECT id FROM tabelle2 where tabelle1.id=tabelle2.id);
-@end example
-
-K�nnen wie folgt umgeschrieben werden:
-
-@example
-SELECT tabelle1.* FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.id=tabelle2.id where tabelle2.id IS NULL
-@end example
-
-F�r kompliziertere Unteranfragen (Subqueries) k�nnen Sie oft tempor�re
-Tabelle anlegen, die die Unteranfrage enthalten. In einigen F�llen wird
-diese Option allerdings nicht funktionieren. Am h�ufigsten treten diese
-F�lle mit @code{DELETE}-Statements auf, wof�r Standard-SQL keine
-Verkn�pfungen (Joins) unterst�tzt. F�r solche Situationen sind zwei
-Optionen verf�gbar, solange MySQL noch keine Unteranfragen unterst�tzt.
-
-Die erste Option besteht darin, eine prozedurale Programmiersprache (wie
-PHP oder Perl) zu benutzen, um eine @code{SELECT}-Anfrage zu erhalten, die
-die Prim�rschl�ssel enth�lt, die ben�tigt werden, um die entsprechenden
-Datens�tze zu l�schen, und dann diese Werte zu benutzen, um das
-@code{DELETE}-Statement zu formulieren (@code{DELETE FROM ... WHERE ... IN
-(key1, key2, ...)}).
-
-Die zweite Option besteht darin, interaktives SQL zu benutzen, um
-automatisch eine Reihe von @code{DELETE}-Statements zu formulieren, indem
-die MySQL-Erweiterung @code{CONCAT()} benutzt wird (anstelle des
-Standard-Operators @code{||}).
-Beispiel:
-
-@example
-SELECT CONCAT('DELETE FROM tabelle1 WHERE pkid = ', tabelle1.pkid, ';')
- FROM tabelle1, tabelle2
- WHERE tabelle1.spalte1 = tabelle2.spalte2;
-@end example
-
-Sie k�nnen diese Anfrage in eine Skriptdatei schreiben und deren Eingabe an
-den Kommandozeilen-Interpreter @code{mysql} leiten und von dort die Ausgabe
-zur�ck an eine zweite Instanz des Interpreters:
-
-@example
-prompt> mysql --skip-column-names meine_db < mein_skript.sql | mysql meine_db
-@end example
-
-MySQL 4.0 unterst�tzt das L�schen aus mehreren Tabellen (multi-table
-deletes), was benutzt werden kann, um effizient Zeilen zu l�schen,
-basierend auf den Informationen aus einer Tabelle oder sogar aus mehreren
-Tabellen zur gleichen Zeit.
-
-@node ANSI diff SELECT INTO TABLE, ANSI diff Transactions, ANSI diff Sub-selects, Differences from ANSI
-@c German node Fehlendes SELECT INTO TABLE
-@subsubsection @code{SELECT INTO TABLE}
-
-@findex SELECT INTO TABLE
-
-MySQL unterst�tzt noch nicht die Oracle-SQL-Erweiterung @code{SELECT ...
-INTO TABLE ...}. MySQL unterst�tzt statt dessen die ANSI-SQL-Syntax
-@code{INSERT INTO ... SELECT ...}, die im Prinzip dasselbe ist.
-@xref{INSERT SELECT}.
-
-@example
-INSERT INTO tabelle_temp2 (fldID) SELECT tabelle_temp1.fldOrder_ID FROM tabelle_temp1 WHERE
-tabelle_temp1.fldOrder_ID > 100;
-@end example
-
-Alternativ k�nnen Sie @code{SELECT INTO OUTFILE...} oder @code{CREATE TABLE
-... SELECT} benutzen, um Ihre Probleme zu l�sen.
-
-
-@node ANSI diff Transactions, ANSI diff Triggers, ANSI diff SELECT INTO TABLE, Differences from ANSI
-@c German node Fehlende Transaktionen
-@subsubsection Transaktionen
-
-@cindex Transaktionen, Support
-
-Weil MySQL heutzutage Transaktionen unterst�tzt, gelten die folgenden
-Er�rterungen nur, wenn Sie nur Tabellentypen benutzen, die nicht
-transaktionssicher sind. @xref{COMMIT}.
-
-Oft wird von neugierigen oder kritischen Leuten gefragt: ``Warum ist MySQL
-keine transaktionale Datenbank?'' oder ``Warum unterst�tzt MySQL keine
-Transaktionen?''
-
-MySQL hat sich bewusst entschieden, andere Paradigmen f�r die
-Datenintegrit�t zu unterst�tzen: ``atomische Operationen.'' Es entspricht
-unserer Denkweise und unserer Erfahrung, dass atomische Operationen gleiche
-oder bessere Integrit�t bei wesentlich besserer Performance gew�hrleisten.
-Nichtsdestotrotz sch�tzen und verstehen wir das transaktionale
-Datenbank-Paradigma und planen, im Verlauf der n�chsten Releases
-transaktionssichere Tabellen einzuf�hren, auf der Basis der
-Transaktionssicherheit pro einzelner Tabelle. Wir werden unseren Benutzern
-die Entscheidung �berlassen, ob Sie in ihren Applikationen den
-Geschwindigkeitsvorteil atomischer Operationen ben�tigen oder die
-transaktionalen Features.
-
-Wie benutzt man die Features von MySQL, um rigorose Integrit�t
-beizubehalten, und wie sind diese Features im Vergleich mit dem
-transaktionalen Paradigma zu bewerten?
-
-Zun�chst ist es nach dem transaktionalen Paradigma bequemer, mit
-Transaktionen zu arbeiten, wenn Ihre Applikationen auf eine Weise
-geschrieben sind, dass sie in kritischen Situationen ``rollback'' anstelle
-von ``commit'' aufrufen. Dar�ber hinaus stellen Transaktionen sicher, dass
-unbeendete Updates oder zerst�rende Aktivit�ten nicht an die Datenbank
-abgesetzt werden; der Server hat die Gelegenheit, ein automatisches
-Rollback durchzuf�hren, wodurch Ihre Datenbank gerettet wird.
-
-In fast allen F�llen erlaubt Ihnen MySQL, potentiellen Problemen
-vorzubauen, indem einfache �berpr�fungen eingebaut und einfache Skripte
-laufen gelassen werden, die die Datenbanken auf Inkonsistenzen pr�fen und
-automatisch reparieren oder Warnmeldungen ausgeben, wenn so etwas passiert.
-Beachten Sie auch, dass allein durch die Benutzung der MySQL-Logdatei oder
-durch das Hinzuf�gen einer speziellen Logdatei Tabellen perfekt repariert
-werden k�nnen, ohne dass ein Verlust an Datenintegrit�t eintritt.
-
-Dar�ber hinaus k�nnen fatale transaktionale Updates so umgeschrieben
-werden, dass sie atomisch sind. In der Tat gehen wir so weit zu sagen, dass
-alle Integrit�tsprobleme, die Transaktionen l�sen, mit @code{LOCK TABLES}
-oder atomischen Update durchgef�hrt werden k�nnen, was sicherstellt, dass
-Sie nie einen automatischen Abbruch von der Datenbank bekommen, was ein
-gew�hnliches Problem transaktionaler Datenbanken darstellt.
-
-Nicht einmal Transaktionen k�nnen jeden Verlust verhindern, wenn der Server
-abst�rzt. In solchen F�llen k�nnen sogar transaktionale Systeme Daten
-verlieren. Der Unterschied zwischen unterschiedlichen Systemen besteht
-einzig darin, wie kurz die Zeitverz�gerung ist, in der Daten verloren gehen
-k�nnten. Kein System ist 100%-ig sicher, sondern lediglich ``sicher
-genug''. Selbst von Oracle, ansonsten als das sicherste aller
-transaktionalen Datenbanken ber�hmt, wird berichtet, dass es manchmal in
-solchen Situationen Daten verliert.
-
-Um mit MySQL auf der sicheren Seite zu sein, brauchen Sie lediglich
-Datensicherungen und angeschaltetes Update-Logging. Damit k�nnen Sie in
-jeder denkbaren Situation genau wie mit jeder beliebigen transaktionalen
-Datenbank Daten wiederherstellen. Nat�rlich ist es immer eine gute Idee,
-Datensicherungen zu haben, unabh�ngig von der verwendeten Datenbank.
-
-
-Das transaktionale Paradigma hat seine Vor- und Nachteile. Viele
-Benutzer und Applikationsentwickler verlassen sich auf die Einfachheit, mit
-der sie um Probleme herum Code schreiben k�nnen, dort wo anscheinend ein
-Abbruch erfolgt ist, oder wo es notwendig ist, haben sie wom�glich ein
-bisschen mehr Arbeit mit MySQL, weil sie anders denken oder mehr schreiben
-m�ssen. Wenn Ihnen atomische Operationen neu sind oder Sie vertrauter mit
-Transaktionen sind (oder Sie sich damit besser f�hlen), kommen Sie nicht
-gleich zur Schlussfolgerung, dass sich MySQL nicht mit diesen �berlegungen
-besch�ftigt hat. Zuverl�ssigkeit und Integrit�t stehen f�r uns absolut im
-Vordergrund. Aktuelle Sch�tzungen gehen davon aus, dass zur Zeit mehr als
-eine Million @code{mysqld}-Server laufen, von denen viele in
-Produktionsumgebungen eingesetzt werden. Wir h�ren sehr, sehr selten von
-Benutzern, die irgendwelche Daten verloren haben, und in fast allen F�llen
-sind Benutzerfehler im Spiel. Das ist unserer Meinung nach der beste Beweis
-f�r die Stabilit�t und Zuverl�ssigkeit von MySQL.
-
-Im �brigen lassen die aktuellen Features von MySQL Zuverl�ssigkeit und
-Integrit�t auf Transaktionsebene oder besser zu, wenn in bestimmten
-Situationen Integrit�t von h�chster Wichtigkeit ist. Wenn Sie Tabellen mit
-@code{LOCK TABLES} sperren, werden alle Updates angehalten, bis jegliche
-Integrit�tspr�fungen durchgef�hrt sind. Wenn Sie nur eine Lesesperre (Read
-Lock) machen (im Gegensatz zu einer Schreibsperre - Write Lock), werden
-Lese- und Einf�geoperationen noch zugelassen. Die neu eingef�gten
-Datens�tze k�nnen von nicht Clients gesehen werden, die eine
-@code{READ}-Sperre haben, bis sie ihre Lesesperre aufheben. Mit
-@code{INSERT DELAYED} k�nnen Sie Einf�geoperationen in eine lokale
-Warteschlange (Local Queue) stellen, solange, bis die Sperren aufgehoben
-sind, ohne dass der Client warten muss, bis die Einf�geoperationen
-abgeschlossen sind. @xref{INSERT DELAYED}.
-
-``Atomisch'', so wie wir es meinen, ist nichts Magisches. Es bedeutet nur,
-dass Sie sicher sein k�nnen, dass kein anderer Benutzer mit irgendeinem
-laufenden Update in Konflikt kommen kann, und dass es nie ein automatisches
-Rollback geben kann (was bei transaktionsbasierenden Systemen vorkommen
-kann, wenn Sie nicht sehr vorsichtig sind). MySQL garantiert auch, dass es
-keine schmutzigen Lesezugriffe (Dirty Reads) gibt. Sie finden einige
-Beispiele, wie man atomische Updates schreibt, im Abschnitt �ber Commits
-und Rollbacks.
-@c German FIX This section no longer exists
-@c @xref{Commit-Rollback}.
-
-Wir haben reichlich �ber Integrit�t und Performance nachgedacht und
-glauben, dass unser atomisches Paradigma sowohl Zuverl�ssigkeit als auch
-extrem hohe Performance gew�hrleistet, und zwar drei- bis f�nfmal
-schneller, als es die schnellste und optimal eingestellte transaktionale
-Datenbank schafft. Wir haben Transaktionen nicht deshalb heraus gelassen,
-weil sie schwer zu machen sind. Der Hauptgrund f�r die Entscheidung f�r
-atomische Operationen gegen Transaktionen liegt darin, dass wir dadurch
-viele Geschwindigkeitsoptimierungen machen konnten, die auf andere Art
-nicht m�glich gewesen w�ren.
-
-Viele unserer Benutzer, f�r die Geschwindigkeit das Wichtigste ist, haben
-keinerlei Bedenken hinsichtlich Transaktionen. F�r sie sind Transaktionen
-kein Thema. Diejenigen Benutzer, die Sorgen mit Transaktionen haben oder
-sich dar�ber wundern, dass MySQL diese nicht unterst�tzt, gibt es eine
-``MySQL-Art'', die wir weiter oben beschrieben haben. Denjenigen, denen
-Sicherheit wichtiger als Geschwindigkeit ist, empfehlen wir die Benutzung
-von @code{BDB}- oder @code{InnoDB}-Tabellen f�r alle kritischen Daten.
-@xref{Table types}.
-
-Ein letzter Hinweis: Wir arbeiten zur Zeit an einem sicheren
-Replikationsschema, vom dem wir glauben, dass es besser als jedes
-kommerzielle Replikationssystem ist, das wir kennen. Dieses System wird mit
-dem atomischen, nicht-transaktionalen Paradigma mit h�chster
-Zuverl�ssigkeit laufen. Bleiben Sie dran!
-
-
-@node ANSI diff Triggers, ANSI diff Foreign Keys, ANSI diff Transactions, Differences from ANSI
-@c German node Fehlende Trigger
-@subsubsection Gespeicherte Prozeduren und Trigger
-
-@cindex Fehlende Prozeduren und Trigger, Definition
-@cindex Prozeduren, gespeicherte
-@cindex Trigger, gespeicherte
-
-Eine gespeicherte Prozedur ist ein Satz von SQL-Kommandos, die kompiliert
-und auf dem Server gespeichert werden k�nnen. Wenn dies einmal geschehen
-ist, m�ssen Clients nicht mehr die gesamte Anfrage absetzen, sondern k�nnen
-sich auf die gespeicherte Prozedur beziehen. Hiermit wird bessere
-Performance erreicht, den die Anfrage muss nur einmal geparst werden, und
-es muss weniger Information zwischen Client und Server ausgetauscht werden.
-Man kann sogar die konzeptionelle Ebene steigern, indem man Bibliotheken
-von Funktionen auf dem Server bereit h�lt.
-
-Ein Trigger ist eine gespeicherte Prozedur, die aufgerufen wird, wenn ein
-bestimmtes Ereignis eintritt. Beispielsweise kann man eine gespeicherte
-Prozedur installieren, die jedes Mal ausgef�hrt wird, wenn ein Datensatz
-aus einer Transaktionstabelle gel�scht wird, und die automatisch den dazu
-geh�rigen Kunden aus einer Kundentabelle l�scht, wenn alle seine
-Transaktionen gel�scht wurden.
-
-F�r ein sp�teres Release ist geplant, dass MySQL gespeicherte Prozeduren
-handhaben kann, aber ohne Trigger. Trigger verlangsamen �blicherweise
-alles, sogar Anfragen, f�r die sie nicht ben�tigt werden.
-
-Um festzustellen, ab wann MySQL gespeicherte Prozeduren bekommen wird, siehe
-auch @ref{TODO}.
-
-
-@node ANSI diff Foreign Keys, Besch�digte Fremdschl�ssel, ANSI diff Triggers, Differences from ANSI
-@c German node Fehlende Fremdschl�ssel
-@subsubsection Fremdschl�ssel
-
-@cindex Fremdschl�ssel
-@cindex Schl�ssel, Fremdschl�ssel
-
-Beachten Sie, dass Fremdschl�ssel in SQL nicht dazu benutzt werden, um
-Tabellen zu verkn�pfen, sondern haupts�chlich, um die referentielle
-Integrit�t zu �berpr�fen (Fremdschl�ssel-Restriktionen). Wenn Sie durch ein
-@code{SELECT}-Statement Ergebnisse aus mehreren Tabellen erhalten wollen,
-tun Sie dies, indem Sie Tabellen verkn�pfen (Join):
-
-@example
-SELECT * von tabelle1,tabelle2 where tabelle1.id = tabelle2.id;
-@end example
-
-@xref{JOIN, , @code{JOIN}}. @xref{example-Foreign keys}.
-
-Die @code{FOREIGN KEY}-Syntax in MySQL existiert nur aus
-Kompatibilit�tsgr�nden mit den @code{CREATE TABLE}-Kommandos anderer
-Hersteller; sie tut nichts. Die @code{FOREIGN KEY}-Syntax ohne @code{ON
-DELETE ...} wird haupts�chlich f�r Dokumentationszwecke benutzt. Einige
-ODBC-Applikationen benutzen dies vielleicht, um automatische
-@code{WHERE}-Klauseln zu erzeugen, aber das l��t sich �blicherweise leicht
-�berschreiben. @code{FOREIGN KEY} wird manchmal als Restriktionspr�fung
-benutzt, aber eine solche �berpr�fung ist in der Praxis nicht notwendig,
-wenn Zeilen in Tabellen in der richtigen Reihenfolge eingef�gt werden.
-MySQL unterst�tzt diese Klauseln nur, weil manche Applikationen verlangen,
-dass sie existieren (egal ob sie funktionieren oder nicht).
-
-In MySQL k�nnen Sie das Problem, dass @code{ON DELETE...} nicht
-implementiert ist, dadurch umgehen, dass Sie das entsprechende
-@code{DELETE}-Statement einer Applikation hinzuf�gen, wenn Sie Datens�tze
-aus einer Tabelle l�schen, die Fremdschl�ssel hat. In der Praxis ist das
-genauso schnell (in einigen F�llen schneller) und wesentlich portabler, als
-wenn Sie Fremdschl�ssel benutzen w�rden.
-
-In naher Zukunft werden wir die @code{FOREIGN KEY}-Implementation
-erweitern, so dass zumindest die Information in der Datei, die die Tabelle
-spezifiziert, gespeichert wird und somit durch @code{mysqldump} und ODBC
-abgefragt werden kann. Zu einem sp�teren Zeitpunkt werden wir
-Fremdschl�ssel-Restriktionen f�r Applikationen implementieren, die nicht
-leicht durch entsprechendes Programmieren umgangen werden k�nnen.
-
-
-
-@node Besch�digte Fremdschl�ssel, ANSI diff Views, ANSI diff Foreign Keys, Differences from ANSI
-@c German node <no English equivalent>
-@subsubsection Warum wir Fremdschl�ssel nicht implementiert haben
-
-@cindex Fremdschl�ssel, warum sie nicht implementiert sind
-
-Viele Leute, die Datenbanken unterrichten und programmieren, sind der
-festen Meinung, dass referentielle Integrit�t durch den Datenbank-Server
-erzwungen werden sollte. In der Tat ist dieser Ansatz in vielen F�llen sehr
-hilfreich. In vielen Gespr�chen mit Datenbankbenutzern haben wir jedoch
-festgestellt, dass Fremdschl�ssel oft missbraucht werden, was schwer-
-wiegende Probleme verursachen kann. Selbst wenn sie in korrekter Weise
-benutzt werden, sind sie keine magische L�sung f�r das Problem
-referentieller Integrit�t, obwohl sie die Dinge in einigen F�llen einfacher
-gestalten.
-
-Wegen der obigen Beobachtungen haben wir der Implementation von
-Fremdschl�sseln keine hohe Priorit�t zugewiesen. Unsere Benutzerbasis
-bestand bislang zumeist aus Entwicklern, denen es nichts ausmachte,
-referentielle Integrit�t im Code der Applikation zu erzwingen, und die dies
-sogar bevorzugten, weil es ihnen mehr Kontrolle gab.
-
-In den letzten Jahren hat sich unsere Benutzerbasis jedoch um einiges
-ausgeweitet. Mittlerweile haben wir viele Benutzer, die es sch�tzen w�rden,
-wenn MySQL erzwungene referentielle Integrit�t implementiert h�tte. Aus
-diesem Grund werden wir Fremdschl�ssel in naher Zukunft implementieren.
-Allerdings k�nnen wir zur Zeit noch kein definitives Auslieferungsdatum
-nennen.
-
-Einige Vorteile der Erzwingung von Fremdschl�sseln:
-
-@itemize @bullet
-@item
-Einen sauberen Entwurf der Beziehungen vorausgesetzt machen es
-Fremdschl�ssel-Restriktionen schwieriger f�r einen Programmierer,
-Inkonsistenzen in eine Datenbank einzuf�hren.
-
-@item
-Wenn kaskadierende Updates und Deletes benutzt werden k�nnen, kann dies den
-Client-Code vereinfachen.
-
-@item
-Sauber entworfene Fremdschl�ssel-Regeln sind hilfreich, Beziehungen
-zwischen Tabellen zu dokumentieren.
-@end itemize
-
-Nachteile:
-
-@itemize @bullet
-@item
-MySQL unterst�tzt noch keine erzwungene referentielle Integrit�t. Wenn Ihre
-Applikation also davon abh�ngt, k�nnen Sie sie solange nicht mit MySQL
-benutzen, bis wir dieses Feature implementieren.
-
-@item
-Fehler, die beim Entwurf von Schl�sselbeziehungen leicht zu machen sind,
-k�nnen schwer wiegende Probleme verursachen, zum Beispiel Zirkelbez�ge oder
-eine falsche Kombination kaskadierender Deletes.
-
-@item
-Eine sauber geschriebene Applikation wird intern sicherstellen, dass sie
-referentielle Integrit�ts-Restriktionen nicht verletzt, bevor sie mit einer
-Anfrage fortf�hrt. Deshalb werden zus�tzliche �berpr�fungen auf
-Datenbankebene solche Applikationen nur verlangsamen.
-
-@item
-Es ist nichts Ungew�hnliches, dass ein Datenbankadministrator eine so
-komplexe Topologie von Beziehungen einf�hrt, dass es sehr schwierig, wenn
-nicht gar unm�glich wird, einzelne Tabellen zu sichern oder
-wiederherzustellen.
-@end itemize
-
-
-@node ANSI diff Views, ANSI diff comments, Besch�digte Fremdschl�ssel, Differences from ANSI
-@c German node Fehlende Sichten
-@subsubsection Sichten (Views)
-
-@cindex Sichten (Views)
-
-MySQL unterst�tzt noch keine Sichten, aber wir planen, diese in Version 4.1
-zu implementieren.
-
-Sichten sind �u�erst n�tzlich, um Benutzern Zugang zu einem Satz von
-Beziehungen wie zu einer einzigen Tabelle zu gew�hren (Lesezugriff). Viele
-SQL-Datenbanken lassen es nicht zu, dass irgend welche Zeilen in einer
-Sicht aktualisiert werden (Update). Statt dessen m�ssen die einzelnen
-Tabellen aktualisiert werden.
-
-Weil MySQL meist in Applikationen und in Web-Systemen eingesetzt werden, wo
-der Applikationsprogrammierer volle Kontrolle �ber die Datenbankbenutzung
-hat, sehen die meisten unserer Benutzer Sichten als nicht sehr wichtig an.
-(Zumindest war niemand interessiert genug, um die Implementation von
-Sichten zu finanzieren.)
-
-In MySQL werden Sichten nicht ben�tigt, um den Zugriff auf Spalten zu
-beschr�nken, weil MySQL ein sehr ausgefeiltes System der
-Zugriffsberechtigungen hat. @xref{Privilege system}.
-
-
-@node ANSI diff comments, , ANSI diff Views, Differences from ANSI
-@c German node Fehlende Kommentare
-@subsubsection @samp{--} als Beginn eines Kommentars
-
-@cindex Kommentare, Beginn
-@cindex Beginn, Kommentar
-
-Einige andere SQL-Datenbanken benutzen @samp{--}, um Kommentare zu
-beginnen. MySQL benutzt @samp{#} als Anfangszeichen, wenn auch das
-@code{mysql}-Kommandozeilen-Werkzeug alle Zeilen entfernt, die mit @samp{--}
-anfangen. Sie k�nnen in MySQL auch Kommentare im C-Stil verwenden @code{/*
-Das ist ein Kommentar */}. @xref{Comments}.
-
-MySQL ab Version 3.23.3 unterst�tzt Kommentare, die mit @samp{--} beginnen,
-allerdings nur, wenn der Kommentarbeginn von einem Leerzeichen gefolgt
-wird. Der Grund liegt darin, dass dieser degenerierte Kommentar-Stil eine
-Menge Probleme mit automatisch generierten SQL-Anfragen verursacht, die
-�hnliches wie den folgenden Code benutzen, wo automatisch der Wert einer
-Zahlung f�r @code{!zahlung!} eingef�gt wird:
-
-@example
-UPDATE tabelle_name SET kredit=kredit-!zahlung!
-@end example
-
-Was, glauben Sie, passiert, wenn der Wert von @code{zahlung} negativ wird?
-
-Weil @code{1--1} in SQL zul�ssig ist, sind wir der Meinung, dass es
-furchtbar ist, dass @samp{--} den Anfang eines Kommentars bedeutet.
-
-In MySQL ab Version 3.23 k�nnen Sie allerdings folgendes benutzen:
-@code{1-- Das ist ein Kommentar}
-
-Die folgenden Er�rterungen treffen nur zu, wenn Sie eine MySQL-Version vor
-3.23 laufen lassen:
-
-Wenn Sie ein SQL-Programm in einer Textdatei haben, das @samp{--}-Kommentare
-enth�lt, sollten Sie folgendes benutzen:
-
-@example
-shell> replace " --" " #" < text-datei-mit-merkwuerigen-kommentaren.sql \
- | mysql datenbank
-@end example
-
-anstelle des �blichen:
-
-@example
-shell> mysql datenbank < text-datei-mit-merkwuerdigen-kommentaren.sql
-@end example
-
-Sie k�nnen auch die Kommandodatei ``direkt'' editieren, um die
-@samp{--}-Kommentare zu @samp{#}-Kommentaren zu machen:
-
-@example
-shell> replace " --" " #" -- text-datei-mit-merkwuerdigen-kommentaren.sql
-@end example
-
-Machen Sie die �nderungen mit folgendem Befehl r�ckg�ngig:
-
-@example
-shell> replace " #" " --" -- text-datei-mit-merkwuerdigen-kommentaren.sql
-@end example
-
-
-
-@node Bugs, , Differences from ANSI, Compatibility
-@c German node Bugs
-@subsection Bekannte Fehler und Design-Unzul�nglichkeiten in MySQL
-
-@cindex Bugs, bekannte
-@cindex Fehler, bekannte
-@cindex Design, Probleme
-@cindex Bekannte Fehler
-
-Die folgenden Probleme sind bekannt. Ihre Behebung hat eine sehr hohe
-Priorit�t:
-
-@itemize @bullet
-@item
-@code{ANALYZE TABLE} kann eine BDB-Tabelle in manchen F�llen unbenutzbar
-machen, bis @code{mysqld} neu gestartet wird. Wenn so etwas passiert,
-stehen Fehlermeldungen wie die folgende in der MySQL-Fehler-Datei (Error
-File):
-
-@example
-001207 22:07:56 bdb: log_flush: LSN past current end-of-log
-@end example
-
-@item
-F�hren Sie mit einer @code{BDB}-Tabelle nicht @code{ALTER TABLE} aus, wenn
-Sie mit dieser noch nicht abgeschlossene Mehrfach-Statement-Transaktionen
-durchf�hren. (Die Transaktion wird wahrscheinlich ignoriert.)
-
-@item
-@code{ANALYZE TABLE}, @code{OPTIMIZE TABLE} und @code{REPAIR TABLE} k�nnen
-Probleme bei Tabellen verursachen, f�r die @code{INSERT DELAYED} benutzt
-wird.
-
-@item
-Wenn Sie @code{LOCK TABLE ..} und @code{FLUSH TABLES ..} benutzen, k�nnen
-Sie nicht sicher sein, dass bei der fraglichen Tabelle keine halb
-abgeschlossenen Transaktionen im Gange sind.
-
-@item
-BDB-Tabellen lassen sich etwas langsam �ffnen. Wenn Sie viele BDB-Tabellen
-in einer Datenbank haben, kann es sehr lange dauern, bis Sie den
-@code{mysql}-Client f�r diese Datenbank benutzen k�nnen, wenn Sie die
-@code{-A}-Option oder @code{rehash} benutzen. Das macht sich speziell dann
-bemerkbar, wenn Sie einen gro�e Tabellen-Cache benutzen.
-
-@item
-Das momentane Replikationsprotokoll kann nicht mit @code{LOAD DATA INFILE}
-und mit Zeilenbegrenzungszeichen (line terminator characters) umgehen, die
-mehr als 1 Zeichen enthalten.
-@end itemize
-
-Folgende Probleme sind bekannt und werden zu gegebener Zeit behoben:
-@itemize @bullet
-@item
-Momentan funktioniert @code{MATCH} nur bei @code{SELECT}-Statements.
-
-@item
-Wenn Sie @code{SET CHARACTER SET} benutzen, k�nnen Sie keine
-landesspezifischen (nationalen) Zeichen f�r Datenbank-, Tabellen- und
-Spaltennamen verwenden (also z. B. kein �, �, �).
-
-@item
-@code{DELETE FROM merge_table} ohne @code{WHERE} l�scht nur die Zuordnung
-(das Mapping) f�r die Tabelle, nicht alles in der zugeordneten (gemappten)
-Tabelle.
-
-@item
-Sie k�nnen den Server nicht in ein anderes Verzeichnis bauen, wenn Sie
-MIT-Pthreads verwenden. Weil dies �nderungen an MIT-Pthreads bedingen
-w�rde, werden wir dieses Problem wahrscheinlich nicht beheben.
-
-@item
-@code{BLOB}-Werte k�nnen nicht ``zuverl�ssig'' in @code{GROUP BY}-,
-@code{ORDER BY} oder @code{DISTINCT}-Klauseln benutzt werden. In diesen
-F�llen werden bei Vergleichen nur die ersten @code{max_sort_length}
-Bytes (Vorgabewert 1024) von @code{BLOB}s benutzt. Die Voreinstellung kann
-mit der @code{-O max_sort_length}-Option f�r @code{mysqld} ge�ndert werden.
-In den meisten F�llen k�nnen Sie als Workaround eine Teilzeichenkette
-(Substring) verwenden: @code{SELECT DISTINCT LEFT(blob,2048) FROM
-tabelle}.
-
-@item
-Berechnungen werden mit @code{BIGINT} oder @code{DOUBLE} durchgef�hrt
-(beide sind normalerweise 64 Bits lang). Es h�ngt von der verwendeten
-Funktion ab, welche Genauigkeit man erh�lt. Als allgemeine Regel gilt, dass
-Bit-Funktionen mit @code{BIGINT}-Genauigkeit, @code{IF} und @code{ELT()}
-mit @code{BIGINT}- oder @code{DOUBLE}-Genauigkeit und der Rest mit
-@code{DOUBLE}-Genauigkeit durchgef�hrt werden. Man sollte vermeiden,
-vorzeichenlose Werte, die gr��er als 63 Bits sind (9223372036854775807),
-zu verwenden, ausser f�r Bit-Felder!
-MySQL 4.0 bietet eine bessere @code{BIGINT}-Handhabung als MySQL 3.23.
-
-@item
-Bei allen Zeichenketten-Spalten ausser bei @code{BLOB}- und
-@code{TEXT}-Spalten werden Leerzeichen am Ende automatisch entfernt, wenn
-sie abgerufen werden. Bei @code{CHAR}-Typen ist das okay und kann gem��
-ANSI-SQL92 als ein Feature betrachtet werden. Der Bug besteht darin, dass
-in MySQL auch @code{VARCHAR}-Spalten auf dieselbe Art behandelt werden.
-
-@item
-Pro Tabelle k�nnen h�chstens 255 @code{ENUM}- und @code{SET}-Spalten
-verwendet werden.
-
-@item
-@code{safe_mysqld} leitet alle Nachrichten von @code{mysqld} in die
-@code{mysqld}-Logdatei um. Ein Problem ergibt sich, wenn Sie
-@code{mysqladmin refresh} benutzen, um die Logdatei zu schlie�en und
-wieder zu �ffnen. In diesem Fall werden @code{stdout} und @code{stderr}
-immer noch in die alte Logdatei geleitet.
-Wenn Sie @code{--log} umfangreich benutzen, sollten Sie @code{safe_mysqld}
-editieren, um in @file{'hostname'.err} anstelle von @file{'hostname'.log}
-zu loggen, damit Sie den Speicherplatz f�r das alte Log leicht neu belegen
-k�nnen, indem Sie das alte Log l�schen und @code{mysqladmin refresh}
-ausf�hren.
-
-@item
-Im @code{UPDATE}-Statement, werden Spalten von links nach rechts
-aktualisiert (Update). Wenn Sie sich auf eine aktualisierte Spalte
-beziehen, erhalten Sie den aktualisierten Werte anstelle des urspr�nglichen
-Werts. Beispiel:
-
-@example
-mysql> UPDATE tabelle SET KEY=KEY+1,KEY=KEY+1;
-@end example
-
-Dieses Statement aktualisiert @code{KEY} mit @code{2} anstelle von
-@code{1}.
-
-@item
-Sie k�nnen tempor�re Tabellen nicht �fter als einmal innerhalb derselbe
-Anfrage benutzen. Das Folgende zum Beispiel funktioniert nicht:
-
-@example
-select * from temporaere_tabelle, temporaere_tabelle as t2;
-@end example
-
-@item
-@code{RENAME} funktioniert nicht bei @code{TEMPORARY}-Tabellen.
-
-@item
-Unter Umst�nden behandelt der Optimierer (Optimizer) @code{DISTINCT}
-unterschiedlich, je nachdem, ob Sie 'versteckte' Spalten in einem Join
-benutzen oder nicht. In einem Join werden versteckte Spalten als Teil des
-Ergebnisses gez�hlt (selbst wenn sie nicht angezeigt werden), w�hrend
-versteckte Spalten in normalen Anfragen nicht an einem @code{DISTINCT}-Vergleich
-teilnehmen. Zuk�nftig werden wir dieses Verhalten wahrscheinlich �ndern, so
-dass versteckte Spalten nie verglichen werden, wenn @code{DISTINCT} ausgef�hrt
-wird.
-
-Hierf�r ein Beispiel:
-
-@example
-SELECT DISTINCT mp3id FROM band_downloads WHERE userid = 9 ORDER BY id
-DESC;
-@end example
-
-und
-
-@example
-SELECT DISTINCT band_downloads.mp3id, FROM band_downloads,band_mp3
-WHERE band_downloads.userid = 9 AND band_mp3.id = band_downloads.mp3id
-ORDER BY band_downloads.id DESC;
-@end example
-
-Im zweiten Fall bekommen Sie in MySQL 3.23.x m�glicherweise zwei identische
-Zeilen in der Ergebnismenge (weil die versteckten 'id'-Spalten
-unterschiedlich sein k�nnen).
-
-Beachten Sie, dass dies nur f�r Anfragen zutrifft, bei denen die ORDER
-BY-Spalten nicht im Ergebnis enthalten sind. ANSI-SQL erlaubt dies nicht
-
-@item
-Weil MySQL es zul��t, mit Tabellentypen zu arbeiten, die keine
-Transaktionen unterst�tzen (und folglich Daten nicht per @code{rollback} in
-den vorherigen Zustand bringen k�nnen), verhalten sich einige Dinge in
-MySQL etwas anderes als in anderen SQL-Servern. Das kann manchmal etwas
-ung�nstig sein, weil Spaltenwerte in der Applikation �berpr�ft werden
-m�ssen. Auf der anderen Seite erhalten Sie dadurch eine nette
-Geschwindigkeitssteigerung, weil es MySQL gestattet, einige Optimierungen
-vorzunehmen, die ansonsten sehr schwer durchzuf�hren sein w�rden.
-
-Wenn Sie eine Spalte auf einen nicht zul�ssigen Wert setzen, speichert
-MySQL, statt ein Rollback durchzuf�hren, den @code{besten m�glichen Wert}
-in der Spalte:
-
-@itemize @minus
-@item
-Wenn Sie versuchen, in einer numerischen Spalte einen Wert ausserhalb des
-Wertebereichs zu speichern, speichert MySQL statt dessen den kleinsten oder
-gr��ten m�glichen Wert.
-
-@item
-Wenn Sie versuchen, eine Zeichenkette, die nicht mit einer Zahl beginnt, in
-einer numerischen Spalte zu speichern, speichert MySQL 0.
-
-@item
-Wenn Sie versuchen, @code{NULL} in einer Spalte zu speichern, die keine
-@code{NULL}-Werte zul��t, speichert MySQL 0 oder @code{''} (leere
-Zeichenkette). (Man kann dieses Verhalten jedoch mit der
--DDONT_USE_DEFAULT_FIELDS-Kompilierungs-Option �ndern.)
-
-@item
-MySQL l��t zu, dass einige falsche Datumswerte in @code{DATE}- und
-@code{DATETIME}-Spalten gespeichert werden (wie 2000-02-31 oder
-2000-02-00). Wenn das Datum v�llig falsch ist, speichert MySQL den
-speziellen Datumswert 0000-00-00 in der Spalte.
-
-@item
-Wenn Sie @code{enum} auf einen nicht unterst�tzten Wert setzen, wird es auf
-den Fehlerwert 'leere Zeichenkette' oder (bei numerischen Werten) auf 0
-gesetzt.
-@end itemize
-
-@item
-Wenn Sie @code{PROCEDURE} auf eine Anfrage ausf�hren, die eine leere
-Ergebnismenge liefert, kann es in einigen F�llen vorkommen, dass
-@code{PROCEDURE} die Spalten nicht umwandelt.
-
-@item
-Wenn Sie eine Tabelle vom Typ @code{MERGE} anlegen, wird nicht �berpr�ft,
-ob die zugrunde liegenden Tabellen von einem kompatiblen Typ sind.
-
-@item
-MySQL kann bislang nicht mit @code{NaN}-, @code{-Inf}- und
-@code{Inf}-Werten in Doubles umgehen. Wenn Sie diese benutzen, gibt es
-Probleme, wenn Daten importiert oder exportiert werden. Als Zwischenl�sung
-sollten Sie @code{NaN} in @code{NULL} umwandeln (falls m�glich) und
-@code{-Inf} und @code{Inf} in den kleinsten bzw. gr��ten m�glichen Wert.
-
-@item
-Negative Zahlen in der @code{LIMIT}-Klausel werden als gro�e positive
-Zahlen behandelt.
-
-@item
-Wenn Sie @code{ALTER TABLE} benutzen, um einen @code{UNIQUE}-Index zu einer
-Tabelle hinzuzuf�gen, die in einer @code{MERGE}-Tabelle benutzt wird, und
-dann @code{ALTER TABLE} benutzen, um der @code{MERGE}-Tabelle einen
-normalen Index hinzuzuf�gen, weicht die Reihenfolge der Schl�ssel f�r die
-Tabellen ab. Das liegt daran, dass @code{ALTER TABLE}
-@code{UNIQUE}-Schl�ssel vor normalen Schl�sseln einf�gt, um doppelte
-Schl�ssel so fr�h wie m�glich erkennen zu k�nnen.
-@end itemize
-
-Folgende bekannte Bugs gibt es in fr�heren Versionen von MySQL:
-
-@itemize @bullet
-@item
-Man kann einen h�ngenden Thread erhalten, wenn man @code{DROP TABLE} auf
-eine Tabelle ausf�hrt, die zu vielen Tabellen geh�rt, die mit @code{LOCK
-TABLES} gesperrt sind.
-
-@item
-In folgenden F�llen k�nnen Sie einen Core Dump erhalten:
-
-@itemize @minus
-@item
-Die Routine f�r verz�gertes Einf�gen (Delayed Insert Handler) hat noch nie
-ausgef�hrte Einf�geoperationen (Pending Inserts) auf eine Tabelle.
-
-@item
-@code{LOCK tabelle} mit @code{WRITE}
-
-@item
-@code{FLUSH TABLES}
-@end itemize
-
-@item
-Vor MySQL-Version 3.23.2 kann ein @code{UPDATE} fehlschlagen, dass einen
-Schl�ssel mit einer @code{WHERE}-Klausel auf denselben Schl�ssel
-aktualisiert, weil der Schl�ssel benutzt wurde, um nach Datens�tzen zu
-suchen, und dieselbe Zeile mehrfach gefunden wurde:
-
-@example
-UPDATE tabelle SET KEY=KEY+1 WHERE KEY > 100;
-@end example
-
-Ein Workaround besteht in der Benutzung von:
-
-@example
-mysql> UPDATE tabelle SET KEY=KEY+1 WHERE KEY+0 > 100;
-@end example
-
-Das funktioniert, weil MySQL auf Ausdr�cke (Expressions) in der
-@code{WHERE}-Klausel keine Indizes benutzt.
-
-@item
-Vor MySQL-Version 3.23 wurden alle numerischen Typen als Festkomma-Felder
-behandelt. Das bedeutet, dass Sie festlegen m�ssen, wie viele
-Dezimalstellen ein Flie�komma-Feld haben soll. Alle Werte wurden mit der
-korrekten Anzahl von Dezimalstellen zur�ckgegeben.
-@end itemize
-
-Was Plattform-spezifische Bugs angeht, sehen Sie bitte im Abschnitt �ber
-Kompilieren und Portieren nach.
-
-
-@node TODO, Comparisons, Compatibility, Deutsch
-@c German node TODO
-@section MySQL und die Zukunft (das TODO)
-
-@cindex TODO-Liste f�r MySQL
-
-
-Dieser Anhang listet die Features auf, f�r die wir eine Implementierung in
-MySQL geplant haben.
-
-Alles auf dieser Liste gibt nur ungef�hr die Reihenfolge wieder, in der es
-gemacht werden wird. Wenn Sie die Priorit�ten beeinflussen wollen,
-registrieren Sie bitte eine Lizenz oder unterst�tzen Sie uns und teilen uns
-mit, was Sie schneller gemacht haben wollen. @xref{Lizenzpolitik}.
-
-Geplant ist, dass wir in Zukunft den kompletten ANSI-SQL99-Standard
-unterst�tzen, aber mit einer Menge n�tzlicher Erweiterungen. Die
-Herausforderung liegt darin, dass durchzuf�hren, ohne
-Geschwindigkeitsvorteile zu opfern oder den Code zu kompromittieren.
-
-
-@menu
-* TODO MySQL 4.0::
-* TODO future::
-* TODO sometime::
-* TODO unplanned::
-@end menu
-
-@node TODO MySQL 4.0, TODO future, TODO, TODO
-@c German node TODO MySQL 4.0
-@subsection Dinge, die in Version 4.0 enthalten sein sollten
-
-Wir haben uns der Entwicklung von MySQL Version 4.0 zugewandt. Die meisten
-grunds�tzlichen Dinge, die wir in Version 4.0 haben wollen, sind bereits
-gemacht. Das Ziel ist, den Rest der folgenden Features schnell einzubauen
-und dann zur Entwicklung von MySQL 4.1 �berzugehen.
-@c German FIX Added . after @xref.
-@xref{MySQL 4.0 In A Nutshell}.
-
-Der News-Abschnitt f�r 4.0 beinhaltet eine Liste der Features, die wir
-bereits im 4.0-Baum implementiert haben. @xref{News-4.0.x}.
-
-@itemize @bullet
-@item
-Benutzern erlauben, die Startoptionen zu �ndern, ohne den Server herunter
-fahren zu m�ssen.
-@item
-St�rsichere Replikation.
-@item
-Mehr Funktionen f�r die Volltextsuche.
-@xref{Volltext-Features in MySQL 4.0}.
-@item
-Neuer Schl�ssel-Cache
-@item
-Neues Dateiformat f�r die Tabellendefinition (@code{.frm}-Dateien). Das
-versetzt uns in die Lage, nicht irgendwann keine Bits mehr zu haben, wenn
-wir weitere Tabellenoptionen hinzuf�gen. Es wird nach wie vor m�glich sein,
-in 4.0 das alte @code{.frm}-Dateiformat zu benutzen. Alle neu erzeugten
-Tabellen werden jedoch das neue Format benutzen.
-
-Das neue Dateiformat versetzt uns in die Lage, neue Spaltentypen, mehr
-Optionen f�r Schl�ssel und @code{FOREIGN KEY}-Support hinzuzuf�gen.
-@item
-Die Replikation sollte mit @code{RAND()} und Benutzer-Variablen
-@code{@@var} funktionieren.
-@item
-Online-Datensicherung mit sehr geringen Performance-Einbussen. Das Online-Backup
-wird das Hinzuf�gen eines neuen Replikations-Slaves erleichtern, ohne dass
-man den Master herunter fahren muss.
-@item
-Es zulassen, dass @code{DELETE} auf @code{MyISAM}-Tabellen den
-Datensatz-Cache benutzt. Um das zu tun, m�ssen wir den Thread-Cache f�r
-Datens�tze aktualisieren, wenn wir die @code{.MYD}-Datei aktualisieren.
-@item
-Zeichensatz-Festlegungen (Casts) und Syntax f�r die Handhabung mehrerer
-Zeichens�tze.
-@item
-Hilfe f�r alle Befehle des Clients.
-@item
-Sichere Verbindungen (mit SSL).
-@item
-@code{SHOW COLUMNS FROM tabelle} (der vom @code{mysql}-Client benutzt f�r
-die Erweiterung von Spaltennamen benutzt wird) sollte nicht die Tabelle
-�ffnen, sondern nur die Definitionsdatei. Das wird weniger Speicher
-beanspruchen und sehr viel schneller sein.
-@item
-Bei der Benutzung von @code{SET CHARACTER SET} sollten wir die gesamte
-Anfrage �bersetzen und nicht nur Zeichenketten. Das w�rde Benutzern
-erm�glichen, landesspezifische Zeichen auch in Datenbank-, Tabellen- und
-Spaltenamen zu benutzen.
-@item
-Hinzuf�gen einer portablen Schnittstelle zu @code{gethostbyaddr_r()},
-damit wir @code{ip_to_hostname()} davon abhalten k�nnen, andere Threads zu
-blockieren, w�hrend es DNS-Lookups durchf�hrt.
-@item
-Hinzuf�gen der @code{record_in_range()}-Methode zu @code{MERGE}-Tabellen,
-um den richtigen Index ausw�hlen zu k�nnen, wenn es viele gibt, aus denen
-ausgew�hlt werden kann. Wir sollten auch die info-Schnittstelle erweitern,
-um die Schl�sselverteilung f�r jeden Index zu erhalten, wenn @code{analyze}
-�ber alle Unter-Tabellen l�uft.
-@item
-@code{SET SQL_DEFAULT_TABLE_TYPE=[MyISAM | INNODB | BDB | HEAP]}.
-@end itemize
-
-
-@node TODO future, TODO sometime, TODO MySQL 4.0, TODO
-@c German node TODO zuk�nftig
-@subsection Dinge, die in naher Zukunft erledigt werden m�ssen
-
-@itemize @bullet
-@item
-Unteranfragen (Subqueries).
-@code{select id from t where grp in (select grp from g where u > 100)}
-@item
-Atomische Multi-Tabellen-Updates, zum Beispiel @code{update items,month set
-items.price=month.price where items.id=month.id;};
-@item
-Abgeleitete Tabellen (Derived Tables).
-@example
-select a.col1, b.col2 from (select max(col1) as col1 from root_table ) a,
-other_table b where a.col1=b.col1
-@end example
-
-Das k�nnte erreicht werden, indem f�r die Dauer der Anfrage automatisch
-tempor�re Tabellen f�r die abgeleiteten Tabellen erzeugt werden.
-@item
-Hinzuf�gen eines @code{PREPARE} von Statements und Senden von Parametern an
-@code{mysqld}.
-@item
-Erweiterung des Client-Server-Protokolls, um Warnungen (Warnings) zu
-unterst�tzen.
-@item
-Hinzuf�gen von Optionen zum Client-Server-Protokoll, um
-Fortschrittsanzeigen f�r lange laufende Kommandos zu erhalten.
-@item
-Hinzuf�gen von Datenbank und echtem Tabellennamen (im Falle von Alias) zur
-MYSQL_FIELD-Struktur.
-@item
-Nicht mehr als die festgelegte Anzahl von Threads zulassen, um MyISAM
-recover zeitgleich laufen zu lassen.
-@item
-@code{INSERT ... SELECT} �ndern, um optional konkurrierende Inserts zu
-benutzen.
-@item
-@code{RENAME DATABASE} implementieren. Damit das sicher f�r alle
-Tabellen-Handler funktioniert, sollte es wie folgt laufen:
-@itemize @bullet
-@item
-Neue Datenbank anlegen.
-@item
-F�r jede Tabelle ein Umbenennen der Tabelle zu einer anderen Datenbank
-durchf�hren, wie wir es schon mit dem @code{RENAME}-Befehl machen.
-@item
-Alte Datenbank l�schen.
-@end itemize
-@item
-Die Original-Feldtypen zur�ckgeben, wenn @code{SELECT MIN(column)... GROUP
-BY} ausgef�hrt wird.
-@item
-Mehrfache Ergebnismengen (Multiple Result Sets).
-@item
-�nderung des Protokolls, um Bin�r�bertragung von Werten zu erm�glichen. Um
-das effizient zu machen, m�ssen wir eine API hinzuf�gen, die Bindung
-(Binding) von Variablen erlaubt.
-
-
-@code{mysqld}.
-@item
-Es soll m�glich sein, @code{long_query_time} mit einer Aufl�sung in
-Mikrosekunden festzulegen.
-@item
-Hinzuf�gen eines konfigurierbaren Prompts zum
-@code{mysql}-Kommandozeilen-Werkzeug, mit Optionen wie Datenbank in Benutzung,
-Zeit und Datum ...
-@item
-Hinzuf�gen von Bereichs�berpr�fung (Range Checking) zu
-@code{MERGE}-Tabellen.
-@item
-@code{myisampack}-Code in den Server einlinken.
-@item
-Portierung von MySQL auf BeOS.
-@item
-Portierung von MySQL-Clients auf LynxOS.
-@item
-Hinzuf�gen eines tempor�ren Schl�ssel-Puffer-Caches w�hrend
-@code{INSERT/DELETE/UPDATE}, um den vorherigen Zustand elegant
-wiederherstellen zu k�nnen, wenn der Index voll wird.
-@item
-Wenn ein @code{ALTER TABLE} auf eine Tabelle durchgef�hrt wird, die per
-Symlink auf einer anderen Festplatte ist, tempor�re Tabellen auf dieser
-Festplatte erzeugen.
-@item
-Implementierung eines @code{DATE/DATETIME}-Typs, der
-Zeitzonen-Informationen sauber handhabt, damit der Umgang mit Datumswerten
-in verschiedenen Zeitzonen leichter wird.
-@item
-FreeBSD- und MIT-pThreads; nehmen schlafende Threads CPU in Anspruch?
-@item
-Pr�fen, ob gesperrte Threads CPU beanspruchen.
-@item
-Configure reparieren, so dass man alle Bibliotheken (wie @code{MyISAM})
-ohne Threads kompilieren kann.
-@item
-Hinzuf�gen einer Option, um regelm��ig die Schl�sselseiten (Key Pages) f�r
-Tabellen mit verz�gerten Schl�sseln (Delayed Keys) zu l�schen (flush), wenn
-Sie eine Weile nicht in Gebrauch waren.
-@item
-Verkn�pfungen (Join) auf Teile des Schl�ssels zulassen (Optimierungsthema).
-@item
-@code{INSERT SQL_CONCURRENT} und @code{mysqld --concurrent-insert} sollen
-ein konkurrierendes Insert am Ende der Datei machen, falls die Datei
-lese-gesperrt ist.
-@item
-@code{FOREIGN}-Key-Festlegungen in der @file{.frm}-Datei speichern.
-@item
-Kaskadierendes L�schen (@code{DELETE})
-@item
-Serverseitige Cursor.
-@item
-Pr�fen, ob @code{lockd} mit modernen Linux-Kernels funktioniert; wenn
-nicht, m�ssen wir @code{lockd} �berarbeiten! Um das zu testen, startet man
-@code{mysqld} mit @code{--enable-locking} und l��t die verschiedenen fork*
-test suits laufen. Sie sollten keine Fehler produzieren, wenn @code{lockd}
-funktioniert.
-@item
-SQL-Variablen in @code{LIMIT} zulassen, wie @code{LIMIT @@a,@@b}.
-@item
-Aktualisierung von Variablen in @code{UPDATE}-Statements zulassen, zum
-Beispiel: @code{UPDATE TABLE foo SET @@a=a+b,a=@@a, b=@@a+c}
-@item
-Wenn Benutzervariablen aktualisiert werden, so �ndern, dass man sie mit
-@code{GROUP BY} benutzen kann wie in folgendem Beispiel:
-@code{SELECT id, @@a:=count(*), sum(sum_col)/@@a FROM tabelle GROUP BY id}.
-@item
-Keine automatischen @code{DEFAULT}-Werte zu Spalten hinzuf�gen. Fehler
-ausgeben, wenn ein @code{INSERT} benutzt wird, dass keine Spalte enth�lt,
-die keinen @code{DEFAULT}-Wert hat.
-@item
-Caching von Anfragen und Ergebnissen. Das sollte als separates Modul
-gemacht werden, das jede Anfrage pr�ft. Falls diese Anfrage im Cache ist,
-soll das Cache-Ergebnis zur�ckgegeben werden. Wenn man eine Tabelle
-aktualisiert, sollte man so wenige Anfragen wie m�glich aus dem Cache
-entfernen. Das sollte eine gro�e Geschwindigkeitssteigerung auf Maschinen
-geben, die viel RAM haben und wo Anfragen of wiederholt werden (wie
-WWW-Applikationen). Eine Idee w�re, nur Anfrage des Typs
-@code{SELECT CACHED ...}
-zu cachen.
-@item
-@file{libmysql.c} �berarbeiten, damit zwei @code{mysql_query()}-Befehle in
-einer Zeile stehen k�nnen, ohne dass Ergebnisse gelesen werden oder man
-eine nette Fehlermeldung erh�lt, wenn man das tut.
-@item
-Optimierung des @code{BIT}-Typs, so dass er 1 Bit aufnimmt (momentan nimmt
-@code{BIT} 1 Zeichen auf).
-@item
-Pr�fen, warum MIT-pThreads @code{ctime()} auf einigen FreeBSD-Systemen
-nicht funktioniert.
-@item
-Hinzuf�gen einer @code{IMAGE}-Option zu @code{LOAD DATA INFILE}, damit
-@code{TIMESTAMP}- und @code{AUTO_INCREMENT}-Felder nicht aktualisiert
-werden.
-@item
-@code{LOAD DATE INFILE.. UPDATE}-Syntax hinzuf�gen.
-@itemize @bullet
-@item
-Wenn Daten bei Tabellen mit Prim�rschl�ssel den Prim�rschl�ssel enthalten,
-werden Eintr�ge, die zu diesem Prim�rschl�ssel passen, vom Rest der Spalten
-aktualisert. Spalten, die im herein kommenden Datenstrom NICHT enthalten
-sind, werden jedoch nicht ber�hrt.
-@item
-Bei Tabellen mit Prim�rschl�sseln, wo im herein kommenden Datenstrom ein
-Teil des Schl�ssels fehlt, oder wenn kein Prim�rschl�ssel eingegeben wird,
-wird die Eingabe so behandelt wie jetzt schon @code{LOAD DATA INFILE ...
-REPLACE INTO}.
-@end itemize
-@item
-@code{LOAD DATA INFILE} soll auch folgende Syntax verstehen:
-@example
-LOAD DATA INFILE 'datei.txt' INTO TABLE tabelle
-TEXT_FIELDS (text_feld1, text_feld2, text_feld3)
-SET tabelle_feld1=concatenate(text_feld1, text_feld2), tabelle_feld3=23
-IGNORE text_feld3
-
-Das kann benutzt werden, um zus�tzliche Spalten in der Textdatei zu
-�berspringen oder um Spalten basierend auf Ausdr�cken in den gelesenen
-Daten zu aktualisieren ...
-@end example
-@item
-@code{LOAD DATA INFILE 'datei' INTO TABLE 'tabelle' ERRORS TO err_tabelle}
-Das w�rde bewirken, dass alle Fehler und Warnungen in der err_tabelle
-mitgeschrieben werden. Diese Tabelle h�tte etwa folgende Struktur:
-
-@example
-zeile_nummer - Zeilennummer in der Datendatei
-fehler_nachricht - die Fehler-/Warnungs-Nachricht
-und vielleicht
-@c German FIX changed all "@cQuestion ..." lines to "@c Question ..." (space).
-@c Question: ??? This is already logged in zeile_nummer (line_number)!
-daten_zeile - die Zeilennummer der Datendatei
-@end example
-@item
-Hinzuf�gen von echter @code{VARCHAR}-Unterst�tzung (gibt es schon in
-MyISAM).
-@item
-Automatische Ausgabe von @code{mysql} an Netscape.
-@item
-@code{LOCK DATABASES}. (mit vielerlei Optionen)
-@item
-
-
-�ndern wie Sortierung Speicher alloziert, um bessere
-Speicherausnutzung zu erhalten.
-@item
-@code{DECIMAL}- und @code{NUMERIC}-Typen k�nnen keine exponentiellen Zahlen
-lesen; @code{Field_decimal::store(const char *from,uint len)} muss neu
-kodiert werden, um das zu beheben.
-@item
-@code{mysql.cc} �berarbeiten, damit weniger @code{malloc()}-Aufrufe
-durchgef�hrt werden, wenn Feldnamen gehasht werden.
-@item
-Funktionen:
-ADD_TO_SET(wert,set) und REMOVE_FROM_SET(wert,set)
-@item
-Benutzung von @code{t1 JOIN t2 ON ...} und @code{t1 JOIN t2 USING ...}
-hinzuf�gen. Momentan kann man diese Syntax nur mit @code{LEFT JOIN}
-benutzen.
-@item
-Volle Unterst�tzung f�r @code{unsigned long long}-Typen hinzuf�gen.
-@item
-Viele weitere Variablen f�r @code{show status}. Z�hler f�r:
-@code{INSERT}-/@code{DELETE}-/@code{UPDATE}-Statements. Gelesene und
-aktualisierte Datens�tze. Select auf 1 Tabelle und Selects mit Joins.
-Durchschnittliche Anzahl von Tabellen in Selects. Anzahl von @code{ORDER
-BY}- und @code{GROUP BY}-Anfragen.
-@item
-Wenn man @code{mysql} mitten in einer Anfrage abbricht, sollte man eine
-neue Verbindung herstellen und die alte, laufende Anfrage killen.
-Alternativ k�nnte man den Versuch unternehmen, so etwas im Server zu
-entdecken.
-@item
-Eine Handler-Schnittstelle f�r Tabelleninformation hinzuf�gen, damit man
-sie als Systemtabelle benutzen kann. Das w�re ein bisschen langsam, wenn
-man Informationen �ber alle Tabellen abfragt, aber sehr flexibel.
-@code{SHOW INFO FROM tabelle} f�r Basisinformationen �ber Tabellen sollte
-implementiert werden.
-@item
-Unterst�tzung f�r UNICODE hinzuf�gen.
-@item
-@code{NATURAL JOIN} und @code{UNION JOIN}.
-@item
-Anfragen wie @code{select a from crash_me left join crash_me2 using (a)}
-zulassen; in diesem Fall wird angenommen, dass a aus der crash_me-Tabelle
-kommt.
-@item
-�berarbeitung, damit @code{ON} und @code{USING} mit dem
-@code{JOIN}-Verkn�pfungstyp funktioniert.
-@item
-Oracle-m��iges @code{CONNECT BY PRIOR ...}, um hierarchische Strukturen zu
-durchsuchen.
-
-
-@item
-@code{mysqladmin copy datenbank neue_datenbank}. -- Erfordert, dass
-@code{mysqld} der COPY-Befehl hinzugef�gt wird.
-@item
-Prozessliste sollte die Anzahl von Anfragen pro Thread zeigen.
-@item
-
-
-@code{SHOW HOSTS} zur Informationsausgaben �ber den Hostnamen-Cache.
-@item
-
-
-
-@item
-Format von @code{DATETIME} �ndern, um Bruchteile von Sekunden zu speichern.
-@item
-Alle fehlenden ANSI92- und ODBC 3.0-Typen hinzuf�gen.
-@item
-F�r berechnete Spalten Tabellennamen von leerer Zeichenkette zu @code{NULL}
-�ndern.
-@item
-'Item_copy_string' nicht auf numerische Werte anwenden, um
-Zahl->Zeichenkette->Zahl-Umwandlung zu vermeiden, im Falle von:
-@code{SELECT COUNT(*)*(id+0) FROM tabelle GROUP BY id}
-@item
-Benutzung der neuen GNU-regexp-Bibliothek anstelle der aktuellen
-erm�glichen (die GNU-Bibliothek sollte viel schneller sein als die alte).
-@item
-@code{ALTER TABLE} sollte nicht mehr Clients abbrechen, die @code{INSERT
-DELAYED} ausf�hren.
-@item
-So �berarbeiten, dass, wenn Spalten, auf die in einer @code{UPDATE}-Klausel
-verwiesen wird, die alten Werte enthalten, bevor das Update begonnen wird.
-@item
-@code{myisamchk}, @code{REPAIR} und @code{OPTIMIZE TABLE} sollten in der
-Lage sein, mit F�llen umzugehen, wo die Daten und / oder Indexdateien
-symbolische Links sind.
-@item
-Simulation von @code{pread()}/@code{pwrite()} auf Windows einarbeiten, um
-konkurrierende Inserts zu erm�glichen.
-@item
-Ein Logdatei-Analyzer, aus dem Informationen herausgefiltert (geparst)
-werden k�nnen, welche Tabellen am h�ufigsten angesprochen werden, wie oft
-Verkn�pfungen (Joins) mit mehreren Tabellen ausgef�hrt werden usw. Es
-sollte Benutzern helfen, Bereiche oder Dinge im Tabellenentwurf zu
-erkennen, die optimiert werden k�nnen, um sehr viel effizientere Anfragen
-auszuf�hren.
-@item
-Add @code{SUM(DISTINCT)}
-@item
-@code{ANY()}-,@code{EVERY()}- und @code{SOME()}-Gruppierungsfunktionen
-hinzuf�gen. In ANSI-SQL funktionieren diese auf boolsche Spalten, aber wir
-k�nnen sie so erweitern, dass sie mit beliebigen Spalten / Ausdr�cken
-funktionieren, indem wir folgendes anwenden: wert == 0 -> FALSE und
-wert <> 0 -> TRUE.
-@item
-So �berarbeiten, dass @code{MAX(column)} vom selben Typ ist wie der
-Spaltentyp.
-@example
-create tabelle t1 (a DATE);
-insert into t1 values (now());
-create tabelle t2 select max(a) von t1;
-show columns from t2;
-@end example
-@item
-Eine nette Syntax f�r ein Statement entwickeln, dass auf eine Zeile ein
-@code{UPDATE} ausf�hrt, wenn sie existiert, und eine neue Zeile einf�gt
-(@code{INSERT}), wenn sie nicht existiert (so wie @code{REPLACE} bei
-@code{INSERT} / @code{DELETE} funktioniert).
-@end itemize
-
-
-@node TODO sometime, TODO unplanned, TODO future, TODO
-@c German node TODO irgendwann
-@subsection Dinge die irgendwann gemacht werden m�ssen
-
-@itemize @bullet
-@item
-Funktion implementieren: @code{get_changed_tables(timeout,table1,table2,...)}
-@item
-Lesen durch Tabellen so �ndern, das memmap benutzt wird, falls m�glich.
-Momentan benutzen nur komprimierte Tabellen memmap.
-@item
-Ein neues Zugriffsrecht @strong{'Show_priv'} f�r @code{SHOW}-Befehle
-hinzuf�gen.
-@item
-Den automatischen Zeitstempel-Code netter machen. Zeitstempel zum
-Update-Log hinzuf�gen mit @code{SET TIMESTAMP=#;}
-@item
-An manchen Stellen read/write mutex benutzen, um mehr Geschwindigkeit zu
-erhalten.
-@item
-Volle Unterst�tzung von Fremdschl�sseln. Wahrscheinlich wird man zuerst
-einmal eine prozedurale Sprache implementieren wollen.
-@item
-Einfache Sichten (Views; zun�chst auf eine Tabelle, sp�ter auf jeden
-beliebigen Ausdruck).
-@item
-Automatisches Schlie�en einiger Tabellen, wenn eine Tabelle, eine
-tempor�re Tabelle oder eine tempor�re Datei einen Fehler 23 bekommt
-(nicht genug offene Dateien).
-@item
-Wenn ein Feld=# gefunden wird, alle Vorkommen von Feld auf # setzen.
-Momentan wird das nur in einigen einfachen F�llen gemacht.
-@item
-Alle konstanten Ausdr�cke mit berechneten Ausdr�cken austauschen, falls
-m�glich.
-@item
-schl�ssel = ausdruck optimieren. Momentan wird nur schl�ssel = feld oder
-schl�ssel = konstante optimiert.
-@item
-Einige der Copy-Funktionen verbinden, um netter Code zu erhalten.
-@item
-@file{sql_yacc.yy} in einen Inline-Parser um�ndern, um die Gr��e zu
-reduzieren und bessere Fehlermeldungen zu erhalten (5 Tage).
-@item
-Den Parser so �ndern, dass er nur eine Regel pro unterschiedlicher Anzahl
-von Argumenten in Funktionen benutzt.
-@item
-Die Benutzung von vollen Berechnungsnamen (full calculation names) im
-ORDER-Teil (order part). (F�r ACCESS97)
-@item
-@code{UNION}, @code{MINUS}, @code{INTERSECT} und @code{FULL OUTER JOIN}.
-(Momentan wird nur @code{LEFT OUTER JOIN} unterst�tzt.)
-@item
-@code{UNIQUE} bei Feldern zulassen, die @code{NULL} sein k�nnen.
-@item
-@code{SQL_OPTION MAX_SELECT_TIME=#} um einer Anfrage eine Zeitbeschr�nkung
-zu setzen.
-@item
-@c Question: Check translation!
-Make the update log to a Datenbank.
-Update soll in eine Datenbank loggen.
-@item
-Negative @code{LIMIT}-Parameter, um Daten vom Ende abrufen zu k�nnen.
-@item
-@c Question: Alarm? Wake up?
-Alarm around client connect/read/write Funktionen.
-@item
-Bitte beachten sie die �nderungen in @code{safe_mysqld}: Nach FSSTND (woran
-sich Debian versucht zu halten) sollten PID-Dateien als
-@file{/var/run/<progname>.pid} angelegt werden und Log-Datei in
-@file{/var/log}. Es w�re nett, wenn man "DATADIR" in die erste Deklaration
-von "pidfile" und "log" packen k�nnte, damit die Unterbringung dieser
-Dateien mit einem einzigen Statement ge�ndert werden k�nnte.
-@item
-Einem Client erlauben, Mitloggen anzufordern.
-@item
-Benutzung von @code{zlib()} f�r @code{gzip}-te Dateien in @code{LOAD DATA
-INFILE} zulassen.
-@item
-Sortieren und Gruppieren von @code{BLOB}-Spalten in Ordnung bringen
-(teilweise bereits gel�st).
-@item
-Gespeicherte Prozeduren. Wird aktuell nicht als sehr wichtig erachtet, weil
-gespeicherte Prozeduren noch nicht sehr standardisiert sind. Ein weiteres
-Problem besteht darin, dass es echte gespeicherte Prozeduren dem Optimierer
-viel schwerer machen und dass in vielen F�llen das Ergebnis langsamer sein
-wird als vorher. Auf der anderen Seite werden wir versuchen, eine einfache
-(atomische) Update-Sprache hinzuzuf�gen, die benutzt werden kann, um
-Schleifen und �hnliches im MySQL-Server zu schreiben.
-@item
-So �ndern, dass Semaphore benutzt werden, wenn Threads gez�hlt werden. Man
-sollte zuerst eine Semaphor-Bibliothek zu MIT-pThreads implementieren.
-@item
-Keinen neuen @code{AUTO_INCREMENT}-Wert zuweisen, wenn eine Spalte auf 0
-gesetzt wird. Statt dessen @code{NULL} setzen.
-@item
-Volle Unterst�tzung von Verkn�pfungen (@code{JOIN}) mit Klammern.
-@item
-Als Alternative f�r einen Thread pro Verbindung einen Pool von Threads
-verwalten, der die Anfragen handhabt.
-@item
-Einem gestatten, mehr als eine Sperre (Lock) mit @code{GET_LOCK} zu
-erhalten. Wenn man das tut, muss man die m�glichen Deadlocks handhaben, die
-diese �nderung einf�hren wird.
-@end itemize
-
-Zeitangaben stehen f�r den Umfang der Arbeit, nicht f�r echte Zeit.
-
-
-@node TODO unplanned, , TODO sometime, TODO
-@c German node TODO ungeplant
-@subsection Ein paar Dinge, f�r deren Umsetzung wir keine Pl�ne haben
-
-@itemize @bullet
-@item
-Nichts; auf lange Sicht planen wir, voll ANSI-92- / ANSI-99-kompatibel zu
-sein.
-@end itemize
-
-
-@node Comparisons, , TODO, Deutsch
-@c German node Vergleiche
-@section MySQL im Vergleich mit anderen Datenbanken
-
-@cindex Datenbanken, MySQL im Vergleich mit anderen
-@cindex Vergleich, MySQL zu anderen
-
-
-Dieser Abschnitt vergleicht MySQL mit anderen popul�ren Datenbanken.
-
-Dieser Abschnitt wurde von den MySQL-Entwicklern geschrieben. Das sollte
-man beim Lesen im Hinterkopf behalten. In diesem Abschnitt sind - soweit
-uns bekannt - keine sachlichen Fehler enthalten. Wenn Sie etwas finden, was
-Sie als sachlichen Fehler erachten, kontaktieren Sie uns bitte unter
-@email{docs@@mysql.com}.
-
-Eine Liste aller unterst�tzten Limits, Funktionen und Typen finden Sie auf
-der @code{crash-me}-Webseite auf
-@uref{http://www.mysql.com/information/crash-me.php}.
-
-
-@menu
-* Compare mSQL::
-* Compare PostgreSQL::
-@end menu
-
-@node Compare mSQL, Compare PostgreSQL, Comparisons, Comparisons
-@c German node Vergleich mit mSQL
-@subsection MySQL im Vergleich mit @code{mSQL}
-
-@table @strong
-@item Performance
-
-Um einen echten Geschwindigkeitsvergleich zu sehen, schauen Sie bitte in
-der wachsenden Liste der MySQL-Benchmarks nach. @xref{MySQL Benchmarks}.
-
-Weil es keinen Overhead f�r die Erzeugung von Threads besitzt, einen
-kleineren Parser, weniger Features und einfache Sicherheitsmechanismen,
-sollte @code{mSQL} in folgenden Punkten schneller sein:
-
-@itemize @bullet
-@item
-Tests, die wiederholten Verbindungsaufbau und -abbau durchf�hren, wobei
-w�hrend jeder Verbindung eine sehr einfache Anfrage ausgef�hrt wird.
-
-@item
-@code{INSERT}-Operationen auf sehr einfache Tabellen mit wenigen Spalten
-und Schl�sseln.
-
-@item
-@code{CREATE TABLE} und @code{DROP TABLE}.
-
-@item
-@code{SELECT} auf alles, was kein Index ist. (Ein Tabellen-Scan ist sehr
-einfach.)
-@end itemize
-
-Weil diese Operationen so einfach sind, ist es schwer, hier besser zu sein,
-wenn man beim Starten einen gr��eren Overhead hat. Nachdem die Verbindung
-erst einmal aufgebaut ist, sollte MySQL wesentlich bessere Leistungsdaten
-bringen.
-
-Andererseits ist MySQL sehr viel schneller als @code{mSQL} (und den meisten
-anderen SQL-Implementationen) bei Folgendem:
-
-@itemize @bullet
-@item
-Komplexe @code{SELECT}-Operationen.
-
-@item
-Wenn gro�e Ergebnismengen abgefragt werden (MySQL hat ein besseres,
-schnelleres und sichereres Protokoll).
-
-@item
-Tabellen mit Zeichenketten variabler L�nge, denn MySQL hat eine
-effizientere Handhabung und kann Indizes auf @code{VARCHAR}-Spalten haben.
-
-@item
-Handhabung von Tabellen mit vielen Spalten.
-
-@item
-Handhabung von Tabellen mit gro�er Datensatzl�nge.
-
-@item
-@code{SELECT} mit vielen Ausdr�cken.
-
-@item
-@code{SELECT} auf gro�e Tabellen.
-
-@item
-Handhabung vieler gleichzeitiger Verbindungen. MySQL ist voll
-Multi-Thread-f�hig. Jede Verbindung hat ihren eigenen Thread, was bedeutet,
-dass kein Thread auf einen anderen warten muss (ausser wenn ein Thread eine
-Tabelle ver�ndert, auf die ein anderer Thread zugreifen will). In
-@code{mSQL} m�ssen nach dem Verbindungsaufbau alle anderen warten, bis die
-erste Verbindung beendet wurde, egal, ob diese Verbindung eine Anfrage
-ausf�hrt, die kurz oder lang ist. Wenn die erste Verbindung abgebaut wird,
-kann die zweite bedient werden, w�hrend alle anderen noch warten, usw.
-
-@item
-Joins (Verkn�pfungen).
-@code{mSQL} kann krankhaft langsam werden, wenn Sie die Reihenfolge von
-Tabellen in einem @code{SELECT}-Statement �ndern. In einem Benchmark-Test
-wurde beobachtet, dass es mehr als 15000-mal langsamer werden kann als
-MySQL. Das liegt daran, dass @code{mSQL} keinen Verkn�pfungs-Optimierer
-(Join Optimizer) besitzt, der die Tabellen in optimale Reihenfolge bringt.
-Wenn Sie allerdings exakt die richtige Reihenfolge in @code{mSQL}2 benutzen
-und wenn die @code{WHERE}-Klausel einfach ist und Spalten-Indexe benutzt,
-wird die Verkn�pfung relativ schnell sein!
-@xref{MySQL Benchmarks}.
-
-@item
-@code{ORDER BY} und @code{GROUP BY}.
-
-@item
-@code{DISTINCT}.
-
-@item
-Benutzung von @code{TEXT}- oder @code{BLOB}-Spalten.
-@end itemize
-
-@item SQL-Features
-
-@itemize @bullet
-@item @code{GROUP BY} und @code{HAVING}.
-@code{mSQL} unterst�tzt @code{GROUP BY} �berhaupt nicht.
-MySQL unterst�tzt @code{GROUP BY} vollst�ndig, sowohl mit @code{HAVING} als
-auch mit den folgenden Funktionen: @code{COUNT()}, @code{AVG()}, @code{MIN()},
-@code{MAX()}, @code{SUM()} und @code{STD()}. @code{COUNT(*)} ist darauf
-optimiert, sehr schnell Ergebnisse zu liefern, wenn @code{SELECT} aus einer
-Tabelle abfragt, wenn keine andere Spalte abgerufen wird und wenn es keine
-@code{WHERE}-Klausel gibt. @code{MIN()} und @code{MAX()} k�nnen
-Zeichenketten-Argumente entgegennehmen.
-
-@item @code{INSERT} und @code{UPDATE} mit Berechnungen.
-MySQL kann Berechnungen in @code{INSERT}- oder @code{UPDATE}-Statements
-ausf�hren. Beispiel:
-
-@example
-mysql> UPDATE SET x=x*10+y WHERE x<20;
-@end example
-
-@item Aliase.
-MySQL hat Spalten-Aliase.
-
-@item Qualifizierende Spaltenamen.
-In MySQL muss man nicht den voll qualifizierenden Namen benutzen, wenn eine
-Spalte in den benutzten Tabellen eindeutig ist.
-
-@item @code{SELECT} mit Funktionen.
-MySQL hat viele Funktionen (zu viele, um sie hier aufzulisten; siehe
-@ref{Functions}).
-
-@end itemize
-
-@item Effiziente Ausnutzung von Speicherplatz
-Das hei�t, wie klein k�nnen Sie Ihre Tabellen machen?
-
-MySQL hat sehr pr�zise Typen, deshalb k�nnen Sie Tabellen erzeugen, die
-sehr wenig Platz brauchen. Ein Beispiel f�r einen n�tzlichen MySQL-Datentyp
-ist @code{MEDIUMINT}, der 3 Bytes lang ist. Wenn Sie 100 Millionen
-Datens�tze haben, ist es schon von Wichtigkeit, auch nur ein Byte pro
-Datensatz zu sparen.
-
-@code{mSQL2} hat eine begrenztere Anzahl von Spaltentypen, daher ist es
-schwieriger, kleine Tabellen zu erhalten.
-
-@item Stabilit�t
-Dieser Punkt ist schwieriger objektiv zu beurteilen. Eine Er�rterung der
-Stabilit�t von MySQL finden Sie hier: @ref{Stability}.
-
-Wir haben keine Erfahrungen mit der Stabilit�t von @code{mSQL}, daher
-k�nnen wir nichts dar�ber sagen.
-
-@item Preis
-Ein weiterer wichtiger Punkt ist die Lizenz. MySQL hat eine flexiblere
-Lizenz als @code{mSQL} und kostet auch weniger als @code{mSQL}. Welches
-Produkt auch immer Sie verwenden, ziehen Sie bitte zumindestens in
-Betracht, f�r eine Lizenz oder E-Mail-Support zu zahlen. (Sie m�ssen
-nat�rlich notwendigerweise eine Lizenz erwerben, wenn Sie MySQL in ein
-Produkt einbeziehen, das Sie verkaufen.)
-
-@item Perl-Schnittstellen
-MySQL hat prinzipiell dieselben Schnittstelle zu Perl wie @code{mSQL}, mit
-einigen zus�tzlichen Features.
-
-@item JDBC (Java)
-MySQL hat aktuell eine gro�e Anzahl von JDBC-Treibern:
-
-@itemize @bullet
-@item
-Die mm-Treiber: Ein Typ-4 JDBC-Treiber von Mark Matthews
-@email{mmatthew@@ecn.purdue.edu}. Er ist unter LGPL ver�ffentlicht.
-
-@item
-Der Resin-Treiber. Das ist ein kommerzieller JDBC-Treiber, der unter Open
-Source ver�ffentlicht ist. @uref{http://www.caucho.com/Projekte/jdbc-mysql/index.xtp}
-
-@item
-Der gwe-Treiber: Eine Java-Schnittstelle von GWE technologies (wird nicht
-mehr unterst�tzt).
-
-@item
-Der jms-Treiber: Ein verbesserter gwe-Treiber von Xiaokun Kelvin ZHU
-@email{X.Zhu@@brad.ac.uk} (wird nicht mehr unterst�tzt).
-
-@item
-Der twz-Treiber: Ein Typ-4 JDBC-Treiber von Terrence W. Zellers
-@email{zellert@@voicenet.com}. Das ist ein kommerzieller Treiber, der f�r
-Privatgebrauch und Schulungszwecke kostenlos ist (wird nicht mehr
-unterst�tzt).
-@end itemize
-
-Der empfohlene Treiber ist der mm-Treiber. Der Resin-Treiber mag auch gut
-sein (zumindest sehen die Benchmarks gut aus), aber wir haben �ber diesen
-Treiber noch nicht allzu viele Informationen erhalten.
-
-Wir wissen, dass @code{mSQL} einen JDBC-Treiber hat, aber wir haben zu
-wenig Erfahrung damit, um ihn in einen Vergleich einzubeziehen.
-
-@item Entwicklungsgeschwindigkeit
-MySQL hat ein sehr kleines Entwicklerteam, aber wir arbeiten schon lange
-mit C und C++ und sind daher sehr schnell. Weil Threads, Funktionen,
-@code{GROUP BY} usw. noch nicht in @code{mSQL} implementiert sind, hat es
-eine Menge aufzuholen. Um das in den richtigen Blickwinkel zu r�cken,
-k�nnen Sie sich die @code{mSQL} @file{HISTORY}-Datei des letzten Jahres
-ansehen und sie mit dem News-Abschnitt des MySQL Referenzhandbuchs
-vergleichen (@pxref{News}). Es ist ziemlich offensichtlich, welches System
-sich schneller entwickelt hat.
-
-@item Utilities
-Sowohl @code{mSQL} als auch MySQL haben viele interessante von Dritten
-entwickelte Werkzeuge. Weil es sehr einfach ist, aufw�rts zu portieren (von
-@code{mSQL} zu MySQL), sind fast alle interessanten Applikationen, die f�r
-@code{mSQL} verf�gbar sind, auch f�r MySQL erh�ltlich.
-
-MySQL liefert ein einfaches @code{msql2mysql}-Programm mit, das
-Unterschiede in der Schreibweise zwischen @code{mSQL} und MySQL f�r die
-meistbenutzten C-API-Funktionen bereinigt.
-Es �ndert zum Beispiel Instanzen von @code{msqlConnect()} zu
-@code{mysql_connect()}. Ein Client-Programm von @code{mSQL} zu MySQL zu
-konvertieren, erfordert meist nur geringe Anstrengung.
-@end table
-
-
-
-@menu
-* Using mSQL tools::
-* Protocol differences::
-* Syntax differences::
-@end menu
-
-@node Using mSQL tools, Protocol differences, Compare mSQL, Compare mSQL
-@c German node mSQL-Werkzeuge benutzen
-@subsubsection Wie man @code{mSQL}-Werkzeuge f�r MySQL konvertiert
-
-@cindex MySQL-Werkzeuge, Konvertierung
-@cindex Konvertierung, Werkzeuge
-@cindex Werkzeuge, Konvertierung
-
-Nach unserer Erfahrung nimmt es wenig Zeit in Anspruch, Werkzeuge wie
-@code{msql-tcl} und @code{msqljava} zu konvertieren, die die
-@code{mSQL}-C-API benutzen, damit sie mit der MySQL-C-API funktionieren.
-
-Die Konvertierungsprozedur l�uft wie folgt:
-
-@enumerate
-@item
-Lassen Sie das Shell-Skript @code{msql2mysql} �ber den Quelltext laufen.
-Das erfordert das @code{replace}-Programm, das mit MySQL ausgeliefert wird.
-
-@item
-Kompilieren.
-
-@item
-Alle Kompilierfehler beheben.
-@end enumerate
-
-Die Unterschiede zwischen der @code{mSQL}-C-API und der MySQL-C-API sind:
-
-@itemize @bullet
-@item
-MySQL benutzt eine @code{MYSQL}-Struktur als Verbindungstyp, (@code{mSQL}
-benutzt einen @code{int}).
-
-@item
-@code{mysql_connect()} nimmt einen Zeiger (Pointer) auf eine
-@code{MYSQL}-Struktur als Parameter auf. Es ist einfach, einen global zu
-definieren oder @code{malloc()} zu benutzen, um einen zu erhalten.
-@code{mysql_connect()} nimmt zus�tzlich zwei Parameter auf, um Benutzer und
-Passwort zu spezifizieren. Sie k�nnen diese als Vorgabewert der Benutzung
-auf @code{NULL, NULL} setzen.
-
-@item
-@code{mysql_error()} nimmt die @code{MYSQL}-Struktur als Parameter auf.
-F�gen Sie einfach den Parameter zu Ihrem alten @code{msql_error()}-Code
-hinzu, wenn Sie alten Code portieren.
-
-@item
-MySQL gibt eine Fehlernummer und eine Textnachricht f�r alle Fehler zur�ck.
-@code{mSQL} gibt nur eine Fehlernachricht zur�ck.
-
-@item
-Aufgrund der Tatsache, dass MySQL mehrfache Verbindungen zum Server von
-demselben Prozess aus unterst�tzt, existieren einige Inkompatibilit�ten.
-@end itemize
-
-
-@node Protocol differences, Syntax differences, Using mSQL tools, Compare mSQL
-@c German node Protokollunterschiede
-@subsubsection Wie sich @code{mSQL}- und MySQL-Client/Server-Kommunikationsprotokolle unterscheiden
-
-@cindex Kommunikationsprotokolle
-@cindex mSQL, im Vergleich zu MySQL
-
-Es gibt genug Unterschiede, so dass es unm�glich ist (oder zumindest nicht
-leicht), beide zu unterst�tzen.
-
-Die signifikantesten Protokollunterschiede zwischen MySQL und @code{mSQL}
-sind folgende:
-
-@itemize @bullet
-@item
-Ein Nachrichtenpuffer (Message Buffer) darf viele Ergebniszeilen enthalten.
-
-@item
-Die Nachrichtenpuffer werden dynamisch vergr��ert, wenn die Anfrage oder
-das Ergebnis gr��er sind als der aktuelle Puffer, bis hin zu einer
-konfigurierbaren Server- und Client-Grenze.
-
-@item
-Alle Pakete werden nummeriert, um duplizierte oder fehlende Pakete
-abzufangen.
-
-@item
-Alle Spaltenwerte werden in ASCII gesendet. Die L�ngen von Spalten und
-Zeilen werden als komprimierte Bin�rkodierung gesendet (1, 2 oder 3
-Bytes).
-
-@item
-MySQL kann ungepuffert im Ergebnis lesen (ohne die volle Ergebnismenge im
-Client speichern zu m�ssen).
-
-@item
-Wenn ein einzelner Lese- / Schreibvorgang mehr als 30 Sekunden in Anspruch
-nimmt, schlie�t der Server die Verbindung.
-
-@item
-Wenn eine Verbindung l�nger als 8 Stunden im Leerlauf ist, schlie�t der
-Server die Verbindung.
-@end itemize
-
-
-@c Question Steve: Check this node for the English original!
-@node Syntax differences, , Protocol differences, Compare mSQL
-@c German node Syntaxunterschiede
-@subsubsection Wie sich die @code{mSQL} 2.0 SQL-Syntax von MySQL unterscheidet
-
-@noindent
-@strong{Spaltentypen}
-
-@table @code
-@item
-MySQL hat folgende zus�tzliche Typen (unter anderem;
-@pxref{CREATE TABLE, , @code{CREATE TABLE}}):
-@itemize @bullet
-@item
-@code{ENUM}-Typ f�r einen Satz von Zeichenketten.
-@item
-@code{SET}-Typ f�r viele S�tze von Zeichenketten.
-@item
-@code{BIGINT}-Typ f�r 64-Bit-Ganzzahlen (Integer).
-@end itemize
-@item
-MySQL unterst�tzt folgende zus�tzliche Typ-Attribute:
-@itemize @bullet
-@item
-@code{UNSIGNED}-Option f�r Ganzzahl-Spalten (Integer).
-@item
-@code{ZEROFILL}-Option f�r Ganzzahl-Spalten (Integer).
-@item
-@code{AUTO_INCREMENT}-Option f�r Ganzzahl-Spalten (Integer), die ein
-@code{PRIMARY KEY} sind.
-@xref{mysql_insert_id, , @code{mysql_insert_id()}}.
-@item
-@code{DEFAULT}-Wert f�r alle Spalten.
-@end itemize
-@item mSQL2
-@code{mSQL}-Spaltentypen korrespondieren mit den unten dargestellten
-MySQL-Typen:
-@multitable @columnfractions .15 .85
-@item @code{mSQL} @strong{Typ} @tab @strong{Korrespondierender MySQL-Typ}
-@item @code{CHAR(len)} @tab @code{CHAR(len)}
-@item @code{TEXT(len)} @tab @code{TEXT(len)}. @code{len} ist die maximale
-L�nge.
-Und @code{LIKE} funktioniert.
-@item @code{INT} @tab @code{INT}. Mit vielen weiteren Optionen!
-@item @code{REAL} @tab @code{REAL}. Or @code{FLOAT}. Beide 4- und
-8-Byte-Versionen sind verf�gbar.
-@item @code{UINT} @tab @code{INT UNSIGNED}
-@item @code{DATE} @tab @code{DATE}. Benutzt ANSI-SQL-Format statt
-@code{mSQL}'s eigenem Format.
-@item @code{TIME} @tab @code{TIME}
-@item @code{MONEY} @tab @code{DECIMAL(12,2)}. Ein Festkomma-Wert mit zwei
-Dezimalstellen.
-@end multitable
-@end table
-
-@noindent
-@strong{Index-Erzeugung}
-
-@table @code
-@item MySQL
-Indizes k�nnen bei der Erzeugung der Tabelle mit dem @code{CREATE
-TABLE}-Statement festgelegt werden.
-@item mSQL
-Indexe m�ssen erzeugt werden, nachdem die Tabelle erzeugt wurde, mit einem
-separaten @code{CREATE INDEX}-Statements.
-@end table
-
-@noindent
-@strong{Einf�gen eines eindeutigen Identifikators (Unique Identifier) in eine Tabelle}
-
-@table @code
-@item MySQL
-Benutzen Sie @code{AUTO_INCREMENT} als Spaltentyp-Spezifizierer.
-@xref{mysql_insert_id, , @code{mysql_insert_id()}}.
-@item mSQL
-Erzeugen Sie eine @code{SEQUENCE} auf eine Tabelle und w�hlen Sie die
-@code{_seq}-Spalte.
-@end table
-
-@noindent
-@strong{Wie man einen eindeutigen Identifikator (Unique Identifier) f�r eine Zeile erh�lt}
-
-@table @code
-@item MySQL
-F�gen Sie der Tabelle einen @code{PRIMARY KEY} oder @code{UNIQUE}-Schl�ssel
-hinzu und benutzen Sie diesen.
-Neu ab Version 3.23.11: Wenn der @code{PRIMARY}- oder
-@code{UNIQUE}-Schl�ssel nur aus einer Spalte besteht und diese vom Typ
-Ganzzahl (Integer) ist, k�nnen Sie auf diese auch mit @code{_rowid}
-verweisen.
-@item mSQL
-Benutzen Sie die @code{_rowid}-Spalte. Beachten Sie, dass sich
-@code{_rowid} im Zeitverlauf m�glicherweise �ndert, abh�ngig von vielen
-Faktoren.
-@end table
-
-@noindent
-@strong{Wie man die Zeit erh�lt, zu der eine Spalte zuletzt ge�ndert wurde}
-
-@table @code
-@item MySQL
-F�gen Sie der Tabelle eine @code{TIMESTAMP}-Spalte hinzu. Diese Spalte wird
-automatisch auf das aktuelle Datum und die aktuelle Zeit gesetzt, und zwar
-bei @code{INSERT}- und @code{UPDATE}-Statements, es sein denn, der Spalte
-wird explizit ein Wert zugewiesen, auch der @code{NULL}-Wert.
-
-@item mSQL
-Benutzen Sie die @code{_timestamp}-Spalte .
-@end table
-
-@noindent
-@strong{@code{NULL}-Wert-Vergleiche}
-
-@table @code
-@item MySQL
-MySQL folgt ANSI-SQL, daher wird ein Vergleich mit @code{NULL} immer zu
-@code{NULL} ausgewertet.
-@item mSQL
-In @code{mSQL} ist @code{NULL = NULL} TRUE. Sie m�ssen @code{=NULL} zu
-@code{IS NULL} und @code{<>NULL} zu @code{IS NOT NULL}, wenn Sie alten Code
-von @code{mSQL} zu MySQL portieren.
-@end table
-
-@noindent
-@strong{Zeichenketten-Vergleich}
-
-@table @code
-@item MySQL
-Normalerweise werden Zeichenketten-Vergleiche so durchgef�hrt, dass sie
-unabh�ngig von der verwendeten Gro�-/Kleinschreibung laufen, wobei die
-Sortierreihenfolge vom aktuell verwendeten Zeichensatz abh�ngt (ISO-8859-1
-Latin1 als Vorgabewert). Wenn Sie das nicht wollen, deklarieren Sie Ihre
-Spalten mit dem @code{BINARY}-Attribut, was bewirkt, dass Vergleiche nach
-der ASCII-Reihenfolge durchgef�hrt werden, wobei der ASCII-Zeichensatz
-gilt, den der MySQL-Server-Host verwendet.
-@item mSQL
-Alle Zeichenketten-Vergleiche werden so durchgef�hrt, dass sie abh�ngig von
-der verwendeten Gro�-/Kleinschreibung laufen. Die Sortierung erfolgt in
-ASCII-Reihenfolge.
-@end table
-
-@noindent
-@strong{Suche, die unabh�ngig von Gro�-/Kleinschreibung l�uft}
-
-@table @code
-@item MySQL
-@code{LIKE} ist ein Operator, der abh�ngig oder unabh�ngig von der
-Gro�-/Kleinschreibung l�uft, was davon abh�ngt, welche Spalten verwendet
-werden. Wenn m�glich, benutzt MySQL Indexe, wenn das @code{LIKE}-Argument
-nicht mit einem Platzhalterzeichen (Wildcard) beginnt.
-@item mSQL
-Benutzt @code{CLIKE}.
-@end table
-
-@noindent
-@strong{Handhabung von Leerzeichen am Ende}
-
-@table @code
-@item MySQL
-Entfernt alle Leerzeichen am Ende von @code{CHAR}- und
-@code{VARCHAR}-Spalten. Benutzen Sie eine @code{TEXT}-Spalte, wenn dieses
-Verhalten unerw�nscht ist.
-@item mSQL
-Beh�lt Leerzeichen am Ende bei.
-@end table
-
-@noindent
-@strong{@code{WHERE}-Klauseln}
-
-@table @code
-@item MySQL
-MySQL priorisiert alles korrekt (@code{AND} wird vor @code{OR}
-ausgewertet). Um @code{mSQL}-Verhalten in MySQL zu erreichen, benutzen
-Sie Klammern (wie im unten stehenden Beispiel gezeigt).
-@item mSQL
-Wertet alles von links nach rechts aus. Das bedeutet, dass einige logische
-Berechnungen mit mehr als drei Argumenten �berhaupt nicht ausgedr�ckt
-werden k�nnen. Das hei�t auch, dass Sie einige Anfragen �ndern m�ssen,
-wenn Sie auf MySQL umsteigen. Das einfachste ist, Klammern hinzuzuf�gen.
-Nehmen wir an, Sie haben die folgende @code{mSQL}-Anfrage:
-@example
-mysql> SELECT * FROM tabelle WHERE a=1 AND b=2 OR a=3 AND b=4;
-@end example
-Damit MySQL dies auf dieselbe Art auswertet wie @code{mSQL}, m�ssen Sie
-Klammern hinzuf�gen:
-@example
-mysql> SELECT * FROM tabelle WHERE (a=1 AND (b=2 OR (a=3 AND (b=4))));
-@end example
-@end table
-
-@noindent
-@strong{Zugriffskontrolle}
-
-@table @code
-@item MySQL
-Hat Tabellen, in denen Berechtigungsoptionen pro Benutzer, Host, und
-Datenbank gespeichert werden. @xref{Privileges}.
-@item mSQL
-Hat eine Datei @file{mSQL.acl}, in der Sie Lese-/Schreibrechte f�r Benutzer
-gew�hren k�nnen.
-@item
-@end table
-
-
-@node Compare PostgreSQL, , Compare mSQL, Comparisons
-@c German node Vergleich mit PostgreSQL
-@subsection MySQL im Vergleich mit PostgreSQL
-
-@cindex PostgreSQL im Vergleich mit MySQL, �berblick
-
-Wenn Sie das Folgende lesen, beachten Sie bitte, dass sich beide Produkte
-stetig entwickeln. Wir bei MySQL AB und die PostgreSQL-Entwickler geben
-sich alle M�he, unsere jeweilige Datenbank so gut wie m�glich zu machen.
-Daher sind es beide Produkte wert bei der Wahl einer kommerziellen Datenbank
-ernsthaft in Betracht gezogen zu werden.
-
-Der folgende Vergleich wurde von uns bei MySQL AB durchgef�hrt. Wir haben
-uns bem�ht, so akkurat und fair wie m�glich zu sein. Da wir aber keine
-vollst�ndige Kenntnis aller PostgreSQL-Features haben, w�hrend wir MySQL
-sehr genau kennen, haben wir vielleicht ein paar Dinge falsch verstanden.
-Wir werden das jedenfalls korrigieren, wenn es uns zu Ohren kommt.
-
-Zun�chst wollen wir feststellen, dass sowohl PostgreSQL als auch MySQL weit
-verbreitete Produkte sind, die aber unterschiedliche Entwurfsziele haben,
-auch wenn beide sich bem�hen, ANSI-SQL-kompatibel zu sein. Das bedeutet,
-dass MySQL f�r einige Applikationen besser geeignet ist, PostgreSQL f�r
-andere. Wenn Sie �berlegen, welche Datenbank Sie w�hlen sollen, sollten Sie
-zun�chst pr�fen, ob die Features der Datenbank f�r Ihre Applikation
-zufrieden stellend sind. Wenn Sie satte Geschwindigkeit brauchen, wird Ihre
-Wahl wahrscheinlich auf MySQL fallen. Wenn Sie einige der speziellen
-Merkmale brauchen, die nur PostgreSQL anbieten kann, sollten Sie
-@code{PostgreSQL} benutzen.
-
-@cindex PostgreSQL/MySQL, Strategien
-
-
-@menu
-* MySQL-PostgreSQL goals::
-* MySQL-PostgreSQL features::
-* MySQL-PostgreSQL benchmarks::
-@end menu
-
-@node MySQL-PostgreSQL goals, MySQL-PostgreSQL features, Compare PostgreSQL, Compare PostgreSQL
-@c German node MySQL-PostgreSQL-Ziele
-@subsubsection Entwicklungsstragien von MySQL und PostgreSQL
-
-Wenn wir MySQL Dinge hinzuf�gen, ist es f�r uns eine Sache der Ehre, eine
-optimale, definitive L�sungen zu schaffen. Der Code sollte so gut sein,
-dass wir keine Notwendigkeit erkennen, ihn in der absehbaren Zukunft zu
-�ndern. Wir wollen auch nicht Geschwindigkeit f�r Features opfern, sondern
-sind aufs �u�erste bestrebt, eine L�sung zu finden, die maximalen
-Durchsatz bietet. Das bedeutet, dass die Entwicklung ein bisschen l�nger
-dauert, aber die Endergebnisse sind es wert. Diese Art von Entwicklung ist
-nur m�glich, weil der gesamte Server-Code nur von wenigen Leuten gepr�ft
-wird (aktuell zwei), bevor er in den MySQL-Server aufgenommen wird.
-
-Wir bei MySQL AB halten viel von h�ufigen Releases, um in der Lage zu sein,
-neue Features schnell an unsere Benutzer heraus zu geben. Deshalb bringen
-wir etwa alle drei Wochen ein kleines Release heraus und einen gr��eren
-Zweig (Branch) einmal im Jahr. Alle Releases werden gr�ndlich mit unseren
-Testwerkzeugen auf vielen verschiedenen Plattformen getestet.
-
-PostgreSQL basiert auf einem Kern (Kernel), zu dem viele Leute etwas
-beigesteuert haben. Bei diesem Vorgehen ist es sinnvoll, dem Hinzuf�gen
-neuer Features Priorit�t einzur�umen, statt sie optimal zu implementieren,
-denn man kann immer noch sp�ter Dinge optimieren, wenn sich die
-Notwendigkeit hierf�r ergibt.
-
-Ein weiterer gro�er Unterschied zwischen MySQL und PostgreSQL besteht
-darin, dass praktisch der gesamte Code des MySQL-Servers von Entwicklern
-kodiert wurde, die bei MySQL AB angestellt sind und die immer noch am
-Server-Code arbeiten. Ausnahmen bilden die Transaktions-Engines und die
-Regexp-Bibliothek.
-
-Das steht in scharfem Kontrast zum PostgreSQL-Code, wo der gr��te Teil des
-Codes von einer gro�en Gruppe von Leuten mit unterschiedlichem Hintergrund
-kodiert wird. Erst k�rzlich gaben die PostgreSQL-Entwickler bekannt, dass
-ihre aktuelle Entwicklergruppe endlich Zeit gefunden hat, einen Blick auf
-all den Code der aktuellen PostgreSQL-Version zu werfen.
-
-Beide der genannten Entwicklungsmethoden hat Ihre Vorz�ge und Nachteile.
-Wir hier bei MySQL AB sind nat�rlich der Meinung, dass unser Modell besser
-ist, weil unser Modell bessere Konsistenz gew�hrleistet sowie mehr
-optimalen und damit wiederverwendbaren Code und deshalb nach unserer
-Meinung weniger Bugs. Weil wir die Autoren des MySQL-Server-Codes sind,
-sind wir besser im Stande, neue Features und Releases zu koordinieren.
-
-
-@node MySQL-PostgreSQL features, MySQL-PostgreSQL benchmarks, MySQL-PostgreSQL goals, Compare PostgreSQL
-@c German node MySQL-PostgreSQL-Features
-@subsubsection Feature-Vergleich von MySQL und PostgreSQL
-
-@cindex PostgreSQL/MySQL, Features
-
-Auf der Seite @uref{http://www.mysql.com/information/crash-me.php,
-crash-me} finden Sie eine Liste der Datenbank-Konstrukte und
--Beschr�nkungen, die man automatisch mit einem Programm entdecken kann.
-Beachten Sie jedoch, dass sich etliche numerische Beschr�nkungen mit
-Start-Optionen der jeweiligen Datenbank �ndern lassen. Die genannte Seite
-ist jedoch �u�erst n�tzlich, wenn Sie sicher stellen wollen, dass Ihre
-Applikationen mit vielen unterschiedlichen Datenbanken funktionieren, oder
-wenn Sie Ihre Applikation von einer Datenbank zu einer anderen konvertieren
-wollen.
-
-MySQL bietet folgende Vorz�ge gegen�ber PostgreSQL:
-
-@itemize @bullet
-@item
-@code{MySQL} ist generell viel schneller als PostgreSQL.
-@xref{MySQL-PostgreSQL benchmarks}.
-
-@item
-MySQL hat eine viel gr��ere Benutzer-Basis als PostgreSQL, deshalb ist der
-Code besser getestet und hat sich historisch als stabiler erwiesen als der
-von PostgreSQL. MySQL wird sehr viel mehr in Produktionsumgebungen
-eingesetzt als PostgreSQL, haupts�chlich dank der Tatsache, dass MySQL AB,
-fr�her TCX DataKonsult AB, kommerziellen Support von h�chster Qualit�t f�r
-MySQL geleistet hat, von dem Tag an, wo MySQL ver�ffentlicht wurde,
-wohingegen PostgreSQL bis vor kurzem nicht supported war.
-
-@item
-MySQL funktioniert unter Windows besser als PostgreSQL. MySQL l�uft als
-native Windows-Applikation (als Systemdienst unter NT/Win2000/WinXP),
-w�hrend PostgreSQL unter der cygwin-Emulation l�uft. Uns ist zu Ohren
-gekommen, dass PostgreSQL nicht unter Windows nicht sehr stabil l�uft, aber
-wir konnten das selbst noch nicht �berpr�fen.
-
-@item
-MySQL hat mehr APIs zu anderen Sprachen und wird von mehr existierenden
-Programmen unterst�tzt als PostgreSQL. @xref{Contrib}.
-
-@item
-MySQL l�uft auf 24/7-Systemen unter hoher Last. In den meisten F�llen
-braucht man nie irgend welche Cleanups auf MySQL laufen lassen. PostgreSQL
-unterst�tzt noch keine 24/7-Systeme, weil man gelegentlich @code{VACUUM()}
-laufen lassen muss, um durch @code{UPDATE}- und @code{DELETE}-Kommandos
-beanspruchten Platz zur�ck zu gewinnen, sowie um statistische Analysen
-durchzuf�hren, die entscheidend sind, um mit PostgreSQL gute Performance zu
-erzielen. @code{VACUUM()} wird auch ben�tigt nach dem Hinzuf�gen vieler
-Zeilen in eine Tabelle. Auf einem ausgelasteten System mit vielen
-�nderungen muss @code{VACUUM()} sehr h�ufig laufen gelassen werden, im
-schlimmsten Fall mehrmals t�glich. W�hrend @code{VACUUM()} l�uft, was
-Stunden dauern kann, wenn die Datenbank Gro� ist, ist die Datenbank vom
-Produktionsstandpunkt her gesehen praktisch tot. Das PostgreSQL-Team hat
-die Behebung dessen auf seiner TODO-Liste, aber wir vermuten, dass es nicht
-einfach sein wird, das dauerhaft zu beheben.
-
-@item
-Ein funktionierendes, getestetes Replikations-Feature, das unter anderem
-von folgenden Sites benutzt wird:
-@itemize @minus
-@item Yahoo Finance (@uref{http://finance.yahoo.com})
-@item Mobile.de (@uref{http://www.mobile.de/})
-@item Slashdot (@uref{http://www.slashdot.org})
-@end itemize
-
-@item
-In der MySQL-Distribution werden zwei unterschiedliche Test-Suites
-mitgeliefert:
-@file{mysql-test-run} und
-@uref{http://www.mysql.com/information/crash-me.php,crash-me}, sowie eine
-Benchmark-Suite. Das Testsystem wird rege mit Code aktualisiert, um jedes
-neue Feature und alle wiederholbaren Fehler, die uns zu Ohren kamen, zu
-testen. Vor jedem Release testen wir MySQL auf vielen verschiedenen
-Plattformen. Diese Tests sind technisch ausgereifter als alles, was wir von
-PostgreSQL gesehen haben, und sie stellen sicher, dass MySQL auf einem
-hohen Standard gehalten wird.
-
-@item
-Es gibt wesentlich mehr gedruckte B�cher �ber MySQL als �ber PostgreSQL.
-Alle gro�en Verlage wie O'Reilly, Sams, Que und New Riders bieten B�cher
-�ber MySQL an. Alle MySQL-Features werden ausserdem im
-MySQL-Online-Handbuch dokumentiert, denn wenn ein neues Feature
-implementiert wird, sind die MySQL-Entwickler gehalten, es zu
-dokumentieren, bevor es in den Quelltext eingeschlossen wird.
-
-@item
-MySQL unterst�tzt mehr Standard-ODBC-Funktionen als @code{PostgreSQL}.
-
-@item
-MySQL hat ein technisch ausgereifteres @code{ALTER TABLE}.
-
-@item
-MySQL unterst�tzt Tabellen ohne Transaktionen f�r Applikationen, die so
-viel Geschwindigkeit brauchen, wie sie bekommen k�nnen. Tabellen k�nnen
-Arbeitsspeicher-basierend, @code{HEAP}-Tabellen oder Festplatten-basierend
-@code{MyISAM} sein. @xref{Table types}.
-
-@item
-MySQL unterst�tzt zwei verschiedene Tabellen-Handler, die Transaktionen
-unterst�tzen: @code{BerkeleyDB} und @code{InnoDB}. Weil jede
-Transaktions-Engine unter unterschiedlichen Bedingungen unterschiedlich
-leistungsf�hig ist, gibt das dem Applikationsschreiber mehr Optionen, die
-optimale L�sung f�r seinen Bedarf zu finden. @xref{Table types}.
-
-@item
-@code{MERGE}-Tabellen geben Ihnen eine einzigartige M�glichkeit, eine
-augenblickliche Sicht (View) �ber eine Reihe identischer Tabellen zu machen
-und diese wie eine zu benutzen. Das ist perfekt f�r Systeme, auf denen Sie
-Log-Dateien haben, die Sie zum Beispiel nach Monat sortieren. @xref{MERGE}.
-
-@item
-Die Option, Nur-Lese-Tabellen zu komprimieren, aber dennoch direkten
-Zugriff auf die Zeilen der Tabelle zu haben, gibt Ihnen dadurch bessere
-Performance, dass Festplattenzugriffe minimiert werden. Das ist sehr
-n�tzlich, wenn Sie Dinge archivieren. @xref{myisampack}.
-
-@item
-MySQL hat internen Support f�r Volltextsuche. @xref{Fulltext Search}.
-
-@item
-Sie k�nnen von derselben Verbindung aus auf viele Datenbanken zugreifen
-(was nat�rlich von Ihren Zugriffsrechten abh�ngt).
-
-@item
-MySQL wurde von Anfang an multi-threaded kodiert, w�hrend PostgreSQL
-Prozesse benutzt. Umschalten zwischen unterschiedlichen Zusammenh�ngen
-(Context Switching) und Zugriff auf allgemeine Speicherbereiche geht
-zwischen Threads wesentlich schneller als zwischen separaten Prozessen. Das
-bringt MySQL einen gro�en Geschwindigkeitsvorteil in
-Mehrbenutzer-Applikationen und macht es obendrein f�r MySQL einfacher, den
-vollen Nutzen aus symmetrischen Multiprozessor-Systemen (SMP) zu ziehen.
-
-@item
-MySQL hat ein technisch ausgereifteres System der Zugriffsberechtigungen
-(Berechtigungssystem) als PostgreSQL.
-PostgreSQL unterst�tzt nur @code{INSERT}-, @code{SELECT}- und
-@code{UPDATE/DELETE}-Rechtegew�hrung (Grants) pro Benutzer auf eine
-Datenbank oder Tabelle. MySQL dagegen erlaubt es Ihnen, einen kompletten
-Satz unterschiedlicher Zugriffsrechte auf Datenbank-, Tabellen- und
-Spaltenebene festzulegen. MySQL gestattet es auch, Zugriffsrechte als
-Host- und Benutzer-Kombinationen festzulegen. @xref{GRANT}.
-
-@item
-MySQL unterst�tzt ein komprimiertes Client/Server-Protokoll, was die
-Performance �ber langsame Verbindungen verbessert.
-
-@item
-MySQL f�hrt ein ``Tabellen-Handler''-Konzept ein und ist die einzige
-relationale Datenbank, die wir kennen, die um dieses Konzept herum
-aufgebaut ist. Das sorgt daf�r, dass unterschiedliche
-Low-Level-Tabellentypen an die SQL-Engine angeflanscht werden k�nnen, und
-dass jeder Tabellentyp f�r unterschiedliche Performance-Charakteristiken
-optimiert werden kann.
-
-@item
-Alle MySQL-Tabellentypen (ausser @strong{InnoDB}) sind als Dateien
-implementiert (eine Tabelle pro Datei), wodurch Datensicherungen,
-Verschieben, L�schen und sogar Symlinks auf Datenbanken und Tabellen
-wirklich einfach werden, selbst wenn der Server herunter gefahren ist.
-
-@item
-Werkzeuge, um @strong{MyISAM}-Tabellen (der meistbenutzte MySQL-Tabellentyp) zu
-reparieren und zu optimieren. Ein Reparaturwerkzeug wird nur dann ben�tigt,
-wenn eine Datendatei physikalisch besch�digt wurde, was �blicherweise bei
-Hardwareproblemen der Fall ist. Das Werkzeug kann meist den gr��ten Teil der
-Daten retten.
-
-@item
-Auf eine h�here Version von MySQL aktualisieren (Upgrade) geht problemlos.
-Wenn Sie MySQL aktualisieren, brauchen Sie Ihre Daten nicht zusichern (dump)
-und zur�ckzusichern (restore), wie Sie es mit PostgreSQL tun m�ssen, wenn Sie
-dieses aktualisieren.
-@end itemize
-
-Nachteile von MySQL im Vergleich zu PostgreSQL:
-
-@itemize @bullet
-@item
-Die Transaktionsunterst�tzung in MySQL ist noch nicht so gut getestet wie
-das System von PostgreSQL.
-
-@item
-
-Weil MySQL Threads benutzt, die auf vielen Betriebssystemen noch nicht ganz
-tadellos funktionieren, muss man entweder die Bin�rdateien von
-@uref{http://www.mysql.com/downloads} benutzen oder genau unsere
-Anweisungen auf @uref{http://www.mysql.com/doc/I/n/installation_source.html}
-befolgen, um eine optimale Bin�rdatei zu erhalten, die in jedem Fall
-funktioniert.
-
-@item
-Tabellensperren (Locks), die von den nicht transaktionalen
-@code{MyISAM}-Tabellen benutzt werden, sind in vielen F�llen schneller als
-Seiten-Sperren (Page Locks), Zeilen-Sperren (Row Locks) oder Versionierung
-(Versioning). Der Nachteil liegt jedoch darin, dass, wenn man nicht
-ber�cksichtigt, wie Tabellensperren funktioniert, eine einzige lang
-laufende Anfrage eine Tabelle lange Zeit f�r Updates blockieren kann. Das
-kann gew�hnlich durch entsprechenden Entwurf der Applikation vermieden
-werden. Falls nicht, kann man immer noch die Tabelle, die das Problem
-verursacht, zu einem der transaktionalen Tabellentypen um�ndern.
-@xref{Table locking}.
-
-@item
-Mit UDF (User Defined Functions, Benutzerdefinierten Funktionen) kann man
-MySQL sowohl hinsichtlich SQL-Funktionen als auch Aggregaten erweitern,
-aber das ist noch nicht so einfach und flexibel wie in PostgreSQL.
-@xref{MySQL internals}.
-
-@item
-Updates, die �ber mehrere Tabellen laufen, sind in MySQL schwieriger
-durchzuf�hren. Das wird jedoch in MySQL 4.0 mit dem
-Multi-Table-@code{UPDATE} behoben sein und in MySQL 4.1 mit den Subselects.
-In MySQL 4.0 kann man Multi-Table-Deletes nutzen, um zeitgleich in mehreren
-Tabellen zu l�schen. @xref{DELETE}.
-@end itemize
-
-PostgreSQL hat momentan folgende Vorteile gegen�ber MySQL:
-
-Weil wir die Pl�ne (Roadmap) von MySQL kennen, haben wir in der folgenden
-Tabelle die Versionsnummern der jeweiligen MySQL-Version untergebracht, die
-das entsprechende Feature unterst�tzen wird. Leider konnten wir das nicht
-f�r fr�here Vergleiche machen, denn wir kennen nicht kennen nicht die Pl�ne
-(Roadmap) von PostgreSQL.
-
-@multitable @columnfractions .70 .30
-@item @strong{Feature} @tab @strong{MySQL version}
-@item Subselects @tab 4.1
-@item Fremdschl�ssel @tab 4.0 und 4.1
-@item Sichten (Views) @tab 4.2
-@item Gespeicherte Prozeduren @tab 4.1
-@item Erweiterbares Typ-System @tab Nicht geplant
-@item Unions @tab 4.0
-@item Full Join @tab 4.0 oder 4.1
-@item Trigger @tab 4.1
-@item Constrainst @tab 4.1
-@item Cursor @tab 4.1 oder 4.2
-@item Erweiterbare Indextypen wie R-Trees @tab R-trees sind geplant f�r 4.2
-@item Vererbte (Inherited) Tabellen @tab Nicht geplant
-@end multitable
-
-Andere Gr�nde, PostgreSQL zu benutzen:
-
-@itemize @bullet
-@item
-Im Standardgebrauch ist PostgreSQL in einigen F�llen n�her an ANSI-SQL
-angelehnt.
-
-@item
-Man kann PostgreSQL beschleunigen, indem man Dinge als gespeicherte
-Prozeduren kodiert.
-
-@item
-PostgreSQL hat ein gr��eres Entwicklerteam, das Code zum Server
-beisteuert.
-@end itemize
-
-Nachteile von PostgreSQL im Vergleich zu MySQL:
-
-@itemize @bullet
-@item
-@code{VACUUM()} macht es problematisch, PostgreSQL in 24/7-Umgebungen
-einzusetzen.
-
-@item
-Nur Transaktionstabellen.
-
-@item
-Viel langsamere @code{INSERT}, @code{DELETE} und @code{UPDATE} Anweisungen.
-@end itemize
-
-Eine vollst�ndige Aufstellung der Nachteile finden Sie in der ersten
-Tabelle dieses Abschnitts.
-
-
-
-@node MySQL-PostgreSQL benchmarks, , MySQL-PostgreSQL features, Compare PostgreSQL
-@c German node MySQL-PostgreSQL-Benchmarks
-@subsubsection Benchmark-Vergleiche von MySQL und PostgreSQL
-
-@cindex PostgreSQL im Vergleich mit MySQL, Benchmarks
-
-Der einzige Open-Source-Benchmark-Test, den wir kennen, der benutzt werden
-kann, um MySQL und PostgreSQL (und andere Datenbanken) miteinander zu
-vergleichen, ist unser eigener. Man findet ihn auf
-@uref{http://www.mysql.com/information/benchmarks.html}.
-
-Wir haben mehrfach bei den PostgreSQL-Entwicklern und bei einigen
-PostgreSQL-Benutzer nachgefragt, ob sie bereit w�ren, uns zu helfen, diesen
-Benchmark-Test zu erweitern, um ihn zu dem definitiven Benchmark-Test f�r
-Datenbanken zu machen, haben aber leider keinerlei R�ckmeldung erhalten.
-
-Wir, die MySQL-Entwickler, haben deshalb viele Stunden damit verbracht,
-f�r den Benchmark-Test maximale Performance aus PostgreSQL heraus zu
-bekommen, aber da wir mit PostgreSQL nicht sehr weitgehend vertraut sind,
-sind wir sicher, dass wir einige Dinge vers�umt haben. Auf der
-Benchmark-Seite haben wir genau dokumentiert, wie wir den Benchmark-Test
-durchgef�hrt haben, deshalb sollte es f�r jeden einfach sein, ihn zu
-wiederholen und unsere Ergebnisse zu best�tigen.
-
-Die Benchmarks werden �blicherweise mit und ohne die @code{--fast}-Option
-durchgef�hrt. Wenn wir sie mit @code{--fast} durchf�hren, versuchen wir,
-jeden Trick zu nutzen, den der Server benutzt, um den Code so schnell wie
-m�glich auszuf�hren. Die Idee dahinter ist, dass der Server zeigen sollte,
-wie er mit Vorgabeeinstellungen l�uft und @code{--fast} sollte zeigen, wie
-der Server l�uft, wenn der Applikationsentwickler Erweiterungen im Server
-nutzt, um seine Applikation schneller laufen zu lassen.
-
-Wenn wir PostgreSQL mit der @code{--fast}-Option laufen lassen, machen wir
-ein @code{VACUUM()} nach jedem gr��eren Tabellen-@code{UPDATE} und
-@code{DROP TABLE}, um die Datenbank in beste Verfassung f�r die folgenden
-@code{SELECT}s zu bringen. Die Zeit f�r @code{VACUUM()} wird separat
-gemessen.
-
-PostgreSQL 7.1.1 konnten wir jedoch nicht mit der Option @code{--fast}
-laufen lassen, weil der Postmaster (der PostgreSQL Daemon) w�hrend eines
-@code{INSERT}-Tests starb und die Datenbank so besch�digt war, dass es
-unm�glich war, den Postmaster neu zu starten. Nachdem dies zweimal
-geschehen war, entschieden wir uns, den Test mit @code{--fast} bis zum
-n�chsten PostgreSQL-Release zu verschieben. Die Details zur Maschine, die
-wir f�r den Benchmark benutzten, stehen auf der Benchmark-Seite.
-
-Bevor wir uns den anderen Benchmarks, die wir kennen, zuwenden, m�chten wir
-ein paar Hintergrundinformationen zu Benchmarks geben:
-
-Es ist sehr einfach, einen Test zu schreiben, der zeigt, dass JEDE
-BELIEBIGE Datenbank die beste der Welt ist, indem man den Test einfach auf
-etwas beschr�nkt, was diese Datenbank sehr gut kann und nichts anderes
-testet, was die Datenbank nicht gut kann. Wenn man dann noch das Ergebnis
-mittels einer einzigen Zahl ver�ffentlicht, macht das die Dinge sogar noch
-einfacher.
-
-Das w�re, als ob wir die Geschwindigkeit von MySQL gegen�ber PostgreSQL
-anhand der Messzeit-Zusammenfassung der MySQL-Benchmarks auf unserer
-Webseite vergleichen w�rden. Auf dieser Basis w�re MySQL mehr als 40 Mal
-schneller als PostgreSQL, was nat�rlich nicht stimmt. Wir k�nnten die Sache
-sogar noch verschlimmern, indem wir nur etwas testen, worin PostgreSQL die
-schlechtesten Leistungsdaten bringt und geltend machen, dass MySQL mehr als
-2000 Mal schneller ist als PostgreSQL.
-
-Tatsache ist, dass MySQL eine Menge Optimierungen vornimmt, die PostgreSQL
-nicht vornimmt. Das ist nat�rlich auch umgekehrt so. Ein SQL-Optimierer ist
-eine sehr komplexe Sache, und ein Unternehmen k�nnte Jahre damit zubringen,
-nur den Optimierer schneller und schneller zu machen.
-
-Wenn Sie sich die Ergebnisse der Benchmarks ansehen, sollten Sie nach
-Dingen Ausschau halten, die Sie in Ihrer Applikation durchf�hren, und dann
-nur diese Ergebnisse benutzen, um zu entscheiden, welche Datenbank wohl am
-besten f�r Ihre Applikation geeignet ist. Die Benchmark-Ergebnisse zeigen
-ausserdem auf, worin eine bestimmte Datenbank nicht gut ist, was Ihnen eine
-Ahnung davon geben sollte, welche Dinge Sie am besten vermeiden und was Sie
-auf andere Weise machen sollten.
-
-Wir kennen zwei Benchmark-Tests, die behaupten, dass PostgreSQL bessere
-Leistungsdaten bringt als MySQL. Beide waren Mehrbenutzer-Tests, ein Test,
-den zu schreiben wir bei MySQL AB nie die Zeit hatten, haupts�chlich, weil
-es eine wirklich gro�e Aufgabe ist, wenn man will, dass der Test fair zu
-allen Datenbanken ist.
-
-Einer der Tests ist derjenige, f�r den Great Bridge bezahlt hat, und �ber
-den Sie hier lesen k�nnen:
-@uref{http://www.greatbridge.com/about/press.php?content_id=4}.
-
-Es ist wahrscheinlich der schlechteste Benchmark-Test, den wir jemals
-gesehen haben. Er war nicht nur so eingestellt, dass er das testete, was
-PostgreSQL absolut am besten kann, er war auch v�llig unfair zu jeder
-anderen Datenbank, die in diesen Test einbezogen wurde.
-
-@strong{ACHTUNG}: Wir wissen, dass niemand der haupts�chlichen
-PostgreSQL-Entwickler die Art mochte, wie Great Bridge den Test
-durchgef�hrt hat, daher geben wir ihnen keinerlei Schuld daf�r.
-
-Dieser Benchmark wurde in einer Menge Postings und Newsgroups verurteilt,
-daher beschr�nken wir uns hier darauf, kurz einige Dinge zu wiederholen,
-die dabei nicht stimmten.
-
-@itemize @bullet
-@item
-Die Tests wurden mit einem teuren, kommerziellen Werkzeug durchgef�hrt, was es
-f�r ein Open-Source-Unternehmen wie uns unm�glich macht, den Benchmark zu
-verifizieren, selbst einfach nur zu �berpr�fen, wie der Benchmark
-eigentlich durchgef�hrt wurde. Das Werkzeug ist nicht einmal ein echtes
-Benchmark-Werkzeug, sondern vielmehr ein Applikations-/Setup-Test-Werkzeug. Darauf
-als ``Standard''-Benchmark-Werkzeug Bezug zu nehmen hei�t, es mit der Wahrheit
-nicht so genau zu nehmen.
-
-@item
-Great Bridge hat zugegeben, dass sie die PostgreSQL-Datenbank optimiert
-haben (mit @code{VACUUM()} vor dem Test) und dass sie das Starten vor dem
-Test getuned haben, etwas, das sie f�r keine der anderen getesteten
-Datenbanken gemacht haben. Dazu hei�t es: ``Dieser Prozess optimiert
-Indexe und gibt etwas Festplattenspeicher frei. Die optimierten Indexe
-steigern die Performance um etliches.'' Unsere Benchmarks zeigen deutlich,
-dass der Unterschied bei einer gro�en Menge von Selects auf eine Datenbank
-mit und ohne @code{VACUUM()} leicht Faktor zehn betragen kann.
-
-@item
-Die Testergebnisse waren ebenfalls merkw�rdig. Die AS3AP-Test-Dokumentation
-erw�hnt, dass der Test ``Auswahlen, einfache Verkn�pfungen, Projektionen,
-Aggregierungen, 1-Tupel-Updates und Massen-Updates'' durchf�hrt.
-
-PostgreSQL ist gut bei der Durchf�hrung von @code{SELECT}s und @code{JOIN}s
-(speziell nach einem @code{VACUUM()}), performt aber nicht so gut bei
-@code{INSERT}s oder @code{UPDATE}s. Die Benchmarks scheinen anzuzeigen,
-dass nur @code{SELECT}s durchgef�hrt wurden (oder sehr wenige Updates). Das
-w�rde die guten Ergebnisse f�r PostgreSQL in diesem Test erkl�ren. Etwas
-weiter unten wird erl�utert, wie es zu den schlechten Ergebnissen f�r MySQL
-kam.
-
-@item
-Sie lie�en den so genannten Benchmark von einer Windows-Maschine zu einer
-Linux-Maschine �ber ODBC laufen, was ein normaler Datenbankbenutzer nie
-machen w�rde, wenn er eine unter hoher Last laufende
-Mehrbenutzer-Applikation laufen lassen w�rde. Dadurch wurde eher der
-ODBC-Treiber und das benutzte Windows-Protokoll zwischen den Clients
-getestet als die Datenbank selbst.
-
-@item
-Als Sie die Datenbank mit Oracle und MS-SQL betrieben (Great Bridge hat
-indirekt angedeutet, dass das die Datenbanken waren, die im Test benutzt
-wurden), benutzten sie nicht das native Protokoll, sondern statt dessen
-ODBC. Jeder, der jemals Oracle benutzt hat, wei�, dass alle echten
-Applikationen die native Schnittstelle anstatt ODBC benutzen. Einen Test
-mit ODBC fahren und erkl�ren, dass das irgend etwas mit Situationen des
-echten Lebens zu tun hat, kann kaum als fair erachtet werden. Sie h�tten
-zwei Tests fahren sollen: einen mit und einen ohne ODBC, um die korrekten
-Fakten zu ermitteln (nat�rlich, nachdem sie Experten geholt h�tten, die
-alle getesteten Datenbanken optimal eingestellt h�tten).
-
-@item
-Sie verweisen auf die TPC-C-Tests, erw�hnen aber an keiner Stelle, dass der
-Test, den sie fuhren, kein echter TPC-C-Test war und dass es ihnen nicht
-einmal erlaubt ist, das einen TPC-C-Test zu nennen. Ein TPC-C-Test darf nur
-nach den Regeln durchgef�hrt werden, die vom TPC-Rat (TPC Council)
-festgelegt wurden (@uref{http://www.tpc.org}). Great Bridge hat das nicht
-getan. Damit haben sie sowohl das Markenzeichen TPC verletzt als auch ihre
-eigenen Benchmarks in Misskredit gebracht. Die Regeln, die vom TPC-Rat
-aufgestellt wurden, sind sehr streng, um sicherzustellen, dass niemand
-falsche Ergebnisse produziert oder nicht beweisbare Erkl�rungen abgibt.
-Offensichtlich hat das Great Bridge nicht interessiert.
-
-@item
-Nach dem ersten Test haben wir Kontakt mit Great Bridge aufgenommen und
-ihnen gegen�ber einige der offensichtlichen Fehler erw�hnt, die sie bei
-MySQL gemacht haben:
-
-@itemize @minus
-@item
-Sie haben MySQL mit einer Debug-Version unseres ODBC-Treibers laufen
-lassen.
-
-@item
-Sie haben MySQL auf einem Linux-System laufen lassen, das nicht f�r Threads
-optimiert war.
-
-@item
-Sie haben eine alte MySQL-Version zu einem Zeitpunkt benutzt, als eine
-empfohlene neuere bereits verf�gbar war.
-
-@item
-Sie haben MySQL nicht mit den richtigen Optionen f�r hohe Last und
-Mehrbenutzerbetrieb gestartet (die vorgabem��ige Installation von MySQL
-ist auf minimalen Ressourcenverbrauch eingestellt).
-@end itemize
-
-Great Bridge hat einen neuen Test gefahren, wobei zwar unsere optimierten
-ODBC-Treiber und bessere Startoptionen f�r MySQL benutzt wurden, weigerte
-sich aber, entweder unsere aktualisierte glibc-Bibliothek oder unsere
-Standard-Bin�rversion (von mehr als 80% unserer Benutzer genutzt) zu
-verwenden, sondern benutzte statt dessen eine statisch gelinkte feste
-glibc-Bibliothek.
-
-Nach allem, was wir wissen, hat Great Bridge nichts getan, um
-sicherzustellen, dass die anderen Datenbanken korrekt konfiguriert wurden,
-um in ihrer Testumgebung gut zu laufen. Wir sind jedoch sicher, dass sie
-weder Oracle noch Microsoft kontaktiert haben, um sie um Rat in dieser
-Angelegenheit zu bitten ;)
-
-@item
-Der Benchmark wurde von Great Bridge bezahlt und sie beschlossen, nur
-teilweise, ausgew�hlte Ergebnisse zu ver�ffentlichen (statt alles publik zu
-machen).
-@end itemize
-
-Tim Perdue, seit langer Zeit PostgreSQL-Fan und ein widerwilliger
-MySQL-Benutzer, hat einen Vergleich auf
-@uref{http://www.phpbuilder.com/columns/tim20001112.php3,phpbuilder}
-ver�ffentlicht.
-
-Als wir von diesem Vergleich erfuhren, telefonierten wir mit Tim Perdue zu
-diesem Thema, weil es eine Menge merkw�rdiger Dinge in seinen Ergebnissen
-gab. Er behauptete zum Beispiel, dass MySQL bei seinem Test ein Problem mit
-f�nf Benutzern hatte, w�hrend wir wissen, dass es Benutzer mit �hnlichen
-Maschinen wie seine gibt, die MySQL mit 2000 simultanen Verbindungen
-betreiben, die 400 Anfragen pro Sekunde abarbeiten. (In diesem Fall war die
-Beschr�nkung durch die Web-Bandbreite gegeben, nicht durch die Datenbank.)
-
-Es schien, als h�tte er einen Linux-Kernel benutzt, der entweder Probleme
-mit vielen Threads hatte, wie ein Kernel vor Version 2.4, der ein Problem
-mit vielen Threads auf Mehrprozessor-Maschinen hat. Wir haben in diesem
-Handbuch dokumentiert, wie man das behebt, und Tim sollte sich dieses
-Problems bewusst sein.
-
-Das andere m�gliche Problem k�nnte eine alte glibc-Bibliothek gewesen sein,
-und dass Tim keine MySQL-Bin�rdistribution von unserer Site benutzte, die
-mit einer korrigierten glibc-Bibliothek gelinkt ist, sondern statt dessen
-eine eigene Version kompiliert hat. Bei jedem der genannten F�lle w�rden
-die Symptome genau die sein, die Tim gemessen hat.
-
-Wir haben Tim gebeten, uns Zugang zu seinen Daten zu geben, damit wir den
-Benchmark-Test wiederholen k�nnten, sowie die MySQL-Version auf seiner
-Maschine zu pr�fen, um herauszufinden, was falsch lief, und er hat
-versprochen, uns entsprechende Mitteilung zu geben. Das hat er bis heute
-nicht gemacht.
-
-Aus diesem Grund k�nnen wir auch diesem Benchmark in keiner Weise vertrauen
-:(
-
-Im Zeitverlauf haben sich die Dinge auch ge�ndert und die genannten
-Benchmarks sind nicht mehr so relevant. MySQL hat mittlerweile eine Reihe
-unterschiedlicher Tabellen-Handler mit unterschiedlichen Verh�ltnissen
-zwischen Geschwindigkeit und Anzahl gleichzeitiger Zugriffe
-(Speed/Concurrency Tradeoffs). @xref{Table types}. Es w�re interessant zu
-sehen, wie die obigen Tests mit den verschiedenen transaktionalen Tabellen
-von MySQL laufen w�rden. PostgreSQL hat nat�rlich auch neue Features
-erhalten, seit die Tests durchgef�hrt wurden. Weil die genannten Tests
-nicht �ffentlich erh�ltlich sind, gibt es keine M�glichkeit f�r uns
-herauszufinden, wie die Datenbank heute mit denselben Tests laufen w�rde.
-
-
-Fazit:
-
-Der einzige Benchmark, der heutzutage existiert, den jeder herunter laden
-und laufen lassen kann, um MySQL und PostgreSQL zu vergleichen, ist der
-MySQL-Benchmark-Test. Wir hier bei MySQL sind der �berzeugung, dass
-Open-Source-Datenbanken mit Open-Source-Werkzeuge getestet werden sollten! Das
-ist die einzige M�glichkeit, um sicherzustellen, dass niemand Tests f�hrt,
-die nicht reproduzierbar sind, und diese dazu benutzt, um zu behaupten,
-dass eine Datenbank besser sei als die eine andere. Ohne die Fakten zu
-kennen ist es unm�glich, auf die Behauptungen des Testers einzugehen.
-
-Eine Sache, die wir merkw�rdig finden, ist, dass jeder Test, den wir zu
-PostgreSQL gesehen haben - und wo es unm�glich ist, diesen zu wiederholen
--, behauptet, dass PostgreSQL in den meisten Hinsichten besser sei, w�hrend
-unsere Tests, die jeder reproduzieren kann, eindeutig das Gegenteil
-beweisen. Damit wollen wir nicht sagen, dass PostgreSQL nicht vieles sehr
-gut kann (das kann es!) oder dass es nicht unter bestimmten Umst�nden
-schneller ist als MySQL. Wir w�rden nur gern einen fairen Test sehen, der
-zeigt, worin PostgreSQL sehr gut ist, damit wir einen freundlichen
-Wettbewerb anzetteln k�nnen!
-
-Mehr Informationen �ber unsere Benchmark-Suite finden Sie unter @xref{MySQL Benchmarks}.
-
-Wir arbeiten an einer noch besseren Benchmark-Suite, die Mehrbenutzer-Tests
-beinhaltet sowie eine bessere Dokumentation dessen, was die einzelnen Tests
-genau tun und wie man weitere Tests zur Suite hinzuf�gt.
-
-@node Installing, Tutorial, Deutsch, Top
-@c German node Installation
-@chapter Installation von MySQL
-
-@cindex Installation, �berblick
-
-
-Dieses Kapitel beschreibt, woher man MySQL bezieht und wie man MySQL
-installiert:
-
-@itemize @bullet
-@item
-Eine Liste der Site, von denen Sie MySQL beziehen k�nnen, finden Sie unter
-@ref{Getting MySQL, , Wie man MySQL erh�lt}.
-
-@item
-@c German FIX unsplit @ref
-Um festzustellen, welche Plattformen unterst�tzt werden, siehe
-@ref{Which OS}. Beachten Sie bitte, dass nicht alle
-unterst�tzten Systeme gleich gut
-sind, um MySQL laufen zu lassen. Auf einigen l�uft es sehr viel robuster
-und effizienter als auf anderen - siehe @ref{Which OS} f�r
-Details.
-
-@item
-Mehrere Versionen von MySQL sind sowohl als Bin�r- als auch als
-Quellcode-Distributionen erh�ltlich. Wir stellen auch �ffentlichen Zugriff
-auf unseren aktuellen Quellcode-Baum f�r diejenigen zur Verf�gung, die die
-aktuellsten Entwicklungen sehen und uns helfen wollen, neuen Code zu
-testen. Um festzustellen, welche Version und welche Art von Distribution Sie
-benutzen sollten, siehe @ref{Which version}. Im Zweifelsfall benutzen Sie
-die Bin�rdistribution.
-
-@item
-Installationsanleitungen f�r Bin�r- und Quelldistributionen sind
-beschrieben in @ref{MySQL binaries} und @ref{Installing source}. Jede
-Anleitung enth�lt einen Abschnitt �ber System-spezifische Probleme, denen
-Sie begegnen k�nnen.
-
-@item
-Prozeduren, die nach der Installation durchgef�hrt werden sollen / m�ssen,
-finden Sie unter @ref{Post-installation}. Diese Prozeduren gelten, egal ob
-Sie MySQL von einer Bin�r- oder einer Quellcode-Distribution installieren.
-@end itemize
-
-
-@menu
-* Quick Standard Installation::
-* General Installation Issues::
-* Installing source::
-* Post-installation::
-* Upgrade::
-* Operating System Specific Notes::
-* Perl support::
-@end menu
-
-@node Quick Standard Installation, General Installation Issues, Installing, Installing
-@c German node Schnelle Standard-Installation
-@section Schnelle Standard-Installation von MySQL
-
-@c This node name ist special
-
-
-@menu
-* Linux-RPM::
-* Windows installation::
-@end menu
-
-@node Linux-RPM, Windows installation, Quick Standard Installation, Quick Standard Installation
-@c German node Linux-RPM
-@subsection MySQL auf Linux installieren
-
-@cindex RPM-Datei
-@cindex RedHat Package Manager
-
-Die empfohlene Vorgehensweise f�r die Installation von MySQL auf Linux ist
-die Benutzung einer RPM-Datei. Die MySQL-RPMs werden aktuell auf einer
-RedHat-Version 6.2 gebaut, sollten aber auch auf anderen Linux-Versionen
-funktionieren, die @code{rpm} unterst�tzen und @code{glibc} benutzen.
-
-Wenn Sie Probleme mit einer RPM-Datei haben, wenn Sie beispielsweise den
-Fehler ``@code{Sorry, the host 'xxxx' could not be looked up}'' erhalten,
-sehen Sie bitte unter @ref{Linux-RPM} nach.
-
-Die RPM-Dateien, die Sie benutzen sollten, sind:
-
-@itemize @bullet
-@item @code{MySQL-VERSION.i386.rpm}
-
-Der MySQL-Server. Sie brauchen diese, es sei denn, Sie wollen sich
-lediglich mit einem MySQL-Server verbinden, der auf einer anderen Maschine
-l�uft.
-
-@item @code{MySQL-client-VERSION.i386.rpm}
-
-Die Standard-MySQL-Client-Programme. Dieses Paket sollten Sie wohl immer
-installieren.
-
-@item @code{MySQL-bench-VERSION.i386.rpm}
-
-Tests und Benchmarks. Erfordert Perl und msql-mysql-modules RPMs.
-
-@item @code{MySQL-devel-VERSION.i386.rpm}
-
-Bibliotheken und Include-Dateien, die ben�tigt werden, wenn Sie andere
-MySQL-Clients kompilieren wollen, beispielsweise Perl-Module.
-
-@item @code{MySQL-VERSION.src.rpm}
-
-Dieses Paket enth�lt den Quelltext f�r alle obigen Pakete. Es kann auch
-dazu benutzt werden, um RPMs f�r andere Architekturen zu bauen (zum
-Beispiel f�r Alpha oder SPARC).
-@end itemize
-
-Um alle Dateien in einem RPM-Paket zu sehen, geben Sie folgendes ein:
-@example
-shell> rpm -qpl MySQL-VERSION.i386.rpm
-@end example
-
-Um eine minimale Standard-Installation durchzuf�hren, geben Sie folgendes
-ein:
-
-@example
-shell> rpm -i MySQL-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm
-@end example
-
-Um nur das Client-Paket zu installieren, geben Sie folgendes ein:
-
-@example
-shell> rpm -i MySQL-client-VERSION.i386.rpm
-@end example
-
-Das RPM legt Dateien in @file{/var/lib/mysql} ab. Ausserdem erzeugt das RPM
-die entsprechenden Eintr�ge in @file{/etc/rc.d/}, um den Server beim Booten
-automatisch zu starten. (Falls Sie bereits vorher eine Installation
-durchgef�hrt haben, bedeutet das, dass Sie eine Kopie Ihrer vorher
-installierten MySQL-Startdateien machen sollten, falls Sie darin �nderungen
-vorgenommen haben, damit Sie diese �nderungen nicht verlieren.)
-
-Nach der Installation der RPM-Datei(en) sollte der @code{mysqld}-Daemon
-laufen und Sie sollten jetzt in der Lage sein, mit der Benutzung von MySQL
-zu beginnen. @xref{Post-installation}.
-
-Wenn etwas schief geht, finden Sie weitere Informationen im Kapitel �ber
-die Bin�r-Installationen. @xref{MySQL binaries}.
-
-@node Windows installation, , Linux-RPM, Quick Standard Installation
-@c German node Windows-Installation
-@subsection Installation von MySQL unter Windows
-
-Der MySQL-Server f�r Windows ist in zwei Distributionstypen erh�ltlich:
-@enumerate
-@item
-Die Bin�rdistribution enth�lt ein Setup-Programm, das alles Ben�tigte
-installiert, so dass Sie den Server sofort starten k�nnen.
-@item
-Die Quelldistribution enth�lt den gesamten Code und
-Unterst�tzungsdateien, um die ausf�hrbaren Dateien unter Benutzung des
-VC++-6.0-Kompilers zu bauen.
-@xref{Windows source build}.
-@end enumerate
-
-Im Allgemeinen sollten Sie die Bin�rdistribution benutzen.
-
-Sie ben�tigen folgendes:
-@itemize @bullet
-@item
-Ein Windows-32-Bit-Betriebssystem der Familien Windows 9x, ME, NT oder
-Windows 2000. Die NT-Familie gestattet, den MySQL-Server als
-Systemdienst laufen zu lassen. @xref{NT start}.
-
-Wenn Sie Tabellen benutzen, die gr��er als 4 GB sind, sollten Sie MySQL
-auf NTFS oder einem neueren Dateisystem installieren. Vergessen Sie bei
-der Erzeugung der Tabellen nicht, @code{MAX_ROWS} und
-@code{AVG_ROW_LENGTH} zu benutzen. @xref{CREATE TABLE}.
-@item
-TCP/IP-Protokollunterst�tzung.
-@item
-Die MySQL-Bin�r- oder Quelldistribution f�r Windows kann von
-@uref{http://www.mysql.com/downloads/} herunter geladen werden.
-
-Hinweis: Die Distributionsdateien werden in einem komprimierten Format
-zur Verf�gung gestellt. Wir empfehlen die Benutzung eines FTP-Clients,
-der in der Lage ist, abgebrochene FTP-Downloads wieder aufzunehmen
-(resume).
-@item
-Ein @code{ZIP}-Programm, um die Distributionsdatei zu entpacken.
-@item
-Genug Platz auf der Festplatte, um die Datenbanken entsprechend Ihren
-Anforderungen zu entpacken, zu installieren und zu erzeugen.
-@item
-Wenn Sie planen, sich �ber @code{ODBC} mit dem MySQL-Server zu
-verbinden, ben�tigen Sie zus�tzlich den @code{MyODBC}-Treiber.
-@xref{ODBC}.
-@end itemize
-
-
-
-@menu
-* Windows binary installation::
-@end menu
-
-@node Windows binary installation, , Windows installation, Windows installation
-@c German node Windows-Bin�rinstallation
-@subsubsection Bin�rdateien installieren
-
-@enumerate
-@item
-Wenn Sie auf einem NT- oder Windows-2000-Server arbeiten, melden Sie
-sich als Benutzer mit Administrationsrechten an.
-@item
-Wenn Sie ein Upgrade einer fr�heren MySQL-Installation durchf�hren,
-m�ssen Sie den Server anhalten. Wenn Sie den Server als Systemdienst
-laufen lassen, geben Sie ein:
-
-@example
-C:\> NET STOP MySQL
-@end example
-
-Ansonsten geben Sie folgendes ein:
-
-@example
-C:\mysql\bin> mysqladmin -u root shutdown
-@end example
-
-@item
-Auf NT-/Windows-2000-Maschinen m�ssen Sie auch den Systemdienst
-entfernen, wenn Sie die ausf�hrbare Datei des Servers (z. B. -max or -nt) austauschen wollen:
-
-@example
-C:\mysql\bin> mysqld-max-nt --remove
-@end example
-
-@item
-Entpacken Sie die Distributionsdatei in ein tempor�res Verzeichnis.
-@item
-Starten Sie @file{setup.exe}, um den Installationsprozess zu beginnen.
-Wenn Sie in ein anderes Verzeichnis als das vorgabem��ige
-(@file{c:\mysql}) installieren wollen, legen Sie mit der Schaltfl�che
-@code{Durchsuchen} das gew�nschte Verzeichnis fest.
-@item
-Beenden Sie den Installationsprozess.
-@end enumerate
-
-
-Seit MySQL 3.23.38 enth�lt die Windows-Distribution sowohl die normalen als
-auch die @strong{MySQL-Max}-Bin�rdateien. Der wichtigste Vorteil der
-Benutzung der normalen @code{mysqld.exe}-Bin�rdatei liegt darin, dass sie
-etwas schneller ist und weniger Ressourcen belegt.
-
-Hier ist eine Liste der unterschiedlichen MySQL-Server, die Sie benutzen
-k�nnen:
-@multitable @columnfractions .25 .75
-@item @code{mysqld} @tab Kompiliert mit komplettem Debugging und automatischer �berpr�fung der Speicherzuordnung (memory allocation), symbolischen Links, InnoDB- und BDB-Tabellen.
-@item @code{mysqld-opt} @tab Optimierte Bin�rdistribution ohne Unterst�tzung von Transaktionstabellen.
-@item @code{mysqld-nt} @tab Optimierte Bin�rdatei f�r NT mit Unterst�tzung von Named Pipes. Man kann diese Version auf Windows 98 laufen lassen, aber in diesem Fall werden keine Named Pipes angelegt und man muss TCP/IP installiert haben.
-@item @code{mysqld-max} @tab Optimierte Bin�rdistribution mit Unterst�tzung symbolischer Links, InnoDB und BDB-Tabellen.
-@item @code{mysqld-max-nt} @tab Wie @code{mysqld-max}, aber mit Unterst�tzung von Named Pipes kompiliert.
-@end multitable
-
-Alle genannten Bin�rdistributionen sind f�r den Pentium Pro Prozessor
-optimiert, sollten aber auf jedem Intel-Prozessor >= 386 laufen.
-
-ACHTUNG: Wenn Sie InnoDB-Tabellen benutzen wollen, m�ssen Sie bestimmte
-Start-Optionen in Ihrer @file{my.ini}-Datei festlegen! @xref{InnoDB start}.
-
-
-@node General Installation Issues, Installing source, Quick Standard Installation, Installing
-@c German node Allgemeine Installationsthemen
-@section Allgemeine Installationsthemen
-
-@c @node Methods of Installation, , ,
-@c @subsection Installationsmethoden
-
-@c FIX: this needs to be written?
-
-
-
-@menu
-* Getting MySQL::
-* Which OS::
-* Which version::
-* Installation layouts::
-* Many versions::
-* MySQL binaries::
-@end menu
-
-@node Getting MySQL, Which OS, General Installation Issues, General Installation Issues
-@c German node Wie man MySQL erh�lt
-@subsection Wie man MySQL erh�lt
-
-@cindex Download
-@cindex MySQL-Version
-@cindex Version, aktuelle
-@cindex Wie man MySQL erh�lt
-@cindex Mirror-Sites
-@cindex URLS zum Download von MySQL
-
-Sehen Sie wegen Informationen zur aktuellen Version und f�r
-Download-Anweisungen auf @uref{http://www.mysql.com/, MySQL home page}
-nach.
-
-Unser Haupt-Mirror-Server f�r den Download ist hier:
-
-@uref{http://mirrors.sunsite.dk/mysql/}
-
-Wenn Sie Interesse haben, eine MySQL-Mirror-Site beizusteuern, k�nnen Sie
-anonymes rsync mit @code{rsync://sunsite.dk/ftp/mirrors/mysql/} machen.
-Schicken Sie bitte eine E-Mail an @email{webmaster@@mysql.com} und geben
-Sie uns Bescheid, wo Ihr Mirror liegt, damit wir ihn der unten stehenden
-Liste hinzuf�gen k�nnen.
-
-Wenn Sie Probleme beim Download von unserer Hauptseite aus haben, probieren
-Sie eine der unten stehenden Mirror-Sites.
-
-Geben Sie bitte @email{webmaster@@mysql.com} Bescheid, wenn Sie auf
-schlechte oder veraltete Mirror-Sites sto�en.
-
-@c START_OF_MIRROR_LISTING
-
-@c German FIX added include of mirror listing (old German text was bad Texinfo)
-
-@c Mirrors list is created by PHP script (that really needs to be documented!) from database (tfr@mysql.com)
-@include mirrors.texi
-
-@c END_OF_MIRROR_LISTING
-
-
-@node Which OS, Which version, Getting MySQL, General Installation Issues
-@c German node Welches Betriebssystem
-@subsection Betriebssysteme, die von MySQL unterst�tzt werden
-
-@cindex Betriebssysteme, unterst�tzte
-@cindex Native Thread-Unterst�tzung
-@cindex Thread-Unterst�tzung
-@cindex Prozess-Unterst�tzung
-@cindex Unterst�tzung, f�r Betriebssysteme
-
-Wir benutzen GNU Autoconf, daher ist es m�glich, MySQL auf alle modernen
-Betriebssysteme zu portieren, auf denen Posix-Threads und ein C++-Kompiler
-funktionieren. (Um nur den Client-Code zu kompilieren, wir lediglich ein
-C++-Kompiler ben�tigt.) Wir benutzen und entwickeln die Software selbst
-haupts�chlich auf Sun Solaris (Versionen 2.5 - 2.7) und SuSE Linux Version
-7.x.
-
-Beachten Sie, dass die native Thread-Unterst�tzung f�r viele
-Betriebssysteme nur mit den neuesten Versionen funktioniert. Es wurde
-berichtet, dass MySQL erfolgreich auf folgenden Betriebssystemen /
-Thread-Paket-Kombinationen kompiliert wurde:
-
-@itemize @bullet
-@item
-AIX 4.x mit nativen Threads. @xref{IBM-AIX}.
-@item
-Amiga.
-@item
-BSDI 2.x mit enthaltenem MIT-pThreads-Paket. @xref{BSDI}.
-@item
-BSDI 3.0, 3.1 und 4.x mit nativen Threads. @xref{BSDI}.
-@item
-DEC Unix 4.x mit nativen Threads. @xref{Alpha-DEC-UNIX}.
-@item
-FreeBSD 2.x mit enthaltenem MIT-pThreads-Paket. @xref{FreeBSD}.
-@item
-FreeBSD 3.x und 4.x mit nativen Threads. @xref{FreeBSD}.
-@item
-HP-UX 10.20 mit enthaltenem MIT-pThreads-Paket. @xref{HP-UX 10.20}.
-@item
-HP-UX 11.x mit nativen Threads. @xref{HP-UX 11.x}.
-@item
-Linux 2.0+ mit LinuxThreads 0.7.1+ oder @code{glibc} 2.0.7+. @xref{Linux}.
-@item
-Mac OS X Server. @xref{Mac OS X}.
-@item
-NetBSD 1.3/1.4 Intel und NetBSD 1.3 Alpha (ben�tigt GNU make). @xref{NetBSD}.
-@item
-OpenBSD > 2.5 mit nativen Threads. OpenBSD < 2.5 mit enthaltenem
-MIT-pThreads-Paket. @xref{OpenBSD}.
-@item
-OS/2 Warp 3, FixPack 29 und OS/2 Warp 4, FixPack 4. @xref{OS/2}.
-@item
-SGI Irix 6.x mit nativen Threads. @xref{SGI-Irix}.
-@item
-Solaris 2.5 und h�her mit nativen Threads auf SPARC und x86. @xref{Solaris}.
-@item
-SunOS 4.x mit enthaltenem MIT-pThreads-Paket. @xref{Solaris}.
-@item
-Caldera (SCO) OpenServer mit einem aktuellen Port des FSU-PThreads-Pakets. @xref{Caldera}.
-@item
-Caldera (SCO) UnixWare 7.0.1. @xref{Caldera Unixware}.
-@item
-Tru64 Unix
-@item
-Windows 95, Windows 98, NT und Windows 2000. @xref{Windows}.
-@end itemize
-
-Beachten Sie, dass nicht alle Plattformen gleicherma�en gut geeignet sind,
-um MySQL laufen zu lassen. Wie gut eine bestimmte Plattform f�r hohe Last
-und gesch�ftskritische Anwendungen geeignet ist, h�ngt von folgenden
-Faktoren ab:
-
-@itemize @bullet
-@item
-Allgemeine Stabilit�t der Thread-Bibliothek. Eine Plattform mag in anderer
-Hinsicht einen exzellenten Ruf haben, aber wenn die Thread-Bibliothek
-unstabil ist, die von MySQL aufgerufen wird, l�uft MySQL nur so stabil wie
-die Thread-Bibliothek, selbst wenn alles Sonstige perfekt ist.
-
-@item
-F�higkeit des Kernels und / oder der Thread-Bibliothek, die Vorteile von
-@strong{SMP} auf Mehrprozessor-Systemen wahrzunehmen. Mit anderen Worten:
-Wenn ein Prozess einen Thread anlegen, sollte es f�r diesen Thread m�glich
-sein, auf anderen Prozessoren zu laufen als der Original-Prozess.
-
-@item
-F�higkeit des Kernels und / oder der Thread-Bibliothek, viele Threads
-laufen zu lassen, die h�ufig einen Mutex �ber eine kurze, kritische Region
-anlegen / l�sen k�nnen ohne exzessive Kontext-Umschaltungen. Mit anderen
-Worten: Wenn die Implementation von @code{pThread_mutex_lock()} zu sehr
-darauf bedacht ist, CPU zu erlangen, wird das MySQL gewaltig schmerzen.
-Wenn man sich dieser Tatsache nicht bewusst ist, machen zus�tzliche
-Prozessoren MySQL in der Tat langsamer.
-
-@item
-Allgemeine Stabilit�t und Performance des Dateisystems.
-
-@item
-F�higkeit des Dateisystems, �berhaupt mit gro�en Dateien umgehend zu
-k�nnen, und zwar effizient, wenn Ihre Tabellen Gro� sind.
-
-@item
-Unser Grad von Erfahrung, hier bei MySQL AB, mit der Plattform. Wenn wir
-eine Plattform gut kennen, setzen wir plattformspezifische Optimierungen /
-Verbesserungen (Fixes) ein, die zur Kompilierzeit aktiv werden. Dar�ber
-hinaus k�nnen wir Sie beraten, wie Sie Ihr System optimal f�r MySQL
-konfigurieren.
-
-@item
-Umfang des Testens �hnlicher Konfigurationen, das wir intern durchgef�hrt
-haben.
-
-@item
-Anzahl von Benutzern, die MySQL auf dieser Plattform erfolgreich mit
-�hnlichen Konfigurationen haben laufen lassen. Wenn diese Zahl Gro� ist,
-ist die Wahrscheinlichkeit viel geringer, plattformspezifische
-�berraschungen zu erleben.
-@end itemize
-
-Nach den genannten Kriterien sind die besten Plattformen f�r MySQL bislang
-x86 mit SuSE Linux 7.1, 2.4 Kernel und ReiserFS (oder jede �hnliche
-Linux-Distribution) und Sparc mit Solaris 2.7 oder 2.8. FreeBSD kommt als
-drittes, aber wir hoffen wirklich, dass es zur Spitze aufschlie�t, sobald
-erst einmal die Thread-Bibliothek verbessert ist. Wir hoffen auch, dass wir
-alle anderen Plattformen, auf denen MySQL kompiliert werden kann und
-korrekt l�uft, die aber nicht ganz denselben Grad an Stabilit�t und
-Performance aufweisen, in die Spitzenkategorie aufnehmen k�nnen. Das
-erfordert von unserer Seite aus einige Kooperationsbem�hungen mit den
-Entwicklern der Betriebssystem-Bibliothek-Komponenten, von denen MySQL
-abh�ngt. Wenn Sie Interesse daran haben, eine dieser Komponenten zu
-verbessern und in der Lage sind, ihre Entwicklung zu beeinflussen, und
-detailliertere Informationen dar�ber brauchen, was MySQL ben�tigt, um
-besser zu laufen, schicken Sie eine E-Mail an
-@email{internals@@lists.mysql.com}.
-
-Beachten Sie bitte auch, dass der obige Vergleich nichts dar�ber aussagen
-will, dass ein Betriebssystem allgemein besser oder schlechter als ein
-anderes sei. Wir reden hier �ber die Auswahl eines bestimmten
-Betriebssystems f�r einen ganz bestimmten Zweck - n�mlich, MySQL laufen zu
-lassen, und vergleichen die Betriebssysteme nur in dieser Hinsicht.
-Folglich w�re das Ergebnis dieses Vergleichs ein anderes, wenn wir weitere
-Belange ber�cksichtigen w�rden. In manchen F�llen liegt der Grund, warum
-ein Betriebssystem besser als ein anderes geeignet ist, schlicht darin,
-dass wir auf dieser speziellen Plattform mehr Tests und Optimierungen
-durchgef�hrt haben. Wir stellen hier nur unsere Beobachtungen dar, um Ihnen
-bei der Entscheidung zu helfen, auf welcher Plattform Sie MySQL benutzen
-sollten.
-
-
-@node Which version, Installation layouts, Which OS, General Installation Issues
-@c German node Welche Version
-@subsection Welche MySQL-Version Sie benutzen sollten
-
-@cindex MySQL-Bin�rdistribution
-@cindex MySQL-Quelldistribution
-@cindex Release-Nummer
-@cindex Version, Auswahl
-@cindex Auswahl, einer MySQL-Version
-
-Zun�chst m�ssen Sie entscheiden, ob Sie das letzte Entwicklungs-Release
-oder das letzte stabile Release benutzen wollen:
-
-@itemize @bullet
-@item
-Normalerweise, wenn Sie MySQL zum ersten Mal benutzen, oder wenn Sie
-versuchen, MySQL auf ein System zu portieren, f�r das es keine
-Bin�rdistribution gibt, empfehlen wir, das stabile Release zu nehmen
-(aktuell Version @value{mysql_version}). Beachten Sie, dass alle
-MySQL-Releases mit den MySQL-Benchmarks und einer umfassenden Test-Suite
-getestet sind, bevor das Release heraus gegeben wird.
-
-@item
-Wenn Sie ein altes System laufen lassen und es aktualisieren m�chten, aber
-nicht riskieren wollen, dass ein Update nicht reibungslos klappt, sollten
-Sie zur aktuellsten Version des Zweiges aktualisieren, den Sie benutzen
-(bei dem nur die letzte Versionsnummer neuer ist als Ihre, also z. B. von
-3.23.36 auf 3.23.44, wenn 3.23.44 die neueste Version des Zweigs ist). Wir
-haben uns innerhalb der Versions-Zweige bem�ht, nur schwere Fehler zu
-beseitigen und kleine, relativ sichere �nderungen zu machen.
-@end itemize
-
-Als n�chstes m�ssen Sie entscheiden, ob Sie eine Quelldistribution oder
-eine Bin�rdistribution nehmen wollen. In den meisten F�llen ist es ratsam,
-eine Bin�rdistribution zu nehmen, wenn eine f�r Ihre Plattform existiert,
-weil sich diese im Allgemeinen leichter installieren l��t als eine
-Quelldistribution.
-
-In folgenden F�llen fahren Sie mit einer Quellinstallation wahrscheinlich
-besser:
-
-@itemize @bullet
-@item
-Wenn Sie MySQL an einer ganz bestimmten Stelle installieren wollen. (Die
-Standard-Bin�rdistributionen sind an jeder Stelle lauff�hig, aber
-vielleicht wollen Sie noch mehr Flexibilit�t haben.)
-
-@item
-Um unterschiedlichen Bed�rfnissen von Benutzern entgegen zu kommen, stellen
-wir zwei unterschiedliche Bin�rversionen zur Verf�gung: Eine, die mit den
-nicht transaktionalen Tabellen-Handlern kompiliert ist (eine kleine,
-schnelle Bin�rdatei), sowie eine, die mit den wichtigsten erweiterten
-Optionen wie transaktionssicheren Tabellen kompiliert ist. Beide Versionen
-sind aus derselben Quelldistribution kompiliert. Alle nativen
-@code{MySQL}-Clients k�nnen sich mit beiden MySQL-Versionen verbinden.
-
-Die erweiterte MySQL-Bin�rdistribution ist mit dem @code{-max}-Suffix
-gekennzeichnet und ist mit denselben Optionen konfiguriert wie
-@code{mysqld-max}. @xref{mysqld-max, , @code{mysqld-max}}.
-
-Wenn Sie das @code{MySQL-Max}-RPM benutzen wollen, m�ssen Sie zuerst das
-Standard-@code{MySQL}-RPM installieren.
-
-@item
-Wenn Sie @code{mysqld} mit einigen zus�tzlichen Features konfigurieren
-wollen, die NICHT in den Standard-Bin�rdistributionen enthalten sind. Hier
-ist eine Liste der gebr�uchlichsten Zusatzoptionen, die Sie vielleicht
-nutzen wollen:
-
-@itemize @bullet
-@item @code{--with-berkeley-db}
-@item @code{--with-innodb}
-@item @code{--with-raid}
-@item @code{--with-libwrap}
-@item @code{--with-named-z-lib (ist in einigen Bin�rdateien enthalten)}
-@item @code{--with-debug[=full]}
-@end itemize
-
-@item
-Die vorgabem��ige Bin�rdistribution wird normalerweise mit Unterst�tzung
-f�r alle Zeichens�tze kompiliert und sollte auf einer Vielzahl von
-Prozessoren derselben Prozessorfamilie laufen.
-
-Wenn Sie einen schnelleren MySQL-Server erhalten wollen, k�nnen Sie ihn
-erneut kompilieren und nur die Zeichens�tze benutzen, die Sie brauchen. Sie
-k�nnen auch einen besseren Kompiler (wie @code{pgcc}) oder andere
-Kompilieroptionen benutzen, die besser auf Ihren Prozessor optimiert sind.
-
-@item
-Wenn Sie einen Bug gefunden und dem MySQL-Entwicklungsteam mitgeteilt
-haben, werden Sie wahrscheinlich einen Patch erhalten, den Sie mit der
-Quelldistribution verwenden m�ssen, um den Bug zu beheben.
-
-@item
-Wenn Sie den C- und C++-Code lesen (und / oder �ndern) wollen, aus dem
-MySQL besteht, m�ssten Sie eine Quelldistribution laden. Der Quellcode ist
-immer das ''letzte Handbuch''. Quelldistributionen enthalten auch mehr
-Tests und Beispiele als Bin�rdistributionen.
-@end itemize
-
-@cindex naming, releases of MySQL
-@cindex Releases, Benennungsschema
-
-Das MySQL Benennungsschema benutzt Release-Nummern, die aus drei Zahlen und
-einem Suffix bestehen. Ein Release-Name wie @code{mysql-3.21.17-beta} zum
-Beispiel wird wie folgt interpretiert:
-
-@itemize @bullet
-@item
-Die erste Zahl (@code{3}) beschreibt das Dateiformat. Alle
-Version-3-Releases haben dasselbe Dateiformat.
-
-@item
-Die zweite Zahl (@code{21}) ist die Release-Ebene (Level). Normalerweise
-kann man hier zwischen zweien ausw�hlen. Einer ist der stabile Zweig des
-Releases (aktuell @code{23}), der andere ist der Entwicklungs-Zweig
-(aktuell @code{4.0}). Normalerweise sind beide stabil, aber die
-Entwicklungsversion kann Macken oder fehlende Dokumentation neuer Features
-haben oder sich auf einigen Systemen nicht kompilieren lassen.
-
-@item
-Die dritte Zahl (@code{17}) ist die Versionsnummer innerhalb der
-Release-Ebene. Diese wird f�r jede neue Distribution hochgez�hlt.
-�blicherweise werden Sie die neueste Version der Release-Ebene einsetzen
-wollen, die Sie gew�hlt haben.
-
-@item
-Das Suffix (@code{beta}) zeigt den Stabilit�tsgrad des Releases an.
-M�gliche Suffixe sind:
-
-@itemize @minus
-@item
-@code{alpha} zeigt an, dass das Release gr��ere Abschnitte von neuem Code
-enth�lt, der noch nicht zu 100% getestet wurde. Bekannte Bugs
-(�blicherweise gibt es keine) sind im News-Abschnitt dokumentiert.
-@xref{News}. In den meisten Alpha-Releases gibt es neue Befehle und
-Erweiterungen. Bei einem Alpha-Release k�nnen durch aktive
-Weiterentwicklung gr��ere Code-�nderungen vorkommen, aber alles wird
-getestet, bevor ein Release ver�ffentlicht wird. Es sollte in keinem
-MySQL-Release bekannte Bugs geben.
-
-@item
-@code{beta} bedeutet, dass jeglicher neue Code getestet wurde. Es wurden
-keine neuen Features hinzugef�gt, die bei altem Code Probleme verursachen
-k�nnten. Es sollte keine bekannten Bugs geben. Eine Version wird von Alpha
-auf Beta gesetzt, wenn innerhalb der Alpha-Version mindestens einen Monat
-lang keine schweren Fehler mehr berichtet wurden. Wir planen f�r eine
-solche Version dann keine neuen Features mehr, die einen alten Befehl
-unzuverl�ssiger machen k�nnten.
-
-@item
-@code{gamma} ist eine Beta-Version, die eine ganze Weile draussen war und
-offensichtlich gut funktioniert. Nur kleinere Problembehebungen wurden
-hinzugef�gt. So etwas nennen viele andere Unternehmen ein Release.
-
-@item
-Wenn eine Version kein Suffix besitzt, bedeutet das, dass diese Version
-schon eine ganze Weile auf vielen unterschiedlichen Sites eingesetzt wird,
-wobei keine Bugs ausser plattformspezifischen Bugs berichtet wurden. F�r
-ein solches Release werden nur kritische Fehlerbehebungen durchgef�hrt. So
-etwas nennen wir ein stabiles Release.
-@end itemize
-@end itemize
-
-Alle Versionen von MySQL laufen durch unsere Standard-Tests und
--Benchmarks, um sicherzustellen, dass man sie relativ sicher benutzen kann.
-Weil die Standard-Tests im Laufe der Zeit erweitert werden, um auf alle
-fr�her gefundenen Bugs zu pr�fen, wird die Test-Suite immer besser.
-
-@cindex releases, testing
-@cindex Testen, von MySQL-Releases
-
-Beachten Sie, dass alle Releases mindestens wie folgt getestet wurden:
-
-@table @asis
-@item Mit der internen Test-Suite
-Diese ist Teil unseres Produktionssystems f�r einen Kunden. Sie besitzt
-viele Tabellen mit Hunderten Megabytes an Daten.
-
-@item Mit der MySQL-Benchmark-Suite
-Diese l��t eine Reihe gebr�uchlicher Anfragen laufen. Das ist zus�tzlich
-ein Test darauf, ob die letzten Optimierungen den Code tats�chlich
-schneller gemacht haben.
-@xref{MySQL Benchmarks}.
-
-@item Mit dem @code{crash-me}-Test
-Dieser Test versucht festzustellen, welche Features die Datenbank
-unterst�tzt und was ihre F�higkeiten und Beschr�nkungen sind. @xref{MySQL Benchmarks}.
-@end table
-
-Ein weiterer Test besteht darin, dass wir die neueste MySQL-Version in
-unserer internen Entwicklungsumgebung einsetzen, mindestens auf einer
-Maschine. Wir arbeiten hierbei mit mehr als 100 Gigabytes an Daten.
-
-
-@node Installation layouts, Many versions, Which version, General Installation Issues
-@c German node Installationslayouts
-@subsection Installationslayouts
-
-@cindex Installationslayouts
-@cindex Layout der Installation
-@cindex Verzeichnisstruktur, Vorgabe
-@cindex Vorgabem��iger Installationsort
-
-Dieser Abschnitt beschreibt das vorgabem��ige Layout der Verzeichnisse,
-die durch die Installation von Bin�r- und Quelldistributionen angelegt
-werden.
-
-Eine Bin�rdistribution wird installiert, indem sie an die
-Installationsstelle entpackt wird, die Sie ausw�hlen (typischer Weise
-@file{/usr/local/mysql}). Die Installation erstellt folgende Verzeichnisse
-an dieser Stelle:
-
-@multitable @columnfractions .3 .7
-@item @strong{Verzeichnis} @tab @strong{Verzeichnisinhalt}
-@item @file{bin} @tab Client-Programme und der
-@code{mysqld}-Server
-@item @file{data} @tab Log-Dateien, Datenbanken
-@item @file{include} @tab Include-(Header)-Dateien
-@item @file{lib} @tab Bibliotheken
-@item @file{scripts} @tab @code{mysql_install_db}
-@item @file{share/mysql} @tab Dateien mit Fehlernachrichten
-@item @file{sql-bench} @tab Benchmarks
-@end multitable
-
-Eine Quelldistribution wird installiert, nachdem Sie sie konfiguriert und
-kompiliert haben. Vorgabem��ig werden Dateien unter @file{/usr/local}
-installiert, und zwar in den folgenden Unterverzeichnissen:
-
-@multitable @columnfractions .3 .7
-@item @strong{Verzeichnis} @tab @strong{Verzeichnisinhalt}
-@item @file{bin} @tab Client-Programme und -Skripte
-@item @file{include/mysql} @tab Include-(Header)-Dateien
-@item @file{info} @tab Dokumentation im Info-Format
-@item @file{lib/mysql} @tab Bibliotheken
-@item @file{libexec} @tab Der @code{mysqld}-Server
-@item @file{share/mysql} @tab Dateien mit Fehlernachrichten
-@item @file{sql-bench} @tab Benchmarks und @code{crash-me}-Test
-@item @file{var} @tab Datenbanken und Log-Dateien
-@end multitable
-
-Innerhalb eines Installationsverzeichnisses weicht das Layout einer
-Quellinstallation von dem einer Bin�rinstallation wie folgt ab:
-
-@itemize @bullet
-@item
-Der @code{mysqld}-Server wird in das @file{libexec}-Verzeichnis installiert
-und nicht in das @file{bin}-Verzeichnis.
-
-@item
-Das Daten-Verzeichnis ist @file{var} und nicht @file{data}.
-
-@item
-@code{mysql_install_db} wird in das @file{/usr/local/bin} Verzeichnis
-installiert und nicht in @file{/usr/local/mysql/Skripts}.
-
-@item
-Die Header-Datei und Bibliotheksverzeichnisse sind @file{include/mysql} und
-@file{lib/mysql} und nicht @file{include} und @file{lib}.
-@end itemize
-
-Sie k�nnen Ihre eigene Bin�rinstallation aus einer kompilierten
-Quelldistribution erzeugen, indem Sie das Skript
-@file{Skripts/make_binary_Distribution} ausf�hren.
-
-
-@node Many versions, MySQL binaries, Installation layouts, General Installation Issues
-@c German node Viele Versionen
-@subsection Wann und wie Updates ver�ffentlicht werden
-
-@cindex Releases, Updates
-@cindex Updates, Releases von MySQL
-
-MySQL entwickelt sich ziemlich schnell hier bei MySQL AB und wir wollen,
-dass andere MySQL-Benutzer daran teilhaben. Wir versuchen, immer dann ein
-neues Release heraus zu bringen, wenn wir sehr n�tzliche Features haben,
-f�r die offensichtlich ein Bedarf besteht.
-
-Auch versuchen wir, unseren Benutzern zu helfen, wenn Sie nach Features
-anfragen, die einfach zu implementieren sind. Wir notieren, was unsere
-lizensierten Nutzer haben wollen, und insbesondere, was unsere Benutzer mit
-erweitertem E-Mail-Support haben wollen, und versuchen ihnen, eben das zu
-bieten.
-
-Niemand muss einen neuen Release herunter laden. Im News-Abschnitt steht
-stets, ob das neue Release etwas beinhaltet, was Sie wirklich brauchen.
-@xref{News}.
-
-Wenn wir MySQL aktualisieren, fahren wir folgende Politik:
-
-@itemize @bullet
-@item
-Bei kleineren Updates wird die letzte Zahl (von rechts) in der
-Versionsnummer herauf gez�hlt (Minor Release). Wenn es gr��ere neue
-Features gibt oder kleinere Inkompatibilit�ten mit vorherigen Versionen,
-wird die zweite Zahl der Versionsnummer herauf gez�hlt (Major Release).
-Wenn sich das Dateiformat �ndert, wird die erste Zahl herauf gez�hlt.
-
-@item
-@c Question: This is supposed to mean "stable major releases". What does it
-have to do with "small bugs" => minor releases?
-Stable tested releases are meant to appear about 1-2 times a year, but
-if small bugs are found, a release mit only bug fixes will be released.
-Als stabil getestete Releases sollten etwa ein- bis zweimal im Jahr
-erscheinen, aber wenn kleinere Fehler gefunden werden, wird nur ein Release
-mit Bug-Fixes heraus gegeben.
-
-
-@item
-Funktionierende Releases sollten etwa alle 1 bis 8 Wochen erscheinen.
-
-@item
-Bin�rdistributionen f�r einige Plattformen werden von uns f�r gr��ere
-Releases (Major) heraus gegeben. Andere Leute stellen vielleicht auch
-Bin�rdistributionen f�r andere Systeme her, aber nicht so h�ufig.
-
-@item
-Patches stellen wir �blicherweise zur Verf�gung, sobald wir kleinere Bugs
-ausfindig gemacht und behoben haben.
-
-@item
-F�r nicht kritische, aber st�rende Bugs machen wir Patches verf�gbar, wenn
-sie uns zugesandt werden. Ansonsten kombinieren wir mehrere davon in einem
-gr��eren Patch.
-
-@item
-Wenn durch ungl�ckliche Umst�nde ein Release einen schweren Fehler enth�lt,
-erstellen wir sobald wie m�glich ein neues Release. Das w�rden wir auch
-gern bei anderen Unternehmen so sehen.
-@end itemize
-
-
-@c Question: I will not translate this paragraph now. Please update this!
-The current stable release ist Version 3.23; We have already moved active
-Entwicklung to Version 4.0. Bugs will still be fixed in the stable version.
-We don't believe in a complete freeze, as this also leaves out bug fixes
-und things that ``must be done.'' ``Somewhat frozen'' means that we may
-add small things that ``almost surely will not affect anything that's
-already working.''
-
-
-@node MySQL binaries, , Many versions, General Installation Issues
-@c German node MySQL-Bin�rdistributionen
-@subsection MySQL-Bin�rdistributionen, die von MySQL AB kompiliert wurden
-
-@cindex Bin�rdistributionen
-
-Als Service stellen wir bei MySQL AB einen Satz von Bin�rdistributionen von
-MySQL zur Verf�gung, die auf unserer Site kompiliert wurden oder auf Sites
-von Kunden, die uns freundlicherweise Zugang zu Ihren Maschinen gew�hrt
-haben.
-
-Diese Distributionen werden mit @code{Skripts/make_binary_distribution}
-erzeugt und mit folgenden Kompilern und Optionen konfiguriert:
-
-@table @asis
-@item SunOS 4.1.4 2 sun4c mit @code{gcc} 2.7.2.1
-@code{CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" ./configure --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex --enable-assembler}
-
-@item SunOS 5.5.1 (und h�her) sun4u mit @code{egcs} 1.0.3a oder 2.90.27 oder gcc 2.95.2 und neuer
-@code{CC=gcc CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex --enable-assembler}
-
-@item SunOS 5.6 i86pc mit @code{gcc} 2.8.1
-@code{CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex}
-
-@item Linux 2.0.33 i386 mit @code{pgcc} 2.90.29 (@code{egcs} 1.0.3a)
-@code{CFLAGS="-O3 -mpentium -mstack-align-double" CXX=gcc CXXFLAGS="-O3 -mpentium -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --with-extra-charsets=complex}
-
-@item Linux 2.2.x mit x686 mit @code{gcc} 2.95.2
-@code{CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charset=complex}
-
-@item SCO 3.2v5.0.4 i386 mit @code{gcc} 2.7-95q4
-@code{CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex}
-
-@item AIX 2 4 mit @code{gcc} 2.7.2.2
-@code{CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex}
-
-@item OSF1 V4.0 564 alpha mit @code{gcc} 2.8.1
-@code{CC=gcc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex}
-
-@item Irix 6.3 IP32 mit @code{gcc} 2.8.0
-@code{CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex}
-
-@item BSDI BSD/OS 3.1 i386 mit @code{gcc} 2.7.2.1
-@code{CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex}
-
-@item BSDI BSD/OS 2.1 i386 mit @code{gcc} 2.7.2
-@code{CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex}
-@end table
-
-Wenn jemand optimalere Optionen f�r die obigen Konfigurationen hat, k�nnen
-diese jederzeit der Entwickler-Mailing-Liste unter
-@email{internals@@lists.mysql.com} mitgeteilt werden.
-
-RPM-Distributionen von MySQL-Version 3.22 wurden durch Benutzer
-beigesteuert. Ab Version 3.22 werden die RPMs von uns bei MySQL AB erzeugt.
-
-Wenn Sie eine Debug-Version von MySQL kompilieren wollen, m�ssen Sie den
-oben genannten Kompilierzeilen @code{--with-debug} oder
-@code{--with-debug=full} hinzuf�gen und jegliche
-@code{-fomit-frame-pointer}-Optionen entfernen.
-
-
-@node Installing source, Post-installation, General Installation Issues, Installing
-@c German node Installation der Quelldistribution
-@section Installation der Quelldistribution
-
-@cindex Installation, Quelldistribution
-@cindex Quelldistribution, Installation
-@cindex Installation, �berblick
-
-Bevor Sie mit der Quellinstallation fortfahren, sehen Sie nach, ob eine
-Bin�rdistribution f�r Ihre Plattform verf�gbar ist, die so wie Sie wollen
-funktioniert. Wir geben uns viel M�he, die Bin�rdistributionen mit den
-bestm�glichen Optionen zu bauen.
-
-Sie ben�tigen folgende Werkzeuge, um MySQL aus der Quelldistribution zu bauen
-und zu installieren:
-
-@itemize @bullet
-@item
-GNU @code{gunzip}, um die Distribution zu entpacken.
-
-@item
-Ein vern�nftiges @code{tar}, um die Distribution zu entpacken. Von GNU
-@code{tar} ist bekannt, dass es funktioniert. Sun @code{tar} ist daf�r
-bekannt, dass es Probleme verursacht.
-
-@item
-Einen funktionierenden ANSI-C++-Kompiler. @code{gcc} >= 2.95.2, @code{egcs} >= 1.0.2
-oder @code{egcs 2.91.66}, SGI C++ und SunPro C++ sind einige der Kompiler,
-von denen bekannt ist, dass sie funktionieren. @code{libg++} wird nicht
-ben�tigt, wenn Sie @code{gcc} benutzen. @code{gcc} 2.7.x hat einen Bug, der
-es verunm�glicht, einige perfekt der vorgeschriebenen Form entsprechende
-C++-Dateien zu kompilieren, zum Beispiel @file{sql/sql_base.cc}. Wenn Sie
-nur @code{gcc} 2.7.x zur Verf�gung haben, m�ssen Sie Ihren @code{gcc}
-aktualisieren, um MySQL kompilieren zu k�nnen. @code{gcc} 2.8.1 ist
-ebenfalls f�r Probleme auf einigen Plattformen bekannt, daher sollten Sie
-auch diesen vermeiden, wenn Sie einen neueren Kompiler f�r diese Plattform
-zur Verf�gung haben.
-
-@code{gcc} >= 2.95.2 wird f�r das Kompilieren von MySQL-Versionen 3.23.x
-empfohlen.
-
-@item
-Ein gutes @code{make}-Programm. GNU @code{make} wird stets empfohlen und
-ist manchmal erforderlich. Wenn Sie Probleme bekommen, empfehlen wir, es
-mit GNU @code{make} 3.75 oder neuer zu versuchen.
-@end itemize
-
-Wenn Sie eine aktuelle Version von @strong{gcc} verwenden (aktuell genug,
-um die @code{-fno-exceptions}-Option zu verstehen), ist es @strong{SEHR
-WICHTIG}, dass Sie diese Option benutzen. Ansonsten k�nnte es sein, dass
-Sie eine Bin�rdatei kompilieren, die zu zuf�lligen Zeitpunkten abst�rzt.
-Wir empfehlen zus�tzlich, dass Sie @code{-felide-contructors} und
-@code{-fno-rtti} zusammen mit @code{-fno-exceptions} benutzen. Im Zweifel
-gehen Sie wie folgt vor:
-
-@example
-
-CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static
-
-@end example
-
-F�r die meisten Systeme werden Sie dadurch eine schnelle, stabile
-Bin�rinstallation erhalten.
-
-@c texi2html fails to split chapters if I use strong f�r all of this.
-Wenn Sie Probleme bekommen, @strong{BITTE BENUTZEN SIE IMMER
-@code{mysqlbug}} zum Fragenstellen die Liste
-@email{mysql@@lists.mysql.com}. Selbst wenn das Problem kein Bug ist,
-sammelt @code{mysqlbug} Systeminformationen, die anderen helfen werden, Ihr
-Problem zu l�sen. Wenn Sie @code{mysqlbug} nicht benutzen, verringern Sie
-die M�glichkeit, eine L�sung Ihres Problems zu bekommen! @code{mysqlbug}
-finden Sie im @file{scripts}-Verzeichnis, nachdem Sie die Distribution
-entpackt haben. @xref{Bug reports}.
-
-
-
-@menu
-* Quick install::
-* Applying patches::
-* configure options::
-* Installing source tree::
-* Compilation problems::
-* MIT-pthreads::
-* Windows source build::
-@end menu
-
-@node Quick install, Applying patches, Installing source, Installing source
-@c German node Schnellinstallation
-@subsection Schnellinstallation, �berblick
-
-Die grundlegenden Befehle, die Sie ausf�hren m�ssen, um eine
-MySQL-Quelldistribution zu installieren, sind:
-
-@example
-shell> groupadd mysql
-shell> useradd -g mysql mysql
-shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
-shell> cd mysql-VERSION
-shell> ./configure --prefix=/usr/local/mysql
-shell> make
-shell> make install
-shell> scripts/mysql_install_db
-shell> chown -R root /usr/local/mysql
-shell> chown -R mysql /usr/local/mysql/var
-shell> chgrp -R mysql /usr/local/mysql
-shell> cp support-files/my-medium.cnf /etc/my.cnf
-shell> /usr/local/mysql/bin/safe_mysqld --user=mysql &
-@end example
-
-@c German FIX added @samp before {#}
-Wenn Sie Unterst�tzung f�r InnoDB-Tabellen haben wollen, sollten Sie die
-Datei @code{/etc/my.cnf} editieren und die @samp{#}-Zeichen vor den Parametern
-entfernen, der mit @code{innodb_...} beginnen. @xref{Option files}.
-@xref{InnoDB start}.
-
-Wenn Sie mit einem Quell-RPM anfangen, gehen Sie wie folgt vor:
-
-@example
-shell> rpm --rebuild MySQL-VERSION.src.rpm
-@end example
-
-Das erzeugt ein Bin�r-RPM, das Sie installieren k�nnen.
-
-Sie k�nnen neue Benutzer hinzuf�gen, indem Sie das
-@code{bin/mysql_setpermission}-Skript benutzen, falls Sie die @code{DBI}-
-und @code{Msql-Mysql-modules}-Perl-Module installieren.
-
-Eine detailliertere Beschreibung folgt.
-
-Um eine Quelldistribution zu installieren, f�hren Sie die unten stehenden
-Schritte aus und gehen dann weiter zu @ref{Post-installation}, um die
-Schritte nach der Installation und ein paar Tests durchzuf�hren.
-
-@enumerate
-@item
-W�hlen Sie das Verzeichnis, in dem Sie die Distribution entpacken wollen,
-und wechseln Sie dort hinein.
-
-@item
-Holen Sie sich eine Distributionsdatei von einer der Sites, die unter
-@ref{Getting MySQL, , Wie man MySQL erh�lt} aufgelistet sind.
-
-@item
-Wenn Sie Berkeley-DB-Tabellen mit MySQL verwenden wollen, m�ssen Sie sich
-eine gepatchte Version des Berkeley-DB-Quellcodes besorgen. Bitte lesen Sie
-das Kapitel �ber Berkeley-DB-Tabellen, bevor Sie fortfahren. @xref{BDB}.
-
-MySQL-Quelldistributionen stehen als komprimierte @code{tar}-Archive zur
-Verf�gung und haben Namen wie @file{mysql-VERSION.tar.gz}, wobei
-@code{VERSION} eine Zahl ist, wie @value{mysql_version}.
-
-@item
-F�gen Sie einen Benutzer (User) und eine Gruppe (Group) hinzu, unter dem /
-der @code{mysqld} laufen soll:
-
-@example
-shell> groupadd mysql
-shell> useradd -g mysql mysql
-@end example
-
-Diese Befehle f�gen den Benutzer @code{mysql} und die Gruppe @code{mysql}
-hinzu. Die Syntax f�r @code{useradd} und @code{groupadd} kann sich auf
-unterschiedlichen Unix-Systemen geringf�gig unterscheiden. Die Befehle
-k�nnen @code{adduser} und @code{addgroup} hei�en. Wenn Sie wollen, k�nnen
-Sie Benutzer und Gruppe auch anders nennen als @code{mysql}.
-
-@item
-Entpacken Sie die Distribution ins aktuelle Verzeichnis:
-@example
-shell> gunzip < /pfad/zu/mysql-VERSION.tar.gz | tar xvf -
-@end example
-
-Dieser Befehl erzeugt ein Verzeichnis namens @file{mysql-VERSION}.
-
-@item
-Wechseln Sie in das oberste Verzeichnis der entpackten Distribution:
-
-@example
-shell> cd mysql-VERSION
-@end example
-
-Beachten Sie, dass Sie aktuell MySQL aus diesem obersten Verzeichnis
-konfigurieren und bauen m�ssen. Sie k�nnen MySQL nicht in ein anderes
-Verzeichnis bauen.
-
-@item
-Konfigurieren Sie das Release und kompilieren Sie alles:
-
-@example
-shell> ./configure --prefix=/usr/local/mysql
-shell> make
-@end example
-
-Wenn Sie @code{configure} laufen lassen, k�nnen Sie dabei einige Optionen
-angeben. Geben Sie @code{./configure --help} ein, um eine Liste von
-Optionen zu erhalten. @ref{configure options, , @code{configure}-Optionen}
-er�rtert einige der n�tzlicheren Optionen.
-
-Wenn @code{configure} fehlschl�gt und Sie sich wegen Hilfe an
-@email{mysql@@lists.mysql.com} wenden, geben Sie bitte alle Zeilen aus
-@file{config.log} an, von denen Sie annehmen, dass sie bei der
-Problembehebung hilfreich sein k�nnten. F�gen Sie auch die letzten Zeilen
-der Ausgabe von @code{configure} hinzu, wenn @code{configure} abbricht.
-Schicken Sie den Bug-Bericht ein, indem Sie das @code{mysqlbug}-Skript
-benutzen. @xref{Bug reports}.
-
-Wenn das Kompilieren fehlschl�gt, sehen Sie unter
-@ref{Compilation problems} nach, was bei einer Reihe gel�ufiger Probleme
-hilft.
-
-@item
-Installieren Sie alles:
-
-@example
-shell> make install
-@end example
-
-Eventuell m�ssen Sie diesen Befehl als @code{root} ausf�hren.
-
-@item
-Erzeugen Sie die MySQL-Berechtigungstabellen (Grant Tables, nur notwendig,
-wenn Sie MySQL noch nie vorher installiert haben):
-
-@example
-shell> scripts/mysql_install_db
-@end example
-
-Beachten Sie, dass bei MySQL-Versionen vor Version 3.22.10 der MySQL-Server
-startet, wenn Sie @code{mysql_install_db} laufen lassen. Das gilt f�r
-neuere Versionen nicht mehr!
-
-@item
-�ndern Sie den Besitzer der Bin�rdateien zu @code{root} und den Besitzer
-des Daten-Verzeichnisses zu dem Benutzer, unter dem Sie @code{mysqld} laufen
-lassen wollen:
-
-@example
-shell> chown -R root /usr/local/mysql
-shell> chown -R mysql /usr/local/mysql/var
-shell> chgrp -R mysql /usr/local/mysql
-@end example
-
-Der erste Befehl �ndert die @code{owner}-Attribute der Dateien auf den
-Benutzer @code{root}, der zweite �ndert die @code{owner}-Attribute des
-Daten-Verzeichnisses auf den Benutzer @code{mysql} und der dritte �ndert die
-@code{group}-Attribute auf die Gruppe @code{mysql}.
-
-@item
-Wenn Sie die Unterst�tzung f�r die Perl-@code{DBI}/@code{DBD}-Schnittstelle
-hinzuf�gen wollen, sehen Sie unter @ref{Perl} nach.
-
-@item
-Wenn Sie wollen, dass MySQL automatisch startet, wenn Sie Ihre Maschine
-hoch fahren, kopieren Sie @code{support-files/mysql.server} an die Stelle,
-wo Ihr System seine Startdateien hat. Weitere Informationen finden Sie im
-@code{support-files/mysql.server}-Skript selbst sowie unter
-@ref{Automatic start}.
-@end enumerate
-
-Nachdem alles installiert wurde, sollten Sie Ihre Distribution
-initialisieren und testen:
-
-@example
-shell> /usr/local/mysql/bin/safe_mysqld --user=mysql &
-@end example
-
-Wenn dieser Befehl sofort mit @code{mysqld daemon ended} fehlschl�gt,
-finden Sie einige Informationen dazu in der Datei
-@file{mysql-Daten-Verzeichnis/'hostname'.err}. Der wahrscheinliche Grund ist
-der, dass bereits ein anderer @code{mysqld}-Server l�uft. @xref{Multiple servers}.
-
-@xref{Post-installation}.
-
-
-@node Applying patches, configure options, Quick install, Installing source
-@c German node Patches anwenden
-@subsection Wie man Patches anwendet
-
-@cindex Patches, anwenden
-@cindex Anwenden, Patches
-
-Manchmal erscheinen Patches auf der Mailing-Liste oder werden auf
-@uref{http://www.mysql.com/Downloads/Patches, Patches-Bereich} auf der
-MySQL-Website eingestellt.
-
-Um einen Patch aus der Mailing-Liste anzuwenden, speichern Sie die
-Nachricht, in der der Patch enthalten ist, in eine Datei. Wechseln Sie dann
-ins oberste Verzeichnis Ihres MySQL-Source-Trees und geben Sie folgende
-Befehle ein:
-
-@example
-shell> patch -p1 < patch-datei-name
-shell> rm config.cache
-shell> make clean
-@end example
-
-Patches von der FTP-Site werden als Klartextdateien (Plain Text) oder als
-mit @code{gzip} komprimierte Dateien distribuiert. Ein Klartext-Patch
-wenden Sie genau so an, wie oben f�r die Patches von der Mailing-Liste
-beschrieben. Um ein komprimiertes Patch anzuwenden, wechseln Sie ins
-oberste Verzeichnis Ihres MySQL-Source-Trees und geben Sie folgende Befehle
-ein:
-
-@example
-shell> gunzip < patch-datei-name.gz | patch -p1
-shell> rm config.cache
-shell> make clean
-@end example
-
-Nachdem Sie einen Patch angewendet haben, folgen Sie den Anweisungen f�r
-eine normale Installation vom Quellcode, indem Sie mit dem Schritt
-@code{./configure} anfangen. Nach dem Schritt @code{make install}, starten
-Sie den MySQL-Server neu.
-
-Es kann sein, dass Sie jeden laufenden Server anhalten m�ssen, bevor Sie
-@code{make install} laufen lassen k�nnen. (Das machen Sie mit
-@code{mysqladmin shutdown}.) Einige Systeme lassen es nicht zu, dass eine
-neue Programmversion installiert wird, wenn diese eine Version ersetzt, die
-momentan ausgef�hrt wird.
-
-
-@node configure options, Installing source tree, Applying patches, Installing source
-@c German node Optionen konfigurieren
-@subsection Typische @code{configure}-Optionen
-
-@findex without-server-Option
-@cindex @code{configure}-Skript
-@cindex Optionen, configure
-@cindex Konfigurationsoptionen
-@cindex Log-Dateien
-@cindex Dateien, Log
-
-Das @code{configure}-Skript gibt Ihnen in gro�em Umfang Kontrolle �ber die
-Konfigurationsm�glichkeiten Ihrer MySQL-Distribution. Typischerweise machen
-Sie das unter Verwendung der Optionen auf der
-@code{configure}-Kommandozeile. Sie k�nnen ausserdem @code{configure}
-beeinflussen, indem Sie bestimmte Umgebungsvariablen benutzen.
-@xref{Environment variables}. Um eine Liste der Optionen zu erhalten, die
-@code{configure} unterst�tzt, geben Sie folgendes ein:
-
-@example
-shell> ./configure --help
-@end example
-
-Einige der gebr�uchlicheren @code{configure}-Optionen sind im Folgenden
-beschrieben:
-
-@itemize @bullet
-@item
-Um nur die MySQL-Client Bibliotheken und Client-Programme und nicht den
-Server zu kompilieren, benutzen Sie die @code{--ohne-server}-Option:
-
-@example
-shell> ./configure --without-server
-@end example
-
-@c FIX incorrect..
-
-Wenn Sie keinen C++-Kompiler haben, k�nnen Sie @code{mysql} nicht
-kompilieren (MySQL ist das einzige Client-Programm, das C++ erfordert). In
-diesem Fall k�nnen Sie den Code in @code{configure} entfernen, der auf den
-C++-Kompiler testet, und dann @code{./configure} mit der
-@code{--without-server}-Option eingeben. Dieser Kompilierschritt wird nach
-wie vor versuchen, @code{mysql} zu bauen, aber Sie k�nnen alle Warnungen zu
-@file{mysql.cc} ignorieren. (Wenn @code{make} anh�lt, versuchen Sie
-@code{make -k}, um ihm mitzuteilen, dass es mit dem Rest des Builds
-fortfahren soll, auch wenn Fehler auftreten.)
-
-@item
-Wenn Sie nicht wollen, dass Ihre Log-Dateien und Datenbankverzeichnisse
-unter @file{/usr/local/var} liegen, benutzen Sie ein
-@code{configure}-Kommando wie folgendes:
-
-@example
-shell> ./configure --prefix=/usr/local/mysql
-shell> ./configure --prefix=/usr/local \
- --localstatedir=/usr/local/mysql/data
-@end example
-
-Der erste Befehl �ndert das Installationspr�fix, so dass alles unter
-@file{/usr/local/mysql} statt unter @file{/usr/local} installiert wird. Der
-zweite Befehl bewahrt das vorgabem��ige Installationspr�fix, aber
-�berschreibt die vorgabem��ige Stelle f�r Datenbankverzeichnisse
-(normalerweise @file{/usr/local/var}) und �ndert sie zu
-@code{/usr/local/mysql/data}.
-
-@cindex Speicherort des Sockets �ndern
-@cindex Socket-Speicherort, �ndern
-@cindex mysql.sock, �nderung des Speicherorts
-@item
-
-Wenn Sie Unix benutzen und wollen, dass der MySQL-Socket an anderer Stelle
-liegt als vorgabem��ig (normalerweise im Verzeichnis @file{/tmp} oder
-@file{/var/run}), benutzen Sie ein @code{configure}-Kommando wie folgendes:
-
-@example
-shell> ./configure --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
-@end example
-
-Beachten Sie, dass die angegebene Datei mit einem absoluten Pfadnamen
-angegeben werden muss! Sie k�nnen den Speicherort von @file{mysql.sock}
-auch sp�ter noch �ndern, indem Sie die MySQL Optionsdateien benutzen.
-@xref{Problems with mysql.sock}.
-
-@cindex Kompilieren, statisch
-@cindex Statisch, Kompilieren
-@item
-Wenn Sie statisch gelinkte Programme kompilieren wollen (um zum Beispiel
-eine Bin�rdistribution zu machen, mehr Geschwindigkeit zu erhalten oder
-Probleme mit RedHat-Linux-Distributionen zu umgehen (Workaround)), geben
-Sie @code{configure} wie folgt ein:
-
-@example
-shell> ./configure --with-client-ldflags=-all-static \
- --with-mysqld-ldflags=-all-static
-@end example
-
-
-
-@tindex @code{CC} Umgebungsvariable
-@tindex Umgebungsvariable, @code{CC}
-@tindex @code{CXX} Umgebungsvariable
-@tindex Umgebungsvariable, @code{CXX}
-@cindex @code{gcc}
-@cindex C++-Kompiler, @code{gcc}
-@cindex Kompiler, C++ @code{gcc}
-@item
-Wenn Sie @code{gcc} benutzen und @code{libg++} oder @code{libstdc++} nicht
-installiert haben, k�nnen Sie @code{configure} mitteilen, @code{gcc} als
-Ihren C++-Kompiler zu benutzen:
-
-@example
-shell> CC=gcc CXX=gcc ./configure
-@end example
-
-Wenn Sie @code{gcc} als C++-Kompiler benutzen, versucht dieser nicht,
-@code{libg++} oder @code{libstdc++} zu linken.
-
-Hier sind einige gebr�uchliche Umgebungsvariablen, die man in Abh�ngigkeit
-vom verwendeten Kompiler setzen kann:
-
-@tindex CXXFLAGS Umgebungsvariable
-@tindex Umgebungsvariable, CXXFLAGS
-@multitable @columnfractions .20 .80
-@item gcc 2.7.2.1 @tab
-CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
-@item egcs 1.0.3a @tab
-CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"
-@item gcc 2.95.2 @tab
-CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti"
-@item pgcc 2.90.29 oder newer @tab
-CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti"
-@end multitable
-
-In den meisten F�llen erhalten Sie eine ziemlich optimale MySQL-Bin�rdatei,
-indem Sie die Optionen von weiter oben nutzen und die folgenden Optionen
-zur Konfigurationszeile hinzuf�gen:
-
-@example
---prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static
-@end example
-
-Die komplette Konfigurationszeile w�rde also etwa wie folgt aussehen (f�r
-alle aktuellen gcc-Versionen):
-
-@example
-CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static
-@end example
-
-Die Bin�rdistributionen, die wir auf der MySQL-Website unter
-@uref{http://www.mysql.com} zur Verf�gung stellen, sind allesamt mit voller
-Optimierung kompiliert und sollten daher f�r die meisten Benutzer perfekt
-sein. @xref{MySQL binaries}. Einiges k�nnen Sie noch fein justieren, um
-noch schnellere Bin�rdistributionen zu erhalten, aber das ist nur etwas f�r
-fortgeschrittene Benutzer. @xref{Compile and link options}.
-
-Wenn der Build fehlschl�gt und Fehler produziert, die aussagen, dass Ihr
-Kompiler oder Linker nicht in der Lage ist, die gemeinsam benutzte
-(shared) Bibliothek @file{libmysqlclient.so.#} (@samp{#} ist eine
-Versionsnummer) zu erzeugen, k�nnen Sie dieses Problem umgehen, indem Sie
-die @code{--disable-shared}-Option von @code{configure} benutzen. In diesem
-Fall baut @code{configure} keine gemeinsam benutzte
-@code{libmysqlclient.so.#}-Bibliothek.
-
-@cindex Vorgabewerte, Unterdr�ckung
-@cindex Unterdr�ckung, Vorgabewerte
-@item
-Sie k�nnen MySQL so konfigurieren, dass keine @code{DEFAULT}-Spaltenwerte
-f�r Nicht-@code{NULL}-Spalten benutzt werden (also Spalten, bei denen nicht
-zul�ssig ist, dass sie @code{NULL} sind). Das f�hrt dazu, dass
-@code{INSERT}-Statements einen Fehler erzeugen, ausser wenn ausdr�cklich
-Werte f�r Spalten angegeben werden, die einen Nicht-@code{NULL}-Werte
-verlangen. Um die Benutzung von Vorgabewerten zu unterdr�cken, geben Sie
-@code{configure} wie folgt ein:
-
-@tindex CXXFLAGS Umgebungsvariable
-@tindex Umgebungsvariable, CXXFLAGS
-@example
-shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure
-@end example
-
-@cindex Zeichens�tze
-@findex configure-Option, --with-charset
-@findex configure-Option, --with-extra-charset
-@item
-Als Vorgabe benutzt MySQL den Zeichensatz ISO-8859-1 (Latin1). Um diesen
-Vorgabesatz zu �ndern, benutzen Sie die @code{--with-charset}-Option:
-@example
-shell> ./configure --with-charset=CHARSET
-@end example
-@code{CHARSET} kann einer der folgenden sein: @code{big5}, @code{cp1251}, @code{cp1257},
-@code{czech}, @code{danish}, @code{dec8}, @code{dos}, @code{euc_kr},
-@code{gb2312}, @code{gbk}, @code{german1}, @code{hebrew}, @code{hp8},
-@code{hungarian}, @code{koi8_ru}, @code{koi8_ukr}, @code{latin1},
-@code{latin2}, @code{sjis}, @code{swe7}, @code{tis620}, @code{ujis},
-@code{usa7} oder @code{win1251ukr}.
-@xref{Character sets}.
-
-Wenn Sie Zeichen zwischen Server und Client konvertieren wollen, sollten
-Sie sich den @code{SET OPTION CHARACTER SET}-Befehl ansehen.
-@xref{SET OPTION, , @code{SET OPTION}}.
-
-@cindex @code{myisamchk}
-@strong{Achtung:} Wenn Sie Zeichens�tze �ndern, nachdem Sie irgend welche
-Tabellen angelegt haben, m�ssen Sie @code{myisamchk -r -q} �ber jede
-Tabelle laufen lassen, denn ansonsten k�nnten Ihre Indexe falsch sortiert
-werden. (Das kann passieren, wenn Sie MySQL installieren, ein paar Tabellen
-erzeugen und danach MySQL rekonfigurieren, so dass es einen anderen
-Zeichensatz benutzt, und dann neu installieren.)
-
-Mit der Option @code{--with-extra-charset=LIST} k�nnen Sie zus�tzliche
-Zeichens�tze definieren, die in den Server einkompiliert werden sollen.
-
-Hierbei ist @code{LIST} entweder eine Liste eines Zeichensatzes, die durch
-Leerzeichen getrennt ist, oder @code{complex}, um alle Zeichen
-einzuschlie�en, die nicht dynamisch geladen werden k�nnen, oder
-@code{all}, um alle Zeichens�tze in die Bin�rdateien einzuschlie�en.
-
-@item
-Um MySQL mit Debug-Code zu konfigurieren, benutzen Sie die
-@code{--with-debug}-Option:
-@example
-shell> ./configure --with-debug
-@end example
-Das bewirkt, dass eine sichere Speicherzuweisung (Memory Allocator)
-eingeschlossen wird, die einige Fehler finden kann und die Ausgaben
-liefert, was passiert ist. @xref{Debugging server}.
-
-@item
-Wenn Ihre Client-Programme Threads benutzen, m�ssen Sie zus�tzlich eine
-Thread-sichere Version der MySQL-Client-Bibliothek mit der
-@code{--enable-Thread-safe-client}-configure-Option kompilieren. Hierdurch
-wird eine @code{libmysqlclient_r}-Bibliothek angelegt, mit der Sie Ihre
-threaded Applikationen linken k�nnen. @xref{Threaded clients}.
-
-@item
-Optionen, die zu bestimmten Systemen geh�ren, finden sich im
-systemspezifischen Abschnitt dieses Handbuchs. @xref{Which OS, , Betriebssystemspezifische Anmerkungen}.
-@end itemize
-
-
-@node Installing source tree, Compilation problems, configure options, Installing source
-@c German node Installation vom Entwicklungs-Source-Tree
-@subsection Installation vom Entwicklungs-Source-Tree
-
-@cindex Entwicklungs-Source-Tree
-@cindex BitKeeper-Tree
-@cindex CVS-Tree
-
-@strong{VORSICHT:} Sie sollten diesen Abschnitt nur lesen, wenn Sie daran
-interessiert sind, uns beim Testen von neuem Code zu helfen. Wenn Sie nur
-wollen, dass MySQL auf Ihrem System l�uft, sollten Sie eine
-Standard-Distribution w�hlen (entweder eine Quell- oder eine
-Bin�rdistribution).
-
-Um unseren aktuellsten Entwicklungs-Source-Tree zu bekommen, folgen Sie
-diesen Anweisungen:
-
-@enumerate
-@item
-Laden Sie @strong{BitKeeper} von
-@uref{http://www.bitmover.com/cgi-bin/download.cgi} herunter. Sie ben�tigen
-@strong{Bitkeeper} 2.0 oder neuer, um auf unser Repository zuzugreifen.
-
-@item
-Folgen Sie den Anweisungen, um BitKeeper zu installieren.
-
-@item
-Nachdem @strong{BitKeeper} installiert ist, benutzen Sie diesen Befehl, um
-den MySQL-3.23-Branch zu klonen:
-
-@example
-shell> bk clone bk://work.mysql.com:7000 mysql
-@end example
-
-Um den 4.0-Branch zu klonen, benutzen Sie statt dessen diesen Befehl:
-
-@example
-shell> bk clone bk://work.mysql.com:7001 mysql-4.0
-@end example
-
-Das erstmalige Herunterladen des Source-Trees kann eine Weile dauern,
-abh�ngig von Ihrer Verbindungsgeschwindigkeit. Bitte Geduld.
-
-@item
-Sie brauchen GNU @code{autoconf}, @code{automake}, @code{libtool} und
-@code{m4}, um die n�chsten Befehle auszuf�hren.
-Wenn Sie in diesem Stadium seltsame Fehler erhalten, �berpr�fen Sie bitte,
-ob Sie wirklich @code{libtool} installiert haben!
-
-@example
-shell> cd mysql
-shell> bk -r edit
-shell> aclocal; autoheader; autoconf; automake;
-shell> ./configure # Geben Sie hier Ihre Lieblingsoptionen an
-shell> make
-@end example
-
-Eine Sammlung unserer Standard-configure-Skripts befindet sich im
-@file{BUILD/} Unterverzeichnis. Wenn Sie faul sind, k�nnen Sie
-@file{BUILD/compile-pentium-debug} benutzen. Um f�r unterschiedliche
-Architekturen zu kompilieren, �ndern Sie das Skript ab und entfernen die
-Flags, die Pentium-spezifisch sind.
-
-@item
-Wenn der Build fertig ist, lassen Sie @code{make install} laufen. Seien Sie
-damit vorsichtig auf Produktionsmaschinen, denn dieser Befehl kann Ihre
-Live-Release-Installation �berschreiben! Wenn Sie eine weitere Installation
-von MySQL haben, empfehlen wir, dass Sie @code{./configure} mit anderen
-Werten f�r die @code{prefix}-, @code{tcp-port}- und
-@code{unix-socket-path}-Optionen ausf�hren als die, die f�r Ihren
-Produktionsserver benutzt werden.
-
-@item
-Spielen Sie reichlich mit Ihrer neuen Installation herum und versuchen Sie,
-die neuen Features zum Absturz zu bringen. Fangen Sie an, indem Sie
-@code{make test} laufen lassen. @xref{MySQL-Test-Suite}.
-
-@item
-Wenn Sie bis zum @code{make}-Stadium gekommen sind und die Distribution
-sich nicht kompilieren l��t, berichten Sie das bitte an
-@email{bugs@@lists.mysql.com}. Wenn Sie die letzten Versionen der
-erforderlichen GNU-Werkzeuge installiert haben und sie abst�rzen, wenn Sie
-versuchen, Ihre Konfigurationsdateien zu verarbeiten, berichten Sie das
-bitte ebenfalls. Wenn Sie jedoch @code{aclocal} und einen @code{Befehl
-nicht gefunden}-Fehler erhalten, berichten Sie diesen nicht. Stellen Sie
-statt dessen sicher, dass alle notwendigen Werkzeuge installiert sind und dass
-Ihre @code{PATH}-Variable korrekt gesetzt ist, damit Ihre Shell diese
-finden kann.
-
-@item
-Nach der erstmaligen @code{bk clone}-Operation, um den Source-Tree zu
-erhalten, sollten Sie in regelm��igen Abst�nden @code{bk pull} laufen
-lassen, um Aktualisierungen zu erhalten.
-
-@item
-Sie erhalten die �nderungen-Geschichte (Change History) des Trees mit allen
-Diffs, indem Sie @code{bk sccstool} benutzen. Wenn Sie seltsame Diffs sehen
-oder Code, zu dem Sie Fragen haben, z�gern Sie nicht, uns eine E-Mail an
-@email{internals@@lists.mysql.com} zu schicken. Auch wenn Sie meinen, eine
-bessere Idee zu haben, wie etwas gemacht werden sollte, schicken Sie uns
-eine E-Mail an dieselbe Adresse, mit einem Patch. @code{bk diffs} erzeugt
-ein Patch f�r Sie, nachdem Sie �nderungen am Quellcode durchgef�hrt haben.
-Wenn Sie keine Zeit haben, Ihre Idee zu kodieren, schicken Sie einfach eine
-Beschreibung.
-
-@item
-@strong{BitKeeper} hat ein nettes Hilfe-Dienstprogramm, auf das Sie �ber @code{bk
-helptool} zugreifen k�nnen.
-
-@end enumerate
-
-
-@node Compilation problems, MIT-pthreads, Installing source tree, Installing source
-@c German node Kompilierungsprobleme
-@subsection Probleme beim Kompilieren?
-
-@cindex Kompilieren, Probleme
-@cindex Probleme, Kompilieren
-@cindex Rekonfigurieren
-@cindex @code{config.cache}-Datei
-@cindex Dateien, @code{config.cache}
-
-Alle MySQL-Programme lassen sich sauber ohne Warnungen auf Solaris mit
-@code{gcc} kompilieren. Auf anderen Systemen k�nnen Warnungen wegen
-Unterschieden in System-Include-Dateien auftreten. Siehe @ref{MIT-pthreads}
-wegen Warnungen, die auftreten k�nnen, wenn Sie MIT-pThreads verwenden.
-Wegen anderer Probleme sehen Sie bitte in der unten stehenden Liste nach.
-
-Die L�sung f�r viele Probleme beinhaltet Rekonfigurieren. Wenn Sie
-rekonfigurieren m�ssen, beachten Sie Folgendes:
-
-@cindex @code{configure} nach dem ersten Aufruf laufen lassen
-@cindex @code{configure}, laufen lassen nach dem ersten Aufruf
-@cindex Rekonfigurieren
-@cindex config.cache
-@itemize @bullet
-@item
-Wenn @code{configure} laufen gelassen wird, nachdem es schon einmal lief,
-benutzt es m�glicherweise Informationen, die bei vorherigen Aufrufen
-gesammelt wurden. Diese Information wird in der Datei @file{config.cache}
-gespeichert. Wenn @code{configure} startet, sucht es diese Datei und liest
-ihren Inhalt, wenn sie existiert, unter der Annahme, dass diese Information
-immer noch stimmt. Diese Annahme ist falsch, wenn Sie rekonfigurieren.
-
-@item
-Immer, wenn Sie @code{configure} laufen lassen, m�ssen Sie auch @code{make}
-laufen lassen, um erneut zu kompilieren. Sie werden jedoch einige alte
-Objektdateien vorheriger Builds entfernen wollen, denn diese wurden mit
-anderen Konfigurationsoptionen kompiliert.
-@end itemize
-
-Um zu verhindern, dass alte Konfigurationsinformationen oder Objektdateien
-benutzt werden, geben Sie vor dem erneuten Aufruf von @code{configure}
-folgende Befehle ein:
-
-@example
-shell> rm config.cache
-shell> make clean
-@end example
-
-Alternativ k�nnen Sie auch @code{make distclean} laufen lassen.
-
-Die unten stehende Liste beschreibt einige der Probleme, die beim
-Kompilieren von MySQL am h�ufigsten auftreten:
-
-@itemize @bullet
-@item
-@cindex @code{cc1plus}-Probleme
-@cindex @code{fatal signal 11}
-@cindex @code{sql_yacc.cc}-Probleme
-@cindex Interne Kompiler-Fehler
-@cindex Virtueller Speicher, Probleme beim Kompilieren
-@cindex configure-Option, --with-low-memory
-Wenn Sie Probleme beim Kompilieren von @file{sql_yacc.cc} erhalten, die den
-unten gezeigten �hneln, haben Sie wahrscheinlich keinen Arbeitsspeicher
-oder Swap-Platz (Auslagerungsdatei) mehr.
-
-@example
-Internal compiler error: Programm cc1plus got fatal signal 11
- oder
-Out of virtual memory
- oder
-Virtual memory exhausted
-@end example
-
-Das Problem liegt darin, dass @code{gcc} riesige Mengen von Arbeitsspeicher
-ben�tigt, um @file{sql_yacc.cc} mit Inline-Funktionen zu kompilieren.
-Versuchen Sie, @code{configure} mit der @code{--with-low-memory}-Option
-auszuf�hren:
-
-@example
-shell> ./configure --with-low-memory
-@end example
-
-Diese Option veranlasst, dass @code{-fno-inline} zur Kompilierzeile
-hinzugef�gt wird, wenn Sie @code{gcc} benutzen, bzw. @code{-O0}, wenn Sie
-etwas anderes benutzen. Sie sollten die @code{--with-low-memory}-Option
-selbst dann benutzen, wenn Sie glauben, so viel Arbeitsspeicher und
-Swap-Platz zu haben, dass Ihnen diese unm�glich ausgehen k�nnen. Das
-Problem wurde selbst auf Systemen mit gro�z�giger Hardware-Ausstattung
-beobachtet, und die @code{--with-low-memory}-Option behebt es
-�blicherweise.
-
-@item
-Vorgabem��ig sucht @code{configure} @code{c++} als Kompiler-Namen aus und
-GNU @code{c++} linkt mit @code{-lg++}. Wenn Sie @code{gcc} benutzen, kann
-dieses Verhalten Probleme bei Konfigurationen wie dieser verursachen:
-
-@cindex C++-Kompiler kann keine ausf�hrbaren Dateien (Executables) erzeugen
-@example
-configure: error: installation oder configuration problem:
-c++ compiler cannot create executables.
-@end example
-
-@tindex CXX-Umgebungsvariable
-@tindex Umgebungsvariable, CXX
-Eventuell sto�en Sie beim Kompilieren auch auf Probleme, die mit
-@code{g++}, @code{libg++} oder @code{libstdc++} zu tun haben.
-
-Eine Ursache dieser Probleme liegt darin, dass Sie kein @code{g++} haben
-d�rfen, oder Sie d�rfen @code{g++} haben, aber nicht @code{libg++} oder
-@code{libstdc++}. Schauen Sie in die @file{config.log}-Datei! Sie sollten
-die genaue Ursache enthalten, warum Ihr C++-Kompiler nicht funktioniert! Um
-dieses Problem zu umgehen, k�nnen Sie @code{gcc} als Ihren C++-Kompiler
-benutzen. Versuchen Sie, die Umgebungsvariable @code{CXX} auf @code{"gcc
--O3"} zu setzen. Beispiel:
-
-@tindex CXX-Umgebungsvariable
-@tindex Umgebungsvariablen, CXX
-@example
-shell> CXX="gcc -O3" ./configure
-@end example
-
-Das funktioniert, weil @code{gcc} C++-Quellen genau so gut wie @code{g++}
-kompiliert, aber vorgabem��ig weder @code{libg++} noch @code{libstdc++}
-linkt.
-
-Eine andere M�glichkeit, das Problem zu beheben, besteht nat�rlich darin,
-@code{g++}, @code{libg++} und @code{libstdc++} zu installieren.
-
-@item
-Wenn Ihr Kompilieren mit Fehlern wie dem folgenden fehlschl�gt, m�ssen Sie
-Ihre Version von @code{make} auf GNU @code{make} aktualisieren:
-
-@example
-making all in mit-pThreads
-make: Fatal error in reader: Makefile, line 18:
-Badly formed macro assignment
- oder
-make:Datei `Makefile' line 18: Must be a separator (:
- oder
-pThread.h: No such file or directory
-@end example
-
-@cindex Solaris-Troubleshooting
-@cindex FreeBSD-Troubleshooting
-@cindex Troubleshooting, Solaris
-@cindex Troubleshooting, FreeBSD
-Von Solaris und FreeBSD ist bekannt, dass sie problembehaftete
-@code{make}-Programme haben.
-
-GNU @code{make} Version 3.75 funktioniert bekannterma�en.
-
-@tindex CC-Umgebungsvariable
-@tindex Umgebungsvariable, CC
-@tindex CXX-Umgebungsvariable
-@tindex Umgebungsvariable, CXX
-@tindex CFLAGS-Umgebungsvariable
-@tindex Umgebungsvariable, CFLAGS
-@tindex CXXFLAGS-Umgebungsvariable
-@tindex Umgebungsvariable, CXXFLAGS
-@item
-Wenn Sie Flags definieren wollen, die von Ihrem C- oder C++-Kompiler
-benutzt werden, f�gen Sie die Flags den @code{CFLAGS}- und
-@code{CXXFLAGS}-Umgebungsvariablen hinzu. Sie k�nnen auf diese Weise auch
-die Kompilernamen festlegen, indem Sie @code{CC} und @code{CXX} benutzen.
-Beispiel:
-
-@example
-shell> CC=gcc
-shell> CFLAGS=-O3
-shell> CXX=gcc
-shell> CXXFLAGS=-O3
-shell> export CC CFLAGS CXX CXXFLAGS
-@end example
-
-Siehe @ref{MySQL binaries}: Eine Liste von Flag-Definitionen, die sich
-auf verschiedenen Systemen als n�tzlich erwiesen haben.
-
-@item
-Wenn Sie einen Fehler wie den folgenden erhalten, m�ssen Sie Ihren
-@code{gcc}-Kompiler aktualisieren:
-
-@example
-client/libmysql.c:273: parse error before `__attribute__'
-@end example
-
-@code{gcc} 2.8.1 funktioniert bekannterma�en, aber wir empfehlen statt
-dessen @code{gcc} 2.95.2 oder @code{egcs} 1.0.3a.
-
-@item
-Wenn Sie Fehler wie die unten stehenden erhalten, wenn Sie @code{mysqld}
-kompilieren, hat @code{configure} den Typ des letzten Arguments f�r
-@code{accept()}, @code{getsockname()} oder @code{getpeername()} nicht
-korrekt erkannt:
-
-@example
-cxx: Error: mysqld.cc, line 645: In this statement, the referenced
- type of the pointer value "&length" is "unsigned long", which
- is not compatible with "int".
-new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
-@end example
-
-Um das zu beheben, editieren Sie die @file{config.h}-Datei (die von
-@code{configure} angelegt wird). Suchen Sie nach folgenden Zeilen:
-
-@example
-/* Define as the base type of the last arg to accept */
-#define SOCKET_SIZE_TYPE XXX
-@end example
-
-�ndern Sie @code{XXX} zu @code{size_t} oder @code{int}, abh�ngig von Ihrem
-Betriebssystem. (Beachten Sie, dass Sie das jedes Mal tun m�ssen, wenn Sie
-@code{configure} laufen lassen, weil @code{configure} die Datei
-@file{config.h} neu erzeugt.)
-
-@item
-Die @file{sql_yacc.cc}-Datei wird von @file{sql_yacc.yy} erzeugt.
-Normalerweise muss der Build-Prozess keine @file{sql_yacc.cc} erzeugen,
-weil MySQL schon mit einer fertig erzeugten Kopie daher kommt. Wenn Sie sie
-jedoch neu erzeugen m�ssen, k�nnten Sie folgenden Fehler erhalten:
-
-@example
-"sql_yacc.yy", line xxx fatal: default action causes potential...
-@end example
-
-Das ist ein Indiz daf�r, dass Ihre Version von @code{yacc} fehlerhaft ist.
-Sie m�ssen statt dessen wahrscheinlich @code{bison} (die GNU-Version von
-@code{yacc}) installieren und benutzen.
-
-@item
-Wenn Sie @code{mysqld} oder einen MySQL-Client debuggen wollen, lassen Sie
-@code{configure} mit der @code{--with-debug}-Option laufen. Kompilieren Sie
-danach neu und linken Sie Ihre Clients mit der neuen Client-Bibliothek.
-@xref{Debugging client}.
-@end itemize
-
-@node MIT-pthreads, Windows source build, Compilation problems, Installing source
-@c German node MIT-pThreads
-@subsection Anmerkungen zu MIT-pThreads
-
-@cindex MIT-pThreads
-@cindex Thread-Unterst�tzung, nicht-native
-
-Dieser Abschnitt beschreibt einige der Themen im Zusammenhang mit MIT-pThreads.
-
-Beachten Sie, dass Sie auf Linux KEINE MIT-pThreads benutzen, sondern statt
-dessen LinuxThreads installieren sollten!
-@xref{Linux}.
-
-Wenn Ihr System keine native Thread-Unterst�tzung bietet, m�ssen Sie MySQL
-unter Verwendung des MIT-pThread-Pakets bauen. Das betrifft �ltere
-FreeBSD-Systeme, SunOS 4.x, Solaris 2.4 und fr�her und einige andere.
-@xref{Which OS}.
-
-@itemize @bullet
-@item
-Auf den meisten Systemen k�nnen Sie die Benutzung von erzwingen, indem Sie
-@code{configure} mit der @code{--with-mit-Threads}-Option laufen lassen:
-
-@example
-shell> ./configure --with-mit-threads
-@end example
-
-Wenn Sie MIT-pThreads benutzen, wird das Bauen (Building) in ein
-Nicht-Quellcode-Verzeichnis nicht unterst�tzt, weil wir die �nderungen an
-diesem Code minimal halten wollen.
-
-@item
-Die �berpr�fungen, die festlegen, ob MIT-pThreads benutzt werden sollten
-oder nicht, finden nur in dem Teil des Konfigurationsprozesses statt, der
-mit dem Server-Code zu tun hat. Wenn Sie die Distribution mit
-@code{--without-server} konfigurieren, um nicht den Client-Code zu bauen,
-wissen die Clients nicht, ob sie MIT-pThreads benutzen sollen oder nicht
-und werden vorgabem��ig Unix-Socket-Verbindungen benutzen. Weil
-Unix-Sockets unter MIT-pThreads nicht laufen, hei�t das, dass Sie
-@code{-h} oder @code{--host} benutzen m�ssen, wenn Sie Client-Programme
-laufen lassen.
-
-@item
-Wenn MySQL so kompiliert wird, dass es MIT-pThreads benutzt, wird
-System-Sperren (System Locking) vorgabem��ig aus Performance-Gr�nden
-ausgeschaltet. Mit der @code{--use-locking}-Option k�nnen Sie dem Server
-mitteilen, System-Sperren zu benutzen.
-
-@item
-Manchmal schl�gt der pThread-@code{bind()}-Befehl fehl und bindet nicht an
-ein Socket, ohne jede Fehlermeldung (zumindest auf Solaris). Als Ergebnis
-schlagen alle Verbindungen zum Server fehl. Beispiel:
-
-@example
-shell> mysqladmin version
-mysqladmin: connect to server at '' failed;
-error: 'Can't connect to mysql server on localhost (146)'
-@end example
-
-Die L�sung besteht darin, den @code{mysqld}-Server zu killen und neu zu
-starten. Uns ist das nur dann passiert, wenn wir den Server gezwungen
-haben, herunter zu fahren und sofort danach einen Neustart durchgef�hrt
-haben.
-
-@item
-Bei MIT-pThreads l��t sich der @code{sleep()}-Systemaufruf nicht mit
-@code{SIGINT} (break) unterbrechen. Das merken Sie nur, wenn Sie
-@code{mysqladmin --sleep} ausf�hren. Sie m�ssen dann warten, bis der
-@code{sleep()}-Aufruf beendet wurde, bevor die Unterbrechungsanforderung
-(Interrupt) bedient wird und der Prozess anh�lt.
-
-@item
-Wenn Sie linken, erhalten Sie m�glicherweise Warnmeldungen wie diese
-(zumindest auf Solaris). Sie k�nnen sie ignorieren:
-
-@example
-ld: warning: symbol `_iob' hat differing sizes:
- (file /my/local/pThreads/lib/libpThread.a(findfp.o) value=0x4;
-file /usr/lib/libc.so value=0x140);
- /my/local/pThreads/lib/libpThread.a(findfp.o) definition taken
-ld: warning: symbol `__iob' hat differing sizes:
- (file /my/local/pThreads/lib/libpThread.a(findfp.o) value=0x4;
-file /usr/lib/libc.so value=0x140);
- /my/local/pThreads/lib/libpThread.a(findfp.o) definition taken
-@end example
-
-@item
-Einige weitere Warnungen k�nnen ebenfalls ignoriert werden:
-
-@example
-implicit declaration of function `int strtoll(...)'
-implicit declaration of function `int strtoul(...)'
-@end example
-
-@item
-Wir haben es bislang nicht geschafft, @code{readline} mit MIT-pThreads zum
-Laufen zu bringen. (Das wird zwar nicht ben�tigt, mag aber f�r einige
-interessant sein.)
-@end itemize
-
-@menu
-* Windows-Umgebung vorbereiten::
-@end menu
-
-@node Windows-Umgebung vorbereiten, , MIT-pthreads, MIT-pthreads
-@c German node <no English equivalent>
-@subsubsection Vorbereitung der Windows-Umgebung
-
-@node Windows source build, , MIT-pthreads, Installing source
-@c German node Windows-Quelldistribution
-@subsection Windows-Quelldistribution
-
-Sie ben�tigen folgendes:
-
-@itemize @bullet
-@item
-VC++-6.0-Kompiler (aktualisiert mit Service-Pack 4 oder 5 und dem
-Pr�prozessor-Paket). Das Pr�prozessor-Paket wird f�r den Makro-Assembler
-ben�tigt. Weitere Details finden Sie unter:
-@uref{http://msdn.microsoft.com/vstudio/sp/vs6sp5/faq.asp}.
-@item
-Die MySQL-Quelldistribution f�r Windows, die von
-@uref{http://www.mysql.com/downloads/} herunter geladen werden kann.
-@end itemize
-
-MySQL bauen
-
-@enumerate
-@item
-Erzeugen Sie ein Arbeitsverzeichnis (z. B. workdir).
-@item
-Entpacken Sie die Quelldistribution in dieses Verzeichnis.
-@item
-Starten Sie den VC++-6.0-Kompiler.
-@item
-W�hlen Sie im @code{File}-Men� @code{Open Workspace}.
-@item
-�ffnen Sie den @file{mysql.dsw}-Workspace, den Sie im Arbeitsverzeichnis
-finden.
-@item
-W�hlen Sie im @code{Build}-Men� das @code{Set Active Configuration}-
-Men�.
-@item
-W�hlen Sie @code{mysqld - Win32 Debug} und klicken Sie auf OK.
-@item
-Dr�cken Sie @code{F7}, um mit dem Bauen des Debug-Servers, der
-Bibliotheken und einiger Client-Applikationen zu beginnen.
-@item
-Wenn das Kompilieren beendet ist, kopieren Sie die Bibliotheken und die
-ausf�hrbaren Dateien in ein separates Verzeichnis.
-@item
-Kompilieren Sie die Release-Versionen, die Sie haben wollen, auf
-dieselbe Art.
-@item
-Erzeugen Sie das Verzeichnis f�r die MySQL-Dateien, z. B.
-@file{c:\mysql}.
-@item
-Kopieren Sie aus dem Arbeitsverzeichnis folgende Verzeichnisse in das
-c:\mysql-Verzeichnis:
-
-@itemize @bullet
-@item Data
-@item Docs
-@item Share
-@end itemize
-
-@item
-Erzeugen Sie das Verzeichnis @file{c:\mysql\bin} und kopieren Sie alle
-Server und Clients, die Sie vorher kompiliert haben, hinein.
-@item
-Wenn Sie wollen, k�nnen Sie auch das @file{lib}-Verzeichnis erzeugen und
-die vorher kompilierten Bibliotheken hinein kopieren.
-@item
-F�hren Sie mit Visual Studio ein Clean durch.
-@end enumerate
-
-Konfigurieren und starten Sie den Server auf dieselbe Weise wie bei der
-Windows-Bin�rdistribution. @xref{Windows-Umgebung vorbereiten}.
-
-
-@node Post-installation, Upgrade, Installing source, Installing
-@c German node Nach der Installation
-@section Einstellungen und Tests nach der Installation
-
-@cindex Nach der Installation, Einstellungen und Tests
-@cindex Testen, nach der Installation
-@cindex Setup, nach der Installation
-
-
-Wenn Sie MySQL erst einmal installiert haben (aus einer Bin�r- oder einer
-Quelldistribution), m�ssen Sie die Berechtigungstabellen (Grant Tables)
-initialisieren, den Server starten und sicherstellen, dass der Server
-korrekt funktioniert. Eventuell wollen Sie auch einrichten, dass der Server
-automatisch gestartet und angehalten wird, wenn Ihr System startet oder
-herunter gefahren wird.
-
-Normalerweise installieren Sie die Berechtigungstabellen und starten den
-Server wie folgt:
-Bei der Installation einer Quelldistribution:
-@cindex Start, den Server
-@cindex Server, starten
-
-@example
-shell> ./scripts/mysql_install_db
-shell> cd mysql_installations_verzeichnis
-shell> ./bin/safe_mysqld --user=mysql &
-@end example
-
-Bei einer Bin�rdistribution (nicht RPM- oder pkg-Pakete) tun Sie folgendes:
-
-@example
-shell> cd mysql_installations_verzeichnis
-shell> ./bin/mysql_install_db
-shell> ./bin/safe_mysqld --user=mysql &
-@end example
-
-Das legt die @code{mysql}-Datenbank an, die alle Zugriffsrechte auf
-Datenbanken enth�lt, die @code{test}-Datenbank, die Sie benutzen k�nnen, um
-MySQL zu testen und zus�tzlich Berechtigungseintr�ge f�r den Benutzer, der
-@code{mysql_install_db} ausf�hrt sowie einen @code{root}-Benutzer (ohne
-Passworte!). Durch den letzten Befehl wird der @code{mysqld}-Server
-gestartet.
-
-@code{mysql_install_db} �berschreibt keine alten Berechtigungstabellen,
-deshalb sollte es unter allen Umst�nden sicher sein. Wenn Sie die
-@code{test}-Datenbank nicht haben wollen, k�nnen Sie sie mit
-@code{mysqladmin -u root drop test} entfernen.
-
-Am einfachsten l��t sich das Durchtesten vom obersten Verzeichnis der
-MySQL-Distribution durchf�hren. Bei einer Bin�rdistribution ist das Ihr
-Installationsverzeichnis (�blicherweise etwas wie @file{/usr/local/mysql}).
-Bei einer Quelldistribution ist es das Hauptverzeichnis Ihres
-MySQL-Source-Trees.
-@cindex Testen, den Server
-
-
-In den unten dargestellten Befehlen dieses Abschnitts und der folgenden
-Unterabschnitte ist @code{BINDIR} der Pfad zu dem Speicherort, wo Programme
-wie @code{mysqladmin} und @code{safe_mysqld} installiert sind. Bei einer
-Bin�rdistribution ist das @file{bin}-Verzeichnis innerhalb der
-Distribution. Bei einer Quelldistribution ist @code{BINDIR} wahrscheinlich
-@file{/usr/local/bin}, es sei denn, Sie haben ein anderes
-Installationsverzeichnis als @file{/usr/local} angegeben, als Sie
-@code{configure} laufen lie�en. @code{EXECDIR} ist der Speicherort, in dem
-der @code{mysqld}-Server installiert ist. Bei einer Bin�rdistribution ist
-das derselbe wie @code{BINDIR}. Bei einer Quelldistribution ist
-@code{EXECDIR} wahrscheinlich @file{/usr/local/libexec}.
-
-Das Durchtesten wird im Folgenden detailliert beschrieben.
-@cindex Testen, Installation
-
-@enumerate
-@item
-Falls notwendig, starten Sie den @code{mysqld}-Server und richten die
-anf�nglichen MySQL-Berechtigungstabellen ein, die alle Zugriffsrechte
-enthalten, die festlegen, wie sich Benutzer mit dem Server verbinden
-d�rfen. Das wird normalerweise mit dem @code{mysql_install_db}-Skript
-gemacht:
-
-@example
-shell> scripts/mysql_install_db
-@end example
-
-Typischerweise m�ssen Sie @code{mysql_install_db} nur laufen lassen, wenn
-Sie MySQL zum ersten Mal installieren. Wenn Sie eine existierende
-Installation aktualisieren (Update), k�nnen Sie deshalb diesen Schritt
-�berspringen. (@code{mysql_install_db} ist jedoch ziemlich sicher und
-aktualisiert keine bereits existierenden Tabellen, daher k�nnen Sie im
-Zweifel immer @code{mysql_install_db} laufen lassen.)
-
-@code{mysql_install_db} erzeugt sechs Tabellen (@code{user}, @code{db},
-@code{host}, @code{tables_priv}, @code{columns_priv} und @code{func}) in
-der @code{mysql}-Datenbank. Eine Beschreibung der anf�nglichen
-Zugriffsrechte wird in @ref{Privileges} festgelegt. Kurz gesagt
-erlauben diese Zugriffsrechte dem MySQL-Benutzer @code{root}, alles zu tun,
-und jedem, Datenbanken anzulegen oder zu benutzen, deren Name @code{'test'}
-ist oder mit @code{'test_'} beginnt.
-
-Wenn Sie die Zugriffsberechtigungstabellen (Grant Tables) nicht einrichten,
-wird folgender Fehler in der Logdatei erscheinen, wenn Sie den Server
-starten:
-
-@tindex host.frm, problems finding
-@example
-mysqld: Can't find file: 'host.frm'
-@end example
-
-Dasselbe kann auch bei einer MySQL-Bin�rdistribution passieren, wenn Sie
-MySQL nicht mit exakt @code{./bin/safe_mysqld} starten!
-@xref{safe_mysqld, , @code{safe_mysqld}}.
-
-Eventuell m�ssen Sie @code{mysql_install_db} als @code{root} laufen lassen.
-Wenn Sie wollen, k�nnen Sie jedoch den MySQL-Server als unprivilegierter
-(non-@code{root})-Benutzer laufen lassen, vorausgesetzt, dieser Benutzer
-darf Dateien im Datenbank-Verzeichnis lesen und schreiben. Anweisungen, wie
-Sie MySQL als unprivilegierter Benutzer laufen lassen k�nnen, finden Sie in
-@ref{Privilege changes, , Den MySQL-Benutzer �ndern}.
-
-Wenn Sie Probleme mit @code{mysql_install_db} bekommen, sehen Sie bitte
-unter @ref{mysql_install_db, , @code{mysql_install_db}} nach.
-
-Es gibt eine Reihe von Alternativen zum Laufenlassen des
-@code{mysql_install_db}-Skripts, was mit der MySQL-Distribution
-mitgeliefert wird:
-
-@itemize @bullet
-@item
-Sie k�nnen @code{mysql_install_db} editieren, bevor Sie es laufen lassen,
-um die anf�nglichen Zugriffsrechte zu �ndern, die in die Rechtetabellen
-installiert werden. Das ist n�tzlich, wenn Sie MySQL auf einer gro�en Zahl
-von Maschinen mit denselben Zugriffsrechten installieren wollen. In diesem
-Fall m�ssen Sie wahrscheinlich nur ein paar zus�tzliche
-@code{INSERT}-Statements f�r die @code{mysql.user}- und
-@code{mysql.db}-Tabellen hinzuf�gen!
-
-@item
-Wenn Sie Dinge in den Berechtigungstabellen �ndern wollen, nachdem diese
-installiert wurden, lassen Sie @code{mysql_install_db} laufen und geben
-dann den Befehl @code{mysql -u root mysql} ein, um sich als
-MySQL-@code{root}-Benutzer mit den Berechtigungstabellen zu verbinden.
-Danach k�nnen Sie SQL-Statements eingeben, um die Tabellen direkt zu
-ver�ndern.
-
-@item
-Es ist m�glich, die Berechtigungstabellen komplett neu zu erzeugen, nachdem
-Sie angelegt wurden. Das werden Sie zum Beispiel tun wollen, wenn Sie die
-Tabellen bereits angelegt haben, Sie nun aber neu anlegen wollen, weil Sie
-@code{mysql_install_db} editiert haben.
-@end itemize
-
-Zu weiteren Informationen �ber diese Alternativen siehe
-@ref{Privilege system}.
-
-@item
-Starten Sie den MySQL-Server wie folgt:
-
-@example
-shell> cd mysql_installations_verzeichnis
-shell> bin/safe_mysqld &
-@end example
-
-Wenn Sie Probleme haben, den Server zu starten, sehen Sie unter
-@ref{Starting server} nach.
-
-@item
-Benutzen Sie @code{mysqladmin}, um sicherzustellen, dass der Server l�uft.
-Die folgenden Befehle sind ein einfacher Test, um zu �berpr�fen, ob der
-Server l�uft und auf Verbindungen reagiert:
-
-@example
-shell> BINDIR/mysqladmin version
-shell> BINDIR/mysqladmin variables
-@end example
-
-Die Ausgabe von @code{mysqladmin version} kann geringf�gig variieren,
-abh�ngig von Ihrer Plattform und der Version von MySQL, sollte aber etwa
-wie folgt aussehen:
-
-@example
-shell> BINDIR/mysqladmin version
-mysqladmin Ver 8.14 Distrib 3.23.32, for linux on i586
-Copyright (C) 2000 MySQL AB & MySQL Finnland AB & TCX DataKonsult AB
-This software comes mit ABSOLUTELY NO WARRANTY. This ist free software,
-und you are welcome to modify und redistribute it under the GPL license
-
-Server version 3.23.32-debug
-Protokoll version 10
-Connection Localhost via Unix socket
-TCP port 3306
-UNIX socket /tmp/mysql.sock
-Uptime: 16 sec
-
-Threads: 1 Questions: 9 Slow queries: 0 Opens: 7 Flush tables: 2 Open tables: 0 Queries per second avg: 0.000 Memory in use: 132K Max memory used: 16773K
-@end example
-
-Um ein Gef�hl daf�r zu bekommen, was Sie sonst noch mit
-@code{BINDIR/mysqladmin} tun k�nnen, rufen Sie es mit der
-@code{--help}-Option auf.
-
-@item
-Stellen Sie sicher, dass Sie den Server herunter fahren k�nnen:
-@cindex Server, Herunterfahren
-@cindex Herunterfahren, den Server
-
-@example
-shell> BINDIR/mysqladmin -u root shutdown
-@end example
-
-@item
-Stellen Sie sicher, dass Sie den Server erneut starten k�nnen. Tun Sie das
-unter Benutzung von @code{safe_mysqld} oder indem Sie @code{mysqld} direkt
-aufrufen. Beispiel:
-
-@cindex Server, neu starten
-@cindex Neustart, des Servers
-
-@example
-shell> BINDIR/safe_mysqld --log &
-@end example
-
-Wenn @code{safe_mysqld} fehlschl�gt, versuchen Sie, es vom
-MySQL-Installationsverzeichnis aus zu starten (falls Sie noch nicht dort
-sind). Wenn das nicht funktioniert, sehen Sie unter see @ref{Starting server} nach.
-
-@item
-Lassen Sie ein paar einfache Tests ablaufen um sicherzustellen, dass der
-Server funktioniert. Die Ausgabe sollte �hnlich der folgenden sein:
-
-@example
-shell> BINDIR/mysqlshow
-+-----------+
-| Databases |
-+-----------+
-| mysql |
-+-----------+
-
-shell> BINDIR/mysqlshow mysql
-Datenbank: mysql
-+--------------+
-| Tables |
-+--------------+
-| columns_priv |
-| db |
-| func |
-| host |
-| tables_priv |
-| user |
-+--------------+
-
-shell> BINDIR/mysql -e "select host,db,user from db" mysql
-+------+--------+------+
-| host | db | user |
-+------+--------+------+
-| % | test | |
-| % | test_% | |
-+------+--------+------+
-@end example
-
-Zus�tzlich gibt es eine Benchmark-Suite im @file{sql-bench}-Verzeichnis
-(unterhalb des MySQL-Installationsverzeichnisses), die Sie benutzen k�nnen,
-um die Leistungsdaten von MySQL auf verschiedenen Plattformen zu
-vergleichen. Das @file{sql-bench/Results}-Verzeichnis enth�lt die
-Ergebnisse vieler Testl�ufe mit verschiedenen Datenbanken und Plattformen.
-Um alle Tests durchzuf�hren, geben Sie folgende Befehle ein:
-
-@example
-shell> cd sql-bench
-shell> run-all-tests
-@end example
-
-Wenn Sie kein @file{sql-bench}-Verzeichnis haben, benutzen Sie
-wahrscheinlich ein RPM f�r eine Bin�rdistribution. (Quelldistributions-RPMs
-beinhalten das Benchmark-Verzeichnis.) In diesem Fall m�ssen Sie die
-Benchmark-Suite zuerst installieren, bevor Sie sie benutzen k�nnen. Ab
-MySQL Version 3.22 gibt es Benchmark-RPM-Dateien, die
-@file{mysql-bench-VERSION-i386.rpm} benannt sind, die Benchmark-Code und
-Daten enthalten.
-
-Wenn Sie eine Quelldistribution haben, k�nnen Sie auch die Tests im
-@file{tests}-Unterverzeichnis ausf�hren. Um beispielsweise
-@file{auto_increment.tst} auszuf�hren, geben Sie folgendes ein:
-
-@example
-shell> BINDIR/mysql -vvf test < ./tests/auto_increment.tst
-@end example
-
-Die Ergebnisse stehen dann in der @file{./tests/auto_increment.res}-Datei.
-@end enumerate
-
-
-@menu
-* mysql_install_db::
-* Starting server::
-* Automatic start::
-@end menu
-
-@node mysql_install_db, Starting server, Post-installation, Post-installation
-@c German node mysql_install_db
-@subsection Probleme mit @code{mysql_install_db}
-@cindex @code{mysql_install_db}-Skript
-@cindex Skripte, @code{mysql_install_db}
-
-Der Zweck des @code{mysql_install_db}-Skripts ist, neue
-MySQL-Berechtigungstabellen zu erzeugen. Es betrifft keine anderen Daten!
-Es tut nichts, wenn Sie bereits MySQL-Berechtigungstabellen installiert
-haben!
-
-Wenn Sie Ihre Berechtigungstabellen neu erzeugen wollen, sollten Sie den
-@code{mysqld}-Server herunter fahren, falls er l�uft, und dann etwas
-�hnliches wie folgendes tun:
-
-@example
-mv mysql-data-verzeichnis/mysql mysql-data-verzeichnis/mysql-old
-mysql_install_db
-@end example
-
-Dieser Abschnitt listet Probleme auf, denen Sie vielleicht begegnen, wenn
-Sie @code{mysql_install_db} laufen lassen:
-
-@table @strong
-@item @code{mysql_install_db} installiert die Berechtigungstabellen nicht.
-
-Eventuell stellen Sie fest, dass @code{mysql_install_db} bei der
-Installations der Berechtigungstabellen fehlschl�gt und mit folgenden
-Meldungen endet:
-
-@example
-starting mysqld daemon with databases from XXXXXX
-mysql daemon ended
-@end example
-
-In diesem Fall sollten Sie einen gr�ndlichen Blick in die Log-Datei werfen!
-Diese sollte sich im Verzeichnis @file{XXXXXX} befinden, das in der
-Fehlermeldung ausgegeben wird, und sollte anzeigen, warum @code{mysqld}
-nicht startete. Wenn Sie nicht verstehen, was passiert ist, schicken Sie
-einen Bug-Bericht inklusive Log. Benutzen Sie hierf�r @code{mysqlbug}!
-@xref{Bug reports}.
-
-@item Es l�uft bereits ein @code{mysqld}-Daemon.
-
-In diesem Fall m�ssen Sie wahrscheinlich @code{mysql_install_db} �berhaupt
-nicht starten. Sie m�ssen @code{mysql_install_db} nur einmal starten, und
-zwar, wenn Sie MySQL zum ersten Mal installieren.
-
-@item Die Installation eines zweiten @code{mysqld}-Daemons schl�gt fehl,
-wenn bereits ein Daemon l�uft.
-
-Das kann vorkommen, wenn Sie bereits eine existierende MySQL-Installation
-haben, aber eine neue Installation an einem anderen Speicherort
-unterbringen wollen (zum Beispiel f�r Testzwecke, oder vielleicht wollen
-Sie auch einfach zwei Installationen zugleich laufen lassen. Im Allgemeinen
-ist der Grund f�r das Problem, wenn Sie versuchen, den zweiten Server
-laufen zu lassen, dass der zweite Server versucht, denselben Socket und
-Port wie der alte zu benutzen. In diesem Fall erhalten Sie als
-Fehlermeldung: @code{Can't start server: Bind on TCP/IP port: Address
-already in use} oder @code{Can't start server : Bind on unix socket...}.
-@xref{Multiple servers}.
-
-@item Sie haben keinen Schreibzugriff auf @file{/tmp}.
-@cindex Schreibzugriff, tmp
-@cindex Tempor�re Datei, Schreibzugriff
-@cindex Dateien, @code{tmp}
-
-Wenn Sie keinen Schreibzugriff haben, um eine Socket-Datei am
-vorgabem��igen Ort anzulegen (in @file{/tmp}) oder keine Berechtigung, um
-tempor�re Dateien in @file{/tmp} anzulegen, erhalten Sie einen Fehler, wenn
-Sie @code{mysql_install_db} laufen lassen oder starten oder wenn Sie
-@code{mysqld} benutzen.
-
-So k�nnen Sie einen anderen Socket und ein anderes tempor�res Verzeichnis
-festlegen:
-
-@tindex TMPDIR Umgebungsvariable
-@tindex MYSQL_UNIX_PORT Umgebungsvariable
-@tindex Umgebungsvariable, TMPDIR
-@tindex Umgebungsvariable, MYSQL_UNIX_PORT
-@example
-shell> TMPDIR=/irgendein_temporaeres_verzeichnis/
-shell> MYSQL_UNIX_PORT=/irgendein_temporaeres_verzeichnis/mysqld.sock
-shell> export TMPDIR MYSQL_UNIX_PORT
-@end example
-
-@xref{Problems with mysql.sock}.
-
-@file{irgendein_temporaeres_verzeichnis} sollte der Pfad zu einem
-Verzeichnis sein, f�r das Sie Schreibberechtigung haben.
-@xref{Environment variables}.
-
-Danach sollten Sie in der Lage sein, @code{mysql_install_db} laufen zu
-lassen und den Server zu starten, und zwar mit folgenden Befehlen:
-
-@example
-shell> scripts/mysql_install_db
-shell> BINDIR/safe_mysqld &
-@end example
-
-@item @code{mysqld} st�rzt sofort ab
-
-Wenn Sie RedHat Version 5.0 mit einer Version von @code{glibc} laufen
-lassen, die �lter als 2.0.7-5 ist, sollten Sie sicherstellen, dass Sie alle
-@code{glibc}-Patches installiert haben!
-Dar�ber gibt es jede Menge Informationen in den MySQL-Mail-Archiven. Links
-zu den Mail-Archiven finden Sie online unter
-@uref{http://www.mysql.com/documentation/}.
-Siehe auch @ref{Linux}.
-
-Sie k�nnen @code{mysqld} auch manuell starten, dabei die
-@code{--skip-grant-tables}-Option benutzen und dann die
-Berechtigungsinformationen selbst mit @code{mysql} eintragen:
-
-@example
-shell> BINDIR/safe_mysqld --skip-grant-tables &
-shell> BINDIR/mysql -u root mysql
-@end example
-
-Von @code{mysql} aus geben Sie die SQL-Befehle ein, die in
-@code{mysql_install_db} stehen. Stellen Sie sicher, dass Sie danach
-@code{mysqladmin flush-privileges} oder @code{mysqladmin reload} laufen
-lassen, um dem Server mitzuteilen, die Berechtigungstabellen neu zu laden.
-@end table
-
-
-@node Starting server, Automatic start, mysql_install_db, Post-installation
-@c German node Server starten
-@subsection Probleme mit dem Start des MySQL-Servers
-@cindex Server, Startprobleme
-@cindex Probleme, beim Starten des Servers
-
-Wenn Sie Tabellen einsetzen werden, die Transaktionen unterst�tzen (InnoDB,
-BDB), sollten Sie zuerst eine my.cnf-Datei anlegen und die
-Startoptionen f�r die Tabellentypen setzen, die Sie einsetzen wollen.
-@xref{Table types}.
-
-Im allgemeinen starten Sie den @code{mysqld}-Server auf eine der drei
-folgenden Weisen:
-
-@itemize @bullet
-@item
-Indem Sie @code{mysql.server} aufrufen. Dieses Skript wird haupts�chlich
-beim Systemstart und -herunterfahren eingesetzt. Es wird ausf�hrlicher in
-@ref{Automatic start} beschrieben.
-
-@item
-Indem Sie @code{safe_mysqld} aufrufen. Dieses Skript versucht die korrekten
-Optionen f�r @code{mysqld} festzustellen und l��t den Server dann mit
-diesen Optionen laufen. @xref{safe_mysqld, ,@code{safe_mysqld}}.
-
-@item
-Auf Windows NT sollten Sie @code{mysqld} wie folgt als Systemdienst
-starten:
-@example
-bin\mysqld-nt --install # MySQL als Systemdienst installieren
-@end example
-
-Jetzt k�nnen Sie @code{mysqld} wie folgt starten / anhalten:
-@example
-NET START mysql
-NET STOP mysql
-@end example
-
-Beachten Sie, dass Sie in diesem Fall keine weiteren Optionen f�r
-@code{mysqld} benutzen k�nnen!
-
-Sie k�nnen den Systemdienst wie folgt entfernen:
-@example
-bin\mysqld-nt --remove # MySQL als Systemdienst entfernen
-@end example
-
-@item
-Indem Sie @code{mysqld} direkt aufrufen.
-@end itemize
-
-Wenn der @code{mysqld}-Daemon hoch f�hrt, wechselt er in das
-Daten-Verzeichnis. Dort erwartet er, Log-Dateien und die (process ID)-Datei
-schreiben zu k�nnen. Ebenfalls erwartet er dort, Datenbanken zu finden.
-
-Der Speicherort des Daten-Verzeichnisses wird zum Zeitpunkt des Kompilierens
-der Distribution fest verdrahtet. Wenn @code{mysqld} jedoch erwartet, das
-Daten-Verzeichnis irgendwo sonst als an der Stelle zu finden, wo es auf
-Ihrem System tats�chlich ist, funktioniert er nicht richtig. Wenn Sie
-Probleme mit fehlerhaften Pfaden haben, k�nnen Sie durch den Aufruf von
-@code{mysqld} mit der @code{--help}-Option herausfinden, welche Optionen
-@code{mysqld} erlaubt und was die vorgabem��igen Pfad-Einstellung sind.
-Sie k�nnen die Vorgaben �berschreiben, indem Sie die korrekten Pfadnamen
-als Kommandozeilen-Argumente f�r @code{mysqld} festlegen. (Diese Optionen
-k�nnen auch bei @code{safe_mysqld} benutzt werden.)
-
-Normalerweise sollte es lediglich n�tig sein, @code{mysqld} das
-Basis-Verzeichnis mitzuteilen, wo MySQL installiert ist. Das k�nnen Sie mit
-der Option @code{--basedir} machen. Zus�tzlich k�nnen Sie @code{--help}
-benutzen, um die Auswirkung der Pfad�nderungsoptionen zu �berpr�fen
-(beachten Sie, dass @code{--help} die letzte Option des
-@code{mysqld}-Befehls wein @emph{muss}. Beispiel:
-
-@example
-shell> EXECDIR/mysqld --basedir=/usr/local --help
-@end example
-
-Wenn Sie die Pfadeinstellungen erst einmal festgelegt haben, die Sie
-wollen, starten Sie den Server ohne die @code{--help}-Option.
-
-Mit welcher Methode auch immer Sie den Server starten: Wenn er nicht
-korrekt hoch f�hrt, untersuchen Sie die Log-Datei, um zu sehen, ob Sie den
-Grund daf�r herausfinden k�nnen. Log-Dateien liegen im Daten-Verzeichnis
-(typischerweise @file{/usr/local/mysql/data} bei einer Bin�rdistribution,
-@file{/usr/local/var} bei einer Quelldistribution und
-@file{\mysql\data\mysql.err} unter Windows). Suchen Sie im Daten-Verzeichnis
-nach Dateien mit Namen der Form @file{host_name.err} und
-@file{host_name.log}, wobei @code{host_name} der Name Ihres Server-Hosts
-ist. Sehen Sie in den letzten paar Zeilen dieser Dateien nach:
-
-@example
-shell> tail host_name.err
-shell> tail host_name.log
-@end example
-
-Wenn Sie etwas wie das Folgende in der Log-Datei finden:
-@example
-000729 14:50:10 bdb: Recovery function for LSN 1 27595 failed
-000729 14:50:10 bdb: warning: ./test/t1.db: No such file or directory
-000729 14:50:10 Can't init databases
-@end example
-
-Das bedeutet, dass Sie @code{mysqld} nicht mit @code{--bdb-no-recover}
-gestartet haben und Berkeley DB findet, dass etwas mit seinen Log-Dateien
-nicht in Ordnung ist, als es versuchte, Ihre Datenbanken
-wiederherzustellen. Um weitermachen zu k�nnen, sollten Sie alle alten
-Berkeley-DB-Log-Dateien aus dem Datenbankverzeichnis an eine andere Stelle
-verschieben, wo Sie sie sp�ter untersuchen k�nnen. Die Log-Dateien sind wie
-@file{log.0000000001} benannt, wobei die Nummer im Zeitablauf hochgez�hlt
-wird.
-
-Wenn Sie @code{mysqld} mit BDB-Tabellenunterst�tzung laufen lassen und
-@code{mysqld} beim Start einen Speicherauszug (Core Dump) liefert, k�nnte
-das an Problemen mit den BDB-Wiederherstellungs-Logs liegen. In diesem Fall
-k�nnen Sie versuchen, @code{mysqld} mit @code{--bdb-no-recover} zu starten.
-Wenn das hilft, sollten Sie danach alle @file{log.*}-Dateien aus dem
-Daten-Verzeichnis entfernen und versuchen, @code{mysqld} erneut zu starten.
-
-Wenn Sie folgenden Fehler bekommen, bedeutet das, dass ein anderes Programm
-(oder ein anderer @code{mysqld}-Server) bereits den TCP/IP-Port oder
--Socket benutzt, den @code{mysqld} versucht zu benutzen:
-
-@example
-Can't start server: Bind on TCP/IP-Port: Address already in use
- oder
-Can't start server : Bind on unix socket...
-@end example
-
-Benutzen Sie @code{ps}, um sicherzustellen, dass kein weiterer
-@code{mysqld}-Server l�uft. Wenn Sie keinen weiteren Server finden, k�nnen
-Sie den Befehl @code{telnet ihr-host-name tcp-ip-port-nummer} eingeben und
-mehrere Male @code{EINGABE} dr�cken. Wenn Sie keine Fehlermeldung wie
-@code{telnet: Unable to connect to remote host: Connection refused}
-erhalten, benutzt irgend etwas anderes den TCP/IP-Port, den @code{mysqld}
-versucht zu benutzen. Siehe @ref{mysql_install_db} und @ref{Multiple servers}.
-
-Wenn @code{mysqld} gerade l�uft, k�nnen Sie herausfinden, welche
-Pfadeinstellungen er benutzt, indem Sie folgenden Befehl ausf�hren:
-
-@example
-shell> mysqladmin variables
-@end example
-
-oder
-
-@example
-shell> mysqladmin -h 'ihr-host-name' variables
-@end example
-
-Wenn @code{safe_mysqld} hoch den Server hoch f�hrt, Sie sich aber nicht mit
-ihm verbinden k�nnen, stellen Sie sicher, dass Sie einen Eintrag wie den
-folgenden in @file{/etc/hosts} haben:
-
-@example
-127.0.0.1 localhost
-@end example
-
-Dieses Problem tritt nur auf Systemen auf, die keine funktionierende
-Thread-Bibliothek besitzen, und f�r die MySQL so konfiguriert werden muss,
-dass es MIT-pThreads benutzt.
-
-Wenn Sie es nicht schaffen, @code{mysqld} zu starten, k�nnen Sie versuchen,
-eine Trace-Datei anzulegen, um das Problem zu finden. @xref{Making trace files}.
-
-Wenn Sie InnoDB-Tabellen benutzen, sehen Sie bei den InnoDB-spezifischen
-Startoptionen nach. @xref{InnoDB start}.
-
-Wenn Sie BDB-(Berkeley DB)-Tabellen benutzen, sollten Sie sich mit den
-verschiedenen Startoptionen von BDB vertraut machen. @xref{BDB start}.
-
-
-@node Automatic start, , Starting server, Post-installation
-@c German node Automatischer Start
-@subsection MySQL automatisch starten und anhalten
-
-@cindex Start, Server automatisch starten
-@cindex Anhalten, den Server
-@cindex Server, starten und anhalten
-
-Die @code{mysql.server}- und @code{safe_mysqld}-Skripte k�nnen benutzt
-werden, um den Server automatisch beim Hochfahren des Systems zu starten.
-@code{mysql.server} kann ebenfalls dazu benutzt werden, den Server
-anzuhalten.
-
-Das @code{mysql.server}-Skript kann benutzt werden, um den Server zu
-starten oder anzuhalten, indem man es mit den @code{start}- oder
-@code{stop}-Argumenten aufruft:
-
-@example
-shell> mysql.server start
-shell> mysql.server stop
-@end example
-
-@code{mysql.server} liegt im @file{share/mysql}-Verzeichnis unterhalb des
-MySQL-Installationsverzeichnisses oder im @file{support-files}-Verzeichnis
-des MySQL-Source-Trees.
-
-Bevor @code{mysql.server} den Server startet, wechselt es in das
-MySQL-Installationsverzeichnis. Dann ruft es @code{safe_mysqld} auf.
-Eventuell m�ssen Sie @code{mysql.server} editieren, wenn Sie eine
-Bin�rdistribution haben, die Sie an eine nicht stardardm��ige Stelle
-installiert haben. �ndern Sie es so ab, dass es in das richtige Verzeichnis
-wechselt (@code{cd}), bevor es @code{safe_mysqld} startet. Wenn Sie wollen,
-dass der Server unter einem bestimmten Benutzer l�uft, f�gen Sie eine
-entsprechende @code{user}-Zeile zur @file{/etc/my.cnf}-Datei hinzu, so wie
-weiter unten in diesem Abschnitt dargestellt.
-
-@code{mysql.server stop} h�lt den Server an, indem es ihm ein Signal
-sendet. Sie k�nnen den Server auch automatisch herunter fahren, indem Sie
-@code{mysqladmin shutdown} ausf�hren.
-
-Wenn Sie m�chten, k�nnen Sie diese Start- und Stop-Befehle an den
-entsprechenden Stellen Ihrer @file{/etc/rc*}-Dateien einf�gen, wenn Sie
-MySQL f�r Produktions-Applikationen benutzen. Beachten Sie, wenn Sie
-@code{mysql.server} editieren und dann gelegentlich MySQL aktualisieren
-(Update), dass dann Ihre ge�nderte Version �berschrieben wird. Daher
-sollten Sie eine Kopie Ihrer editierten Version machen, die Sie erneut
-installieren k�nnen.
-
-Wenn Ihr System @file{/etc/rc.local} benutzt, um externe Skripte zu
-starten, sollten Sie folgendes anh�ngen:
-@example
-/bin/sh -c 'cd /usr/local/mysql ; ./bin/safe_mysqld --user=mysql &'
-@end example
-
-@cindex Den Speicherort des Sockets �ndern
-Sie k�nnen Optionen f�r @code{mysql.server} in einer globalen
-@file{/etc/my.cnf}-Datei hinzuf�gen. Eine typische @file{/etc/my.cnf}-Datei
-sieht wie folgt aus:
-
-@example
-[mysqld]
-datadir=/usr/local/mysql/var
-socket=/var/tmp/mysql.sock
-port=3306
-user=mysql
-
-[mysql.server]
-basedir=/usr/local/mysql
-@end example
-
-Das @code{mysql.server}-Skript kennt folgende Optionen:
-@code{datadir}, @code{basedir} und @code{pid-file}.
-
-Folgende Tabelle zeigt, welche Optionsgruppen jedes der Startskripts aus
-den Optionsdateien liest:
-
-@multitable @columnfractions .20 .80
-@item @strong{Skript} @tab @strong{Optionsgruppen}
-@item @code{mysqld} @tab @code{mysqld} und @code{server}
-@item @code{mysql.server} @tab @code{mysql.server}, @code{mysqld}, und @code{server}
-@item @code{safe_mysqld} @tab @code{mysql.server}, @code{mysqld}, und @code{server}
-@end multitable
-
-@xref{Option files}.
-
-
-@node Upgrade, Operating System Specific Notes, Post-installation, Installing
-@c German node Upgrade
-@section MySQL aktualisieren (Upgrade / Downgrade)
-
-@cindex Upgrade
-@cindex Downgrade
-
-Sie k�nnen die MySQL-form- und data-Dateien jederzeit f�r verschiedene
-Versionen auf derselben Architektur benutzen, solange Sie dieselbe
-Grundversion von MySQL haben. Die aktuelle Grundversion ist 3. Wenn Sie den
-Zeichensatz �ndern, w�hrend MySQL l�uft (was auch die Sortierreihenfolge
-betreffen kann), m�ssen Sie @code{myisamchk -r -q} auf alle Tabellen
-ausf�hren. Ansonsten k�nnte es sein, dass Ihre Indexe nicht korrekt
-sortiert werden.
-
-Wenn Sie vor neuen Versionen zur�ck schrecken, k�nnen Sie Ihren alten
-@code{mysqld} zu etwas wie @code{mysqld}-'alte-versions-nummer' umbenennen.
-Wenn Ihr neuer @code{mysqld} dann etwas Unerwartetes tut, k�nnen Sie ihn
-einfach anhalten und mit Ihrem alten @code{mysqld} neu starten!
-
-Wenn Sie ein Upgrade vornehmen, sollte Sie nat�rlich Ihre alten Datenbanken
-sichern.
-
-Wenn Sie nach einem Upgrade auf Probleme mit neu kompilierten
-Client-Programmen sto�en, zum Beispiel @code{Commands out of sync} oder
-unerwartete Speicherausz�ge (Core Dumps), haben sie wahrscheinlich einen
-alten Header oder eine alte Bibliotheksdatei benutzt, als Sie die Programme
-kompilierten. In diesem Fall sollten Sie das Datum Ihrer
-@file{mysql.h}-Datei und @file{libmysqlclient.a}-Bibliothek �berpr�fen, um
-sicherzustellen, dass sie aus der neuen MySQL-Distribution stammten. Wenn
-nicht, kompilieren sie Ihre Programme bitte neu!
-
-Wenn Sie Probleme der Art erhalten, dass Ihr neuer @code{mysqld}-Server
-nicht startet oder dass Sie sich nicht ohne Passwort verbinden k�nnen,
-�berpr�fen Sie, ob Sie nicht etwa noch die alte @file{my.cnf}-Datei Ihrer
-alten Installation haben! Sie k�nnen das mit @code{program-name
---print-defaults} tun. Wenn es irgend etwas anderes als den Programmnamen
-ausgibt, haben Sie eine aktive @code{my.cnf}-Datei, die sich auf die Dinge
-auswirkt!
-
-Es ist eine gute Idee, die @code{Msql-Mysql-modules}-Distribution neu zu
-bauen und neu zu installieren, wann immer Sie ein neues Release von MySQL
-installieren, speziell dann, wenn Sie Symptome wie die bemerken, dass alle
-Ihre @code{DBI}-Skripte mit Core-Dumps abbrechen, nachdem Sie MySQL
-aktualisiert haben.
-
-
-@cindex Kompatibilit�t, zwischen MySQL-Versionen
-@cindex Upgrade, 3.23 auf 4.0
-@menu
-* Upgrading-from-3.23::
-* Upgrading-from-3.22::
-* Upgrading-from-3.21::
-* Upgrading-from-3.20::
-* Upgrading-to-arch::
-@end menu
-
-@node Upgrading-from-3.23, Upgrading-from-3.22, Upgrade, Upgrade
-@c German node Upgrading-from-3.23
-@subsection Upgrade von 3.23 auf Version 4.0
-
-Sie k�nnen Ihre alten data-Dateien ohne jede �nderung mit Version 4.0
-benutzen. Wenn Sie Ihre Daten eines MySQL-4.0-Servers f�r einen �lteren
-Server verwenden wollen, m�ssen Sie @code{mysqldump} benutzen.
-
-Alte Clients sollen mit einem Server Version 4.0 ohne jedes Problem
-funktionieren.
-
-Die folgende Liste stellt dar, auf was Sie aufpassen m�ssen, wenn Sie auf
-Version 4.0 aktualisieren (Upgrade):
-
-@itemize @bullet
-@item
-@file{safe_mysqld} wurde zu @file{mysqld_safe} umbenannt.
-@item
-Die alten C-API-Funktionen @code{mysql_drop_db}, @code{mysql_create_db} und
-@code{mysql_connect} werden nicht mehr unterst�tzt, es sei denn, MySQL wird
-mit @code{USE_OLD_FUNCTIONS} kompiliert.
-@item
-Sie sollten @code{TRUNCATE TABLE} benutzen, wenn Sie alle Zeilen aus einer
-Tabelle l�schen wollen und Ihnen egal ist, wie viele Zeilen gel�scht
-wurden. (@code{TRUNCATE TABLE} ist schneller als @code{DELETE FROM tabelle}).
-@item
-Sie bekommen einen Fehler, wenn Sie ein aktives @code{LOCK TABLES} oder
-eine aktive Transaktion am Laufen haben, wenn Sie versuchen, @code{TRUNCATE
-TABLE} oder @code{DROP DATABASE} auszuf�hren.
-@item
-Sie sollten Ganzzahl-(Integer)-Werte in BIGINT-Spalten benutzen (anstelle
-von Zeichenketten wie in MySQL 3.23). Man kann immer noch Zeichenketten
-benutzen, aber die Benutzung von Ganzzahlen ist viel effizienter.
-@item
-Das Format von @code{SHOW OPEN TABLE} hat sich ge�ndert.
-@item
-Multithreaded Clients sollten @code{mysql_thread_init()} und
-@code{mysql_thread_end()} benutzen. @xref{Threaded clients}.
-@end itemize
-@node Upgrading-from-3.22, Upgrading-from-3.21, Upgrading-from-3.23, Upgrade
-@c German node Upgrading-from-3.22
-@subsection Upgrade von einer Version 3.22 auf 3.23
-
-@cindex Kompatibilit�t, zwischen MySQL-Versionen
-@cindex Upgrade, 3.22 to 3.23
-
-MySQL-Version 3.23 unterst�tzt Tabellen des neuen @code{MyISAM}-Typs und
-des alten @code{ISAM}-Typs. Sie m�ssen Ihre alten Tabellen nicht
-konvertieren, um sie mit Version 3.23 einsetzen zu k�nnen. Vorgabem��ig
-werden alle neuen Tabellen mit dem Typ @code{MyISAM} angelegt (es sei denn,
-Sie starten @code{mysqld} mit der @code{--default-table-type=isam}-Option).
-Sie k�nnen eine @code{ISAM}-Tabelle zu einer @code{MyISAM}-Tabelle mit
-@code{ALTER TABLE tabelle TYPE=MyISAM} konvertieren oder mit dem
-Perl-Skript @code{mysql_convert_table_format}.
-
-Clients der Versionen 3.22 und 3.21 funktionieren ohne jedes Problem mit
-einem Server der Version 3.23.
-
-Die folgende Liste stellt dar, auf was Sie aufpassen m�ssen, wenn Sie auf
-Version 3.23 aktualisieren (Upgrade):
-
-@itemize @bullet
-@item
-Alle Tabellen, die den @code{tis620}-Zeichensatz benutzen, m�ssen mit
-@code{myisamchk -r} oder @code{REPAIR TABLE} in Ordnung gebracht werden.
-
-@item
-Wenn Sie ein @code{DROP DATABASE} auf eine mit symbolischem Link verkn�pfte
-Datenbank ausf�hren, werden sowohl der symbolische Links als auch die
-Datenbank gel�scht. (Das war in Version 3.22 nicht der Fall, weil configure
-den @code{readlink}-Systemaufruf nicht erkannte).
-
-@item
-@code{OPTIMIZE TABLE} funktioniert jetzt nur bei @strong{MyISAM}-Tabellen.
-Bei anderen Tabellentypen k�nnen Sie @code{ALTER TABLE} benutzen, um die
-Tabelle zu optimieren. W�hrend der Ausf�hrung von @code{OPTIMIZE TABLE}
-wird die Tabelle jetzt vor dem Zugriff anderer Threads gesperrt.
-
-@item
-Der MySQL-Client @code{mysql} wir jetzt vorgabem��ig mit der Option
-@code{--no-named-commands (-g)} gestartet. Diese Option kann mit
-@code{--enable-named-commands (-G)} abgeschaltet werden. Dies kann ein paar
-Inkompatibilit�tsprobleme verursachen, zum Beispiel in SQL-Skripten, die
-benannte (named) Befehle ohne ein Semikolon! Befehle im Langformat dagegen
-funktionieren noch auf der ersten Zeile.
-@c Question: ... still work from the first line?
-some cases, f�r Beispiel in SQL Skripts that use named Befehle ohne a
-semicolon! Long format Befehle still work from the first line.
-
-@item
-If you are using the @code{german} character sort order, you must repair
-all your Tabellen mit @code{isamchk -r}, as we have made some changes in
-the sort order!
-
-@item
-The default return type of @code{IF} will now depend on both arguments
-und not only the first argument.
-
-@item
-@code{AUTO_INCREMENT} funktioniert nicht mit negativen Zahlen. Der Grund
-liegt darin, dass negative Zahlen beim �bergang von -1 auf 0 Probleme
-verursachen. @code{AUTO_INCREMENT} wird jetzt bei MyISAM-Tabellen auf einem
-niedrigeren Level gehandhabt und ist viel schneller als vorher. Bei
-MyISAM-Tabellen werden alte Zahlen auch nicht mehr wieder benutzt, selbst
-wenn Sie einige Zeilen aus der Tabelle l�schen.
-
-@item
-@code{CASE}, @code{DELAYED}, @code{ELSE}, @code{END}, @code{FULLTEXT},
-@code{INNER}, @code{RIGHT}, @code{THEN} und @code{WHEN} sind jetzt
-reservierte W�rter.
-
-@item
-@code{FLOAT(X)} ist jetzt ein echter Flie�komma-Typ und kein Wert mit
-einer festen Anzahl von Dezimalstellen.
-
-@item
-Wenn Sie @code{DECIMAL(length,dec)} deklarieren, beinhaltet das
-L�ngen-Argument nicht mehr den Platz f�r das Vorzeichen oder den
-Dezimalpunkt.
-
-@item
-Eine @code{TIME}-Zeichenkette muss jetzt von einem der folgenden Formate
-sein:
-@code{[[[DAYS] [H]H:]MM:]SS[.bruchteil]} oder
-@code{[[[[[H]H]H]H]MM]SS[.bruchteil]}
-
-@item
-@code{LIKE} vergleicht jetzt Zeichenketten unter Verwendung derselben
-Vergleichsregeln wie @code{'='}. Wenn Sie das alte Verhalten ben�tigen,
-k�nnen Sie MySQL mit dem @code{CXXFLAGS=-DLIKE_CMP_TOUPPER}-Flag
-kompilieren.
-
-@item
-@code{REGEXP} arbeitet jetzt bei normalen (nicht bin�ren) Zeichenketten
-unabh�ngig von der Gro�-/Kleinschreibung.
-
-@item
-Wenn Sie Tabellen pr�fen / reparieren, sollten Sie @code{CHECK TABLE} oder
-@code{myisamchk} f�r @code{MyISAM}-Tabellen (@code{.MYI}) benutzen und
-@code{isamchk} f�r ISAM-Tabellen (@code{.ISM}).
-
-@item
-Wenn Sie wollen, dass @code{mysqldump}-Dateien zwischen MySQL-Version 3.22
-und Version 3.23 kompatibel sind, sollten Sie nicht die @code{--opt}- oder
-@code{--full}-Option f�r @code{mysqldump} benutzen.
-
-@item
-�berpr�fen Sie Ihre Aufrufe von @code{DATE_FORMAT()} und stellen Sie
-sicher, dass vor jedem Formatierungszeichen ein @samp{%} steht. (Sp�tere
-MySQL-Versionen 3.22 lie�en diese Syntax zu.)
-
-@item
-@code{mysql_fetch_fields_direct} ist jetzt eine Funktion (es war ein Makro)
-und gibt einen Zeiger auf @code{MYSQL_FIELD} anstelle eines
-@code{MYSQL_FIELD} zur�ck.
-
-@item
-@code{mysql_num_fields()} kann nicht mehr f�r ein @code{MYSQL*}-Objekt
-benutzt werden (es ist jetzt eine Funktion, die @code{MYSQL_RES*} als
-Argument nimmt. Sie sollten jetzt statt dessen @code{mysql_field_count()}
-benutzen.
-
-@item
-In MySQL-Version 3.22 war die Ausgabe von @code{SELECT DISTINCT ...} fast
-immer sortiert. In Version 3.23 m�ssen Sie @code{GROUP BY} oder @code{ORDER
-BY} benutzen, um eine sortierte Ausgabe zu erhalten.
-
-@item
-@code{SUM()} gibt jetzt @code{NULL} zur�ck statt 0, wenn es keine �berein
-stimmenden Zeilen gibt. Das ist in �bereinstimmung mit ANSI-SQL.
-
-@item
-Ein @code{AND} oder @code{OR} mit @code{NULL}-Werten gibt jetzt @code{NULL}
-anstelle von 0 zur�ck. Das betrifft haupts�chlich Anfragen, die @code{NOT}
-bei einem @code{AND/OR}-Ausdruck wie @code{NOT NULL} = @code{NULL}
-benutzen.
-@code{LPAD()} und @code{RPAD()} k�rzen die Ergebnis-Zeichenkette, wenn sie
-l�nger als das L�ngen-Argument ist.
-@end itemize
-
-@node Upgrading-from-3.21, Upgrading-from-3.20, Upgrading-from-3.22, Upgrade
-@c German node Upgrading-from-3.21
-@subsection Upgrade von Version 3.21 auf Version 3.22
-
-@cindex Kompatibilit�t, zwischen MySQL-Versionen
-@cindex Upgrade, 3.21 auf 3.22
-
-Nichts, was die Kompatibilit�t betrifft, hat sich zwischen Version 3.21 und
-3.22 ge�ndert. Die einzige Falle ist die, dass neue Tabellen, die unter
-Verwendung des @code{DATE}-Typs erzeugt werden, die neue Art der
-Datenspeicherung benutzen. Diese neuen Felder kann man daher nicht von
-einer alten Version von @code{mysqld} ansprechen.
-
-Nachdem Sie MySQL-Version 3.22 installiert haben, starten Sie den neuen
-Server und lassen dann das @code{mysql_fix_privilege_tables}-Skript laufen.
-Dieses f�gt die neuen Zugriffsberechtigungen ein, die Sie ben�tigen, um den
-@code{GRANT}-Befehl zu benutzen. Wenn Sie das vergessen, erhalten Sie ein
-@code{Access denied}, wenn Sie versuchen, @code{ALTER TABLE}, @code{CREATE
-INDEX} oder @code{DROP INDEX} zu benutzen. Wenn Ihr MySQL-Root ein Passwort
-ben�tigt, m�ssen Sie dieses als Argument zu
-@code{mysql_fix_privilege_tables} angeben.
-
-Die C-API-Schnittstelle f�r @code{mysql_real_connect()} hat sich ge�ndert.
-Wenn Sie ein altes Client-Programm haben, das diese Funktion aufruft,
-m�ssen Sie eine @code{0} als neues @code{db}-Argument einf�gen (oder den
-Client neu kodieren, so dass er das @code{db}-Element f�r schnellere
-Verbindungen benutzt). Zus�tzlich m�ssen Sie @code{mysql_init()} aufrufen,
-bevor Sie @code{mysql_real_connect()} aufrufen! Diese �nderung wurde
-durchgef�hrt, damit die neue @code{mysql_options()}-Funktion in der
-@code{MYSQL}-Handler-Struktur Optionen speichern kann.
-
-The @code{mysqld}-Variable @code{key_buffer} wurde umbenannt in
-@code{key_buffer_size}, Sie k�nnen aber in Ihren Startdateien immer noch
-den alten Namen verwenden.
-
-
-@node Upgrading-from-3.20, Upgrading-to-arch, Upgrading-from-3.21, Upgrade
-@c German node Upgrading-from-3.20
-@subsection Upgrade von Version 3.20 auf Version 3.21
-
-@cindex Upgrade, 3.20 auf 3.21
-
-Wenn Sie eine Version benutzen, die �lter als Version 3.20.28 ist, und auf
-Version 3.21 umstellen wollen, m�ssen Sie folgendes tun:
-
-Sie k�nnen den @code{mysqld}-Server Version 3.21 mit @code{safe_mysqld
---old-protocol} starten, um ihn mit Clients aus einer Distribution Version
-3.20 zu benutzen. In diesem Fall gibt die neue Client-Funktion
-@code{mysql_errno()} �berhaupt keine Server-Fehler zur�ck, nur
-@code{CR_UNKNOWN_ERROR} (funktioniert aber bei Client-Fehlern), und der
-Server benutzt die alte @code{password()}-�berpr�fung statt der neuen.
-
-Wenn Sie die @code{--old-protocol}-Option @strong{NICHT} f�r @code{mysqld}
-benutzen, m�ssen Sie folgende �nderungen durchf�hren:
-
-@itemize @bullet
-@item
-Jeder Client-Code muss neu kompiliert werden. Wenn Sie ODBC benutzen,
-m�ssen Sie die neuen @strong{MyODBC}-2.x-Treiber verwenden.
-@item
-Sie m�ssen das Skript @code{Skripts/add_long_password} laufen lassen, um
-das @code{Password}-Feld in der @code{mysql.user}-Tabelle zu
-@code{CHAR(16)} zu �ndern.
-@item
-Alle Passw�rter m�ssen in der @code{mysql.user}-Tabelle neu zugewiesen
-werden (um 62-Bit- statt 31-Bit-Passw�rter zu erhalten).
-@item
-Das Tabellenformat hat sich nicht ge�ndert, daher m�ssen Sie keinerlei
-Tabellen konvertieren.
-@end itemize
-
-MySQL-Version 3.20.28 und h�her kann das neue @code{user}-Tabellenformat
-handhaben, ohne sich auf Clients auszuwirken. Wenn Sie eine MySQL-Version
-vor Version 3.20.28 haben, funktionieren Passw�rter damit nicht mehr, wenn
-Sie die @code{user}-Tabelle konvertieren. Um auf Nummer Sicher zu gehen,
-sollten Sie mindestens auf Version 3.20.28 aktualisieren und erst dann auf
-Version 3.21.
-
-@cindex Protokoll-Unvertr�glichkeit
-Der neue Client-Code funktioniert bei einem 3.20.x @code{mysqld}-Server.
-Wenn Sie daher Probleme mit 3.21.x bekommen, k�nnen Sie den alten
-3.20.x-Server benutzen, ohne die Clients neu kompilieren zu m�ssen.
-
-Wenn Sie nicht die @code{--old-protocol}-Option f�r @code{mysqld} benutzen,
-werden alte Clients folgende Fehlermeldung ausgeben:
-
-@example
-ERROR: Protocol mismatch. Server Version = 10 Client Version = 9
-@end example
-
-Die neue Perl-@code{DBI}/@code{DBD}-Schnittstelle unterst�tzt auch die alte
-@code{mysqlperl}-Schnittstelle. Die einzige �nderung, die Sie machen
-m�ssen, wenn Sie @code{mysqlperl} benutzen, ist, die Argumente f�r die
-@code{connect()}-Funktion zu �ndern. Die neuen Argumente sind: @code{host},
-@code{database}, @code{user} und @code{password} (die @code{user}- und
-@code{password}-Argumente haben die Pl�tze getauscht.
-@xref{Perl DBI Class, , Perl-@code{DBI}-Klasse}.
-
-Folgende �nderungen k�nnen Anfragen in alten Applikationen betreffen:
-
-@itemize @bullet
-@item
-@code{HAVING} muss jetzt vor einer m�glichen @code{ORDER BY}-Klausel
-spezifiziert werden.
-@item
-Die Parameter f�r @code{LOCATE()} wurden getauscht.
-@item
-Es gibt einige neue reservierte W�rter. Die wichtigsten sind @code{DATE},
-@code{TIME} und @code{TIMESTAMP}.
-@end itemize
-
-
-@node Upgrading-to-arch, , Upgrading-from-3.20, Upgrade
-@c German node Upgrading-to-arch
-@subsection Upgrade auf eine andere Architektur
-
-@cindex Upgrade, auf andere Architektur
-
-Wenn Sie MySQL-Version 3.23 benutzen, k�nnen Sie die @code{.frm}-,
-@code{.MYI}- und @code{.MYD}-Dateien zwischen verschiedenen Architekturen
-kopieren, die dasselbe Flie�komma-Format unterst�tzen. (MySQL k�mmert sich
-um eventuelle Byte-Tausch-Belange.)
-
-Die MySQL-@code{ISAM}-Daten und Index-Dateien (@file{.ISD} und
-@file{*.ISM}, je nachdem) sind Architektur-abh�ngig und in manchen F�llen
-Betriebssystem-abh�ngig. Wenn Sie Ihre Applikationen auf eine andere
-Maschine mit einer unterschiedlichen Architektur oder einem anderen
-Betriebssystem verlagern wollen, wollten Sie nicht einfach eine Datenbank
-verschieben, indem Sie deren Dateien auf die andere Maschine kopieren.
-Benutzen Sie statt dessen @code{mysqldump}.
-
-Vorgabem��ig erzeugt @code{mysqldump} eine Datei mit SQL-Statements. Sie
-k�nnen diese Datei auf die andere Maschine �bertragen und Sie als Eingabe
-f�r den @code{mysql}-Client benutzen.
-
-@code{mysqldump --help} zeigt Ihnen, welche Optionen verf�gbar sind. Wenn
-Sie die Daten mit einer neueren Version von MySQL benutzen werden, sollten
-Sie @code{mysqldump --opt} mit der neueren Version benutzen, um einen
-schnellen, kompakten Dump zu erhalten.
-
-Die einfachste (wenngleich nicht schnellste) Art, eine Datenbank von einer
-Maschine auf eine andere zu bringen, ist, die folgenden Befehle auf der
-Maschine auszuf�hren, auf der die Datenbank liegt:
-
-@example
-shell> mysqladmin -h 'anderer hostname' create db_name
-shell> mysqldump --opt db_name \
- | mysql -h 'anderer hostname' db_name
-@end example
-
-Wenn Sie eine Datenbank von einer entfernten Maschine �ber ein langsames
-Netzwerk kopieren wollen, k�nnen Sie folgendes benutzen:
-
-@example
-shell> mysqladmin create db_name
-shell> mysqldump -h 'anderer hostname' --opt --compress db_name \
- | mysql db_name
-@end example
-
-Sie k�nnen das Ergebnis auch in einer Datei speichern, diese Datei auf die
-Zielmaschine �bertragen und dort in die Datenbank laden. Sie k�nnen zum
-Beispiel wie folgt die Datenbank in eine Datei auf der Quellmaschine
-ausgeben (dumpen):
-
-@example
-shell> mysqldump --quick db_name | gzip > db_name.inhalte.gz
-@end example
-
-(Die in diesem Beispiel erzeugte Datei ist komprimiert.) �bertragen Sie die
-Datei, die die Datenbankinhalte enth�lt, auf die Zielmaschine und geben Sie
-dort diese Befehle ein:
-
-@example
-shell> mysqladmin create db_name
-shell> gunzip < db_name.inhalte.gz | mysql db_name
-@end example
-
-@cindex @code{mysqldump}
-@cindex @code{mysqlimport}
-Sie k�nnen auch @code{mysqldump} und @code{mysqlimport} benutzen, um den
-Datenbank-Transfer zu bewerkstelligen.
-Das ist bei gro�en Tabellen wesentlich schneller als die Benutzung von
-@code{mysqldump}. In den unten dargestellten Befehlen repr�sentiert
-@code{DUMPDIR} den vollen Pfadnamen des Verzeichnisses, das Sie benutzen,
-um die Ausgabe von @code{mysqldump} zu speichern.
-
-Legen Sie zun�chst das Verzeichnis f�r die Ausgabe-Dateien an und geben Sie
-die Datenbank aus (Dump):
-
-@example
-shell> mkdir DUMPDIR
-shell> mysqldump --tab=DUMPDIR db_name
-@end example
-
-�bertragen Sie dann die Dateien des @code{DUMPDIR}-Verzeichnisses in ein
-entsprechendes Verzeichnis auf der Zielmaschine und laden Sie dort die
-Dateien in MySQL:
-
-@example
-shell> mysqladmin create db_name # Datenbank erzeugen
-shell> cat DUMPDIR/*.sql | mysql db_name # Tabellen in der Datenbank erzeugen
-shell> mysqlimport db_name DUMPDIR/*.txt # Daten in die Tabellen laden
-@end example
-
-Vergessen Sie auch nicht, die @code{mysql}-Datenbank zu kopieren, den dort
-befinden Sie die Berechtigungstabellen (@code{user}, @code{db},
-@code{host}). Eventuell m�ssen Sie die Befehle als
-MySQL-@code{root}-Benutzer auf der neuen Maschine eingeben, um die
-@code{mysql}-Datenbank angelegt zu bekommen.
-
-Nachdem Sie die @code{mysql}-Datenbank auf die neue Maschine kopiert haben,
-f�hren Sie @code{mysqladmin flush-privileges} aus, damit der Server die
-Berechtigungsinformationen neu einliest.
-
-
-@node Operating System Specific Notes, Perl support, Upgrade, Installing
-@c German node Clientseitig
-@section Betriebssystem-spezifische Anmerkungen
-
-
-
-@menu
-* Linux::
-* Windows::
-* Solaris::
-* BSD Notes::
-* Mac OS X::
-* Other Unix Notes::
-* OS/2::
-* BeOS::
-* Novell Netware::
-@end menu
-
-@node Linux, Windows, Operating System Specific Notes, Operating System Specific Notes
-@c German node Linux
-@subsection Linux (alle Linux-Versionen)
-
-
-Die Anmerkungen weiter unten, die @strong{glibc} betreffen, gelten nur
-dann, wenn Sie MySQL selbst bauen. Wenn Sie Linux auf einer x86-Maschine
-fahren, ist es in den meisten F�llen wesentlich besser, einfach unsere
-Bin�rdateien zu benutzen. Wir linken unsere Bin�rdateien an die am besten
-gepatchte Version von @strong{glibc}, die wir bieten k�nnen, und mit den
-besten Kompiler-Optionen, wobei wir versuchen, MySQL f�r Hochlast-Server
-geeignet zu machen. Wenn Sie also den Text unten lesen und sich nicht
-sicher sind, was Sie tun sollen, sollten Sie zun�chst unsere Bin�rdateien
-ausprobieren, um zu sehen, ob diese Ihren Anforderungen entsprechen.
-K�mmern Sie sich nur dann um einen eigenen Build, wenn Sie feststellen,
-dass unsere Bin�rdateien nicht gut genug sind. In diesem Fall w�ren wir f�r
-einen Hinweis dazu dankbar, damit wir beim n�chsten Mal eine bessere
-Bin�rdatei bauen k�nnen. F�r eine typische Benutzung, selbst bei einer
-gro�en Zahl gleichzeitiger Verbindungen und / oder Tabellen, die gr��er
-als 2 GB sind, sind unsere Bin�rdateien in den meisten F�llen die beste
-Wahl.
-
-MySQL benutzt auf Linux LinuxThreads. Wenn Sie eine alte Linux-Version
-benutzen, die keine @code{glibc2} hat, m�ssen Sie LinuxThreads
-installieren, bevor Sie MySQL kompilieren. Sie erhalten LinuxThreads unter
-@uref{http://www.mysql.com/downloads/Linux}.
-
-@strong{ACHTUNG:} Wir haben einige seltsame Probleme bei Linux 2.2.14 und
-MySQL auf SMP-Systemen festgestellt. Wenn Sie ein SMP-System haben,
-empfehlen wir, so schnell wie m�glich auf Linux 2.4 zu aktualisieren
-(Upgrade)! Dadurch wird Ihr System ausserdem schneller und stabiler!
-
-Beachten Sie, dass @code{glibc}-Versionen vor und einschlie�lich Version
-2.1.1 einen schweren Fehler im @code{pThread_mutex_timedwait}-Handling
-haben, was benutzt wird, wenn Sie @code{INSERT DELAYED} verwenden. Wir
-empfehlen, vor einem Upgrade der glibc @code{INSERT DELAYED} nicht zu
-verwenden.
-
-Wenn Sie planen, mehr als 1000 gleichzeitige Verbindungen zu haben, m�ssen
-Sie einige �nderungen an LinuxThreads vornehmen, es neu kompilieren und mit
-der neuen @file{libpThread.a} linken. Setzen Sie @code{PTHREAD_THREADS_MAX} in
-@file{sysdeps/unix/sysv/linux/bits/local_lim.h} auf 4096 herauf und setzen
-Sie @code{STACK_SIZE} in @file{linuxThreads/internals.h} auf 256 KB
-herunter. Die Pfade sind relativ zum Wurzelverzeichnis von @code{glibc}.
-Beachten Sie, dass MySQL bei etwa 600 bis 1000 Verbindungen nicht stabil
-l�uft, wenn @code{STACK_SIZE} auf den Vorgabewert von 2 MB gesetzt wird.
-
-Wenn Sie Probleme damit bekommen, dass MySQL nicht genug Dateien oder
-Verbindungen �ffnen kann, haben Sie m�glicherweise Linux nicht so
-konfiguriert, dass es genug Dateien handhaben kann.
-
-In Linux 2.2 und Folgenden k�nnen Sie die Anzahl der allozierten
-Datei-Handler herausbekommen, wenn Sie folgendes eingeben:
-
-@example
-cat /proc/sys/fs/file-max
-cat /proc/sys/fs/dquot-max
-cat /proc/sys/fs/super-max
-@end example
-
-Wenn Sie mehr als 16M Speicher haben, sollten Sie etwas �hnliches wie
-folgendes in Ihr Boot-Skript (@file{/etc/rc/boot.local} auf SuSE)
-eintragen:
-
-@example
-echo 65536 > /proc/sys/fs/file-max
-echo 8192 > /proc/sys/fs/dquot-max
-echo 1024 > /proc/sys/fs/super-max
-@end example
-
-Das k�nnen Sie auch von der Kommandozeile aus als Root eingeben, aber in
-diesem Fall werden die alten Beschr�nkungen wieder benutzt, wenn Sie Ihren
-Computer neu starten.
-
-Zus�tzlich sollten Sie in /etc/my.cnf einf�gen:
-
-@example
-[safe_mysqld]
-open-files-limit=8192
-@end example
-
-Das sollte MySQL erlauben, bis zu 8192 Verbindungen und Dateien zu
-erzeugen.
-
-Die @code{STACK_SIZE}-Konstante in LinuxThreads steuert das Spacing von
-Thread-Stacks im Adressraum. Sie muss Gro� genug sein, damit reichlich
-Platz f�r den Stack jedes individuellen Threads bleibt, aber klein genug,
-um den Stack irgend eines Threads davon abzuhalten, mit den globalen
-@code{mysqld}-Daten zu kollidieren. Wie wir durch Experimentieren heraus
-fanden, unmappt die Linux-Implementation von @code{mmap()} erfolgreich eine
-bereits gemappte Region, wenn Sie sie anweisen, eine Adresse auszumappen,
-die bereits in Benutzung ist, wobei sie alle Daten der gesamten Seite auf
-Null setzt, statt einen Fehler zur�ck zu geben. Daher beruht die Sicherheit
-von @code{mysqld} oder jeder anderen Thread-Applikation auf dem
-"Gentleman"-Verhalten des Codes, der Threads erzeugt. Der Benutzer muss
-Vorkehrungen treffen, die sicherstellen, dass die Anzahl laufender Threads
-jederzeit ausreichend gering ist, damit die Thread-Stacks sich vom globalen
-Heap fernhalten. Bei @code{mysqld} sollten Sie dieses "Gentleman"-Verhalten
-forcieren, indem Sie einen vern�nftigen Wert f�r die the
-@code{max_connections}-Variable setzen.
-
-Wenn Sie MySQL selbst bauen und sich nicht mit dem Patchen von LinuxThreads
-herum plagen wollen, sollten Sie @code{max_connections} auf einen Wert
-nicht gr��er als 500 setzen. Dieser Wert sollte sogar noch kleiner sein,
-wenn Sie einen gro�en Schl�sselpuffer (Key Buffer), gro�e Heap-Tabellen
-oder andere Dinge haben, die @code{mysqld} dazu bringen k�nnten, eine Menge
-Speicher zu allozieren, oder wenn Sie einen 2.2-Kernel mit einem 2GB-Patch
-fahren. Wenn Sie unsere Bin�rdateien oder RPM-Versionen 3.23.23 oder sp�ter
-benutzen, k�nnen Sie @code{max_connections} sicher auf 1500 setzen, unter
-der Annahme, dass es keine gro�en Schl�sselpuffer oder Heap-Tabellen mit
-vielen Daten gibt. Je mehr Sie @code{STACK_SIZE} in LinuxThreads reduzieren
-k�nnen, desto mehr k�nnen Sie sicher Threads erzeugen. Wir empfehlen einen
-Wert zwischen 128K und 256K.
-
-Wenn Sie viele gleichzeitige Verbindungen benutzen, bekommen Sie vielleicht
-Probleme durch ein "Feature" im 2.2-Kernel, der einen Prozess daf�r
-bestraft, dass er sich aufspaltet (fork) oder einen Kindprozess klont, um
-einen Fork-Bombenangriff (Fork Bomb Attack) zu verhindern. Das bringt MySQL
-dazu, nicht so gut zu skalieren, wenn Sie die Anzahl gleichzeitiger Clients
-erh�hen. Wir konnten beobachten, dass sich das auf Einprozessor-Systemen
-mit sehr langsamer Thread-Erzeugung bemerkbar macht, was sich darin zeigt,
-dass es sehr lange dauern kann, sich mit MySQL zu verbinden (bis zu einer
-Minute), und genau so lange, um es herunter zu fahren. Auf
-Multiprozessor-Systemen haben wir einen allm�hlichen Abfall der
-Anfrage-Geschwindigkeit beobachtet, wenn die Anzahl der Clients zunimmt. Im
-Verlauf der Suche nach einer L�sung haben wir von einem unserer Benutzer
-einen Kernel-Patch erhalten, von dem dieser sagt, dass er auf seiner Site
-eine betr�chtliche Rolle spielt. Der Patch ist hier verf�gbar
-(@uref{http://www.mysql.com/downloads/patches/linux-fork.patch}).
-Inzwischen haben wir recht ausf�hrliche Tests dieses Patchs sowohl auf
-Entwicklungs- als auch auf Produktionssystemen gemacht. Er hat die
-Performance von @code{MySQL} erheblich verbessert, ohne irgend welche
-Probleme zu verursachen, und wir empfehlen ihn jetzt denjenigen unserer
-Benutzer, die immer noch Hochlast-Server auf 2.2-Kerneln fahren. Dieses
-Problem wurde im 2.4-Kernel behoben. Wenn Sie daher nicht zufrieden mit der
-momentanen Performance Ihres Systems sind, ist es wahrscheinlich einfacher,
-auf 2.4 zu aktualisieren, statt den 2.2-Kernel zu patchen, was zus�tzlich
-zur Behebung dieses Fairness-Bugs auch noch Multiprozessor-Systemen einen
-netten Schub gibt.
-
-Wir haben MySQL auf dem 2.4-Kernel auf einer Zweiprozessor-Maschine
-getestet und haben festgestellt, dass MySQL VIEL bessere Leistungsdaten
-bringt - es gab praktisch keine Verlangsamung bei Anfragen bis ganz herauf
-zu 1000 Clients, und der Skalierungsfaktor von MySQL (berechnet als
-Verh�ltnis von maximalem Durchsatz zum Durchsatz mit 1 Client) war 100%.
-�hnliches haben wir auf einer Vierprozessor-Maschine beobachtet - praktisch
-keine Verlangsamung, w�hrend die Anzahl der Clients bis auf 1000 stieg
-sowie ein Skalierungsfaktor von 300%. F�r einen unter Hochlast fahrenden
-Multiprozessor-Server empfehlen wir daher ausdr�cklich den 2.4-Kernel.
-Weiter haben wir festgestellt, dass es essentiell wichtig ist, den
-@code{mysqld}-Prozess auf dem 2.4-Kernel mit der h�chstm�glichen Priorit�t
-laufen zu lassen, um maximale Performance zu erreichen. Das kann dadurch
-erreicht werden, dass man den @code{renice -20 $$}-Befehl zu
-@code{safe_mysqld} hinzuf�gt. Bei unseren Tests auf der
-Vierprozessor-Maschine ergab die Erh�hung der Priorit�t eine 60%-ige
-Steigerung des Durchsatzes bei 400 Clients.
-
-Wir sind derzeit dabei, mehr Informationen �ber die Performance von
-@code{MySQL} auf dem 2.4-Kernel auf 4-Weg- und 8-Weg-Systemen zu bekommen.
-Wenn Sie Zugang zu einem solchen System haben und einige Benchmarks gemacht
-haben, schicken Sie bitte eine Mail mit den Ergebnissen an
-@email{docs@@mysql.com} - wir werden Sie dem Handbuch hinzuf�gen.
-
-Es gibt eine weitere Sache, die die Performance von MySQL stark
-beeintr�chtigt, besonders auf SMP-Systemen. Die Implementation von mutex
-in LinuxThreads in @strong{glibc-2.1} ist sehr schlecht f�r Programme mit
-vielen Threads, die den mutex nur f�r kurze Zeit behalten. Wenn Sie MySQL
-mit unver�nderten @strong{LinuxThreads} linken, f�hrt ironischerweise
-auf einem SMP-System in manchen F�llen das Entfernen von Prozessoren zu
-einer Leistungssteigerung von MySQL. F�r @strong{glibc 2.1.3} haben wir ein
-Patch bereit gestellt, um dieses Verhalten zu korrigieren:
-@uref{http://www.mysql.com/downloads/Linux/linuxThreads-2.1-patch,linuxThreads-2.1-patch}
-
-Bei Verwendung von @strong{glibc-2.2.2} benutzt MySQL-Version 3.23.36 den
-adaptiven mutex, der sogar viel besser als der gepatchte von
-@strong{glibc-2.1.3} ist. Seien Sie jedoch davor gewarnt, dass unter
-bestimmten Umst�nden der aktuelle mutex-Code in @strong{glibc-2.2.2}
-�berdrehen kann, was die Performance von MySQL beeintr�chtigt. Die Gefahr,
-dass solche Umst�nde eintreten, kann dadurch verringert werden, dass der
-@code{mysqld}-Prozess auf die h�chste Priorit�t gesetzt wird. Zus�tzlich
-konnten wir das �berdrehverhalten mit einem Patch korrigieren, der
-@uref{http://www.mysql.com/downloads/Linux/linuxThreads-2.2.2.patch,hier}
-erh�ltlich ist. Der Patch kombiniert die Korrektur des �berdrehens, die
-maximale Anzahl von Threads und das Stack-Spacing in einem. Sie wenden es
-auf das @code{linuxThreads}-Verzeichnis mit @code{patch -p0
-</tmp/linuxThreads-2.2.2.patch} an. Wir hoffen, dass der Patch in irgend
-einer Form in zuk�nftigen Releases von @code{glibc-2.2} enthalten sein
-wird. Wie es auch sei, wenn Sie mit @code{glibc-2.2.2} linken, m�ssen Sie
-immer noch @code{STACK_SIZE} und @code{PTHREAD_THREADS_MAX} korrigieren.
-Wir hoffen, dass diese Vorgabewerte zuk�nftig auf akzeptablere Werte f�r
-eine MySQL-Hochlast-Einrichtung gesetzt werden, so dass Ihr eigener Build
-auf @code{./configure; make; make install} reduziert werden kann.
-
-Wir empfehlen, dass Die die oben genannten Patches benutzen, um eine
-spezielle statische Version von @code{libpThread.a} zu bauen, die Sie nur
-f�r statisches Linken mit @code{MySQL} benutzen. Wir wissen, dass die
-Patches f�r @code{MySQL} sicher sind und seine Performance erheblich
-verbessern, aber wir k�nnen diesbez�glich nichts �ber andere Applikationen
-sagen. Wenn Sie andere Applikationen mit der gepatchten Version der
-Bibliothek linken oder eine gepatchte gemeinsam benutzte (shared) Version
-bauen und auf Ihrem System installieren, tun Sie das auf eigenes Risiko,
-was andere Applikationen betrifft, die von @code{LinuxThreads} abh�ngen.
-
-Wenn Sie w�hrend der Installation von MySQL irgend welche seltsamen
-Probleme bekommen oder gebr�uchliche Utilities h�ngen bleiben, ist es sehr
-wahrscheinlich, dass diese entweder Bibliotheks- oder Compiler-bezogen
-sind. In diesem Fall wird die Benutzung unserer Bin�rdatei sie beheben.
-
-Ein bekanntes Problem der Bin�rdistribution ist, dass Sie auf �lteren
-Linux-Systemen, die @code{libc} benutzen (wie RedHat 4.x oder Slackware)
-nicht-schwere (non-fatal) Probleme mit der Aufl�sung von Hostnamen
-bekommen.
-@xref{Linux-RPM}.
-
-Wenn Sie LinuxThreads benutzen, werden Sie feststellen, dass mindestens
-drei Prozesse laufen. Das sind in Wirklichkeit Threads. Es gibt einen
-Thread f�r den LinuxThreads-Manager, einen Thread, um Verbindungen zu
-handhaben und einen Thread, um Alarme und Signale zu handhaben.
-
-Beachten Sie, dass der Linux-Kernel und die LinuxThread-Bibliothek
-vorgabem��ig nur 1024 Threads haben k�nnen. Das bedeutet, dass Sie auf
-einem ungepatchten System nur h�chstens 1021 Verbindungen zu MySQL haben
-k�nnen. Die Seite @uref{http://www.volano.com/linuxnotes.html} enth�lt
-Informationen, wie man diese Beschr�nkung umgeht.
-
-Wenn Sie einen toten @code{mysqld}-Daemon-Prozess mit @code{ps} sehen,
-bedeutet das �blicherweise, dass Sie einen Bug in MySQL oder eine zerst�rte
-Tabelle gefunden haben. @xref{Crashing}.
-
-Um auf Linux einen Speicherauszug (Core Dump) zu erhalten, wenn
-@code{mysqld} mit einem SIGSEGV-Signal stirbt, k�nnen Sie @code{mysqld} mit
-der @code{--core-file}-Option starten. Beachten Sie, dass Sie
-wahrscheinlich @code{core file size} hoch setzen m�ssen, indem Sie
-@code{ulimit -c 1000000} zu @code{safe_mysqld} hinzuf�gen oder
-@code{safe_mysqld} mit @code{--core-file-sizes=1000000} starten.
-@xref{safe_mysqld, , @code{safe_mysqld}}.
-
-Wenn Sie Ihren eigenen MySQL-Client linken und bei der Ausf�hrung diesen
-Fehler erhalten,
-
-@example
-ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory
-@end example
-
-kann das Problem durch eine der folgenden Methoden behoben werden:
-
-@itemize @bullet
-@item
-Linken Sie den Client mit dem folgenden Flag (anstelle von @code{-Lpath}):
-@code{-Wl,r/path-libmysqlclient.so}.
-
-@item
-Kopieren Sie @code{libmysqclient.so} nach @file{/usr/lib}.
-
-@tindex LD_RUN_PATH Umgebungsvariable
-@tindex Umgebungsvariable, LD_RUN_PATH
-@item
-F�gen Sie der @code{LD_RUN_PATH}-Umgebungsvariablen den Pfadnamen des
-Verzeichnisses hinzu, wo @code{libmysqlclient.so} liegt, bevor Sie Ihren
-Client laufen lassen.
-@end itemize
-
-Wenn Sie den Fujitsu-Compiler @code{(fcc / FCC)} benutzen, werden Sie beim
-Kompilieren von MySQL einige Probleme bekommen, weil die
-Linux-Header-Dateien sehr @code{gcc}-orientiert sind.
-
-Folgende @code{configure}-Zeile sollte mit @code{fcc/FCC} funktionieren:
-
-@example
-CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE -DCONST=konstante -DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O -K fast -K lib -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE -DCONST=konstante -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO '-D_EXTERN_INLINE=static __inline'" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-low-memory
-@end example
-
-@menu
-* Binary notes-Linux::
-* Linux-x86::
-* Linux-SPARC::
-* Linux-Alpha::
-* Linux-PowerPC::
-* Linux-MIPS::
-* Linux-IA64::
-@end menu
-
-@node Binary notes-Linux, Linux-x86, Linux, Linux
-@c German node Linux-Bin�rdateien
-@subsubsection Anmerkungen zur Bin�rdistribution (Linux)
-
-@cindex Bin�rdistributionen, unter Linux
-@cindex Linux, Bin�rdistribution
-
-MySQL ben�tigt zumindest Linux-Version 2.0.
-
-@strong{ACHTUNG}:
-Wir haben Berichte von MySQL-Benutzern erhalten, die schwer wiegende
-Stabilit�tsprobleme mit Linux-Kernel 2.2.14 mitgeteilt haben. Wenn Sie
-diesen Kernel benutzen, sollten Sie auf 2.2.19 (oder neuer) oder auf einen
-2.4-Kernel aktualisieren. Wenn Sie eine Mehrprozessormaschine haben,
-sollten Sie auf jeden Fall in Betracht ziehen, 2.4 zu benutzen, weil Ihnen
-das erhebliche Geschwindigkeitssteigerung geben wird.
-
-Die Bin�rdistribution wird mit @code{-static} gelinkt, was normalerweise
-hei�t, dass Sie sich nicht um die Version der Systembibliotheken k�mmern
-m�ssen, die Sie haben. Ausserdem brauchen Sie nicht LinuxThread
-installieren. Ein Programm, das mit @code{-static} gelinkt ist, ist etwas
-gr��er als ein dynamisch gelinktes Programm, und gleichzeitig etwas
-schneller (3-5%). Ein Problem liegt jedoch darin, dass Sie bei einem
-statisch gelinkten Programm keine benutzerdefinierten Funktionen (UDF)
-benutzen k�nnen. Wenn Sie UDF-Funktionen schreiben oder benutzen wollen
-(das ist nur etwas f�r C- oder C++-Programmierer), m�ssen Sie MySQL selbst
-kompilieren und das dynamische Linken benutzen.
-
-Wenn Sie ein @code{libc}-basierendes System benutzen (statt eines
-@code{glibc2}-Systems), bekommen Sie bei der Bin�rdistribution
-wahrscheinlich Probleme mit der Aufl�sung von Hostnamen und mit
-@code{getpwnam()}. (Das liegt daran, dass @code{glibc} leider von einigen
-externen Bibliotheken abh�ngt, um Hostnamen aufzul�sen und und
-@code{getpwent()}, selbst wenn es mit @code{-static} kompiliert wird.) In
-diesem Fall erhalten Sie wahrscheinlich folgende Fehlermeldung, wenn Sie
-@code{mysql_install_db} ausf�hren:
-
-@example
-Sorry, the host 'xxxx' could not be looked up
-@end example
-
-oder den folgenden Fehler, wenn Sie versuchen, @code{mysqld} mit der
-@code{--user}-Option laufen zu lassen:
-
-@example
-getpwnam: No such file or directory
-@end example
-
-Sie k�nnen dieses Problem auf eine der folgenden Weisen l�sen:
-
-@itemize @bullet
-@item
-Holen Sie sich eine MySQL-Quelldistribution (eine RPM oder die
-@code{tar.gz}-Distribution) und installieren Sie statt dessen diese.
-@item
-F�hren Sie @code{mysql_install_db --force} aus. Das f�hrt nicht den
-@code{resolveip}-Test in @code{mysql_install_db} aus. Der Nachteil ist,
-dass Sie keine Hostnamen in the Berechtigungstabellen benutzen k�nnen,
-sondern nur IP-Nummern (ausser f�r @code{localhost}). Wenn Sie ein altes
-MySQL-Release benutzen, das @code{--force} nicht unterst�tzt, m�ssen Sie
-den @code{resolveip}-Test in @code{mysql_install} mit einem Editor
-deaktivieren.
-@item
-Starten Sie @code{mysqld} mit @code{su} anstelle von @code{--user}.
-@end itemize
-
-Die Linux-Intel-Bin�rdatei und die RPM-Releases von MySQL sind f�r h�chst
-m�gliche Geschwindigkeit konfiguriert. Wir versuchen immer, den schnellsten
-stabilen Kompiler zu benutzen, der verf�gbar ist.
-
-MySQL-Perl-Unterst�tzung erfordert Perl-Version 5.004_03 oder neuer.
-
-Auf einigen Linux-2.2-Versionen erhalten Sie wom�glich den Fehler
-@code{Resource temporarily unavailable}, wenn Sie eine Menge neuer
-Verbindungen zu einem @code{mysqld}-Server �ber TCP/IP aufmachen.
-
-Das Problem liegt darin, dass Linux eine Verz�gerung zwischen dem
-Schlie�en eines TCP/IP-Sockets und dem tats�chlichen Freigeben durch das
-System hat. Da es nur Platz f�r eine bestimmte Anzahl von TCP/IP-Slots
-gibt, bekommen Sie den genannten Fehler, wenn Sie viele neue
-TCP/IP-Verbindungen innerhalb kurzer Zeit aufbauen, zum Beispiel, wenn Sie
-den MySQL-@file{test-connect}-Benchmark �ber TCP/IP laufen lassen.
-
-Wir haben dieses Problem mehrfach an verschiedene Linux-Mailing-Listen
-geschrieben, konnten aber bislang keine saubere L�sung erhalten.
-
-Die einzige bekannte 'Behebung' des Problems liegt darin, persistente
-Verbindungen bei Ihren Clients zu verwenden oder Sockets zu benutzen, wenn
-Sie den Datenbankserver und die Clients auf derselben Maschine laufen
-lassen. Wir hoffen, dass zuk�nftig der @code{Linux 2.4}-Kernel dieses
-Problem l�sen wird.
-
-
-@node Linux-x86, Linux-SPARC, Binary notes-Linux, Linux
-@c German node Linux-x86
-@subsubsection Anmerkungen zu Linux x86
-
-MySQL erfordert @code{libc}-Version 5.4.12 oder neuer. Bekannt ist, dass
-@code{libc} 5.4.46 funktioniert. @code{glibc}-Version 2.0.6 und sp�ter
-sollten ebenfalls funktionieren. Es hat einige Probleme mit den
-@code{glibc}-RPMs von RedHat gegeben. Wenn Sie Probleme haben, pr�fen Sie
-daher, ob es Updates gibt! Die @code{glibc}-2.0.7-19- und -2.0.7-29-RPMs
-funktionieren bekannterma�en ebenfalls.
-
-Bei einigen �lteren Linux-Distributionen kann @code{configure} einen Fehler
-wie folgt produzieren:
-
-@example
-Syntaxfehler in sched.h. �ndern Sie _P zu __P in der
-/usr/include/sched.h-Datei. Siehe das Installationskapitel im
-Referenzhandbuch.
-@end example
-
-Machen Sie, was die (englischsprachige) Fehlermeldung sagt. F�gen Sie also
-einen zus�tzlichen Unterstrich zum @code{_P}-Makro hinzu, das nur einen
-Unterstrich hat, und versuchen Sie es noch einmal.
-
-M�glicherweise erhalten Sie beim Kompilieren Warnungen. Die folgenden davon
-k�nnen ignoriert werden:
-
-@example
-mysqld.cc -o objs-thread/mysqld.o
-mysqld.cc: In function `void init_signals()':
-mysqld.cc:315: warning: assignment of negative value `-1' to `long unsigned int'
-mysqld.cc: In function `void * signal_hand(void *)':
-mysqld.cc:346: warning: assignment of negative value `-1' to `long unsigned int'
-@end example
-
-In Debian-GNU/Linux m�ssen Sie folgendes tun, damit MySQL beim Hochfahren
-des Systems automatisch startet:
-
-@example
-shell> cp support-files/mysql.server /etc/init.d/mysql.server
-shell> /usr/sbin/update-rc.d mysql.server defaults 99
-@end example
-
-@code{mysql.server} befindet sich im @file{share/mysql}-Verzeichnis
-unterhalb des MySQL-Installationsverzeichnisses oder im
-@file{support-files}-Verzeichnis des MySQL-Source-Trees.
-
-Wenn @code{mysqld} beim Start immer einen Speicherauszug (Core Dump)
-erzeugt, kann das Problem darin liegen, dass Sie eine alte
-@file{/lib/libc.a} haben. Versuchen Sie sie umzubenennen, entfernen Sie
-dann @file{sql/mysqld}, f�hren Sie ein neues @code{make install} durch und
-versuchen Sie es noch einmal. Dieses Problem wurde von einigen
-Slackware-Installationen berichtet.
-
-Wenn Sie beim Linken von @code{mysqld} folgenden Fehler erhalten, bedeutet
-das, dass Ihre @file{libg++.a} nicht korrekt installiert ist:
-
-@example
-/usr/lib/libc.a(putc.o): In function `_IO_putc':
-putc.o(.text+0x0): multiple definition of `_IO_putc'
-@end example
-
-Sie k�nnen vermeiden, dass @file{libg++.a} benutzt wird, indem Sie
-@code{configure} wie folgt ablaufen lassen:
-
-@example
-shell> CXX=gcc ./configure
-@end example
-
-
-@node Linux-SPARC, Linux-Alpha, Linux-x86, Linux
-@c German node Linux-SPARC
-@subsubsection Anmerkungen zu Linux SPARC
-
-Bei einigen Implementationen ist @code{readdir_r()} fehlerhaft. Das �u�ert
-sich darin, dass @code{SHOW DATABASES} immer einen leeren Satz (Empty Set)
-zur�ck gibt. Das kann behoben werden, indem @code{HAVE_READDIR_R} aus
-
-
-Einige Probleme erfordern, dass Sie Ihre Linux-Installation patchen. Der
-Patch befindet sich unter
-@uref{http://www.mysql.com/downloads/patches/Linux-sparc-2.0.30.diff}.
-
-Dieser Patch bezieht sich auf Linux-Distribution
-@file{sparclinux-2.0.30.tar.gz}, die auf @code{vger.rutgers.edu} verf�gbar
-ist (eine Version von Linux, die nie mit der offiziellen 2.0.30 verbunden
-wurde). Zus�tzlich m�ssen Sie LinuxThreads 0.6 oder neuer installieren.
-
-
-@node Linux-Alpha, Linux-PowerPC, Linux-SPARC, Linux
-@c German node Linux-Alpha
-@subsubsection Anmerkungen zu Linux Alpha
-
-MySQL-Version 3.23.12 ist die erste MySQL-Version, die auf Linux-Alpha
-getestet wurde. Wenn Sie planen, MySQL auf Linux-Alpha einzusetzen, stellen
-Sie sicher, dass Sie diese oder eine neuere Version haben.
-
-Wir haben MySQL auf Alpha mit unseren Benchmarks und unserer Test-Suite
-getestet, und es scheint gut zu funktionieren. Haupts�chlich noch nicht
-getestet haben wird, wie die Dinge mit vielen gleichzeitigen Verbindungen
-funktionieren.
-
-Wir kompilieren die Standard-MySQL-Bin�rdatei mit SuSE 6.4, Kernel
-2.2.13-SMP, Compaq-C-Kompiler Version 6.2-504 und Compaq-C++-Kompiler
-Version 6.3-005 auf einer Compaq-DS20-Maschine mit einem
-Alpha-EV6-Prozessor.
-
-Sie finden die genannten Kompiler auf
-@uref{http://www.support.compaq.com/alpha-tools}). Durch die Verwendung
-dieser Kompiler anstelle von gcc erhalten wir eine 9% bis 14% bessere
-Performance f�r MySQL.
-
-Beachten Sie, dass die Konfigurationszeile die Bin�rversion auf die
-aktuelle CPU optimiert. Das hei�t, dass Sie unsere Bin�rdatei nur benutzen
-k�nnen, wenn Sie einen Alpha-EV6-Prozessor haben. Ausserdem haben wir
-statisch kompiliert, um Bibliothek-Probleme zu vermeiden.
-
-@example
-CC=ccc CFLAGS="-fast" CXX=cxx CXXFLAGS="-fast -noexceptions -nortti" ./configure --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex --enable-thread-safe-client --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared
-@end example
-
-Bei Benutzung von egcs funktionierte bei uns die folgende
-Konfigurationszeile:
-
-@example
-CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --disable-shared
-@end example
-
-Einige bekannte Probleme, wenn MySQL auf Linux-Alpha l�uft:
-
-@itemize @bullet
-@item
-Das Debuggen von threaded Applikationen wie MySQL funktioniert nicht mit
-@code{gdb 4.18}. Statt dessen sollten Sie gdb 5.0 herunter laden und
-benutzen!
-
-@item
-Wenn Sie versuchen, @code{mysqld} unter Benutzung von @code{gcc} statisch
-zu linken, wird das resultierende Image beim Starten einen Speicherauszug
-(Core Dump) erzeugen. Mit anderen Worten: Benutzen Sie @strong{NICHT}
-@code{--with-mysqld-ldflags=-all-static} mit @code{gcc}.
-@end itemize
-
-
-@node Linux-PowerPC, Linux-MIPS, Linux-Alpha, Linux
-@c German node Linux-PowerPC
-@subsubsection Anmerkungen zu Linux PowerPC
-
-MySQL sollte auf MkLinux mit dem neuesten @code{glibc}-Paket funktionieren
-(getestet mit @code{glibc} 2.0.7).
-
-
-@node Linux-MIPS, Linux-IA64, Linux-PowerPC, Linux
-@c German node Linux-MIPS
-@subsubsection Anmerkungen zu Linux MIPS
-
-Um MySQL auf Qube2 zum Laufen zu bringen (Linux Mips), ben�tigen Sie die
-neuesten @code{glibc}-Bibliotheken (@code{glibc-2.0.7-29C2} funktioniert
-bekannterma�en). Ausserdem m�ssen Sie den @code{egcs}-C++-Kompiler
-(@code{egcs-1.0.2-9}, @code{gcc 2.95.2} oder neuer) benutzen.
-
-
-@node Linux-IA64, , Linux-MIPS, Linux
-@c German node Linux-IA64
-@subsubsection Anmerkungen zu Linux IA64
-
-Um MySQL auf Linux Ia64 zu kompilieren, mussten wir folgendes tun (wir
-vermuten, dass das leichter wird, wenn die neue gcc-Version f�r ia64
-herausgebracht wird).
-
-Unter Verwendung von @code{gcc-2.9-final}:
-
-@example
-CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex
-@end example
-
-Nach @code{make} werden Sie einen Fehler erhalten, dass
-@code{sql/opt_range.cc} nicht kompiliert (interner Kompiler-Fehler). Um das
-zu beheben, gehen Sie ins sql-Verzeichnis und tippen Sie erneut @code{make}
-ein. Kopieren Sie die Kompilierzeile, �ndern Sie aber -O2 zu -O0. Die
-Datei sollte nunmehr kompilieren.
-
-Jetzt k�nnen Sie folgendes tun:
-
-@example
-cd ..
-make
-make_install
-@end example
-
-und @code{mysqld} sollte lauff�hig sein.
-
-Auf Ia64 benutzen die MySQL-Client-Bin�rdateien gemeinsam genutzte (shared)
-Bibliotheken. Wenn Sie daher unsere Bin�rdistribution an anderer Stelle als
-@file{/usr/local/mysql} benutzen, m�ssen Sie entweder
-@file{/etc/ld.so.conf} �ndern oder den Pfad zum Verzeichnis hinzuf�gen, wo
-Sie @file{libmysqlclient.so} haben, und zwar in der
-@code{LD_LIBRARY_PATH}-Umgebungsvariablen.
-
-@xref{Link errors}.
-
-@node Windows, Solaris, Linux, Operating System Specific Notes
-@c German node Windows
-@subsection Anmerkungen zu Windows
-
-Dieser Abschnitt beschreibt Installation und Benutzung von MySQL auf
-Windows. Diese Information steht zus�tzlich in der @file{README}-Datei, die
-mit der MySQL-Windows-Distribution mitgeliefert wird.
-
-
-
-@menu
-* Win95 start::
-* NT start::
-* Windows running::
-* Windows and SSH::
-* Windows symbolic links::
-* Windows client compiling::
-* Windows vs Unix::
-@end menu
-
-@node Win95 start, NT start, Windows, Windows
-@c German node Win95-Start
-@subsubsection Wie man MySQL auf Win95 / Win98 startet
-
-MySQL benutzt TCP/IP, um einen Client mit einem Server zu verbinden. (Das
-erlaubt jeder beliebigen Maschine in Ihrem Netzwerk, sich mit Ihrem
-MySQL-Server zu verbinden.) Aus diesem Grund m�ssen Sie MySQL auf Ihrer
-Maschine installieren, bevor Sie MySQL starten. Sie finden TCP/IP auf Ihrer
-Windows-CD-ROM.
-
-Beachten Sie, dass Sie bei Verwendung eines alten Win95-Releases (zum
-Beispiel OSR2) wahrscheinlich ist, dass Sie ein altes Winsock-Paket haben!
-MySQL erfordert Winsock 2! Sie erhalten das neueste Winsock von
-@uref{http://www.microsoft.com/}. Win98 enth�lt die neue
-Winsock-2-Bibliothek, deshalb trifft das Gesagte nicht auf Win98 zu.
-
-Um den @code{mysqld}-Server zu starten, �ffnen Sie ein MS-DOS-Fenster
-(MS-DOS-Eingabeaufforderung) und geben Sie ein:
-
-@example
-C:\> C:\mysql\bin\mysqld
-@end example
-
-Das startet @code{mysqld} im Hintergrund ohne Fenster.
-
-Sie k�nnen den MySQL-Server killen, indem Sie eingeben:
-
-@example
-C:\> C:\mysql\bin\mysqladmin -u root shutdown
-@end example
-
-Beachten Sie, dass Win95 und Win98 die Erzeugung von Named Pipes nicht
-unterst�tzen. Auf Win95 und Win98 k�nnen Sie Named Pipes nur benutzen, um
-sich zu einem entfernten MySQL-Server zu verbinden, der auf einem
-NT-Server-Host l�uft. (Nat�rlich muss auch der MySQL-Server Named Pipes
-unterst�tzen. Beispielsweise l��t die Verwendung von @code{mysqld-opt}
-unter NT keine Named-Pipe-Verbindungen zu. Sie sollten daher entweder
-@code{mysqld-nt} oder @code{mysqld-max-nt} verwenden.)
-
-Wenn @code{mysqld} nicht startet, �berpr�fen Sie bitte die
-@file{\mysql\data\mysql.err}-Datei um zu sehen, ob der Server eine Meldung
-ausgegeben hat, die auf die Ursache des Problems hinweist. Sie k�nnen auch
-versuchen, den Server mit @code{mysqld --standalone} zu starten. In diesem
-Fall erscheinen vielleicht n�tzliche Informationen auf dem Bildschirm, die
-Ihnen bei der L�sung des Problems helfen.
-
-Die letzte Option besteht darin, @code{mysqld} mit @code{--standalone
---debug} zu starten. In diesem Fall schreibt @code{mysqld} eine Log-Datei
-@file{C:\mysqld.trace}, die die Ursache enthalten k�nnte, warum
-@code{mysqld} nicht startet. @xref{Making trace files}.
-
-
-@node NT start, Windows running, Win95 start, Windows
-@c German node NT-Start
-@subsubsection MySQL auf Windows NT oder Windows 2000 starten
-
-Der Win95-/Win98-Abschnitt trifft auch auf NT/Win2000 zu, mit folgenden
-Unterschieden:
-
-Damit MySQL mit TCP/IP auf NT l�uft, m�ssen Sie Service-Pack 3 (oder neuer)
-installieren!
-
-Beachten Sie, dass alles Folgende, das f�r NT zutrifft, ebenfalls f�r
-Win2000 zutrifft!
-
-F�r NT/Win2000 ist der Servername @code{mysqld-nt}. Normalerweise sollten
-Sie MySQL auf NT/Win2000 als Systemdienst installieren:
-
-@example
-C:\> C:\mysql\bin\mysqld-nt --install
-@end example
-
-oder
-
-@example
-C:\> C:\mysql\bin\mysqld-max-nt --install
-@end example
-
-(Unter Windows NT k�nnen Sie in der Tat jede der Server-Bin�rdateien als
-Systemdienst installieren, aber nur diejenigen, die Namen haben, die auf
-@code{-nt.exe} enden, bieten Unterst�tzung f�r Named Pipes.)
-
-Sie k�nnen MySQL mit diesen Befehlen starten und anhalten:
-
-@example
-C:\> NET START mysql
-C:\> NET STOP mysql
-@end example
-
-Beachten Sie, dass Sie in diesem Fall keine weiteren Optionen f�r
-@code{mysqld-nt} angeben k�nnen!
-
-Sie k�nnen @code{mysqld-nt} auf NT auch als allein ablaufendes Programm
-(Stand-alone) laufen lassen, wenn Sie @code{mysqld-nt} mit irgend welchen
-Optionen starten wollen! Wenn Sie @code{mysqld-nt} auf NT ohne Optionen
-laufen lassen, versucht @code{mysqld-nt}, sich mit den Vorgabeoptionen als
-Systemdienst zu starten. Wenn Sie @code{mysqld-nt} angehalten haben, m�ssen
-Sie es mit @code{NET START mysql} neu starten.
-
-Der Systemdienst wird installiert mit dem Namen @code{MySQL}. Einmal
-installiert, muss er mit dem Systemdienst-Steuerungs-Manager (SCM) in der
-Systemsteuerung gestartet werden, oder indem Sie den @code{NET START
-MySQL}-Befehl benutzen. Wenn irgend welche Optionen angegeben werden
-sollen, m�ssen diese als ``Startparameter'' im SCM-Dienstprogramm angegeben
-werden, bevor Sie den MySQL-Dienst starten. Wenn @code{mysqld-nt} l�uft,
-kann er mit @code{mysqladmin} oder dem SCM-Dienstprogramm angehalten werden, oder
-indem Sie den Befehl @code{NET STOP MySQL} benutzen. Wenn Sie SCM benutzen
-@code{mysqld-nt}, um den Server anzuhalten, gibt es eine seltsame Meldung
-von SCM �ber @code{mysqld shutdown normally}. Wenn er als Systemdienst
-l�uft, hat @code{mysqld-nt} keinen Zugriff auf die Konsole. Daher werden
-auch keine Meldungen angezeigt.
-
-Auf NT erhalten Sie m�glicherweise folgende Systemdienst-Fehlermeldungen:
-@c Question: Die folgenden deutschen Meldungen auf NT �berpr�fen!
-@multitable @columnfractions .3 .7
-@item Zugriff verboten @tab Bedeutung: @code{mysqld-nt.exe} kann nicht
-gefunden werden.
-@item Kann nicht registrieren @tab Bedeutung: Der Pfad ist falsch.
-@item Installation des Systemdienstes fehlgeschlagen. @tab Bedeutung: Der
-Systemdienst ist bereits installiert oder der
-Systemdienst-Steuerungs-Manager ist in einem schlechten Zustand.
-@end multitable
-
-Wenn Sie Problem haben, @code{mysqld-nt} als Systemdienst zu installieren,
-versuchen Sie, ihn mit dem vollen Pfad zu installieren:
-
-@example
-C:\> C:\mysql\bin\mysqld-nt --install
-@end example
-
-Wenn das nicht funktioniert, k�nnen Sie erreichen, dass @code{mysqld-nt}
-korrekt startet, indem Sie den Pfad in der Registrierung korrigieren!
-
-Wenn Sie nicht wollen, dass @code{mysqld-nt} als Systemdienst startet,
-k�nnen Sie ihn wie folgt starten:
-
-@example
-C:\> C:\mysql\bin\mysqld-nt --standalone
-@end example
-
-oder
-
-@example
-C:\> C:\mysql\bin\mysqld --standalone --debug
-@end example
-
-Letztgenanntes gibt Ihnen eine Debug-Spur in @file{C:\mysqld.trace}.
-@xref{Making trace files}.
-
-
-@node Windows running, Windows and SSH, NT start, Windows
-@c German node Laufen lassen auf Windows
-@subsubsection MySQL auf Windows laufen lassen
-
-@cindex TCP/IP
-@cindex Named Pipes
-
-MySQL unterst�tzt TCP/IP auf allen Windows-Plattformen und Named Pipes auf
-NT. Vorgabem��ig werden Named Pipes f�r lokale Verbindungen auf NT und TCP/IP f�r
-alle anderen F�lle benutzt, wenn der Client TCP/IP installiert hat. Der
-Hostname legt fest, welches Protokoll benutzt wird:
-
-@multitable @columnfractions .3 .7
-@strong{Hostname} @tab @strong{Protokoll}
-@item NULL (keiner) @tab Auf NT zuerst Named Pipes versuchen. Wenn das
-nicht funktioniert, TCP/IP benutzen. Auf Win95/Win98 wird TCP/IP benutzt.
-@item . @tab Named Pipes
-@item localhost @tab TCP/IP zum aktuellen Host
-@item hostname @tab TCP/IP
-@end multitable
-
-Sie k�nnen erzwingen, dass ein MySQL-Client Named Pipes benutzt, indem Sie
-die @code{--pipe}-Option oder @code{.} als Hostnamen angeben. Benutzen Sie
-die @code{--socket}-Option, um den Namen der Pipe festzulegen.
-
-Sie k�nnen feststellen, ob MySQL funktioniert, indem Sie die folgenden
-Befehle eingeben:
-
-@example
-C:\> C:\mysql\bin\mysqlshow
-C:\> C:\mysql\bin\mysqlshow -u root mysql
-C:\> C:\mysql\bin\mysqladmin version status proc
-C:\> C:\mysql\bin\mysql test
-@end example
-
-Wenn @code{mysqld} nur langsam auf Verbindungen auf Win95/Win98 antwortet,
-gibt es wahrscheinlich ein Problem mit Ihrem DNS. Starten Sie in diesem
-Fall @code{mysqld} mit @code{--skip-name-resolve} und benutzen Sie nur
-@code{localhost} und IP-Nummern in den MySQL Berechtigungstabellen. Sie
-k�nnen DNS bei einer Verbindung zu einem @code{mysqld-nt}-MySQL-Server, der
-auf NT l�uft, ebenfalls dadurch vermeiden, dass Sie das
-@code{--pipe}-Argument verwenden, um die Benutzung von Named Pipes
-festzulegen. Das funktioniert bei den meisten MySQL-Clients.
-
-Es gibt zwei Versionen des MySQL-Kommadozeilen-Werkzeugs:
-@multitable @columnfractions .25 .75
-@item @code{mysql} @tab Kompiliert auf nativem Windows, was sehr
-eingeschr�nkte Texteditierm�glichkeiten bietet.
-@item @code{mysqlc} @tab Kompiliert mit dem Cygnus-GNU-Kompiler und
--Bibliotheken, was @code{readline}-Editierm�glichkeit bietet.
-@end multitable
-
-Wenn Sie @code{mysqlc.exe} benutzen wollen, m�ssen Sie
-@file{C:\mysql\lib\cygwinb19.dll} in Ihr Windows-Systemverzeichnis kopieren
-(@file{\windows\system} oder ein �hnlicher Ort).
-
-Vorgabem��ig geben die Berechtigungen auf Windows allen lokalen Benutzern
-volle Zugriffsrechte auf alle Datenbanken, ohne ein Passwort anzugeben. Um
-MySQL sicherer zu machen, sollten Sie f�r alle Benutzer ein Passwort setzen
-und die Zeile in der Tabelle @code{mysql.user}, die @code{Host='localhost'}
-und @code{User=''} enth�lt, l�schen.
-
-Sie sollten auch f�r den @code{root}-Benutzer ein Passwort vergeben. Das
-folgende Beispiel entfernt den anonymen Benutzer, der von jedem genutzt
-werden kann, um auf die @code{test}-Datenbank zuzugreifen und setzt dann
-f�r den @code{root}-Benutzer ein Passwort:
-
-@example
-C:\> C:\mysql\bin\mysql mysql
-mysql> DELETE FROM user WHERE Host='localhost' AND User='';
-mysql> QUIT
-C:\> C:\mysql\bin\mysqladmin reload
-C:\> C:\mysql\bin\mysqladmin -u root password ihr_passwort
-@end example
-
-Nachdem Sie das Passwort gesetzt haben, sollten Sie den
-@code{mysqld}-Server herunter fahren, was Sie mit folgendem Befehl
-bewerkstelligen k�nnen:
-
-@example
-C:\> mysqladmin --user=root --password=ihr_passwort shutdown
-@end example
-
-Wenn Sie die alte Shareware-Version von MySQL-Version 3.21 unter Windows
-benutzen, schl�gt der genannte Befehl mit einem Fehler fehl:
-@code{parse error near 'SET OPTION password'}. Die L�sung besteht darin,
-auf die aktuelle MySQL-Version zu aktualisieren, die frei verf�gbar ist.
-
-Mit den neuen MySQL-Versionen k�nnen Sie auf einfache Art neue Benutzer
-hinzuf�gen und Zugriffsrechte mit den @code{GRANT}- und
-@code{REVOKE}-Befehlen �ndern.
-@xref{GRANT}.
-
-@node Windows and SSH, Windows symbolic links, Windows running, Windows
-@c German node Windows und SSH
-@subsubsection Verbinden mit einem entfernten MySQL-Server von Windows mit SSH aus
-
-@c FIX this ist ugly, real ugly.
-
-@cindex SSH
-@cindex Verbinden, auf entfernte Maschine mit SSH
-
-Hier ist eine Anmerkung dazu, wie man sich �ber eine sichere Verbindung zu
-einem entfernten MySQL-Server mit SSH verbindet (von David Carlson
-@email{dcarlson@@mplcomm.com}):
-
-@itemize @bullet
-@item
-Installieren Sie einen SSH-Client auf Ihrer Windows-Maschine. Das beste
-nicht kostenlose Werkzeug, das ich gefunden habe, ist @code{SecureCRT} von
-@uref{http://www.vundyke.com/}. Eine andere Option ist @code{f-secure} von
-@uref{http://www.f-secure.com/}. Sie finden kostenlose Werkzeuge �ber
-@strong{Google} auf
-@uref{http://directory.google.com/Top/Computers/Security/Products_and_Tools/Cryptography/SSH/Clients/Windows/}.
-
-@item
-Starten Sie Ihren Windows-SSH-Client.
-Konfigurieren Sie: @code{Host_Name = ihr_mysql_server_URL_oder_IP}.
-Konfigurieren Sie: @code{userid=ihre_userid}, um sich an Ihrem Server
-anzumelden (wahrscheinlich nicht dasselbe wie Ihr MySQL-Benutzername /
--Passwort).
-
-@item
-Konfigurieren Sie Port-Forwarding. Machen Sie entweder ein Remote Forward
-(einstellen: @code{local_port: 3306}, @code{remote_host:
-ihr_mysql_servername_oder_ip}, @code{remote_port: 3306} ) oder ein lokales
-Forward (einstellen: @code{port: 3306}, @code{host: localhost},
-@code{remote port: 3306}).
-
-@item
-Speichern Sie alles, damit Sie es beim n�chsten Mal nicht noch einmal
-eingeben m�ssen.
-
-@item
-Melden Sie sich an Ihrem Server mit der SSH-Sitzung, die Sie gerade erzeugt
-haben.
-
-@item
-Starten Sie auf Ihrer Windows-Maschine irgend eine Applikation wie Access.
-
-@item
-Erzeugen Sie unter Windows eine neue Datei und stellen Sie eine Verkn�pfung
-zu MySQL her, indem Sie den ODBC-Treiber so benutzen, wie Sie es
-normalerweise tun, AUSSER dass Sie @code{localhost} als MySQL-Host-Server
-eingeben - NICHT @code{yourmysqlservername}.
-@end itemize
-
-Jetzt sollten Sie eine ODBC-Verbindung zu MySQL haben, die mit SSH
-verschl�sselt ist.
-
-
-@node Windows symbolic links, Windows client compiling, Windows and SSH, Windows
-@c German node Symbolische Links auf Windows
-@subsubsection Daten auf verschiedenen Platten unter Win32 aufteilen
-
-@cindex Symbolische Links
-@cindex Mehrere Festplatten benutzen, um Daten zu speichern
-@c Question: using multiple disks to start data (should be: store data)
-@cindex Festplatten, Daten verteilen �ber mehrere
-
-Ab MySQL-Version 3.23.16 werden die @code{mysqld-max}- und
-@code{mysql-max-nt}-Server in der MySQL-Distribution mit der
-@code{-DUSE_SYMDIR}-Option kompiliert. Das gibt Ihnen die M�glichkeit,
-Datenbanken auf verschiedene Festplatten zu verteilen, indem Sie
-symbolische Links darauf machen (in �hnlicher Weise, wie symbolische Links
-unter Unix funktionieren).
-
-Unter Windows legen Sie einen symbolischen Link auf eine Datenbank an,
-indem Sie eine Datei erzeugen, die den Pfad zum Zielverzeichnis enth�lt,
-und diese Datei im @file{mysql_data}-Verzeichnis unter dem Dateiname
-@file{Datenbank.sym} speichern. Beachten Sie, dass der symbolische Link nur
-dann benutzt wird, wenn das Verzeichnis @file{mysql_data_dir\datenbank}
-nicht existiert.
-
-Wenn Ihr MySQL-Daten-Verzeichnis beispielsweise @file{C:\mysql\data} ist und
-Sie die Datenbank @code{foo} dort haben wollen, die aber in
-@file{D:\data\foo} liegt, erzeugen Sie die Datei
-@file{C:\mysql\data\foo.sym}, die als Text @code{D:\data\foo\} enth�lt.
-Dann werden alle Tabellen, die in der Datenbank @code{foo} sind, in
-@file{D:\data\foo} erzeugt.
-
-Beachten Sie, dass wir dieses Feature nicht vorgabem��ig aktiviert haben,
-weil es mit Geschwindigkeitsnachteilen verbunden ist. Es ist selbst dann
-nicht aktiviert, wenn Sie MySQL mit Unterst�tzung daf�r kompiliert haben.
-Um symbolische Links zu aktivieren, m�ssen Sie in Ihre @code{my.cnf}- oder
-@code{my.ini}-Datei folgenden Eintrag machen:
-
-@example
-[mysqld]
-use-symbolic-links
-@end example
-
-In MySQL 4.0 werden symbolische Links vorgabem��ig aktiviert sein. Wenn
-Sie dies deaktivieren wollen, benutzen Sie die @code{skip-symlink}-Option.
-
-
-@node Windows client compiling, Windows vs Unix, Windows symbolic links, Windows
-@c German node Windows kompilieren
-@subsubsection MySQL-Clients auf Windows kompilieren
-
-@cindex Kompilieren, auf Windows
-@cindex Windows, Kompilieren auf
-
-In Ihren Quell-Dateien sollten Sie @file{windows.h} einschlie�en, bevor
-Sie @file{mysql.h} einschlie�en:
-
-@example
-#if defined(_WIN32) || defined(_WIN64)
-#include <windows.h>
-#endif
-#include <mysql.h>
-@end example
-
-Sie k�nnen Ihren Code entweder mit der dynamischen
-@file{libmysql.lib}-Bibliothek linken, die nur ein Wrapper zum Laden der
-@file{libmysql.dll} bei Bedarf ist, oder mit der statischen
-@file{mysqlclient.lib}-Bibliothek.
-
-Beachten Sie, dass MySQL-Client-Bibliotheken als threaded Bibliotheken
-kompiliert werden, daher sollten Sie auch Ihren Code so kompilieren, dass
-er multi-threaded ist!
-
-
-@node Windows vs Unix, , Windows client compiling, Windows
-@c German node Windows / Unix
-@subsubsection MySQL-Windows im Vergleich zu Unix-MySQL
-
-@cindex Windows, im Vergleich zu Unix
-@cindex Betriebssysteme, Windows im Vergleich zu Unix
-
-MySQL-Windows hat sich mittlerweile als sehr stabil erwiesen. Diese Version
-von MySQL hat dieselben Features wie die entsprechende Unix-Version,
-allerdings mit folgenden Ausnahmen:
-
-@table @strong
-@item Windows 95 und Threads
-Windows 95 hat ein etwa 200 Bytes gro�es Hauptspeicher-Leck (Memory Leak) f�r
-jede Thread-Erzeugung. Jede Verbindung zu MySQL erzeugt eine neues Thread,
-daher sollten Sie @code{mysqld} nicht f�r l�ngere Zeitr�ume auf Windows 95
-laufen lassen, wenn Ihr Server viele Verbindungen handhabt! Windows NT und
-Windows 98 haben diesen Bug nicht.
-
-@item Gleichzeitige Lesezugriffe
-MySQL vertraut auf @code{pread()}- und @code{pwrite()}-Aufrufe, um in der
-Lage zu sein, @code{INSERT} und @code{SELECT} zu mischen. Momentan benutzen
-wir mutexes, um @code{pread()} / @code{pwrite()} zu emulieren. Langfristig
-werden wir die Dateiebenen-Schnittstelle durch eine virtuelle Schnittstelle
-ersetzen, um die @code{readfile()}- / @code{writefile()}-Schnittstelle auf
-NT mit h�herer Geschwindigkeit benutzen zu k�nnen.
-Die aktuelle Implementation begrenzt die Anzahl offener Dateien, die MySQL
-benutzen kann, auf 1024, was bedeutet, dass Sie nicht so viele
-gleichzeitige Threads auf NT benutzen k�nnen wie auf Unix.
-
-@item Blockierendes Lesen
-MySQL benutzt blockierendes Lesen (Blocking Read) f�r jede Verbindung. Das
-bedeutet in der Anwendung:
-
-@itemize @bullet
-@item
-Eine Verbindung wird nicht automatisch nach 8 Stunden abgebaut, wie es
-unter der Unix-Version von MySQL der Fall ist.
-
-@item
-Wenn eine Verbindung h�ngen bleibt, ist es unm�glich, sie abzubrechen, ohne
-MySQL zu killen.
-
-@item
-@code{mysqladmin kill} funktioniert nicht f�r schlafende Verbindungen.
-
-@item
-@code{mysqladmin shutdown} kann nicht abgebrochen werden, solange es noch
-schlafende Verbindungen gibt.
-@end itemize
-
-Geplant ist, dieses Problem zu beheben, sobald unsere Windows-Entwickler
-ein nettes Workaround heraus gefunden haben.
-
-@item UDF-Funktionen
-Momentan unterst�tzt MySQL-Windows keine benutzerdefinierten Funktionen
-(UDF, user defined functions).
-
-@item @code{DROP DATABASE}
-Sie k�nnen keine Datenbank l�schen, die durch irgend einen Thread in
-Benutzung ist.
-
-@item MySQL vom Task-Manager aus killen
-Sie k�nnen MySQL nicht vom Task-Manager oder mit dem Shutdown-Dienstprogramm unter
-Windows 95 killen. Sie m�ssen es mit @code{mysqladmin shutdown} herunter
-fahren.
-
-@item Von Gro�-/Kleinschreibung unabh�ngige Namen
-Unter Windows sind Dateinamen unabh�ngig von der Gro�-/Kleinschreibung.
-Daher sind Datenbank- und Tabellennamen in MySQL f�r Windows ebenfalls
-unabh�ngig von der Gro�-/Kleinschreibung. Die einzige Einschr�nkung ist
-die, dass Datenbank- und Tabellennamen innerhalb eines bestimmten
-Statements dieselbe Gro�-/Kleinschreibung haben m�ssen.
-@xref{Case sensitivity}.
-
-@item Das @samp{\}-Verzeichnis-Zeichen
-Bestandteile von Pfadnamen werden unter Windows mit dem @samp{\}-Zeichen
-getrennt, das in MySQL als Fluchtzeichen (Escape Character) dient. Wenn Sie
-@code{LOAD DATA INFILE} oder @code{SELECT ... INTO OUTFILE} benutzen,
-m�ssen Sie @samp{\} an solchen Stellen doppelt eingeben:
-
-@example
-mysql> LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr;
-mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
-@end example
-
-Alternativ k�nnen Sie auch Dateinamen im Unix-Stil mit @samp{/}-Zeichen
-benutzen:
-
-@example
-mysql> LOAD DATA INFILE "C:/tmp/skr.txt" INTO TABLE skr;
-mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;
-@end example
-
-@item @code{Can't open named pipe}-Fehler
-Wenn Sie MySQL-Version 3.22 auf NT mit den neuesten MySQL-Clients benutzen,
-erhalten Sie folgende Fehlermeldung:
-
-@example
-error 2017: can't open named pipe to host: . pipe...
-@end example
-
-@tindex .my.cnf Datei
-Das liegt daran, dass die MySQL-Version f�r NT auf NT vorgabem��ig Named
-Pipes benutzt. Sie k�nnen diesen Fehler vermeiden, indem Sie bei den neuen
-MySQL-Clients die @code{--host=localhost}-Option benutzen oder eine
-Optionsdatei @file{C:\my.cnf} anlegen, die folgendes enth�lt:
-
-@example
-[client]
-host = localhost
-@end example
-
-@item @code{Access denied for user}-Fehler
-Wenn Sie den Fehler @code{Access denied for user: 'ein-benutzer@@unknown'
-to database 'mysql'} erhalten, wenn Sie auf einen MySQL-Server auf
-derselben Maschine zugreifen, hei�t das, dass MySQL Ihren Hostnamen nicht
-richtig aufl�sen kann.
-
-Um das zu beheben, legen Sie eine Datei @file{\windows\hosts} mit folgender
-Zeile an:
-
-@example
-127.0.0.1 localhost
-@end example
-
-@item @code{ALTER TABLE}
-Wenn Sie ein @code{ALTER TABLE}-Statement ausf�hren, ist die Tabelle gegen
-Benutzung durch andere Threads gesperrt. Das hat damit zu tun, dass Sie
-unter Windows keine Datei l�schen k�nnen, die durch andere Threads in
-Benutzung ist. (Zuk�nftig finden wir m�glicherweise einen Weg, dieses
-Problem zu umgehen.)
-
-@item @code{DROP TABLE} auf eine Tabelle, die durch eine
-@code{MERGE}-Tabelle in Benutzung ist, funktioniert nicht. Der
-@code{MERGE}-Handler f�hrt sein Tabellen-Mapping versteckt vor MySQL durch.
-Weil Windows das L�schen von Dateien verbietet, die offen sind, m�ssen Sie
-zuerst alle @code{MERGE}-Tabellen flushen (mit @code{FLUSH TABLES}) oder
-die @code{MERGE}-Tabelle l�schen, bevor Sie die Tabelle l�schen. Wir werden
-das zusammen mit der Einf�hrung von Sichten (@code{VIEW}s) beheben.
-@end table
-
-Hier sind einige Themen f�r diejenigen, die uns beim Windows-Release helfen
-wollen:
-
-@cindex Windows, offene Fragen
-
-@itemize @bullet
-@item
-Einen Ein-Benutzer-Server @code{MYSQL.DLL} herstellen. Das k�nnte alles
-beinhalten, was einen Standard-Server ausmacht, ausser Thread-Erzeugung.
-Das w�rde es erheblich erleichtern, MySQL in Applikationen zu benutzen, die
-keinen echten Client/Server und keinen Zugriff auf den Server von anderen
-Hosts ben�tigen.
-
-@item
-Ein paar nette Start- und Stop-Icons zur MySQL-Installation hinzuf�gen.
-
-@item
-Ein Werkzeug bauen, das Registrierungseintr�ge f�r die MySQL-Startoptionen
-handhabt. Das Lesen der Registrierungseintr�ge ist bereits in
-@file{mysqld.cc} kodiert, sollte aber umgeschrieben werden, damit es mehr
-Parameter-orientiert ist. Das Werkzeug sollte auch in der Lage sein, die
-@file{C:\my.cnf}-Optionsdatei zu aktualisieren, wenn der Benutzer diese
-lieber als die Registrierungsdatei benutzen will.
-
-@item
-Wenn man @code{mysqld} als Systemdienst mit @code{--install} (auf NT)
-installiert, w�re es nett, wenn man vorgabem��ige Optionen auf der
-Kommandozeile hinzuf�gen k�nnte. Im Moment muss man diese fehlende
-M�glichkeit durch eine Liste der Parameter in der @file{C:\my.cnf}-Datei
-ersetzen.
-
-@item
-Es w�re eine feine Sache, wenn man @code{mysqld} vom Task-Manager aus
-killen k�nnte. Momentan muss man @code{mysqladmin shutdown} benutzen.
-
-@item
-@code{readline} auf Windows portieren, damit es im
-@code{mysql}-Kommandozeilen-Werkzeug benutzt werden kann.
-
-@item
-GUI-Versionen der Standard-MySQL-Clients (@code{mysql},
-@code{mysqlshow}, @code{mysqladmin} und @code{mysqldump}) w�ren nett.
-
-@item
-Nett w�re auch, wenn die Socket-Lese- und Schreib-Funktionen in
-@file{net.c} unterbrechbar w�ren. Das w�rde es erm�glichen, offen Threads
-mit @code{mysqladmin kill} auf Windows zu killen.
-
-@item
-@c Question: Is it my lack of English or why don't I understand the
-following two lines?
-@code{mysqld} always starts in the "C" locale und not in the default locale.
-We would like to have @code{mysqld} use the current locale f�r the sort order.
-
-@item
-Benutzerdefinierte Funktionen (UDF) mit @code{.DLL}s implementieren.
-
-@item
-Makros hinzuf�gen, um die schnelleren, Thread-sicheren
-Inkrementierungs-/Dekrementierungsmethoden nutzen zu k�nnen, die Windows
-bietet.
-
-@end itemize
-
-Weitere Windows-spezifische Themen sind in der @file{README}-Datei
-beschrieben, die mit der MySQL-Windows-Distribution ausgeliefert wird.
-
-
-@node Solaris, BSD Notes, Windows, Operating System Specific Notes
-@c German node Solaris
-@subsection Anmerkungen zu Solaris
-
-@cindex Installationsprobleme auf Solaris
-@cindex Probleme, Installation auf Solaris
-@cindex Tar, Probleme auf Solaris
-@cindex Fehler, Verzeichnispr�fsumme
-@cindex Pr�fsummenfehler
-
-Auf Solaris bekommen Sie vielleicht schon Probleme, bevor Sie �berhaupt
-Ihre MySQL-Distribution entpackt haben! Solaris-@code{tar} kann nicht mit
-langen Dateinamen umgehen. Daher sehen Sie vielleicht einen Fehler wie den
-folgenden, wenn Sie MySQL entpacken:
-
-@example
-x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase, 0 Bytes, 0 tape blocks
-tar: directory checksum error (Verzeichnis-Pr�fsummenfehler)
-@end example
-
-In diesem Fall m�ssen Sie GNU-@code{tar} (@code{gtar}) benutzen, um die
-Distribution zu entpacken. Sie finden eine vorkompilierte Version f�r
-Solaris auf @uref{http://www.mysql.com/downloads/}.
-
-Native Sun-Threads funktinieren nur auf Solaris 2.5 und h�her. Auf 2.4 und
-fr�her benutzt MySQL automatisch MIT-pThreads.
-@xref{MIT-pthreads}.
-
-Vielleicht erhalten Sie von configure folgenden Fehler:
-
-@example
-checking for restartable system calls... configure: error can not run test
-programs while cross compiling
-@end example
-
-Das bedeutet, dass mit Ihrer Kompiler-Installation etwas nicht stimmt! In
-diesem Fall sollten Sie Ihren Kompiler auf eine neuere Version
-aktualisieren. Eventuell sind Sie in der Lage, das Problem zu l�sen, indem
-Sie folgende Zeile in die @file{config.cache}-Datei einf�gen:
-
-@example
-ac_cv_sys_restartable_syscalls=$@{ac_cv_sys_restartable_syscalls='no'@}
-@end example
-
-Wenn Sie Solaris auf einer SPARC benutzen, ist der empfohlene Kompiler
-@code{gcc} 2.95.2. Sie finden ihn auf @uref{http://gcc.gnu.org/}.
-Beachten Sie, dass @code{egcs} 1.1.1 und @code{gcc} 2.8.1 auf SPARC nicht
-zuverl�ssig laufen!
-
-Die empfohlene @code{configure}-Zeile ist bei der Benutzung von @code{gcc}
-2.95.2:
-
-@example
-CC=gcc CFLAGS="-O3" \
-CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \
-./configure --prefix=/usr/local/mysql --with-low-memory --enable-assembler
-@end example
-
-Wenn Sie eine Ultra-Sparc haben, erhalten Sie 4 % mehr Performance, wenn
-Sie "-mcpu=v8 -Wa,-xarch=v8plusa" zu CFLAGS und CXXFLAGS hinzuf�gen.
-
-Wenn Sie einen Sun Workshop (Fortre) 5.3 (oder neueren) Kompiler haben,
-k�nnen Sie @code{configure} wie folgt laufen lassen:
-
-@example
-CC=cc CFLAGS="-Xa -fast -xO4 -native -xstrconst -mt" \
-CXX=CC CXXFLAGS="-noex -xO4 -mt" \
-./configure --prefix=/usr/local/mysql --enable-assembler
-@end example
-
-In den MySQL-Benchmarks haben wir auf einer Ultra-Sparc 6%
-Geschwindigkeitssteigerung erreicht, wenn wir Sun Workshop 5.3 benutzen, im
-Vergleich mit der Benutzung von gcc mit -mcpu-Flags.
-
-Wenn Sie Probleme mit @code{fdatasync} oder @code{sched_yield} bekommen,
-k�nnen Sie diese beheben, indem Sie @code{LIBS=-lrt} zur
-Konfigurationszeile hinzuf�gen.
-
-Der folgende Absatz ist nur f�r �ltere Kompiler als WorkShop 5.3 relevant:
-
-Eventuell m�ssen Sie auch das @code{configure}-Skript editieren und
-folgende Zeile �ndern:
-
-@example
-#if !defined(__STDC__) || __STDC__ != 1
-@end example
-
-�ndern zu:
-
-@example
-#if !defined(__STDC__)
-@end example
-
-Wenn Sie @code{__STDC__} mit der @code{-Xc}-Option anschalten, kann der
-Sun-Kompiler nicht mit der Solaris-@file{pThread.h}-Header-Datei
-kompilieren. Das ist ein Bug von Sun (Kompiler-Problem oder besch�digte
-Include-Datei).
-
-Wenn @code{mysqld} beim Laufenlassen eine Fehlermeldung wie die unten
-stehende ausgibt, haben Sie versucht, MySQL mit dem Sun-Kompiler zu
-kompilieren, ohne die Multi-Thread-Option (@code{-mt}) anzuschalten:
-
-@example
-libc internal error: _rmutex_unlock: rmutex not held
-@end example
-
-F�gen Sie @code{-mt} zu @code{CFLAGS} und @code{CXXFLAGS} hinzu und
-versuchen Sie es noch einmal.
-
-Wenn Sie folgenden Fehler beim Kompilieren von MySQL mit @code{gcc}
-erhalten, ist Ihr @code{gcc} nicht f�r Ihre Version von Solaris
-konfiguriert:
-
-@example
-shell> gcc -O3 -g -O2 -DDBUG_OFF -o thr_alarm ...
-./thr_alarm.c: In function `signal_hand':
-./thr_alarm.c:556: too many arguments to function `sigwait'
-@end example
-
-Die einzige richtige M�glichkeit in diesem Fall ist, sich die neueste
-Version von @code{gcc} zu besorgen und Sie mit Ihrem aktuellen
-@code{gcc}-Kompiler zu kompilieren. Zumindest auf Solaris 2.5 haben fast
-alle Bin�rversionen von @code{gcc} alte, unbrauchbare Include-Dateien, die
-alle Programme besch�digen, die Threads benutzen (und m�glicherweise auch
-andere Programme)!
-
-Solaris stellt keine statischen Versionen aller Systembibliotheken zur
-Verf�gung (@code{libpThreads} und @code{libdl}). Daher k�nnen Sie MySQL
-nicht mit @code{--static} kompilieren. Wenn Sie es dennoch versuchen,
-erhalten Sie folgenden Fehler:
-
-@example
-ld: fatal: library -ldl: not found
-
-oder
-
-undefined reference to `dlopen'
-
-oder
-
-cannot find -lrt
-@end example
-
-Wenn zu viele Prozesse zu schnell hintereinander versuchen, sich mit
-@code{mysqld} zu verbinden, werden Sie folgenden Fehler im MySQL-Log sehen:
-
-@example
-Error in accept: Protocol error
-@end example
-
-Als Workaround k�nnen Sie versuchen, den Server mit der
-@code{--set-variable back_log=50}-Option zu starten. @xref{Command-line options}.
-
-Wenn Sie Ihren eigenen MySQL-Client linken, erhalten Sie m�glicherweise
-folgenden Fehler, wenn Sie versuchen, ihn auszuf�hren:
-
-@example
-ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory
-@end example
-
-Dieses Problem kann mit einer der folgenden Methoden vermieden werden:
-
-@itemize @bullet
-@item
-Linken Sie den Client mit folgendem Flag (anstelle von @code{-Lpath}):
-@code{-Wl,r/full-path-to-libmysqlclient.so}.
-
-@item
-Kopieren Sie @file{libmysqclient.so} nach @file{/usr/lib}.
-
-@tindex LD_RUN_PATH-Umgebungsvariable
-@tindex Umgebungsvariable, LD_RUN_PATH
-@item
-F�gen Sie den Pfadnamen des Verzeichnisses, wo @file{libmysqlclient.so}
-liegt, der @code{LD_RUN_PATH}-Umgebungsvariablen hinzu, bevor Sie Ihren
-Client laufen lassen.
-@end itemize
-
-Wenn Sie die @code{--with-libwrap}-configure-Option benutzen, m�ssen Sie
-auch die Bibliotheken einschlie�en, die @file{libwrap.a} ben�tigt:
-
-@example
---with-libwrap="/opt/NUtcpwrapper-7.6/lib/libwrap.a -lnsl -lsocket
-@end example
-
-Wenn Sie Probleme mit configure haben, wenn Sie versuchen, mit @code{-lz}
-zu linken und keine @code{zlib} installiert haben, haben Sie zwei
-M�glichkeiten:
-
-@itemize @bullet
-@item
-Wenn Sie in der Lage sein wollen, dass komprimierte Kommunikationsprotokoll
-zu benutzen, m�ssen Sie zlib von ftp.gnu.org laden und installieren.
-
-@item
-Konfigurieren Sie mit @code{--with-named-z-libs=no}.
-@end itemize
-
-Wenn Sie gcc benutzen und Probleme mit dem Laden von @code{UDF}-Funktionen
-in MySQL haben, versuchen Sie, @code{-lgcc} zur Link-Zeile f�r die
-@code{UDF}-Funktion hinzuzuf�gen.
-
-Wenn Sie wollen, dass MySQL automatisch startet, kopieren Sie
-@file{Support-files/mysql.server} nach @file{/etc/init.d} und erzeugen Sie
-einen symbolischen Link darauf, den Sie @file{/etc/rc3.d/S99mysql.server}
-nennen.
-
-
-
-
-@menu
-* Solaris 2.7::
-* Solaris x86::
-@end menu
-
-@node Solaris 2.7, Solaris x86, Solaris, Solaris
-@c German node Solaris 2.7
-@subsubsection Anmerkungen zu Solaris 2.7/2.8
-
-Normalerweise k�nnen Sie eine Solaris-2.6-Bin�rdatei f�r Solaris 2.7 und
-2.8 benutzen. Die meisten Dinge, die Solaris 2.6 betreffen, treffen auch
-f�r Solaris 2.7 und 2.8 zu.
-
-Beachten Sie, dass MySQL-Version 3.23.4 und h�her in der Lage sein sollte,
-automatisch neue Versionen von Solaris zu erkennen und Workarounds f�r die
-folgenden Probleme zu aktivieren!
-
-Solaris 2.7 / 2.8 hat einige Bugs in den Include-Dateien. Eventuell sehen
-Sie folgenden Fehler, wenn Sie @code{gcc} benutzen:
-
-@example
-/usr/include/widec.h:42: warning: `getwc' redefined
-/usr/include/wchar.h:326: warning: this is the location of the previous
-definition
-@end example
-
-Wenn das auftritt, k�nnen Sie folgendes tun, um das Problem zu l�sen:
-
-Kopieren Sie @code{/usr/include/widec.h} nach
-@code{.../lib/gcc-lib/os/gcc-version/include} und �ndern Sie Zeile 41 von:
-
-@example
-#if !defined(lint) && !defined(__lint)
-
-nach
-
-#if !defined(lint) && !defined(__lint) && !defined(getwc)
-@end example
-
-Alternativ k�nnen Sie @file{/usr/include/widec.h} direkt editieren. Egal,
-wie Sie vorgehen: Nachdem Sie die Fehlerbehebung durchgef�hrt haben,
-sollten Sie @file{config.cache} entfernen und @code{configure} noch einmal
-laufen lassen!
-
-Wenn Sie beim Laufenlassen von @code{make} folgende Fehler bekommen, liegt
-das daran, dass @code{configure} die @file{curses.h}-Datei nicht erkannte
-(vermutlich aufgrund des Fehlers in @file{/usr/include/widec.h}):
-
-@example
-In file included by mysql.cc:50:
-/usr/include/term.h:1060: syntax error before `,'
-/usr/include/term.h:1081: syntax error before `;'
-@end example
-
-Das Problem l�sen Sie auf eine der folgenden Weisen:
-
-@itemize @bullet
-@item
-Konfigurieren Sie mit @code{CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure}.
-
-@item
-Editieren Sie @file{/usr/include/widec.h}, wie weiter oben gezeigt, und
-lassen Sie configure noch einmal laufen.
-
-@item
-Entfernen Sie die @code{#define HAVE_TERM}-Zeile aus der
-@file{config.h}-Datei und lassen Sie @code{make} noch einmal laufen.
-@end itemize
-
-Wenn Sie das Problem bekommen, dass Ihr Linker @code{-lz} nicht finden
-kann, wenn Sie Ihr Client-Programm linken, liegt das wahrscheinlich daran,
-dass Ihre @file{libz.so}-Datei in @file{/usr/local/lib} installiert ist.
-Sie k�nnen das mit einer der folgenden Methoden beheben:
-
-@itemize @bullet
-@item
-F�gen Sie @file{/usr/local/lib} zu @code{LD_LIBRARY_PATH} hinzu.
-
-@item
-F�gen Sie einen Link auf @file{libz.so} von @file{/lib} hinzu.
-
-@item
-Wenn Sie Solaris 8 benutzen, k�nnen Sie die optionale zlib aus Ihrer
-Solaris-8-CD-Distribution installieren.
-
-@item
-Konfigurieren Sie MySQL mit der @code{--with-named-z-libs=no}-Option.
-@end itemize
-
-
-@node Solaris x86, , Solaris 2.7, Solaris
-@c German node Solaris x86
-@subsubsection Anmerkungen zu Solaris x86
-
-Auf Solaris 2.8 auf x86 erzeugt @code{mysqld} einen Speicherauszug (Core
-Dump), wenn Sie darin 'strip' laufen lassen.
-
-Wenn Sie @code{gcc} oder @code{egcs} auf Solaris x86 benutzen und Probleme
-mit Speicherausz�gen (Core Dumps) unter Last erleben, sollten Sie folgenden
-@code{configure}-Befehl benutzen:
-
-@example
-CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \
-CXX=gcc \
-CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti -DHAVE_CURSES_H" \
-./configure --prefix=/usr/local/mysql
-@end example
-
-Das vermeidet Probleme mit der @code{libstdc++}-Bibliothek und mit
-C++-Ausnahmefehlern.
-
-Wenn das nicht hilft, sollten Sie eine Debug-Version kompilieren und sie
-mit einer Trace-Datei oder unter @code{gdb} laufen lassen. @xref{Using gdb on mysqld}.
-
-
-@node BSD Notes, Mac OS X, Solaris, Operating System Specific Notes
-@c German node BSD
-@subsection Anmerkungen zu BSD
-
-
-
-@menu
-* FreeBSD::
-* NetBSD::
-* OpenBSD::
-* OpenBSD 2.5::
-* OpenBSD 2.8::
-* BSDI::
-* BSDI2::
-* BSDI3::
-* BSDI4::
-@end menu
-
-@node FreeBSD, NetBSD, BSD Notes, BSD Notes
-@c German node FreeBSD
-@subsubsection Anmerkungen zu FreeBSD
-
-FreeBSD 3.x wird f�r MySQL empfohlen, weil das Thread-Paket sehr viel
-integrierter ist.
-
-Die einfachste und daher empfohlene Art der Installation ist die Benutzung
-der mysql-server- und mysql-client-Ports, die auf
-@uref{http://www.freebsd.org} verf�gbar sind.
-
-Durch deren Benutzung erhalten Sie:
-@itemize @bullet
-@item
-Ein funktionierendes MySQL mit allen Optimierungen bereits aktiviert, von
-denen bekannt ist, dass Sie auf Ihrer Version von FreeBSD funktionieren.
-
-@item
-Automatische Konfiguration, automatisches Build.
-
-@item
-Start-Skripte, die in /usr/local/etc/rc.d installiert werden.
-
-@item
-Die M�glichkeit festzustellen, welche Dateien installiert sind, mit
-pkg_info -L. Und die M�glichkeit, sie mit pkg_delete zu entfernen, wenn Sie
-MySQL nicht mehr auf dieser Maschine haben wollen.
-@end itemize
-
-Empfohlen wird die Benutzung von MIT-pThreads auf FreeBSD 2.x und von
-nativen Threads auf Version 3 und h�her. Es ist m�glich, auf einigen sp�ten
-2.2.x-Versionen mit nativen Threads zu arbeiten, aber Sie k�nnen beim
-Herunterfahren von @code{mysqld} Probleme bekommen.
-
-Die MySQL-@file{Makefile}-Dateien erfordern GNU-make (@code{gmake}). Wenn
-Sie MySQL kompilieren wollen, m�ssen Sie zuerst GNU-@code{make}
-installieren.
-
-Stellen Sie sicher, dass Ihr Namensaufl�ser (Name Resolver) korrekt
-eingerichtet ist. Ansonsten erleben Sie vielleicht Resolver-Verz�gerungen
-oder -Fehler, wenn Sie sich mit @code{mysqld} verbinden.
-
-Stellen Sie sicher, dass der @code{localhost}-Eintrag in der
-@file{/etc/hosts}-Datei stimmt. Ansonsten werden Sie Probleme haben, sich
-mit der Datenbank zu verbinden. Die @file{/etc/hosts}-Datei sollte mit
-folgender Zeile beginnen:
-
-@example
-127.0.0.1 localhost localhost.ihre.domain
-@end example
-
-Wenn Sie bemerken, dass @code{configure} MIT-pThreads benutzen wird, lesen
-Sie die Anmerkungen zu MIT-pThreads. @xref{MIT-pthreads}.
-
-Wenn @code{make install} meldet, dass es @file{/usr/include/pThreads} nicht
-finden kann, hat @code{configure} nicht entdeckt, dass Sie MIT-pThreads
-ben�tigen. Das kann durch die Ausf�hrung folgender Befehle behoben werden:
-
-@example
-shell> rm config.cache
-shell> ./configure --with-mit-threads
-@end example
-
-FreeBSD ist daf�r bekannt, dass es vorgabem��ig einen sehr niedrigen Wert
-f�r Datei-Handles eingestellt hat. @xref{Not enough file handles}.
-Kommentieren Sie den Abschnitt ulimit -n section in safe_mysqld aus oder
-erh�hen Sie die Werte f�r den @code{mysqld}-Benutzer in /etc/login.conf
-(und bauen Sie es neu mit cap_mkdb /etc/login.conf). Stellen Sie ausserdem
-sicher, dass Sie die korrekte Klasse f�r diesen Benutzer in der
-Passwort-Datei einstellen, wenn Sie nicht den Vorgabewert benutzen
-(benutzen Sie chpass mysqld-user-name). @xref{safe_mysqld,
-,@code{safe_mysqld}}.
-
-Wenn Sie Probleme mit dem aktuellen Datum in MySQL erhalten, wird das
-Setzen der @code{TZ}-Variablen das wahrscheinlich beheben.
-@xref{Environment variables}.
-
-Um ein sicheres, stabiles System zu erhalten, sollten Sie ausschlie�lich
-FreeBSD-Kernels benutzen, die als @code{-STABLE} markiert sind.
-
-
-@node NetBSD, OpenBSD, FreeBSD, BSD Notes
-@c German node NetBSD
-@subsubsection Anmerkungen zu NetBSD
-
-Um auf NetBSD zu kompilieren, ben�tigen Sie GNU @code{make}. Ansonsten wird
-das Kompilieren abst�rzen, wenn @code{make} versucht, @code{lint} auf
-C++Dateien laufen zu lassen.
-
-
-@node OpenBSD, OpenBSD 2.5, NetBSD, BSD Notes
-@c German node OpenBSD
-@subsubsection Anmerkungen zu OpenBSD
-
-
-
-@node OpenBSD 2.5, OpenBSD 2.8, OpenBSD, BSD Notes
-@c German node <no English equivalent>
-@subsubsection Anmerkungen zu OpenBSD 2.5
-
-Auf OpenBSD-Version 2.5 k�nnen Sie MySQL mit nativen Threads mit folgenden
-Optionen kompilieren:
-
-@example
-CFLAGS=-pThread CXXFLAGS=-pThread ./configure --with-mit-threads=no
-@end example
-
-
-@node OpenBSD 2.8, BSDI, OpenBSD 2.5, BSD Notes
-@c German node OpenBSD 2.8
-@subsubsection Anmerkungen zu OpenBSD 2.8
-
-Unsere Benutzer haben berichtet, dass OpenBSD 2.8 einen Thread-Bug hat, der
-Probleme mit MySQL verursacht. Die OpenBSD-Entwickler haben das Problem
-behoben, aber seit dem 25. Januar 2001 ist es nur im ``-current''-Zweig
-verf�gbar. Die Symptome dieses Thread-Bugs sind langsames Antworten, hohe
-Lase, hohe Prozessorauslastung und Abst�rze.
-
-
-@node BSDI, BSDI2, OpenBSD 2.8, BSD Notes
-@c German node BSDI
-@subsubsection Anmerkungen zu BSD/OS
-
-
-
-@node BSDI2, BSDI3, BSDI, BSD Notes
-@c German node <no English equivalent>
-@subsubsection Anmerkungen zu BSD/OS Version 2.x
-
-Wenn Sie folgenden Fehler beim Kompilieren von MySQL erhalten, ist Ihr
-@code{ulimit}-Wert f�r virtuellen Speicher zu niedrig:
-
-@example
-item_func.h: In method `Item_func_ge::Item_func_ge(const Item_func_ge &)':
-item_func.h:28: virtual memory exhausted
-make[2]: *** [item_func.o] Error 1
-@end example
-
-Versuchen Sie, @code{ulimit -v 80000} zu benutzen, und lassen Sie
-@code{make} erneut laufen. Wenn das nicht funktioniert und Sie @code{bash}
-benutzen, versuchen Sie, statt dessen @code{csh} oder @code{sh} zu
-benutzen. Einige BSDI-Benutzer haben Probleme mit @code{bash} und
-@code{ulimit} berichtet.
-
-Wenn Sie @code{gcc} benutzen, m�ssen Sie eventuell auch den
-@code{--with-low-memory}-Flag f�r @code{configure} benutzen, um in der Lage
-zu sein, @file{sql_yacc.cc} zu kompilieren.
-
-Wenn Sie Probleme mit dem aktuellen Datum in MySQL erhalten, wird das
-Setzen der @code{TZ}-Variablen das wahrscheinlich beheben.
-@xref{Environment variables}.
-
-@node BSDI3, BSDI4, BSDI2, BSD Notes
-@c German node BSDI3
-@subsubsection Anmerkungen zu BSD/OS Version 3.x
-
-Aktualisieren Sie auf BSD/OS Version 3.1. Wenn das nicht m�glich ist,
-installieren Sie BSDI-Patch M300-038.
-
-Benutzen Sie zur Konfiguration von MySQL folgenden Befehl:
-
-@example
-shell> env CXX=shlicc++ CC=shlicc2 \
- ./configure \
- --prefix=/usr/local/mysql \
- --localstatedir=/var/mysql \
- --without-perl \
- --with-unix-socket-path=/var/mysql/mysql.sock
-@end example
-
-Folgendes funktioniert bekannterma�en ebenfalls:
-
-@example
-shell> env CC=gcc CXX=gcc CXXFLAGS=-O3 \
- ./configure \
- --prefix=/usr/local/mysql \
- --with-unix-socket-path=/var/mysql/mysql.sock
-@end example
-
-Wenn Sie wollen, k�nnen Sie die Verzeichnisorte �ndern oder aber die
-Vorgabewerte benutzen, indem Sie einfach keine Speicherorte angeben.
-
-Wenn Sie Performance-Probleme unter Hochlast bekommen, versuchen Sie die
-@code{--skip-thread-priority}-Option f�r @code{mysqld}! Dies f�hrt alle
-Threads mit derselben Priorit�t aus. Auf BSDI-Version 3.1 gibt Ihnen das
-bessere Performance (zumindest solange, bis BSDI ihren Thread-Scheduler in
-Ordnung bringt).
-
-Wenn Sie beim Kompilieren den Fehler @code{virtual memory exhausted}
-erhalten, probieren Sie es mit @code{ulimit -v 80000} und lassen Sie
-@code{make} noch einmal laufen. Wenn das nicht funktioniert und Sie
-@code{bash} benutzen, versuchen Sie, statt dessen @code{csh} oder @code{sh}
-zu benutzen. Einige BSDI-Benutzer haben Probleme mit @code{bash} und
-@code{ulimit} berichtet.
-
-
-@node BSDI4, , BSDI3, BSD Notes
-@c German node BSDI4
-@subsubsection Anmerkungen zu BSD/OS Version 4.x
-
-BSDI-Version 4.x hat einige auf Threads bezogene Bugs. Wenn Sie auf dieser
-Plattform MySQL benutzen wollen, sollten Sie alle Patches installieren, die
-sich auf Threads beziehen. Zumindest M400-023 sollte installiert sein.
-
-Auf einigen Systemen mit BSDI-Version 4.x bekommen Sie vielleicht Probleme
-mit gemeinsam verwendeten (shared) Bibliotheken. Das �u�ert sich darin,
-dass Sie keinerlei Client-Programme wie @code{mysqladmin} ausf�hren k�nnen.
-In diesem Fall m�ssen Sie MySQL so rekonfigurieren, dass keine gemeinsam
-genutzten Bibliotheken benutzt werden, indem Sie die
-@code{--disable-shared}-Option f�r configure benutzen.
-
-Einige Kunden hatten auf BSDI 4.0.1 Probleme damit, dass die
-@code{mysqld}-Bin�rdatei nach einiger Zeit keine Tabellen mehr �ffnen
-konnte. Das liegt an einigen Bugs, die sich auf Bibliothek / System
-beziehen, und die @code{mysqld} veranlassen, das aktuelle Verzeichnis zu
-wechseln, ohne danach gefragt zu haben!
-
-Die L�sung besteht darin, entweder auf 3.23.34 zu aktualisieren oder nach
-dem Laufenlassen von @code{configure} die Zeile @code{#define
-HAVE_REALPATH} aus @code{config.h} zu entfernen, bevor Sie make laufen
-lassen.
-
-Beachten Sie, dass sich aus dem Gesagten ergibt, dass Sie auf BSDI keine
-symbolischen Links von Datenbankverzeichnissen zu einem anderen
-Datenbankverzeichnis oder symbolische Links von einer Tabelle zu einer
-anderen Datenbank herstellen k�nnen! (Ein symbolischer Link auf eine andere
-Platte ist okay.)
-
-
-@node Mac OS X, Other Unix Notes, BSD Notes, Operating System Specific Notes
-@c German node Mac OS X
-@subsection Anmerkungen zu Mac OS X
-
-
-
-@menu
-* Mac OS X Public Beta::
-* Mac OS X Server::
-@end menu
-
-@node Mac OS X Public Beta, Mac OS X Server, Mac OS X, Mac OS X
-@c German node Mac OS X Public Beta
-@subsubsection Mac OS X Public Beta
-
-MySQL sollte ohne jedes Problem auf Mac OS X Public Beta (Darwin) laufen.
-Die pThread-Patches f�r dieses Betriebssystem ben�tigen Sie nicht!
-
-
-@node Mac OS X Server, , Mac OS X Public Beta, Mac OS X
-@c German node Mac OS X Server
-@subsubsection Mac OS X Server
-
-Bevor Sie versuchen, MySQL auf Mac OS X Server zu konfigurieren, m�ssen Sie
-das pThread-Paket von @uref{http://www.prnet.de/RegEx/mysql.html}
-installieren.
-
-Unsere Bin�rdatei f�r Mac OS X wird kompiliert auf Rhapsody 5.5, mit
-folgender Konfigurationszeile:
-
-@example
-CC=gcc CFLAGS="-O2 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O2 -fomit-frame-pointer" ./configure --prefix=/usr/local/mysql "--with-comment=Official MySQL binary" --with-extra-charsets=complex --disable-shared
-@end example
-
-Wenn Sie der Ressourcen-Datei Ihrer Shell Aliase hinzuf�gen wollen, um auf
-@code{mysql} und @code{mysqladmin} von der Kommandozeile aus zuzugreifen,
-geben Sie ein:
-
-@example
-alias mysql '/usr/local/mysql/bin/mysql'
-alias mysqladmin '/usr/local/mysql/bin/mysqladmin'
-@end example
-
-
-@node Other Unix Notes, OS/2, Mac OS X, Operating System Specific Notes
-@c German node Andere Unixe
-@subsection Anmerkungen zu anderen Unixen
-
-
-
-@menu
-* Binary notes-HP-UX::
-* HP-UX 10.20::
-* HP-UX 11.x::
-* IBM-AIX::
-* SunOS::
-* Alpha-DEC-UNIX::
-* Alpha-DEC-OSF1::
-* SGI-Irix::
-* Caldera::
-* Caldera Unixware::
-@end menu
-
-@node Binary notes-HP-UX, HP-UX 10.20, Other Unix Notes, Other Unix Notes
-@c German node Binary notes-HP-UX
-@subsubsection Anmerkungen zu HP-UX Notes f�r Bin�rdistributionen
-
-@cindex HP-UX, Bin�rdistribution
-@cindex Bin�rdistributionen, auf HP-UX
-
-Einige Bin�rdistributionen von MySQL f�r HP-UX werden als HP-Depot-Datei
-und als Tar-Datei ausgeliefert. Um die Depot-Datei benutzen zu k�nnen,
-m�ssen Sie mindestens HP-UX 10.x haben, um auf HP's Software-Depot-Werkzeuge
-zugreifen zu k�nnen.
-
-Die HP-Version von MySQL wurde auf einem HP 9000/8xx-Server unter HP-UX
-10.20 kompiliert und benutzt MIT-pThreads. Unter dieser Konfiguration
-arbeitet sie bekannterma�en gut. MySQL-Version 3.22.26 und neuer kann auch
-mit HP's nativem Thread-Paket gebaut werden.
-
-Weitere Konfigurationen, die ebenfalls funktionieren k�nnen:
-
-@itemize @bullet
-@item
-HP 9000/7xx mit HP-UX 10.20+
-@item
-HP 9000/8xx mit HP-UX 10.30
-@end itemize
-
-Folgende Konfigurationen werden fast mit Sicherheit nicht laufen:
-
-@itemize @bullet
-@item
-HP 9000/7xx oder 8xx mit HP-UX 10.x, wobei x < 2
-@item
-HP 9000/7xx oder 8xx mit HP-UX 9.x
-@end itemize
-
-Um die Distribution zu installieren, benutzen Sie die unten stehenden
-Befehle, wobei @code{/pfad/zum/depot} der volle Pfadname der Depot-Datei
-ist:
-
-@itemize @bullet
-@item
-Um alles inklusive Server, Client- und Entwicklungs-Werkzeuge zu installieren:
-
-@example
-shell> /usr/sbin/swinstall -s /pfad/zum/depot mysql.full
-@end example
-
-@item
-Um nur den Server zu installieren:
-
-@example
-shell> /usr/sbin/swinstall -s /pfad/zum/depot mysql.server
-@end example
-
-@item
-Um nur das Client-Paket zu installieren:
-
-@example
-shell> /usr/sbin/swinstall -s /pfad/zum/depot mysql.client
-@end example
-
-@item
-Um nur die Entwicklungs-Werkzeuge zu installieren:
-
-@example
-shell> /usr/sbin/swinstall -s /pfad/zum/depot mysql.developer
-@end example
-@end itemize
-
-Das Depot speichert Bin�rdateien und Bibliotheken in @file{/opt/mysql} und
-Daten in @file{/var/opt/mysql}. Es legt auch die entsprechenden Eintr�ge in
-@file{/etc/init.d} und @file{/etc/rc2.d} an, um den Server automatisch beim
-Hochfahren zu starten. Das setzt @code{root}-Rechte zum Installieren
-voraus.
-
-Um die HP-UX-tar.gz-Distribution zu installieren, m�ssen Sie GNU @code{tar}
-haben.
-
-
-@node HP-UX 10.20, HP-UX 11.x, Binary notes-HP-UX, Other Unix Notes
-@c German node HP-UX 10.20
-@subsubsection Anmerkungen zu HP-UX Version 10.20
-
-Es gibt einige kleine Probleme, wenn Sie MySQL auf HP-UX kompilieren. Wir
-empfehlen, anstelle des nativen HP-UX-Kompilers @code{gcc} zu benutzen,
-weil @code{gcc} besseren Code produziert!
-
-Wir empfehlen die Benutzung von gcc 2.95 auf HP-UX. Benutzen Sie keine
-hohen Optimierungs-Flags (wie -O6), weil das eventuell f�r HP-UX nicht
-sicher ist.
-
-Beachten Sie, dass MIT-pThreads nicht mit dem HP-UX-Kompiler kompiliert
-werden k�nnen, weil dieser keine @code{.S}-(Assembler)-Dateien kompilieren
-kann.
-
-Folgende Konfigurationszeile sollte funktionieren:
-
-@example
-CFLAGS="-DHPUX -I/opt/dce/include" CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors -fno-exceptions -fno-rtti" CXX=gcc ./configure --with-pThread --with-named-Thread-libs='-ldce' --prefix=/usr/local/mysql --disable-shared
-@end example
-
-Wenn Sie @code{gcc} 2.95 selbst kompilieren, sollten Sie ihn NICHT mit den
-DCE-Bibliotheken (@code{libdce.a} oder @code{libcma.a}) linken, wenn Sie
-MySQL mit MIT-pThreads kompilieren wollen. Wenn Sie DCE- und
-MIT-pThreads-Pakete mischen, erhalten Sie einen @code{mysqld}, mit dem Sie
-sich nicht verbinden k�nnen. Entfernen Sie die DCE-Bibliotheken, w�hrend
-Sie @code{gcc} 2.95 kompilieren!
-
-
-@node HP-UX 11.x, IBM-AIX, HP-UX 10.20, Other Unix Notes
-@c German node HP-UX 11.x
-@subsubsection Anmerkungen zu HP-UX Version 11.x
-
-F�r HP-UX Version 11.x empfehlen wir MySQL-Version 3.23.15 oder sp�ter.
-
-Wegen einiger kritischer Bugs in den Standard-HP-UX-Bibliotheken sollten
-Sie folgende Patches installieren, bevor Sie MySQL auf HP-UX 11.0 laufen
-lassen:
-
-@example
-PHKL_22840 Streams cumulative
-PHNE_22397 ARPA cumulative
-@end example
-
-Das l�st das Problem, dass man @code{EWOULDBLOCK} von @code{recv()}
-und @code{EBADF} von @code{accept()} in threaded Applikationen erh�lt.
-
-Wenn Sie @code{gcc} 2.95.1 auf einem nicht-gepatchten HP-UX-11.x-System
-benutzen, erhalten Sie den Fehler:
-
-@example
-In file included by /usr/include/unistd.h:11,
- by ../include/global.h:125,
- by mysql_priv.h:15,
- by item.cc:19:
-/usr/include/sys/unistd.h:184: declaration of C function ...
-/usr/include/sys/pThread.h:440: previous declaration ...
-In file included by item.h:306,
- by mysql_priv.h:158,
- by item.cc:19:
-@end example
-
-Das Problem liegt darin, dass HP-UX @code{pThreads_atfork()} nicht
-konsistent definiert. Es hat konfliktbehaftete Prototypes in
-@file{/usr/include/sys/unistd.h}:184 und
-@file{/usr/include/sys/pThread.h}:440 (Details weiter unten).
-
-Eine L�sung besteht darin, @file{/usr/include/sys/unistd.h} nach
-@file{mysql/include} zu kopieren und @file{unistd.h} zu editieren, wobei es
-so abge�ndert wird, dass es der Definition in @file{pThread.h} entspricht.
-Hier ist der Diff:
-
-@example
-183,184c183,184
-< extern int pThread_atfork(void (*prepare)(), void (*parent)(),
-< void (*child)());
----
-> extern int pThread_atfork(void (*prepare)(void), void (*parent)(void),
-> void (*child)(void));
-@end example
-
-Danach sollte folgende Konfigurationszeile funktionieren:
-
-@example
-CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" ./configure --prefix=/usr/local/mysql --disable-shared
-@end example
-
-Hier sind ein paar Informationen �ber das Kompilieren von MySQL mit dem
-HP-UX:x-Kompiler, die uns ein Benutzer der HP-UX-Version 11.x geschickt
-hat:
-
-@example
- Environment:
- proper compilers.
- setenv CC cc
- setenv CXX aCC
- flags
- setenv CFLAGS -D_REENTRANT
- setenv CXXFLAGS -D_REENTRANT
- setenv CPPFLAGS -D_REENTRANT
- % aCC -V
- aCC: HP ANSI C++ B3910B X.03.14.06
- % cc -V /tmp/empty.c
- cpp.ansi: HP92453-01 A.11.02.00 HP C Preprocessor (ANSI)
- ccom: HP92453-01 A.11.01.00 HP C Compiler
- cc: "/tmp/empty.c", line 1: warning 501: Empty source file.
-
- configuration:
- ./configure --with-pThread \
- --prefix=/source-control/mysql \
- --with-named-Thread-libs=-lpThread \
- --with-low-memory
-
- added '#define _CTYPE_INCLUDED' to include/m_ctype.h. This
- symbol ist the one defined in HP's /usr/include/ctype.h:
-
- /* Don't include std ctype.h when this is included */
- #define _CTYPE_H
- #define __CTYPE_INCLUDED
- #define _CTYPE_INCLUDED
- #define _CTYPE_USING /* Don't put names in global namespace. */
-@end example
-
-@itemize @bullet
-@item
-Ich muss den Compile-Time-Flag @code{-D_REENTRANT} benutzen, um den
-Kompiler dazu zu bringen, den Prototype f�r @code{localtime_r} zu erkennen.
-Alternativ h�tte ich auch den Prototype f�r @code{localtime_r} bereit
-stellen k�nnen. Aber ich wollte weitere Bugs abfangen, in die ich sonst
-gerannt w�re. Ich war nicht sicher, wo ich es ben�tigen w�rde, daher f�gte
-ich es zu allen Flags hinzu.
-@item
-Die Optimierungs-Flags, die MySQL benutzt (-O3), werden von den
-HP-Kompilern nicht erkannt. Ich habe die Flags nicht ge�ndert.
-@end itemize
-
-Wenn Sie folgenden Fehler von @code{configure} erhalten:
-
-@example
-checking for cc option to accept ANSI C... no
-configure: error: MySQL requires a ANSI C compiler (and a C++ compiler). Try gcc. See the installation chapter in the reference manual.
-@end example
-
-�berpr�fen Sie, dass Sie den Pfad zum K&R-Kompiler nicht vor dem Pfad zum
-HP-UX-C- und C++-Kompiler haben.
-
-
-@node IBM-AIX, SunOS, HP-UX 11.x, Other Unix Notes
-@c German node IBM-AIX
-@subsubsection Anmerkungen zu IBM-AIX
-
-@cindex Probleme, Installation auf IBM-AIX
-
-Automatische Erkennung von @code{xlC} fehlt bei Autoconf, daher wird ein
-@code{configure}-Befehl wie folgender ben�tigt, wenn Sie MySQL kompilieren
-(dieses Beispiel benutzt den IBM-Kompiler):
-
-@example
-export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
-export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
-export CFLAGS="-I /usr/local/include"
-export LDLFAGS="-L /usr/local/lib"
-export CPPFLAGS=$CFLAGS
-export CXXFLAGS=$CFLAGS
-
-./configure --prefix=/usr/local \
- --localstatedir=/var/mysql \
- --sysconfdir=/etc/mysql \
- --sbindir='/usr/local/bin' \
- --libexecdir='/usr/local/bin' \
- --enable-thread-safe-client \
- --enable-large-files
-@end example
-
-Das sind die Optionen, die benutzt werden, um die MySQL-Distribution zu
-kompilieren, die sich auf @uref{http://www-frec.bull.com/} befindet.
-
-Wenn Sie in obiger Konfigurationszeile @code{-O3} zu @code{-O2} �ndern,
-m�ssen Sie auch die @code{-qstrict}-Option entfernen (das ist eine
-Beschr�nkung im IBM-C-Kompiler).
-
-Wenn Sie @code{gcc} oder @code{egcs} benutzen, um MySQL zu kompilieren,
-@strong{M�SSEN} Sie den @code{-fno-exceptions}-Flag benutzen, weil das
-Exception-Handling in @code{gcc} / @code{egcs} nicht Thread-sicher ist!
-(Das wurde mit @code{egcs} 1.1. getestet.) Es gibt auch ein paar bekannte
-Probleme mit dem IBM-Assembler, die dazu f�hren k�nnen, dass schlechter
-Code erzeugt wird, wenn er zusammen mit gcc benutzt wird.
-
-Wir empfehlen folgende @code{configure}-Zeile f�r @code{egcs} und
-@code{gcc 2.95} auf AIX:
-
-@example
-CC="gcc -pipe -mcpu=power -Wa,-many" \
-CXX="gcc -pipe -mcpu=power -Wa,-many" \
-CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \
-./configure --prefix=/usr/local/mysql --with-low-memory
-@end example
-
-@code{-Wa,-many} ist notwendig, damit das Kompilieren gelingt. Das Problem
-ist IBM bekannt, hat es aber nicht eilig, es zu beheben, weil ein
-Workaround verf�gbar ist. Wir wissen nicht, ob @code{-fno-exceptions} f�r
-@code{gcc 2.95} erforderlich ist, aber weil MySQL keine Exceptions benutzt
-und die obige Option schnelleren Code erzeugt, empfehlen wir, dass Sie
-diese Option f�r @code{egcs / gcc} immer benutzen.
-
-Wenn Sie ein Problem mit Assembler-Code bekommen, versuchen Sie, -mcpu=xxx
-so anzupassen, dass es zu Ihrem Prozessor passt. Typischerweise wird man
-power2, power oder powerpc benutzen, alternativ kann man eventuell 604 oder
-604e benutzen. Ich bin nicht ganz sicher, aber ich w�rde sagen, dass
-"power" meist sicher sein sollte, selbst auf einer power2-Maschine.
-
-Wenn Sie nicht wissen, welchen Prozessor Sie haben, geben Sie "uname -m"
-ein. Das gibt eine Zeichenkette zur�ck, die etwa wie "000514676700"
-aussieht, mit dem Format xxyyyyyymmss, wobei xx und ss immer die Nullen
-sind (0). yyyyyy ist eine eindeutige System-ID und mm ist die ID des
-CPU-Planars. Eine Tabelle dieser Werte liegt auf
-@uref{http://www.rs6000.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm}.
-Darin finden Sie Maschinentyp und Maschinenmodell, was Sie benutzen k�nnen,
-um herauszufinden, welchen Prozessortyp Sie haben.
-
-Wenn Sie Probleme mit Signalen haben (MySQL stirbt unerwartet unter hoher
-Last), haben Sie vielleicht einen Betriebssystem-Bug bei Threads und
-Signalen gefunden. In diesem Fall k�nnen Sie MySQL anweisen, keine Signale
-zu benutzen, indem Sie es wie folgt konfigurieren:
-
-@example
-shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
- CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -DDONT_USE_THR_ALARM" \
- ./configure --prefix=/usr/local/mysql --with-debug --with-low-memory
-@end example
-
-Das ber�hrt nicht die Performance von MySQL, hat aber den Nebeneffekt, dass
-Sie keine Clients auf einer Verbindung mit @code{mysqladmin kill} oder
-@code{mysqladmin shutdown} killen k�nnen, die ``schlafen''. Statt dessen
-wird der Client sterben, wenn er den n�chsten Befehl sendet.
-
-Bei einigen Versionen von AIX f�r das Linken mit @code{libbind.a} bei
-@code{getservbyname} zu einem Speicherauszug (Core Dump). Das ist ein
-AIX-Bug, der IBM berichtet werden sollte.
-
-Bei AIX 4.2.1 und gcc m�ssen Sie folgende �nderungen durchf�hren:
-
-Nach dem Konfigurieren m�ssen Sie @file{config.h} und
-@file{include/my_config.h} editieren und die Zeile �ndern, in der steht:
-
-@example
-#define HAVE_SNPRINTF 1
-@end example
-
-zu
-
-@example
-#undef HAVE_SNPRINTF
-@end example
-
-Schlie�lich m�ssen Sie in @file{mysqld.cc} einen Prototype f�r initgoups
-hinzuf�gen:
-
-@example
-#ifdef _AIX41
-extern "C" int initgroups(const char *,int);
-#endif
-@end example
-
-
-@node SunOS, Alpha-DEC-UNIX, IBM-AIX, Other Unix Notes
-@c German node SunOS
-@subsubsection Anmerkungen zu SunOS 4
-
-Auf SunOS 4 werden MIT-pThreads ben�tigt, um MySQL zu kompilieren, was
-letztlich bedeutet, dass Sie GNU-@code{make} ben�tigen.
-
-Einige SunOS-4-Systeme haben Probleme mit dynamischen Bibliotheken und
-@code{libtool}. Sie k�nnen folgende @code{configure}-Zeile benutzen, um das
-Problem zu vermeiden:
-
-@example
-shell> ./configure --disable-shared --with-mysqld-ldflags=-all-static
-@end example
-
-Wenn Sie @code{readline} kompilieren, erhalten Sie vielleicht Warnungen
-�ber duplizierte Defines. Diese k�nnen ignoriert werden.
-
-Wenn Sie @code{mysqld} kompilieren, gibt es ein paar @code{implicit
-declaration of function}-Warnungen. Diese k�nnen ignoriert werden.
-
-
-@node Alpha-DEC-UNIX, Alpha-DEC-OSF1, SunOS, Other Unix Notes
-@c German node Alpha-DEC-UNIX
-@subsubsection Anmerkungen zu Alpha-DEC-UNIX (Tru64)
-
-Wenn Sie egcs 1.1.2 auf Digital Unix benutzen, sollten Sie auf gcc 2.95.2
-aktualisieren, weil egcs auf DEC einige schwer wiegende Bugs hat!
-
-Wenn Sie threaded Programme unter Digital Unix kompilieren, empfiehlt die
-Dokumentation, die @code{-pThread}-Option f�r @code{cc} und @code{cxx} und
-die Bibliotheken @code{-lmach -lexc} zu benutzen (zus�tzlich zu
-@code{-lpThread}). Sie sollten @code{configure} wie folgt laufen lassen:
-
-@example
-CC="cc -pThread" CXX="cxx -pThread -O" \
-./configure --with-named-thread-libs="-lpThread -lmach -lexc -lc"
-@end example
-
-Wenn Sie @code{mysqld} kompilieren, sehen Sie eventuell eine Reihe von
-Warnungen wie die folgende:
-
-@example
-mysqld.cc: In function void handle_connections()':
-mysqld.cc:626: passing long unsigned int *' as argument 3 of
-accept(int,sockadddr *, int *)'
-@end example
-
-Sie k�nnen diese Warnungen ignorieren. Sie treten auf, weil
-@code{configure} nur Fehler entdecken kann, keine Warnungen.
-
-Wenn Sie den Server direkt von the Kommandozeile starten, haben Sie
-vielleicht Probleme, dass er stirbt, wenn Sie sich ausloggen. (Wenn Sie
-sich ausloggen, erhalten Ihre offenen Prozesse ein @code{SIGHUP}-Signal.)
-Wenn das der Fall ist, starten Sie den Server wie folgt:
-
-@example
-shell> nohup mysqld [options] &
-@end example
-
-@code{nohup} bewirkt, dass der folgende Befehl jegliche
-@code{SIGHUP}-Signale, die vom Terminal gesendet werden, ignoriert.
-Alternativ starten Sie den Server mit @code{safe_mysqld}, was @code{mysqld}
-mit @code{nohup} f�r Sie aufruft.
-@xref{safe_mysqld, , @code{safe_mysqld}}.
-
-Wenn Sie ein Problem beim Kompilieren von mysys/get_opt.c bekommen,
-entfernen Sie einfach die Zeile #define _NO_PROTO am Anfang dieser Datei!
-
-Wenn Sie den CC-Kompiler von Compaq benutzen, sollte die folgende
-Konfigurationszeile funktionieren:
-
-@example
-CC="cc -pThread"
-CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host"
-CXX="cxx -pThread"
-CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host"
-export CC CFLAGS CXX CXXFLAGS
-./configure \
---prefix=/usr/local/mysql \
---with-low-memory \
---enable-large-files \
---enable-shared=yes \
---with-named-Thread-libs="-lpThread -lmach -lexc -lc"
-gnumake
-@end example
-
-Wenn Sie ein Problem mit libtool beim Kompilieren mit gemeinsam genutzten
-(shared) Bibliotheken bekommen wie oben, wenn Sie @code{mysql} linken,
-sollten Sie dies folgenderma�en umgehen k�nnen:
-
-@example
-cd mysql
-/bin/sh ../libtool --mode=link cxx -pThread -O3 -DDBUG_OFF \
--O4 -ansi_alias -ansi_args -fast -inline speed \
--speculate all \ -arch host -DUNDEF_HAVE_GETHOSTBYNAME_R \
--o mysql mysql.o readline.o sql_string.o completion_hash.o \
-../readline/libreadline.a -lcurses \
-../libmysql/.libs/libmysqlclient.so -lm
-cd ..
-gnumake
-gnumake install
-Skripts/mysql_install_db
-@end example
-
-
-@node Alpha-DEC-OSF1, SGI-Irix, Alpha-DEC-UNIX, Other Unix Notes
-@c German node Alpha-DEC-OSF1
-@subsubsection Anmerkungen zu Alpha-DEC-OSF1
-
-Wenn Sie Probleme beim Kompilieren haben und DEC @code{CC} und @code{gcc}
-installiert sind, versuchen Sie, @code{configure} wie folgt laufen zu
-lassen:
-
-@example
-CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \
-./configure --prefix=/usr/local/mysql
-@end example
-
-Wenn Sie Probleme mit der @file{c_asm.h}-Datei bekommen, k�nnen Sie wie
-folgt eine 'dummy'-@file{c_asm.h}-Datei erzeugen und benutzen:
-
-@example
-touch include/c_asm.h
-CC=gcc CFLAGS=-I./include \
-CXX=gcc CXXFLAGS=-O3 \
-./configure --prefix=/usr/local/mysql
-@end example
-
-Beachten Sie, dass die im Folgenden beschriebenen Probleme mit dem
-@code{ld}-Programm behoben werden k�nnen, indem Sie das neueste
-DEC-(Compaq)-Patch-Kit herunterladen, und zwar von folgender Seite:
-@uref{http://ftp.Support.compaq.com/public/unix/}.
-
-Auf OSF1 V4.0D und Kompiler "DEC C V5.6-071 auf Digital Unix V4.0 (Rev.
-878)" zeigt der Kompiler einige seltsame Verhaltensweisen (undefinierte
-@code{asm}-Symbole). Ausserdem scheint @code{/bin/ld} besch�digt zu sein
-(Probleme mit @code{_exit undefined}-Fehlern, die auftreten, wenn Sie
-@code{mysqld} linken). Auf diesem System konnten wir MySQL mit folgender
-@code{configure}-Zeile kompilieren, nachdem wir @code{/bin/ld} mit der
-Version von OSF 4.0C ersetzt haben:
-
-@example
-CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
-@end example
-
-Beim Digital-Kompiler "C++ V6.1-029" sollte folgendes funktionieren:
-
-@example
-CC=cc -pThread
-CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host
-CXX=cxx -pThread
-CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host -noexceptions -nortti
-export CC CFLAGS CXX CXXFLAGS
-./configure --prefix=/usr/mysql/mysql --with-mysqld-ldflags=-all-static --disable-shared --with-named-thread-libs="-lmach -lexc -lc"
-@end example
-
-In einigen Versionen von OSF1 ist die @code{alloca()}-Funktion besch�digt.
-Beheben Sie dies, indem Sie die Zeile in @file{config.h} entfernen, die
-@code{'HAVE_ALLOCA'} definiert.
-
-Die @code{alloca()}-Funktion kann ebenfalls einen falschen Prototyp in
-@code{/usr/include/alloca.h} haben. Die Warnung, die hieraus resultiert,
-kann ignoriert werden.
-
-@code{configure} benutzt automatisch folgenden Thread-Bibliotheken:
-@code{--with-named-thread-libs="-lpThread -lmach -lexc -lc"}.
-
-Wenn Sie @code{gcc} benutzen, k�nnen Sie auch versuchen, @code{configure}
-wie folgt laufen zu lassen:
-
-@example
-shell> CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ....
-@end example
-
-Wenn Sie Probleme mit Signalen haben (MySQL stirbt unerwartet unter
-Hochlast), haben Sie vielleicht einen Betriebssystem-Bug bei Threads und
-Signalen gefunden. In diesem Fall k�nnen Sie MySQL anweisen, keine Signale
-zu benutzen, indem Sie es wie folgt konfigurieren:
-
-@example
-shell> CFLAGS=-DDONT_USE_THR_ALARM \
- CXXFLAGS=-DDONT_USE_THR_ALARM \
- ./configure ...
-@end example
-
-Das ber�hrt nicht die Performance von MySQL, hat aber den Nebeneffekt, dass
-Sie keine Clients auf einer Verbindung mit @code{mysqladmin kill} oder
-@code{mysqladmin shutdown} killen k�nnen, die ``schlafen''. Statt dessen
-wird der Client sterben, wenn er den n�chsten Befehl sendet.
-
-Bei @code{gcc} 2.95.2 erhalten Sie wahrscheinlich folgenden
-Kompilierfehler:
-
-@example
-sql_acl.cc:1456: Internal compiler error in `scan_region', at except.c:2566
-Please submit a full bug report.
-@end example
-
-Um das zu beheben, wechseln Sie ins @code{sql}-Verzeichnis und machen ein
-``Kopieren und Einf�gen'' der letzten @code{gcc}-Zeile, �ndern aber
-@code{-O3} zu @code{-O0} (oder f�gen @code{-O0} unmittelbar nach @code{gcc}
-hinzu, falls Sie keine @code{-O}-Option auf Ihrer Kompilierzeile haben.)
-Danach wechseln Sie einfach direkt zur�ck in oberste Verzeichnis und lassen
-@code{make} noch einmal laufen.
-
-
-@node SGI-Irix, Caldera, Alpha-DEC-OSF1, Other Unix Notes
-@c German node SGI-Irix
-@subsubsection Anmerkungen zu SGI Irix
-
-Wenn Sie Irix-Version 6.5.3 oder neuer benutzen, kann @code{mysqld} nur
-dann Threads erzeugen, wenn Sie ihn als Benutzer mit
-@code{CAP_SCHED_MGT}-Zugriffsrechten (wie @code{root}) laufen lassen oder
-dem @code{mysqld}-Server dieses Recht mit dem folgenden Befehl geben:
-
-@example
-shell> chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld
-@end example
-
-Sie m�ssen eventuell in @file{config.h} einige Dinge umdefinieren, nachdem
-Sie @code{configure} laufen gelassen haben und vor dem Kompilieren.
-
-In einigen Irix-Implementationen ist die @code{alloca()}-Funktion
-besch�digt. Wenn der @code{mysqld}-Server bei manchen
-@code{SELECT}-Statements stirbt, entfernen Sie die Zeilen aus
-@file{config.h}, die @code{HAVE_ALLOC} und @code{HAVE_ALLOCA_H} definieren.
-Wenn @code{mysqladmin create} nicht funktioniert, entfernen Sie die Zeile
-aus @file{config.h}, die @code{HAVE_READDIR_R} definiert. Eventuell m�ssen
-Sie auch die @code{HAVE_TERM_H}-Zeile entfernen.
-
-SGI empfiehlt, dass Sie alle Patches auf dieser Seite auf einmal
-installieren:
-http://Support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html
-
-Als absolutes Minimum sollten Sie das letzte Kernel-Rollup installieren,
-das letzte @code{rld}-Rollup und das letzte @code{libc}-Rollup.
-
-In jedem Fall brauchen Sie f�r die pThread-Unterst�tzung alle POSIX-Patches
-auf dieser Seite:
-
-@uref{http://Support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html}
-
-Wenn Sie beim Kompilieren von @file{mysql.cc} etwa folgenden Fehler
-erhalten:
-
-@example
-"/usr/include/curses.h", line 82: error(1084): invalid combination of type
-@end example
-
-Geben Sie folgendes im obersten Verzeichnis Ihres MySQL-Source-Trees ein:
-
-@example
-shell> extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h
-shell> make
-@end example
-
-Es wurden ausserdem Scheduling-Probleme berichtet. Wenn nur ein Thread
-l�uft, l�uft alles recht langsam. Das k�nnen Sie vermeiden, indem Sie einen
-weiteren Client-Starten. Daraus kann sich eine zwei- bis zehnfache
-Geschwindigkeitssteigerung f�r den anderen Thread ergeben. Das liegt an
-einem Problem mit Irix-Threads, das kaum zu verstehen ist. Eventuell m�ssen
-Sie improvisieren, um eine L�sung zu finden, bis dies behoben ist.
-
-Wenn Sie mit @code{gcc} kompilieren, k�nnen Sie folgenden
-@code{configure}-Befehl benutzen:
-
-@example
-CC=gcc CXX=gcc CXXFLAGS=-O3 \
-./configure --prefix=/usr/local/mysql --enable-thread-safe-client --with-named-thread-libs=-lpThread
-@end example
-
-Auf Irix 6.5.11 mit nativen Irix-C- und C++-Kompilern der Version 7.3.1.2
-soll auch folgendes funktionieren:
-
-@example
-CC=cc CXX=CC CFLAGS='-O3 -n32 -TARG:platform=IP22 -I/usr/local/include \
--L/usr/local/lib' CXXFLAGS='-O3 -n32 -TARG:platform=IP22 \
--I/usr/local/include -L/usr/local/lib' ./configure --prefix=/usr/local/mysql \
---with-berkeley-db --with-innodb \
---with-libwrap=/usr/local --with-named-curses-libs=/usr/local/lib/libncurses.a
-@end example
-
-
-@node Caldera, Caldera Unixware, SGI-Irix, Other Unix Notes
-@c German node SCO
-@subsubsection Anmerkungen zu Caldera
-@c German fixup: 2002-03-22 monty changed SCO -> Caldera in English manual
-
-Die aktuelle Portierung wird auf ``sco3.2v5.0.4''-
-und-``sco3.2v5.0.5''-Systemen getestet. Die Portierung auf ``sco 3.2v4.2''
-ist ebenfalls weit fortgeschritten.
-
-Momentan ist der empfohlene Kompiler auf OpenServer gcc 2.95.2. Damit
-sollten Sie in der Lage sein, MySQL einfach durch folgendes zu kompilieren:
-
-@example
-CC=gcc CXX=gcc ./configure ... (options)
-@end example
-
-@enumerate
-@item
-Bei OpenServer 5.0.X m�ssen Sie GDS in Skunkware 95 (95q4c) benutzen. Das
-ist deshalb notwendig, weil GNU-@code{gcc} 2.7.2 in Skunkware 97 kein
-GNU-@code{as} hat. Sie k�nnen auch @code{egcs} 1.1.2 oder neuer benutzen
-@uref{http://www.egcs.com/}. Wenn Sie @code{egcs} 1.1.2 benutzen, m�ssen
-Sie folgenden Befehl eingeben:
-
-@example
-shell> cp -p /usr/include/pThread/stdtypes.h /usr/local/lib/gcc-lib/i386-pc-sco3.2v5.0.5/egcs-2.91.66/include/pThread/
-@end example
-
-@item
-Sie brauchen die Portierung von GCC 2.5.x f�r dieses Produkt und das
-Entwicklungssystem. Sie werden auf dieser Version von Caldera (SCO) Unix ben�tigt.
-Sie k�nnen nicht lediglich das GCC-Dev-System benutzen.
-
-@item
-Sie sollten zuerst das FSU-PThreads-Paket holen und installieren. Dieses
-finden Sie auf
-@uref{http://www.cs.wustl.edu/~schmidt/ACE_wrappers/FSU-Threads.tar.gz}.
-Sie finden ein vorkompiliertes Paket auf
-@uref{http://www.mysql.com/downloads/SCO/FSU-Threads-3.5c.tar.gz}.
-
-@item
-FSU-PThreads kann mit SCO Unix 4.2 mit TCP/IP kompiliert werden. Oder mit
-OpenServer 3.0 oder Open Desktop 3.0 (OS 3.0 ODT 3.0), mit installiertem
-Caldera (SCO) Entwicklungssystem unter Benutzung einer guten Portierung von GCC 2.5.x
-ODT oder OS 3.0. Hierbei brauchen Sie eine gute Portierung von GCC 2.5.x.
-Ohne gute Portierung gibt es eine Menge Probleme. Die Portierung f�r dieses
-Produkt erfordert das Caldera (SCO) Unix-Entwicklungssystem. Ohne dieses fehlen die
-Bibliotheken und der Linker, die ben�tigt werden.
-
-@item
-Um FSU-PThreads auf Ihrem System zu bauen, tun Sie folgendes:
-
-@enumerate a
-@item
-Lassen Sie @code{./configure} im @file{Threads/src}-Verzeichnis laufen und
-w�hlen Sie die SCO-OpenServer-Option. Dieser Befehl kopiert
-@file{Makefile.SCO5} nach @file{Makefile}.
-
-@item
-Lassen Sie @code{make} laufen.
-
-@item
-Um in das vorgabem��ige @file{/usr/include}-Verzeichnis zu installieren,
-loggen Sie sich als Root ein und wechseln (@code{cd}) Sie in das
-@file{thread/src}-Verzeichnis. F�hren Sie dann @code{make install} aus.
-@end enumerate
-
-@item
-Denken Sie daran, GNU @code{make} zu benutzen, wenn Sie MySQL machen.
-
-@item
-Wenn Sie @code{safe_mysqld} nicht als Root starten, erhalten Sie
-wahrscheinlich nur die 110 offenen Dateien pro Prozess. @code{mysqld} macht
-dar�ber in der Log-Datei einen Eintrag.
-
-@item
-Bei SCO 3.2V5.0.5 sollten Sie FSU-PThreads-Version 3.5c oder neuer
-benutzen. Ausserdem sollten Sie gcc 2.95.2 oder neuer benutzen!
-
-Folgender @code{configure}-Befehl sollte funktionieren:
-
-@example
-shell> ./configure --prefix=/usr/local/mysql --disable-shared
-@end example
-
-@item
-Bei SCO 3.2V4.2 sollten Sie FSU-PThreads-Version 3.5c oder neuer benutzen.
-Folgender @code{configure}-Befehl sollte funktionieren:
-
-@example
-shell> CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \
- ./configure \
- --prefix=/usr/local/mysql \
- --with-named-thread-libs="-lgThreads -lsocket -lgen -lgThreads" \
- --with-named-curses-libs="-lcurses"
-@end example
-
-M�glicherweise bekommen Sie Probleme mit einigen Include-Dateien. In diesem
-Fall finden Sie neue, SCO-spezifische Include-Dateien auf
-@uref{http://www.mysql.com/downloads/SCO/SCO-3.2v4.2-includes.tar.gz}.
-Entpacken Sie diese Datei ins @file{include}-Verzeichnis Ihres
-MySQL-Source-Trees.
-@end enumerate
-
-Anmerkungen zur Caldera (SCO) Entwicklung:
-
-@itemize @bullet
-@item
-MySQL kann FSU-PThreads automatisch erkennen und @code{mysqld} mit
-@code{-lgThreads -lsocket -lgThreads} linken.
-
-@item
-@c Question: Good translation for "re-entrant"?
-Die Caldera (SCO) Entwicklungsbibliotheken sind re-entrant in FSU-PThreads. Caldera
-behauptet, dass seine Bibliotheken-Funktionen re-entrant sind, daher m�ssen
-sie mit FSU-PThreads re-entrant sein. FSU-PThreads auf OpenServer versucht,
-das SCO-Scheme zu benutzen, um Bibliotheken re-entrant zu machen.
-
-@item
-FSU-PThreads (zumindest die Version auf @uref{http://www.mysql.com/}) wird
-mit gelinktem GNU-@code{malloc} ausgeliefert. Wenn Sie Problemen mit der
-Speicherbenutzung begegnen, stellen Sie sicher, dass @file{gmalloc.o} in
-@file{libgThreads.a} und @file{libgThreads.so} beinhaltet ist.
-
-@item
-In FSU-PThreads achten folgende Systemaufrufe auf pThreads: @code{read()},
-@code{write()}, @code{getmsg()}, @code{connect()}, @code{accept()},
-@code{select()} und @code{wait()}.
-@end itemize
-
-Wenn Sie DBI auf Caldera (SCO) installieren wollen, m�ssen Sie @file{Makefile} in
-DBI-xxx und jedem Unterverzeichnis editieren.
-
-Beachten Sie, dass folgendes gcc 2.95.2 oder neuer voraussetzt:
-
-@example
-ALT: NEU:
-CC = cc CC = gcc
-CCCDLFLAGS = -KPIC -W1,-Bexport CCCDLFLAGS = -fpic
-CCDLFLAGS = -wl,-Bexport CCDLFLAGS =
-
-LD = ld LD = gcc -G -fpic
-LDDLFLAGS = -G -L/usr/local/lib LDDLFLAGS = -L/usr/local/lib
-LDFLAGS = -belf -L/usr/local/lib LDFLAGS = -L/usr/local/lib
-
-LD = ld LD = gcc -G -fpic
-OPTIMISE = -Od OPTIMISE = -O1
-
-OLD:
-CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include
-
-NEW:
-CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
-@end example
-
-Das liegt daran, dass der Perl-dynaloader keine @code{DBI}-Module l�dt, die
-mit @code{icc} oder @code{cc} kompiliert wurden.
-
-Perl funktioniert am besten, wenn es mit @code{cc} kompiliert wird.
-
-
-@node Caldera Unixware, , Caldera, Other Unix Notes
-@c German node SCO Unixware
-@subsubsection Anmerkungen zu Caldera Unixware Version 7.0
-@c German fixup: 2002-03-22 monty changed SCO -> Caldera in English manual
-
-Sie ben�tigen mindestens MySQL-Version 3.22.13, weil diese Version einige
-Portabilit�tsprobleme unter Unixware behebt.
-
-Wir waren in der Lage, MySQL mit folgendem @code{configure}-Befehl auf
-Unixware Version 7.0.1 zu kompilieren:
-
-@example
-CC=cc CXX=CC ./configure --prefix=/usr/local/mysql
-@end example
-
-Wenn Sie @code{gcc} benutzen wollen, m�ssen Sie @code{gcc} 2.95.2 oder
-neuer benutzen.
-
-
-
-
-@node OS/2, BeOS, Other Unix Notes, Operating System Specific Notes
-@c German node OS/2
-@subsection Anmerkungen zu OS/2
-
-MySQL benutzt eine ganze Menge offener Dateien. Deswegen sollten Sie Ihrer
-@file{CONFIG.SYS}-Datei folgendes hinzuf�gen:
-
-@example
-SET EMXOPT=-c -n -h1024
-@end example
-
-Wenn Sie das nicht tun, erhalten Sie wahrscheinlich folgenden Fehler:
-
-@example
-File 'xxxx' not found (Errcode: 24)
-@end example
-
-Wenn Sie MySQL auf OS/2 Warp 3 einsetzen, wird FixPack 29 oder h�her
-ben�tigt. Bei OS/2 Warp 4 wird FixPack 4 oder h�her ben�tigt. Das erfordert
-die PThreads-Bibliothek. MySQL muss auf einer Partition installiert werden,
-die lange Dateinamen unterst�tzt, also zum Beispiel HPFS, FAT32 usw.
-
-Das @file{INSTALL.CMD}-Skript muss von OS/2's eigener @file{CMD.EXE} aus
-laufen gelassen werden und funktioniert eventuell nicht mit Ersatz-Shells
-wie @file{4OS2.EXE}.
-
-Das @file{scripts/mysql-install-db}-Skript wurde umbenannt. Es hei�t jetzt
-@file{install.cmd} und ist ein REXX-Skript, welches die vorgabem��igen
-MySQL-Sicherheitseinstellungen einstellt und die WorkPlace-Shell-Icons f�r
-MySQL erstellt.
-
-Unterst�tzung f�r dynamische Module wird einkompiliert, ist aber noch nicht
-komplett durchgetestet. Dynamische Module sollten unter Benutzung der
-PThreads-Runtime-Bibliothek kompiliert werden.
-
-@example
-gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \
- -o example udf_example.cc -L../lib -lmysqlclient udf_example.def
-mv example.dll example.udf
-@end example
-
-@strong{Beachten Sie:} Aufgrund von Beschr�nkungen in OS/2 d�rfen
-UDF-module-name-stems nicht l�nger als 8 Zeichen sein. Module werden im
-@file{/mysql2/udf}-Verzeichnis gespeichert; das
-@code{safe-mysqld.cmd}-Skript tr�gt dieses Verzeichnis in die
-@code{BEGINLIBPATH}-Umgebungsvariable ein. Wenn Sie UDF-Module benutzen,
-werden festgelegte Erweiterungen ignoriert - es wird nicht angenommen, dass
-sie @file{.udf} sind.
-Unter Unix zum Beispiel k�nnte das gemeinsam genutzte (shared) Module
-@file{example.so} benannt sein. Sie w�rden daraus eine Funktion wie folgt
-laden:
-
-@example
-mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example.so";
-@end example
-
-Unter OS/2 w�rde das Modul @file{example.udf} hei�en, aber Sie w�rden
-nicht die Modul-Erweiterung angeben:
-
-@example
-mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example";
-@end example
-
-
-@node BeOS, Novell Netware, OS/2, Operating System Specific Notes
-@c German node BeOS
-@subsection Anmerkungen zu BeOS
-
-Wir sind sehr daran interessiert, MySQL auf BeOS ans Laufen zu bringen,
-aber leider kennen wir niemanden, der sich mit BeOS auskennt oder Zeit hat,
-eine Portierung durchzuf�hren.
-
-Wir sind daran interessiert, jemanden f�r eine Portierung zu finden, und
-wir werden ihn / sie bei allen technischen Fragen helfen, die bei einer
-Portierung auftreten k�nnen.
-
-Wir haben vor einiger Zeit mit einigen BeOS-Entwicklern gesprochen, die uns
-sagten, dass MySQL zu 80% auf BeOS portiert ist, aber wir haben schon eine
-Weile nichts von ihnen geh�rt.
-
-
-@node Novell Netware, , BeOS, Operating System Specific Notes
-@c German node Novell Netware
-@subsection Anmerkungen zu Novell NetWare
-
-Wir sind sehr daran interessiert, MySQL auf NetWare ans Laufen zu bringen,
-aber leider kennen wir niemanden, der sich mit NetWare auskennt oder Zeit hat,
-eine Portierung durchzuf�hren.
-
-Wir sind daran interessiert, jemanden f�r eine Portierung zu finden, und
-wir werden ihn / sie bei allen technischen Fragen helfen, die bei einer
-Portierung auftreten k�nnen.
-
-@node Perl support, , Operating System Specific Notes, Installing
-@c German node Perl-Unterst�tzung
-@section Anmerkungen zur Perl-Installation
-
-@cindex Perl, Installation
-@cindex Installation, Perl
-
-@code{DBI}/@code{DBD}-Schnittstelle
-
-
-@menu
-* Perl installation::
-* ActiveState Perl::
-* Windows Perl::
-* Perl support problems::
-@end menu
-
-@node Perl installation, ActiveState Perl, Perl support, Perl support
-@c German node Perl-Installation
-@subsection Installation von Perl unter Unix
-
-Perl-Unterst�tzung f�r MySQL wird durch die @code{DBI}/@code{DBD}-
-Client-Schnittstelle zur Verf�gung gestellt. @xref{Perl}. Der Perl-
-@code{DBD}/@code{DBI}-Client-Code erfordert Perl Version 5.004 oder
-sp�ter. Die Schnittstelle @strong{funktioniert nicht}, wenn Sie eine
-�ltere Version von Perl haben.
-
-MySQL-Perl-Unterst�tzung erfordert ausserdem, dass Sie MySQL-Client-
-Programmierunterst�tzung installiert haben. Wenn Sie MySQL von RPM-
-Dateien installiert haben, sind Client-Programme im Client-RPM
-enthalten, aber Client-Programmierunterst�tzung ist im Entwickler-RPM.
-Stellen Sie sicher, dass Sie auch das letztgenannte RPM installiert
-haben.
-
-Ab Version 3.22.8 wird Perl-Unterst�tzung getrennt von der Haupt-MySQL-
-Unterst�tzung ausgeliefert. Wenn Sie Perl-Unterst�tzung installieren
-wollen, k�nnen Sie die ben�tigten Dateien von
-@uref{http://www.mysql.com/Downloads/Contrib/} herunter laden.
-
-Die Perl-Distributionen werden als komprimierte @code{tar}-Archive zur
-Verf�gung gestellt und haben Namen wie @file{MODULE-VERSION.tar.gz},
-wobei @code{MODULE} der Modulname und @code{VERSION} die Versionsnummer
-ist. Sie sollten die @code{Data-Dumper}-, @code{DBI}- und @code{Msql-
-Mysql-modules}-Distributionen laden und sie in dieser Reihenfolge
-installieren. Die Installationsprozedur ist unten dargestellt. Das
-Beispiel gilt f�r das @code{Data-Dumper}-Modul, ist aber f�r alle drei
-Distributionen dieselbe:
-
-@enumerate
-@item
-Entpacken Sie die Distribution ins aktuelle Verzeichnis.
-@example
-shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -
-@end example
-Dieser Befehl erzeugt ein Verzeichnis namens @file{Data-Dumper-
-VERSION}.
-
-@item
-Wechseln Sie ins oberste Verzeichnis der entpackten Distribution:
-@example
-shell> cd Data-Dumper-VERSION
-@end example
-
-@item
-Bauen Sie die Distribution und kompilieren Sie alles:
-@example
-shell> perl Makefile.PL
-shell> make
-shell> make test
-shell> make install
-@end example
-@end enumerate
-
-Der @code{make test}-Befehl ist wichtig, weil er sicherstellt, dass die
-Module funktionieren. Beachten Sie, dass der MySQL-Server w�hrend der
-Befehlsausf�hrung bei der @code{Msql-Mysql-modules}-Installation laufen
-muss, um den Schnittstellen-Code auszuf�hren, den ansonsten schl�gt der
-Test fehl.
-
-Es ist eine gute Idee, die @code{Msql-Mysql-modules}-Distribution neu zu
-kompilieren und zu installieren, wenn Sie ein neues Release von MySQL
-installieren, insbesondere, wenn Sie Symptome feststellen wie dass alle
-Ihre @code{DBI}-Skripte einen Coredump liefern, nachdem Sie auf eine
-h�here Version von MySQL aktualisiert haben.
-
-Wenn Sie keine Rechte haben, die Perl-Module im Systemverzeichnis zu
-installieren, oder wenn Sie lokale Perl-Module installieren wollen,
-k�nnte Ihnen der folgende Link helfen:
-
-@example
-@uref{http://www.iserver.com/support/contrib/perl5/modules.html}
-@end example
-
-Suchen Sie nach der �berschrift
-@code{Installing New Modules that Require Locally Installed Modules}.
-
-
-@node ActiveState Perl, Windows Perl, Perl installation, Perl support
-@c German node ActiveState-Perl
-@subsection Installation von ActiveState-Perl unter Windows
-
-@cindex Installation, Perl unter Windows
-@cindex Perl, Installation unter Windows
-@cindex ActiveState-Perl
-
-Um das MySQL-@code{DBD}-Modul mit ActiveState-Perl unter Windows zu
-installieren, gehen Sie wie folgt vor:
-
-@itemize @bullet
-@item
-Laden Sie ActiveState-Perl von
-@uref{http://www.activestate.com/Products/ActivePerl/}
-und installieren Sie es.
-
-@item
-�ffnen Sie eine MS-DOS-Eingabeaufforderung.
-
-@item
-Setzen Sie - falls erforderlich - die HTTP_proxy-Variable, zum Beispiel
-wie folgt:
-
-@example
-set HTTP_proxy=my.proxy.com:3128
-@end example
-
-@item
-Starten Sie das PPM-Programm:
-
-@example
-C:\> c:\perl\bin\ppm.pl
-@end example
-
-@item
-Falls noch nicht geschehen, installieren Sie @code{DBI}:
-
-@example
-ppm> install DBI
-@end example
-
-@item
-Wenn das erfolgreich verlief, f�hren Sie folgenden Befehl aus:
-
-@example
-install
-ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
-@end example
-@end itemize
-
-Das sollte zumindest bei ActiveState-Perl Version 5.6 funktionieren.
-
-Wenn Sie es nicht schaffen, dass oben Genanntes funktioniert, sollten
-Sie statt dessen den @strong{MyODBC}-Treiber installieren und sich mit
-dem MySQL-Server �ber ODBC verbinden:
-
-@example
-use DBI;
-$dbh= DBI->connect("DBI:ODBC:$dsn","$user","$password") ||
- die "Fehler $DBI::errstr beim Verbinden mit $dsn\n";
-@end example
-
-
-@node Windows Perl, Perl support problems, ActiveState Perl, Perl support
-@c German node Windows-Perl
-@subsection Installation der MySQL-Perl-Distribution unter Windows
-
-Die MySQL-Perl-Distribution enth�lt @code{DBI},
-@code{DBD:MySQL} und @code{DBD:ODBC}.
-
-@itemize @bullet
-@item
-Laden Sie die Perl-Distribution f�r Windows von
-@uref{http://www.mysql.com/download.html}.
-
-@item
-Entpacken Sie die Distribution in @code{C:}, so dass Sie ein
-@file{C:\PERL}-Verzeichnis erhalten.
-
-@item
-F�gen Sie Ihrem Pfad @file{C:\PERL\BIN} hinzu.
-
-@item
-F�gen Sie Ihrem Pfad das Verzeichnis @file{C:\PERL\BIN\MSWIN32-x86-
-thread} oder @file{C:\PERL\BIN\MSWIN32-x86} hinzu.
-
-@item
-Testen Sie, ob @code{perl} funktioniert, indem Sie @code{perl -v} in
-einer MS-DOS-Eingabeaufforderung ausf�hren.
-@end itemize
-
-
-@node Perl support problems, , Windows Perl, Perl support
-@c German node Perl-Unterst�tzung Probleme
-@subsection Probleme bei der Benutzung von Perl @code{DBI}/@code{DBD}-Schnittstelle
-
-@cindex Probleme, Installation von Perl
-@cindex Perl DBI/DBD, Installationsprobleme
-
-Wenn Perl ausgibt, dass es das @file{../mysql/mysql.so}-Modul nicht
-finden kann, liegt das Problem wahrscheinlich darin, dass Perl die
-gemeinsam genutzte @file{libmysqlclient.so} nicht findet.
-
-Das k�nnen Sie mit einer der folgenden Methoden beheben:
-
-@itemize @bullet
-@item
-Kompilieren Sie die @code{Msql-Mysql-modules}-Distribution mit
-@code{perl Makefile.PL -static -config} statt mit @code{perl
-Makefile.PL}.
-
-@item
-Kopieren Sie @code{libmysqlclient.so} in das Verzeichnis, in dem Ihre
-anderen gemeinsam genutzten Bibliotheken liegen (wahrscheinlich
-@file{/usr/lib} oder @file{/lib}).
-
-@item
-Unter Linux k�nnen Sie der @file{/etc/ld.so.conf}-Datei den Pfadnamen
-des Verzeichnisses hinzuf�gen, in dem @file{libmysqlclient.so} liegt.
-
-@tindex LD_RUN_PATH-Umgebungsvariable
-@tindex Umgebungsvariable, LD_RUN_PATH
-@item
-F�gen Sie der @code{LD_RUN_PATH}-Umgebungsvariablen den Pfadnamen des
-Verzeichnisses hinzu, in dem @file{libmysqlclient.so} liegt.
-@end itemize
-
-Wenn Sie folgende Fehler von @code{DBD-mysql} erhalten, benutzen Sie
-wahrscheinlich @code{gcc} (oder eine alte Bin�rdatei, die mit @code{gcc}
-kompiliert wurde):
-
-@example
-/usr/bin/perl: can't resolve symbol '__moddi3'
-/usr/bin/perl: can't resolve symbol '__divdi3'
-@end example
-
-F�gen Sie @code{-L/usr/lib/gcc-lib/... -lgcc} zum Link-Befehl hinzu,
-wenn die @file{mysql.so}-Bibliothek gebaut wird (�berpr�fen Sie die
-Ausgabe von @code{make} nach @file{mysql.so}, wenn Sie den Perl-Client
-kompilieren). Die @code{-L}-Option sollte den Pfadnamen des
-Verzeichnisses angeben, in dem @file{libgcc.a} auf Ihrem System liegt.
-
-Ein weiterer Grund f�r dieses Problem kann sein, dass Perl und MySQL
-nicht beide mit @code{gcc} kompiliert wurden. In diesem Fall k�nnen Sie
-die fehlende �bereinstimmung (Mismatch) durch Kompilieren von beiden mit
-@code{gcc} aufheben.
-
-Wenn Sie folgende Fehler von @code{Msql-Mysql-modules} erhalten, wenn
-Sie die Tests laufen lassen:
-
-@example
-t/00base............install_driver(mysql) failed: Can't load
-'../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql:
-../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: uncompress at
-/usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.
-@end example
-
-Bedeutet das, dass Sie die Kompressionsbibliothek (-lz) in die Link-
-Zeile einschlie�en m�ssen. Das kann man durch folgende �nderung in der
-Datei @file{lib/DBD/mysql/Install.pm} tun:
-
-@example
-$sysliblist .= " -lm";
-
-�ndern in
-
-$sysliblist .= " -lm -lz";
-@end example
-
-Danach @strong{m�ssen} Sie 'make realclean' laufen lassen und danach mit
-der Installation von Anfang an beginnen.
-
-Wenn Sie das Perl-Modul auf einem System laufen lassen wollen, das
-dynamisches Linken nicht unterst�tzt (wie Caldera/SCO), k�nnen Sie eine
-statische Version von Perl erzeugen, die @code{DBI} und @code{DBD-mysql}
-enth�lt. Das bringt man zum Laufen, indem man eine Version von Perl
-erzeugt, in der der @code{DBI}-Code eingelinkt ist, und diese �ber das
-aktuelle Perls installiert. Dann benutzen Sie diese, um eine Version von
-Perl zu bauen, die zus�tzlich den @code{DBD}-Code eingelinkt hat, und
-installieren diese.
-
-Unter Caldera (SCO) m�ssen folgende Umgebungsvariablen gesetzt sein:
-
-@example
-shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
-or
-shell>
-LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
-shell>
-LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
-shell>
-MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:/usr/skunk/man:
-@end example
-
-Erzeugen Sie zuerst ein Perl, das ein statisch gelinktes @code{DBI}
-enth�lt, indem Sie diese Befehle im Verzeichnis ausf�hren, in dem Ihre
-@code{DBI}-Distribution liegt:
-
-@example
-shell> perl Makefile.PL -static -config
-shell> make
-shell> make install
-shell> make perl
-@end example
-
-Dann m�ssen Sie das neue Perl installieren. Die Ausgabe von @code{make
-perl} zeigt den genauen @code{make}-Befehl an, den Sie f�r die
-Installation ausf�hren m�ssen. Unter Caldera (SCO) ist das @code{make -f
-Makefile.aperl inst_perl MAP_TARGET=perl}.
-
-Benutzen Sie als n�chstes dieses soeben erzeugte Perl, um ein weiteres
-Perl zu erzeugen, dass auch ein statisch gelinktes @code{DBD::mysql}
-enth�lt, indem Sie diese Befehle im Verzeichnis ausf�hren, in dem Ihre
-@code{Msql-Mysql-modules}-Distribution liegt:
-
-@example
-shell> perl Makefile.PL -static -config
-shell> make
-shell> make install
-shell> make perl
-@end example
-
-Zum Schluss m�ssen Sie dieses neue Perl installieren. Hierbei zeigt die
-Ausgabe von @code{make perl} wiederum, welcher Befehl benutzt werden
-muss.
-
-@node Tutorial, MySQL Database Administration, Installing, Top
-@c German node Tutorial
-@chapter Einf�hrung in MySQL: Ein MySQL-Tutorial
-
-@cindex Tutorial
-@c Question: Uh - what's a defined terminal monitor?
-@cindex terminal monitor, defined
-@c Question: Uh - what's that for the index?
-@cindex monitor, terminal
-@cindex Optionen, von MySQL
-
-
-Dieses Kapitel enth�lt eine Einf�hrung in MySQL in Form eines Tutorials.
-Datei wird gezeigt, wie Sie das @code{mysql}-Client-Programm benutzen, um
-eine einfache Datenbank zu erzeugen und zu benutzen. @code{mysql} (auch
-``Terminal-Monitor'' oder einfach ``Monitor'' genannt) ist ein interaktives
-Programm, mit dem Sie sich mit einem MySQL-Server verbinden, Anfragen
-(Queries) absetzen und die Ergebnisse ansehen k�nnen. @code{mysql} kann
-auch im Stapelbetrieb (Batch Mode) benutzt werden: Sie schreiben Ihre
-Anfragen zuerst in eine Datei und veranlassen dann @code{mysql}, die
-Inhalte dieser Datei auszuf�hren. Hier werden beide M�glichkeiten
-beschrieben, @code{mysql} zu benutzen.
-
-Sie k�nnen @code{mysql} mit der @code{--help}-Option aufrufen, um eine
-Liste der Optionen zu sehen:
-
-@example
-shell> mysql --help
-@end example
-
-Dieses Kapitel setzt voraus, dass @code{mysql} auf Ihrer Maschine
-installiert ist und dass ein MySQL-Server verf�gbar ist, mit dem Sie sich
-verbinden k�nnen. Wenn das nicht der Fall sein sollte, setzen Sie sich mit
-Ihrem MySQL-Administrator in Verbindung. (Wenn @emph{Sie} der Administrator
-sind, m�ssen Sie in anderen Abschnitten des Handbuchs nachsehen.)
-
-Dieses Kapitel beschreibt den gesamten Prozess der Einrichtung und
-Benutzung einer Datenbank. Wenn Sie lediglich wissen wollen, wie man auf
-eine bereits existierende Datenbank zugreift, k�nnen Sie die Abschnitte
-�berspringen, die beschreiben, wie man eine Datenbank und die Tabellen, die
-sie enth�lt, erzeugt.
-
-Weil dieses Kapitel ein Tutorial ist, wurden notwendigerweise viele Details
-ausgelassen. Sehen Sie in den relevanten Abschnitten dieses Handbuchs nach,
-wenn Sie weitere Informationen zu den Themen suchen, die hier besprochen
-werden.
-
-
-@menu
-* Connecting-disconnecting::
-* Entering queries::
-* Database use::
-* Getting information::
-* Examples::
-* Batch mode::
-* Twin::
-* Apache::
-@end menu
-
-@node Connecting-disconnecting, Entering queries, Tutorial, Tutorial
-@c German node Verbinden und Trennen
-@section Verbindung zum Server herstellen und trennen
-
-@cindex Verbinden, mit dem Server
-@cindex Verbindung trennen, mit dem Server
-@cindex Server, verbinden
-@cindex Server, Verbindung trennen
-
-Um sich zum Server zu verbinden, m�ssen Sie beim Aufruf von @code{mysql} in
-der Regel einen MySQL-Benutzernamen und �blicherweise auch ein Passwort
-angeben. Wenn der Server auf einer anderen Maschine als der l�uft, von der
-Sie sich einloggen, m�ssen Sie auch einen Hostnamen angeben. Setzen Sie
-sich mit Ihrem Administrator in Verbindung, um herauszubekommen, welche
-Verbindungsparameter Sie benutzen sollten (das hei�t welchen Host,
-welchen Benutzername und welches Passwort Sie verwenden sollen). Wenn Sie
-die richtigen Parameter kennen, sollten Sie sich wie folgt verbinden
-k�nnen:
-
-@example
-shell> mysql -h host -u user -p
-Enter password: ********
-@end example
-
-@code{********} steht f�r Ihr Passwort. Geben Sie es ein, wenn @code{mysql}
-@code{Enter password:} anzeigt.
-
-Wenn das funktioniert hat, sehen Sie ein paar einf�hrende Informationen,
-gefolgt von der @code{mysql>}-Eingabeaufforderung:
-
-
-@example
-shell> mysql -h host -u user -p
-Enter password: ********
-Welcome to the MySQL monitor. Commands end mit ; or \g.
-Your MySQL connection id ist 459 to server version: 3.22.20a-log
-
-Type 'help' for help.
-
-mysql>
-@end example
-
-Die Eingabeaufforderung sagt Ihnen, dass @code{mysql} bereit f�r die
-Eingabe von Befehlen ist.
-
-Einige
-Einige MySQL-Installationen erlauben Benutzern, sich als anonyme
-(unbenannte) Benutzer mit dem Server auf dem lokalen Host zu verbinden.
-Wenn das auf Ihrer Maschine der Fall ist, k�nnen Sie sich mit diesem Server
-verbinden, indem Sie @code{mysql} ohne irgend welche Optionen aufrufen:
-
-@example
-shell> mysql
-@end example
-
-Nachdem Sie sich erfolgreich verbunden haben, k�nnen Sie die Verbindung
-jederzeit trennen, indem Sie @code{QUIT} an der
-@code{mysql>}-Eingabeaufforderung eingeben.
-
-@example
-mysql> QUIT
-Bye
-@end example
-
-Sie k�nnen die Verbindung auch trennen, indem Sie STRG+D eingeben.
-
-Die meisten Beispiele der folgenden Abschnitte setzen voraus, dass Sie mit
-dem Server verbunden sind. Das wird durch @code{mysql>} angezeigt.
-
-
-@node Entering queries, Database use, Connecting-disconnecting, Tutorial
-@c German node Anfragen eingeben
-@section Anfragen eingeben
-
-@cindex Absetzen, Anfragen
-@cindex Anfragen, absetzen
-@cindex Eingeben, Anfragen
-
-Stellen Sie sicher, dass Sie mit dem Server verbunden sind, wie im
-vorherigen Abschnitt er�rtert. Dadurch wird noch keine Datenbank
-ausgew�hlt, mit der Sie arbeiten k�nnen, aber das ist in Ordnung. Hier ist
-es erst einmal wichtiger, herauszufinden, wie Sie Anfragen (Queries)
-absetzen, als direkt mit dem Erzeugen von Tabellen, dem Einladen von Daten
-in diese und der Abfrage von Daten aus diesen zu beginnen. Dieser Abschnitt
-beschreibt die grundlegenden Prinzipien der Befehlseingabe, indem etliche
-Anfragen gezeigt werden, die Sie ausprobieren k�nnen, um sich mit der
-Arbeitsweise von @code{mysql} vertraut zu machen.
-
-Hier ist ein einfacher Befehl, der den Server bittet, Ihnen seine
-Versionsnummer und das aktuelle Datum mitzuteilen. Geben Sie folgendes an
-der @code{mysql>}-Eingabeaufforderung ein und dr�cken Sie die Eingabetaste:
-
-@example
-mysql> SELECT VERSION(), CURRENT_DATE;
-+--------------+--------------+
-| version() | CURRENT_DATE |
-+--------------+--------------+
-| 3.22.20a-log | 1999-03-19 |
-+--------------+--------------+
-1 row in set (0.01 sec)
-mysql>
-@end example
-
-Diese Anfrage erl�utert verschiedene Dinge �ber @code{mysql}:
-
-@itemize @bullet
-@item
-Ein Befehl besteht normalerweise aus einem SQL-Statement, gefolgt von einem
-Semikolon. (Es gibt ein paar Ausnahmen, bei denen das Semikolon nicht
-ben�tigt wird. @code{QUIT}, das vorher erw�hnt wurde, stellt eine solche
-Ausnahme dar. Wir kommen sp�ter noch zu anderen Ausnahmen.)
-
-@item
-Wenn Sie einen Befehl absetzen, sendet @code{mysql} ihn zum Server, der ihn
-ausf�hrt, und zeigt die Ergebnisse an. Danach wird eine neue
-@code{mysql>}-Eingabeaufforderung angezeigt, um klar zu machen, dass es f�r
-einen weiteren Befehl bereit ist.
-
-@item
-@code{mysql} zeigt die Ausgabe der Anfrage in Tabellenform an (Zeilen und
-Spalten). Die erste Zeile enth�lt Spalten�berschriften. Die folgenden
-Zeilen sind die Ergebnisse der Anfrage. Normalerweise sind die
-Spalten�berschriften die Spaltennamen der Tabellen, die Sie abfragen. Wenn
-Sie statt der Spaltennamen den Wert eines Ausdrucks abfragen (wie im
-gezeigten Beispiel), beschriftet @code{mysql} die Spalten�berschrift mit
-dem Ausdruck selbst.
-
-@item
-@code{mysql} zeigt, wie viele Zeilen zur�ck gegeben wurden und wie lang die
-Ausf�hrung der Anfrage dauerte, was ihnen eine grobe Einsch�tzung der
-Server-Performance erm�glicht. Diese Werte sind ungenau, weil sie die
-Wanduhrzeit repr�sentieren (und nicht die Prozessor- oder Maschinenzeit),
-und weil sie von Faktoren wie der Serverlast und der Netzwerk-Wartezeit
-beeinflusst werden. (Um uns kurz zu fassen, zeigen wir die ``rows in
-set''-Zeile in den weiteren Beispielen dieses Kapitels nicht mehr an.)
-@end itemize
-
-Schl�sselw�rter k�nnen in beliebiger Schreibweise (Gro� und klein)
-eingegeben werden. Folgende Anfragen sind gleichwertig:
-
-@example
-mysql> SELECT VERSION(), CURRENT_DATE;
-mysql> select version(), current_date;
-mysql> SeLeCt vErSiOn(), current_DATE;
-@end example
-
-Hier kommt eine weitere Anfrage. Sie zeigt, wie Sie @code{mysql} als
-einfachen Rechner benutzen k�nnen:
-
-@example
-mysql> SELECT SIN(PI()/4), (4+1)*5;
-+-------------+---------+
-| SIN(PI()/4) | (4+1)*5 |
-+-------------+---------+
-| 0.707107 | 25 |
-+-------------+---------+
-@end example
-
-Die bislang gezeigten Befehle sind relativ kurze, einzeilige Statements.
-Sie k�nnen allerdings auch mehrfache Statements auf einer einzelnen Zeile
-eingeben. Beenden Sie einfach jedes davon mit einem Semikolon:
-
-@example
-mysql> SELECT VERSION(); SELECT NOW();
-+--------------+
-| version() |
-+--------------+
-| 3.22.20a-log |
-+--------------+
-
-+---------------------+
-| NOW() |
-+---------------------+
-| 1999-03-19 00:15:33 |
-+---------------------+
-@end example
-
-Ein Befehl muss nicht auf einer einzelnen Zeile eingegeben werden, so dass
-l�ngere Befehle, die mehrere Zeilen erfordern, kein Problem darstellen.
-@code{mysql} stellt anhand des beendenden Semikolons fest, wo Ihr Statement
-endet, und nicht etwa anhand des Zeilenendes. (Mit anderen Worten
-akzeptiert @code{mysql} Freiformat-Eingaben: Es sammelt Eingabezeilen,
-f�hrt sie aber solange nicht aus, bis es das Semikolon sieht.)
-
-Hier ist ein einfaches Statement, auf mehrere Zeilen verteilt:
-
-@example
-mysql> SELECT
- -> USER()
- -> ,
- -> CURRENT_DATE;
-+--------------------+--------------+
-| USER() | CURRENT_DATE |
-+--------------------+--------------+
-| joesmith@@localhost | 1999-03-18 |
-+--------------------+--------------+
-@end example
-
-Sehen Sie, wie sich die Eingabeaufforderung von @code{mysql>} zu @code{->}
-�ndert, nachdem Sie die erste Zeile der Mehrzeilen-Anfrage eingegeben
-haben. Auf diese Weise zeigt @code{mysql} an, dass es noch nicht das
-komplette Statement gesehen hat und auf den Rest wartet. Die
-Eingabeaufforderung ist Ihr Freund, denn sie stellt wertvolle R�ckmeldungen
-zur Verf�gung. Wenn Sie diese R�ckmeldungen nutzen, werden Sie immer dessen
-gewahr sein, worauf @code{mysql} wartet.
-
-Wenn Sie den Befehl, den Sie gerade eingeben, nicht ausf�hren wollen,
-k�nnen Sie ihn mit @code{\c} abbrechen:
-
-@example
-mysql> SELECT
- -> USER()
- -> \c
-mysql>
-@end example
-
-Beachten Sie auch hierbei die Eingabeaufforderung. Sie �ndert sich zur�ck
-zu @code{mysql>}, nachdem Sie @code{\c} eingegeben haben, und diese
-R�ckmeldung bedeutet, dass @code{mysql} f�r einen weiteren Befehl bereit
-ist.
-
-Folgende Tabelle zeigt alle Eingabeaufforderungen, denen Sie begegnen
-k�nnen, und fasst zusammen, was sie �ber den Zustand von @code{mysql}
-aussagen:
-
-@cindex Eingabeaufforderungen, Bedeutungen
-@multitable @columnfractions .10 .9
-@item @strong{Eingabeaufforderung} @tab @strong{Bedeutung}
-@item @code{mysql>} @tab Bereit f�r den n�chsten Befehl.
-@item @code{@ @ @ @ ->} @tab Wartet auf die n�chste Zeile eines
-mehrzeiligen Befehls.
-@item @code{@ @ @ @ '>} @tab Wartet auf die n�chste Zeile und
-fasst eine Zeichenkette zusammen, die mit einem Apostroph (@samp{'})
-beginnt.
-@item @code{@ @ @ @ ">} @tab Wartet auf die n�chste Zeile und
-fasst eine Zeichenkette zusammen, die mit Anf�hrungszeichen (@samp{"})
-beginnt.
-@end multitable
-
-Mehrzeilige Statements passieren h�ufig aus Versehen, wenn Sie vorhaben,
-einen Befehl auf einer einzelnen Zeile abzusetzen, aber das beendende
-Semikolon vergessen. In diesem Fall wartet @code{mysql} auf weitere
-Eingaben:
-
-@example
-mysql> SELECT USER()
- ->
-@end example
-
-Wenn so etwas passiert (Sie dachten, Sie h�tten ein Statement eingegeben,
-aber die einzige Antwort ist die @code{->}-Eingabeaufforderung), wartet
-@code{mysql} h�chstwahrscheinlich auf das Semikolon. Wenn Sie nicht darauf
-achten, was Ihnen die Eingabeaufforderung mitteilen will, k�nnten Sie eine
-ganze Weile herum sitzen, bevor Sie feststellen, was Sie tun m�ssen. Geben
-Sie ein Semikolon ein, um das Statement zu vollenden, und @code{mysql} wird
-es ausf�hren:
-
-@example
-mysql> SELECT USER()
- -> ;
-+--------------------+
-| USER() |
-+--------------------+
-| joesmith@@localhost |
-+--------------------+
-@end example
-
-Die @code{'>}- und @code{">}-Eingabeaufforderungen kommen bei der Sammlung
-von Zeichenketten vor. In MySQL k�nnen Sie Zeichenketten wahlweise in
-@samp{'}- oder @samp{"}-Zeichen eingeschlossen eingeben (zum Beispiel
-@code{'hallo'} oder @code{"tsch��"}), und @code{mysql} l��t Sie auch
-Zeichenketten eingeben, die sich �ber mehrere Zeilen erstrecken. Wenn Sie
-eine @code{'>}- oder @code{">}-Eingabeaufforderung sehen, hei�t das, dass
-Sie eine Zeile eingegeben haben, die eine Zeichenkette enth�lt, die mit
-@samp{'} oder @samp{"} beginnt, dass Sie aber noch nicht das entsprechende
-beendende Zeichen (ebenfalls @samp{'} oder @samp{"}) eingegeben haben. Das
-ist in Ordnung, wenn Sie tats�chlich eine mehrzeilige Zeichenkette
-eingeben, aber wie wahrscheinlich ist das? Nicht sehr wahrscheinlich.
-Wahrscheinlicher ist, dass die @code{'>}- und
-@code{">}-Eingabeaufforderungen anzeigen, dass Sie versehentlich ein
-@samp{'}- oder @samp{"}-Zeichen ausgelassen haben. Beispiel:
-
-@example
-mysql> SELECT * FROM meine_tabelle WHERE name = "Schmidt AND age < 30;
- ">
-@end example
-
-Wenn Sie dieses @code{SELECT}-Statement eingeben, dann EINGABE dr�cken und
-auf das Ergebnis warten, wird nichts passieren. Statt sich zu fragen, warum
-diese Anfrage so lange dauert, beachten Sie des R�tsels L�sung, die die
-@code{">}-Eingabeaufforderung anzeigt. Sie sagt Ihnen, dass @code{mysql}
-auf den Rest einer nicht beendeten Zeichenkette wartet. (Sehen Sie den
-Fehler im Statement? Der Zeichenkette @code{"Schmidt} fehlt das zweite
-Anf�hrungszeichen.)
-
-Was machen Sie in diesem Fall? Das einfachste ist, den Befehl abzubrechen.
-Sie k�nnen jetzt allerdings nicht einfach @code{\c} eingeben, weil
-@code{mysql} es als Teil der Zeichenkette interpretieren w�rde, die es
-gerade sammelt! Geben Sie daher zuerst das schlie�ende Anf�hrungszeichen
-ein, damit @code{mysql} wei�, dass die Zeichenkette zuende ist, und erst
-danach @code{\c}:
-
-@example
-mysql> SELECT * FROM meine_tabelle WHERE name = "Schmidt AND age < 30;
- "> "\c
-mysql>
-@end example
-
-Die Eingabeaufforderung �ndert sich wieder zu @code{mysql>} und zeigt damit
-an, dass @code{mysql} f�r einen weiteren Befehl bereit ist.
-
-Es ist wichtig, die Bedeutung der @code{'>}- und
-@code{">}-Eingabeaufforderungen zu kennen, denn wenn Sie versehentlich
-eine nicht beendete Zeichenkette eingeben, werden alle folgenden Zeilen,
-die Sie eingeben, von @code{mysql} ignoriert - inklusive einer Zeile, die
-@code{QUIT} enth�lt! Das kann recht verwirrend sein, besonders dann, wenn
-Sie nicht wissen, dass Sie das schlie�ende Anf�hrungszeichen eingeben
-m�ssen, bevor Sie den aktuellen Befehl abbrechen k�nnen.
-
-
-@node Database use, Getting information, Entering queries, Tutorial
-@c German node Datenbankbenutzung
-@section Eine Datenbank erzeugen und benutzen
-
-@cindex Datenbanken, erzeugen
-@cindex Datenbanken, benutzen
-@cindex Erzeugen, Datenbanken
-
-
-Jetzt, wo Sie wissen, wie Sie Befehle eingeben, ist es Zeit, auf eine
-Datenbank zuzugreifen.
-
-Nehmen wir an, Sie haben zuhause mehrere Haustiere (Ihre Menagerie) und Sie
-wollen unterschiedliche Arten von Information �ber sie im �berblick
-behalten. Das k�nnen Sie tun, indem Sie Tabellen erzeugen, die Ihre Daten
-beinhalten, und die Sie mit den gew�nschten Informationen f�llen. Dann
-k�nnen Sie verschiedene Arten von Fragen �ber Ihre Haustiere beantworten,
-indem Sie Daten aus den Tabellen abrufen. Dieser Abschnitt zeigt Ihnen:
-
-@itemize @bullet
-@item
-Wie Sie eine Datenbank erzeugen
-@item
-Wie Sie eine Tabelle anlegen
-@item
-Wie Sie Daten in die Tabelle laden
-@item
-Wie Sie auf unterschiedliche Weise Daten aus der Tabelle abfragen
-@item
-Wie Sie mehrere Tabellen benutzen
-@end itemize
-
-Die Menagerie-Datenbank wird (bewusst) einfach sein, aber man kann sich
-leicht Situationen im echten Leben vorstellen, in denen ein �hnlicher Typ
-von Datenbank benutzt werden k�nnte. Beispielsweise k�nnte ein Bauer eine
-solche Datenbankbenutzung, um den �berblick �ber sein Vieh zu behalten,
-oder ein Tierarzt, um seine Patientendaten im Griff zu haben. Sie finden
-eine Menagerie-Distribution, die einige der benutzten Anfragen und
-Beispielsdaten enth�lt, auf der MySQL-Website.
-Sie finden die Distribution entweder unter
-@uref{http://www.mysql.com/downloads/Contrib/Examples/menagerie.tar.gz,komprimiertes @code{tar}-Format}
-oder unter
-@uref{http://www.mysql.com/downloads/Contrib/Beispiele/menagerie.zip,Zip-Format}.
-
-Benutzen Sie das @code{SHOW}-Statement, um herauszufinden, welche
-Datenbanken zur Zeit auf dem Server existieren:
-
-@example
-mysql> SHOW DATABASES;
-+----------+
-| database |
-+----------+
-| mysql |
-| test |
-| tmp |
-+----------+
-@end example
-
-Die Liste der Datenbanken weicht wahrscheinlich von derjenigen auf Ihrer
-Maschine ab, aber wahrscheinlich befinden sich die @code{mysql}- und
-@code{test}-Datenbanken darunter. Die @code{mysql}-Datenbank ist notwendig,
-weil darin die Zugriffsrechte f�r Benutzer gespeichert sind. Die
-@code{test}-Datenbank ist meist als Arbeitsbereich zum Ausprobieren dabei.
-
-Wenn die @code{test}-Datenbank existiert, versuchen Sie, darauf
-zuzugreifen:
-
-@example
-mysql> USE test
-database changed
-@end example
-
-Beachten Sie, dass @code{USE} - wie @code{QUIT} - kein Semikolon erfordert.
-(Sie k�nnen solche Statements mit einem Semikolon beenden, wenn Sie wollen,
-es schadet nicht.) Das @code{USE}-Statement ist auch auf andere Art
-besonders: Es muss auf einer einzigen Zeile eingegeben werden.
-
-Sie k�nnen die @code{test}-Datenbank f�r die folgenden Beispiele benutzen
-(wenn Sie Zugriff darauf haben), aber alles, was Sie dort anlegen, kann von
-jedem sonstigen, der Zugriff darauf hat, entfernt werden. Aus diesem Grund
-sollten Sie besser Ihren MySQL-Administrator um Erlaubnis bitten, eine
-eigene Datenbankbenutzung zu k�nnen. Nehmen wir an, Sie wollen Ihre
-Datenbank @code{menagerie} nennen. Daf�r muss der Administrator folgenden
-Befehl eingeben:
-
-@example
-mysql> GRANT ALL ON menagerie.* TO ihr_mysql_name;
-@end example
-
-Wobei @code{ihr_mysql_name} der MySQL-Benutzername ist, der Ihnen
-zugewiesen wurde.
-
-
-@menu
-* Creating database::
-* Creating tables::
-* Loading tables::
-* Retrieving data::
-@end menu
-
-@node Creating database, Creating tables, Database use, Database use
-@c German node Datenbank erzeugen
-@subsection Eine Datenbank erzeugen und ausw�hlen
-
-@cindex Ausw�hlen, Datenbanken
-@cindex Datenbanken, ausw�hlen
-
-Wenn der Administrator f�r Sie eine Datenbank erzeugt, wenn er Ihre
-Zugriffsrechte eintr�gt, k�nnen Sie sie unmittelbar benutzen. Ansonsten
-m�ssen Sie sie selbst anlegen:
-
-@example
-mysql> CREATE DATABASE menagerie;
-@end example
-
-Unter Unix sind Datenbanknamen abh�ngig von der Gro�-/Kleinschreibung (im
-Gegensatz zu SQL-Schl�sselw�rtern), daher m�ssen Sie sich auf Ihre
-Datenbank immer mit @code{menagerie} beziehen, nicht mit @code{Menagerie},
-@code{MENAGERIE} oder irgend einer anderen Variante. Dasselbe gilt f�r
-Tabellennamen. (Unter Windows trifft diese Beschr�nkung nicht zu. Dennoch
-muss man sich bei einer gegebenen Anfrage auf Datenbanken und Tabellen in
-derselben Schreibweise beziehen.)
-
-Das Erzeugen einer Datenbank w�hlt diese nicht zur Benutzung aus. Das
-m�ssen Sie explizit tun. Um @code{menagerie} zur aktuell ausgew�hlten
-Datenbank zu machen, benutzen Sie folgenden Befehl:
-
-@example
-mysql> USE menagerie
-database changed
-@end example
-
-Ihre Datenbank muss nur einmal erzeugt werden, aber Sie m�ssen sie jedes
-Mal zur Benutzung ausw�hlen, wenn Sie eine @code{mysql}-Sitzung beginnen.
-Das k�nnen Sie durch die Eingabe eines @code{USE}-Statements wie oben
-beschrieben tun. Alternativ k�nnen Sie die Datenbank auf der Kommandozeile
-ausw�hlen, wenn Sie @code{mysql} aufrufen. Geben Sie einfach ihren Namen
-nach den Verbindungsparametern ein, die Sie ansonsten eingeben m�ssen.
-Beispiel:
-
-@example
-shell> mysql -h host -u user -p menagerie
-Enter password: ********
-@end example
-
-Beachten Sie, dass @code{menagerie} auf der gezeigten Kommandozeile nicht
-Ihr Passwort ist! Wenn Sie Ihr Passwort auf der Kommandozeile nach der
-@code{-p}-Option eingeben wollen, m�ssen Sie das ohne Leerzeichen
-dazwischen machen (beispielsweise als @code{-pmeinpasswort}, nicht als
-@code{-p meinpasswort}). Es wird allerdings nicht empfohlen, das Passwort
-auf der Kommandozeile einzugeben, denn dann kann es durch andere Benutzer,
-die auf Ihrer Maschine eingeloggt sind, ausspioniert werden.
-
-
-@node Creating tables, Loading tables, Creating database, Database use
-@c German node Tabellen erzeugen
-@subsection Eine Tabelle erzeugen
-
-@cindex Tabellen, erzeugen
-@cindex Erzeugen, Tabellen
-Die Datenbank zu erzeugen ist leicht, aber bis jetzt ist sie noch leer, wie
-Ihnen @code{SHOW TABLES} zeigt:
-
-@example
-mysql> SHOW TABLES;
-Empty set (0.00 sec)
-@end example
-
-Der schwierigere Teil besteht darin, sich zu entscheiden, wie die Struktur
-Ihrer Datenbank sein sollte: Welche Tabellen Sie ben�tigen und welche
-Spalten in jeder Tabelle enthalten sein sollen.
-
-Sie brauchen eine Tabelle, die f�r jedes Ihrer Haustiere einen Datensatz
-enth�lt. Diese kann @code{pet}-Tabelle genannt werden, und sie sollte
-zumindest den Namen jedes Tiers enthalten. Weil lediglich der Name nicht
-besonders interessant ist, sollte die Tabelle weitere Informationen
-enthalten. Wenn zum Beispiel mehr als eine Person in Ihrer Familie ein
-Haustier h�lt, w�rden Sie den Namen des Besitzers jedes Haustiers auflisten
-wollen. Ausserdem wollen Sie vielleicht ein paar grundlegende Informationen
-wie Art und Geschlecht einf�gen.
-
-Was ist mit dem Alter? Diese Information k�nnte interessant sein, aber es
-ist keine gute Idee, sie in der Datenbank zu speichern. Das Alter �ndert
-sich, wenn die Zeit vergeht, was bedeutet, dass Sie Ihre Datens�tze oft
-aktualisieren m�ssen. Statt dessen ist es besser, einen festen Wert wie das
-Geburtsdatum zu speichern. Immer, wenn Sie dann das Alter ben�tigen,
-berechnen Sie es als Differenz zwischen dem aktuellen Datum und dem
-Geburtstag. MySQL stellt Funktionen f�r Datumsberechnungen zur Verf�gung,
-daher ist so etwas nicht schwer. Ausserdem hat die Speicherung von
-Geburtsdaten anstelle von Alter weitere Vorteile:
-
-@itemize @bullet
-@item
-Sie k�nnen die Datenbank f�r Aufgaben wie die Erzeugung einer Liste
-bevorstehender Tier-Geburtstage benutzen. (Wenn Sie das etwas albern
-finden, bedenken Sie, dass sich dieselbe Frage zum Beispiel bei einer
-Gesch�ftsdatenbank stellt, um Kunden herauszufinden, denen Sie in K�rze
-Geburtstagsw�nsche schicken wollen, also f�r die Computer-unterst�tzte
-pers�nliche Note.)
-
-@item
-Sie k�nnen Altersberechnungen mit anderen Bezugsdaten als dem aktuellen
-Datum durchf�hren. Wenn Sie das Sterbedatum speichern, k�nnen Sie zum
-Beispiel leicht errechnen, wie alt ein Haustier war, als es starb.
-@end itemize
-
-Wahrscheinlich fallen Ihnen weitere Informationen ein, die sinnvoller Weise
-in der @code{pet}-Tabelle gespeichert werden k�nnten. F�r unser Beispiel
-sollen die bisher identifizierten Informationen f�rs Erste ausreichen:
-Name, Besitzer, Art, Geschlecht, Geburtstag und Sterbetag.
-
-Legen Sie mit einem @code{CREATE TABLE}-Statement das Layout Ihrer Tabelle
-fest:
-
-@example
-mysql> CREATE TABLE pet (name VARCHAR(20), besitzer VARCHAR(20),
- -> art VARCHAR(20), geschlecht CHAR(1), geburtstag DATE, sterbetag DATE);
-@end example
-
-@code{VARCHAR} ist f�r die @code{name}-, @code{besitzer}- und
-@code{art}-Spalten eine gute Wahl, weil die Spaltenwerte in der L�nge
-variieren werden. Diese Spalten m�ssen auch nicht alle gleich sein, also
-@code{20} Zeichen lang. Sie k�nnen jede beliebige L�nge zwischen @code{1}
-und @code{255} w�hlen, was immer Ihnen vern�nftig erscheint. (Wenn Sie eine
-schlechte Wahl getroffen haben und sich sp�ter herausstellt, dass Sie eine
-l�ngere Spalte brauchen, stellt MySQL ein @code{ALTER TABLE}-Statement zur
-Verf�gung.)
-
-Das Geschlecht der Tiere kann vielf�ltig dargestellt werden, zum Beispiel
-als @code{"m"} und @code{"w"}, oder auch als @code{"m�nnlich"} und
-@code{"weiblich"}. Am einfachsten ist es, hierf�r einzelne Zeichen wie
-@code{"m"} und @code{"w"} zu verwenden.
-
-Der @code{DATE}-Datentyp f�r @code{geburtstag} und @code{sterbetag} liegt
-auf der Hand.
-
-Nachdem Sie eine Tabelle angelegt haben, sollte @code{SHOW TABLES} auch
-etwas zeigen:
-
-@example
-mysql> SHOW TABLES;
-+---------------------+
-| Tables in menagerie |
-+---------------------+
-| pet |
-+---------------------+
-@end example
-
-Um sicherzustellen, dass Ihre Tabelle so wie erwartet angelegt wurde,
-benutzen Sie das @code{DESCRIBE}-Statement:
-
-@example
-mysql> DESCRIBE pet;
-+------------+-------------+------+-----+---------+-------+
-| Field | Type | Null | Key | Default | Extra |
-+------------+-------------+------+-----+---------+-------+
-| name | varchar(20) | YES | | NULL | |
-| besitzer | varchar(20) | YES | | NULL | |
-| art | varchar(20) | YES | | NULL | |
-| geschlecht | char(1) | YES | | NULL | |
-| geburtstag | date | YES | | NULL | |
-| sterbetag | date | YES | | NULL | |
-+------------+-------------+------+-----+---------+-------+
-@end example
-
-Sie k�nnen @code{DESCRIBE} jederzeit benutzen, zum Beispiel, wenn Sie die
-Namen der Spalten Ihrer Tabelle vergessen haben oder von welchem Datentyp
-sie sind.
-
-
-@node Loading tables, Retrieving data, Creating tables, Database use
-@c German node Tabellen f�llen
-@subsection Daten in Tabellen einladen
-
-@cindex Einladen, Tabellen
-@cindex Tabellen, Daten einladen
-@cindex Daten, in Tabellen laden
-
-Nachdem Sie Ihre Tabelle erzeugt haben, m�ssen Sie sie mit Daten f�llen.
-Hierf�r sind die @code{LOAD DATA}- und @code{INSERT}-Statements n�tzlich.
-
-Nehmen wir an, Sie haben Haustiere wie unten aufgef�hrt. (Achten Sie bei
-den Datumsangaben bitte darauf, dass MySQL Daten im
-@code{YYYY-MM-DD}-Format erwartet, was von dem Format abweichen kann, an
-das Sie gewohnt sind.)
-
-@multitable @columnfractions .16 .16 .16 .16 .16 .16
-@item @strong{name} @tab @strong{besitzer} @tab @strong{art} @tab @strong{geschlecht} @tab @strong{geburtstag} @tab @strong{sterbetag}
-@item Fluffy @tab Harold @tab Katze @tab w @tab 1993-02-04 @tab
-@item Claws @tab Gwen @tab Katze @tab m @tab 1994-03-17 @tab
-@item Buffy @tab Harold @tab Hund @tab w @tab 1989-05-13 @tab
-@item Fang @tab Benny @tab Hund @tab m @tab 1990-08-27 @tab
-@item Bowser @tab Diane @tab Hund @tab m @tab 1998-08-31 @tab 1995-07-29
-@item Chirpy @tab Gwen @tab Vogel @tab w @tab 1998-09-11 @tab
-@item Whistler @tab Gwen @tab Vogel @tab @tab 1997-12-09 @tab
-@item Slim @tab Benny @tab Schlange @tab m @tab 1996-04-29 @tab
-@end multitable
-
-Weil Sie mit einer leeren Tabelle beginnen, ist eine einfache M�glichkeit,
-diese mit Daten zu f�llen, dass Sie eine Textdatei erzeugen, die eine Zeile
-f�r jedes Ihrer Tiere enth�lt, und die Inhalte dieser Datei dann mit einem
-einzigen Statement in die Tabelle laden.
-
-Erzeugen Sie also eine Textdatei @file{pet.txt}, die einen Datensatz pro
-Zeile enth�lt, mit Werten, die durch TAB-Zeichen getrennt sind, und zwar in
-der Reihenfolge, in der die Spalten im @code{CREATE TABLE}-Statement
-aufgef�hrt waren. Fehlende Werte (wie unbekanntes Geschlecht oder
-Sterbedaten f�r Tiere, die noch leben) ersetzen Sie mit @code{NULL}-Werten.
-Um das in Ihrer Textdatei darzustellen, nehmen Sie @code{\N}. Der Datensatz
-f�r den Vogel Whistler zum Beispiel sieht wie folgt aus (wobei der Leerraum
-zwischen den Werten ein einzelnes TAB-Zeichen darstellt):
-
-@multitable @columnfractions .15 .15 .15 .15 .25 .15
-@item @code{Whistler} @tab @code{Gwen} @tab @code{Vogel} @tab @code{\N} @tab @code{1997-12-09} @tab @code{\N}
-@end multitable
-
-Um die Textdatei @file{pet.txt} in die @code{pet}-Tabelle zu laden,
-benutzen Sie folgenden Befehl:
-
-@example
-mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
-@end example
-
-Sie k�nnen das Trennzeichen f�r die Spalten und das Zeichen f�r Zeilenende
-im @code{LOAD DATA}-Statement explizit festlegen, wenn Sie wollen, aber
-vorgabem��ig sind das das TAB-Zeichen und das Zeilenvorschub-Zeichen. Das
-reicht f�r das Statement aus, um die Datei @file{pet.txt} korrekt
-einzulesen.
-
-Wenn Sie einzeln neue Datens�tze hinzuf�gen wollen, ist das
-@code{INSERT}-Statement n�tzlich. In seiner einfachsten Form geben Sie f�r
-jede Spalte Werte an, in genau der Reihenfolge, in der die Spalten im
-@code{CREATE TABLE}-Statement aufgef�hrt wurden. Nehmen wir an, dass Diane
-einen neuen Hamster namens Puffball bekommt. Sie f�gen einen neuen
-Datensatz mittels @code{INSERT}-Statement wie folgt hinzu:
-
-@example
-mysql> INSERT INTO pet
- -> VALUES ('Puffball','Diane','Hamster','w','1999-03-30',NULL);
-@end example
-
-Beachten Sie, dass hierbei Zeichenketten- und Datumswerte in
-Anf�hrungszeichen stehen. Mit @code{INSERT} k�nnen Sie auch direkt
-@code{NULL} einf�gen, um einen fehlenden Wert darzustellen. Sie k�nnen
-daf�r nicht @code{\N} wie bei @code{LOAD DATA} verwenden.
-
-Diesem Beispiel k�nnen Sie auch entnehmen, dass es einiger Tipparbeit
-bedurft h�tte, die anf�nglichen Datens�tze mit mehreren
-@code{INSERT}-Statements einzuf�gen, statt hierf�r ein einziges @code{LOAD
-DATA}-Statement zu verwenden.
-
-
-@node Retrieving data, , Loading tables, Database use
-@c German node Daten abrufen
-@subsection Informationen aus einer Tabelle abfragen
-
-@cindex Daten, abrufen
-@cindex Tabellen, Daten abrufen
-@cindex Abrufen, Daten aus Tabellen
-@cindex Entladen, Tabellen
-
-
-Das @code{SELECT}-Statement wird benutzt, um Informationen aus einer
-Tabelle herauszuziehen. Die allgemeine Form des Statements ist:
-
-@example
-SELECT auszuw�hlende_spalten
-FROM tabelle
-WHERE gew�nschte_bedingungen
-@end example
-
-@code{auszuw�hlende_spalten} bezeichnet, was Sie sehen wollen. Das kann
-entweder eine Liste von Spalten sein oder @code{*}, um ``alle Spalten'' zu
-bezeichnen. @code{tabelle} kennzeichnet die Tabelle, aus der Sie Spalten
-abfragen wollen. Die @code{WHERE}-Klausel ist optional. Wenn sie vorhanden
-ist, kennzeichnet @code{gew�nschte_bedingungen} die Bedingungen, mit denen
-die Zeilen �bereinstimmen m�ssen, damit sie abgefragt werden.
-
-
-@menu
-* Selecting all::
-* Selecting rows::
-* Selecting columns::
-* Sorting rows::
-* Date calculations::
-* Working with NULL::
-* Pattern matching::
-* Counting rows::
-* Multiple tables::
-@end menu
-
-@node Selecting all, Selecting rows, Retrieving data, Retrieving data
-@c German node Alles ausw�hlen
-@subsubsection Alle Daten ausw�hlen
-
-Die einfachste Form von @code{SELECT} fragt alles aus einer Tabelle ab:
-
-@example
-mysql> SELECT * FROM pet;
-+----------+----------+----------+------------+------------+------------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+----------+----------+----------+------------+------------+------------+
-| Fluffy | Harold | Katze | w | 1993-02-04 | NULL |
-| Claws | Gwen | Katze | m | 1994-03-17 | NULL |
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-| Fang | Benny | Hund | m | 1990-08-27 | NULL |
-| Bowser | Diane | Hund | m | 1998-08-31 | 1995-07-29 |
-| Chirpy | Gwen | Vogel | w | 1998-09-11 | NULL |
-| Whistler | Gwen | Vogel | NULL | 1997-12-09 | NULL |
-| Slim | Benny | Schlange | m | 1996-04-29 | NULL |
-| Puffball | Diane | Hamster | w | 1999-03-30 | NULL |
-+----------+----------+----------+------------+------------+------------+
-@end example
-
-Diese Form von @code{SELECT} ist n�tzlich, wenn Sie Ihre gesamte Tabelle
-abfragen wollen, zum Beispiel, wenn Sie sich gerade mit einem anf�nglichen
-Satz Daten geladen haben. Wie das so passiert, zeigt die Ausgabe einen
-Fehler auf: Bowser scheint gestorben zu sein, bevor er geboren wurde! In
-den Original-Stammbaum-Papieren finden Sie, dass das korrekte Geburtsjahr
-1989 ist, nicht 1998.
-
-Es gibt eine ganze Reihe M�glichkeiten, das zu beheben:
-
-@itemize @bullet
-@item
-Editieren Sie die Datei @file{pet.txt} und beheben Sie den Fehler. Leeren
-Sie dann die Tabelle und laden Sie erneut Daten hinein, indem Sie zuerst
-@code{DELETE} und dann @code{LOAD DATA} benutzen:
-
-@example
-mysql> SET AUTOCOMMIT=1; # F�r schnelles Neuerzeugen der Tabelle
-mysql> DELETE FROM pet;
-mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
-@end example
-
-Wenn Sie das jedoch tun, m�ssen Sie die Daten f�r Puffball erneut eingeben.
-
-@item
-Den fehlerhaften Datensatz mit einem @code{UPDATE}-Statement in Ordnung
-bringen:
-
-@example
-mysql> UPDATE pet SET geburtstag = "1989-08-31" WHERE name = "Bowser";
-@end example
-@end itemize
-
-Wie gezeigt ist es einfach, eine ganze Tabelle abzufragen. Aber
-typischerweise wird das selten gew�nscht sein, besonders, wenn die Tabelle
-Gro� wird. Statt dessen werden Sie an der Antwort auf bestimmte Fragen
-interessiert sein, wobei Sie ein paar Beschr�nkungen in Bezug auf die
-Informationen, die Sie wollen, festlegen. Schauen wir uns einige
-Auswahl-Anfragen an, hinsichtlich der Fragen in Bezug auf Ihre Haustiere,
-die sie beantworten.
-
-
-@node Selecting rows, Selecting columns, Selecting all, Retrieving data
-@c German node Zeilen ausw�hlen
-@subsubsection Bestimmte Zeilen ausw�hlen
-
-@cindex Zeilen, ausw�hlen
-@cindex Tabellen, Zeilen ausw�hlen
-
-Sie k�nnen nur bestimmte Zeilen Ihrer Tabelle ausw�hlen. Wenn Sie zum
-Beispiel die Geburtstags-�nderung von Bowser �berpr�fen wollen, w�hlen Sie
-Bowsers Datensatz wie folgt aus:
-
-@example
-mysql> SELECT * FROM pet WHERE name = "Bowser";
-+--------+----------+---------+-------------+------------+------------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+--------+----------+---------+-------------+------------+------------+
-| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
-+--------+----------+---------+-------------+------------+------------+
-@end example
-
-
-Die Ausgabe best�tigt, dass das Jahr inzwischen korrekt als 1989, nicht
-1998, eingetragen ist.
-
-Vergleiche von Zeichenketten achten normalerweise nicht auf
-Gro�-/Kleinschreibung, daher k�nnen Sie den Namen als @code{"bowser"},
-@code{"BOWSER"} usw. angeben. Das Anfrageergebnis wird dasselbe bleiben.
-
-Sie k�nnen f�r jede Spalte Bedingungen festlegen, nicht nur f�r
-@code{name}. Wenn Sie zum Beispiel wissen wollen, welche Tiere nach 1998
-geboren wurden, formulieren Sie eine Bedingung f�r die
-@code{geburtstag}-Spalte:
-
-@example
-mysql> SELECT * FROM pet WHERE geburtstag >= "1998-1-1";
-+----------+----------+---------+-------------+------------+-----------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+----------+----------+---------+-------------+------------+-----------+
-| Chirpy | Gwen | Vogel | w | 1998-09-11 | NULL |
-| Puffball | Diane | Hamster | w | 1999-03-30 | NULL |
-+----------+----------+---------+-------------+------------+-----------+
-@end example
-
-Sie k�nnen Bedingungen kombinieren, um zum Beispiel weibliche Hunde
-festzustellen:
-
-@example
-mysql> SELECT * FROM pet WHERE art = "Hund" AND geschlecht = "w";
-+-------+-----------+---------+------------+------------+-----------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+-------+-----------+---------+------------+------------+-----------+
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-+-------+-----------+---------+------------+------------+-----------+
-@end example
-
-Die vorherige Anfrage benutzt den logischen Operator @code{AND}. Es gibt
-auch einen @code{OR}-Operator:
-
-@example
-mysql> SELECT * FROM pet WHERE art = "Schlange" OR art = "Vogel";
-+----------+----------+---------+-------------+------------+-----------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+----------+----------+---------+-------------+------------+-----------+
-| Chirpy | Gwen | Vogel | w | 1998-09-11 | NULL |
-| Whistler | Gwen | Vogel | NULL | 1997-12-09 | NULL |
-| Slim | Benny | Schlange| m | 1996-04-29 | NULL |
-+----------+----------+---------+-------------+------------+-----------+
-@end example
-
-@code{AND} und @code{OR} k�nnen gemischt werden. Wenn Sie das tun, ist es
-eine gute Idee, Klammern zu verwenden, um anzuzeigen, wie die Bedingungen
-gruppiert werden sollen:
-
-@example
-mysql> SELECT * FROM pet WHERE (art = "Katze" AND geschlecht = "m")
- -> OR (art = "Hund" AND geschlecht = "w");
-+-------+-----------+---------+-------------+------------+-----------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+-------+-----------+---------+-------------+------------+-----------+
-| Claws | Gwen | Katze | m | 1994-03-17 | NULL |
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-+-------+-----------+---------+-------------+------------+-----------+
-@end example
-
-
-@node Selecting columns, Sorting rows, Selecting rows, Retrieving data
-@c German node Spalten ausw�hlen
-@subsubsection Bestimmte Spalten ausw�hlen
-
-@cindex Spalten, ausw�hlen
-@cindex Tabellen, Spalten ausw�hlen
-
-Wenn Sie nicht ganze Zeilen Ihrer Tabelle sehen wollen, geben Sie einfach
-die Spalten an, an denen Sie interessiert sind, getrennt durch Kommas. Wenn
-Sie zum Beispiel wissen wollen, wann Ihre Tiere geboren wurden, w�hlen Sie
-die @code{name}- und @code{geburtstag}-Spalten aus:
-
-@example
-mysql> SELECT name, geburtstag FROM pet;
-+----------+------------+
-| name | geburtstag |
-+----------+------------+
-| Fluffy | 1993-02-04 |
-| Claws | 1994-03-17 |
-| Buffy | 1989-05-13 |
-| Fang | 1990-08-27 |
-| Bowser | 1989-08-31 |
-| Chirpy | 1998-09-11 |
-| Whistler | 1997-12-09 |
-| Slim | 1996-04-29 |
-| Puffball | 1999-03-30 |
-+----------+------------+
-@end example
-
-Um herauszufinden, wem welches Haustier geh�rt, benutzen Sie diese Anfrage:
-
-@example
-mysql> SELECT besitzer FROM pet;
-+----------+
-| besitzer |
-+----------+
-| Harold |
-| Gwen |
-| Harold |
-| Benny |
-| Diane |
-| Gwen |
-| Gwen |
-| Benny |
-| Diane |
-+----------+
-@end example
-
-@findex DISTINCT
-Beachten Sie jedoch, dass diese Anfrage einfach die @code{besitzer}-Spalte
-jedes Datensatzes abfragt, wodurch mehrere von ihnen mehrfach erscheinen.
-Um die Ausgabe zu minimieren, fragen Sie jeden eindeutigen Datensatz nur
-einmal ab, indem Sie das Schl�sselwort @code{DISTINCT} verwenden:
-
-@example
-mysql> SELECT DISTINCT besitzer FROM pet;
-+-----------+
-| besitzer |
-+-----------+
-| Benny |
-| Diane |
-| Gwen |
-| Harold |
-+-----------+
-@end example
-
-Sie k�nnen eine @code{WHERE}-Klausel verwenden, um die Auswahl von Zeilen
-mit der Auswahl von Spalten zu kombinieren. Um zum Beispiel nur die
-Geburtstage von Hunden und Katzen zu erhalten, benutzen Sie diese Anfrage:
-
-@example
-mysql> SELECT name, art, geburtstag FROM pet
- -> WHERE art = "Hund" OR art = "Katze";
-+--------+---------+------------+
-| name | art | geburtstag |
-+--------+---------+------------+
-| Fluffy | Katze | 1993-02-04 |
-| Claws | Katze | 1994-03-17 |
-| Buffy | Hund | 1989-05-13 |
-| Fang | Hund | 1990-08-27 |
-| Bowser | Hund | 1989-08-31 |
-+--------+---------+------------+
-@end example
-
-
-@node Sorting rows, Date calculations, Selecting columns, Retrieving data
-@c German node Zeilen sortieren
-@subsubsection Zeilen sortieren
-
-@cindex Zeilen, sortieren
-@cindex sortieren, Tabellenzeilen
-@cindex sortieren, Daten
-@cindex Tabellen, Zeilen sortieren
-
-Sie haben bei den vorherigen Beispielen vielleicht bemerkt, dass die
-Ergebniszeilen in keiner bestimmten Reihenfolge angezeigt werden. H�ufig
-ist es jedoch einfacher, die Ausgabe der Anfrage zu �berpr�fen, wenn die
-Zeilen auf sinnvolle Art sortiert werden. Um ein Ergebnis zu sortieren,
-benutzen Sie die @code{ORDER BY}-Klausel.
-
-Hier sind die Geburtstage der Haustiere, sortiert nach Geburtstag:
-
-@example
-mysql> SELECT name, geburtstag FROM pet ORDER BY geburtstag;
-+----------+------------+
-| name | geburtstag |
-+----------+------------+
-| Buffy | 1989-05-13 |
-| Bowser | 1989-08-31 |
-| Fang | 1990-08-27 |
-| Fluffy | 1993-02-04 |
-| Claws | 1994-03-17 |
-| Slim | 1996-04-29 |
-| Whistler | 1997-12-09 |
-| Chirpy | 1998-09-11 |
-| Puffball | 1999-03-30 |
-+----------+------------+
-@end example
-
-Um in umgekehrter Reihenfolge zu sortieren, f�gen Sie das @code{DESC}-
-(descending) Schl�sselwort zum Namen der Spalte, die Sie sortieren wollen,
-hinzu:
-
-@example
-mysql> SELECT name, geburtstag FROM pet ORDER BY geburtstag DESC;
-+----------+------------+
-| name | geburtstag |
-+----------+------------+
-| Puffball | 1999-03-30 |
-| Chirpy | 1998-09-11 |
-| Whistler | 1997-12-09 |
-| Slim | 1996-04-29 |
-| Claws | 1994-03-17 |
-| Fluffy | 1993-02-04 |
-| Fang | 1990-08-27 |
-| Bowser | 1989-08-31 |
-| Buffy | 1989-05-13 |
-+----------+------------+
-@end example
-
-Sie k�nnen �ber mehrere Spalten sortieren. Um beispielsweise zuerst nach
-der Art des Tieres und dann nach dem Geburtsdatum innerhalb der Tierart zu
-sortieren (die j�ngsten Tiere zuerst), benutzen Sie folgende Anfrage:
-
-@example
-mysql> SELECT name, art, geburtstag FROM pet ORDER BY art, geburtstag DESC;
-+----------+----------+------------+
-| name | art | geburtstag |
-+----------+----------+------------+
-| Chirpy | Vogel | 1998-09-11 |
-| Whistler | Vogel | 1997-12-09 |
-| Claws | Katze | 1994-03-17 |
-| Fluffy | Katze | 1993-02-04 |
-| Fang | Hund | 1990-08-27 |
-| Bowser | Hund | 1989-08-31 |
-| Buffy | Hund | 1989-05-13 |
-| Puffball | Hamster | 1999-03-30 |
-| Slim | Schlange | 1996-04-29 |
-+----------+----------+------------+
-@end example
-
-Beachten Sie, dass sich das @code{DESC}-Schl�sselwort nur auf die Spalte
-bezieht, die unmittelbar davor steht (@code{geburtstag}). @code{art}-Werte
-werden nach wie vor in aufsteigender Reihenfolge sortiert.
-
-
-@node Date calculations, Working with NULL, Sorting rows, Retrieving data
-@c German node Datumsberechnungen
-@subsubsection Datumsberechnungen
-
-@cindex Datumsberechnungen
-@cindex Berechnungen, Datumswerte
-@cindex Extrahieren, Datumswerte
-@cindex Alter, berechnen
-
-MySQL stellt etliche Funktionen zur Verf�gung, mit denen Sie
-Datumsberechnungen wie Altersberechnungen oder das Extrahieren von
-Datumsteilen durchf�hren k�nnen.
-
-Um festzustellen, wie alt jedes Ihrer Haustiere ist, berechnen Sie die
-Differenz im Jahresanteil des aktuellen Datums und des Geburtstags und
-subtrahieren eins, wenn das aktuelle Datum fr�her im Kalender erscheint als
-das Geburtsdatum. Folgende Anfrage zeigt f�r jedes Haustier das
-Geburtsdatum, das aktuelle Datum und das Alter in Jahren:
-
-@example
-mysql> SELECT name, geburtstag, CURRENT_DATE,
- -> (YEAR(CURRENT_DATE)-YEAR(geburtstag))
- -> - (RIGHT(CURRENT_DATE,5)<RIGHT(geburtstag,5))
- -> AS age
- -> FROM pet;
-+----------+------------+--------------+------+
-| name | geburtstag | CURRENT_DATE | age |
-+----------+------------+--------------+------+
-| Fluffy | 1993-02-04 | 2001-08-29 | 8 |
-| Claws | 1994-03-17 | 2001-08-29 | 7 |
-| Buffy | 1989-05-13 | 2001-08-29 | 12 |
-| Fang | 1990-08-27 | 2001-08-29 | 11 |
-| Bowser | 1989-08-31 | 2001-08-29 | 11 |
-| Chirpy | 1998-09-11 | 2001-08-29 | 2 |
-| Whistler | 1997-12-09 | 2001-08-29 | 3 |
-| Slim | 1996-04-29 | 2001-08-29 | 5 |
-| Puffball | 1999-03-30 | 2001-08-29 | 2 |
-+----------+------------+--------------+------+
-@end example
-
-Hier zieht @code{YEAR()} den Jahresanteil eines Datums heraus.
-@code{RIGHT()} zieht die rechts stehenden f�nf Zeichen heraus, die f�r den
-@code{MM-DD}-Teil des Datums stehen. Der Teil in dem Ausdruck, der die
-@code{MM-DD}-Werte vergleicht, wird zu 1 oder 0 ausgewertet, was die
-Jahresdifferenz ein Jahr nach unten anpasst, wenn @code{CURRENT_DATE}
-fr�her im Jahr erscheint als @code{geburtstag}. Der gesamte Ausdruck ist
-als �berschrift etwas plump, daher wir ein Alias (@code{age}) benutzt, um
-die Spalten�berschrift etwas lesbarer zu machen.
-
-Die Anfrage funktioniert, aber das Ergebnis k�nnte leichter �berblickt
-werden, wenn die Zeilen in einer bestimmten Reihenfolge angezeigt w�rden.
-Das kann man erreichen, indem man eine @code{ORDER BY name}-Klausel
-hinzuf�gt, um die Ausgabe nach Namen zu sortieren:
-
-@example
-mysql> SELECT name, geburtstag, CURRENT_DATE,
- -> (YEAR(CURRENT_DATE)-YEAR(geburtstag))
- -> - (RIGHT(CURRENT_DATE,5)<RIGHT(geburtstag,5))
- -> AS age
- -> FROM pet ORDER BY name;
-+----------+------------+--------------+------+
-| name | geburtstag | CURRENT_DATE | age |
-+----------+------------+--------------+------+
-| Bowser | 1989-08-31 | 2001-08-29 | 11 |
-| Buffy | 1989-05-13 | 2001-08-29 | 12 |
-| Chirpy | 1998-09-11 | 2001-08-29 | 2 |
-| Claws | 1994-03-17 | 2001-08-29 | 7 |
-| Fang | 1990-08-27 | 2001-08-29 | 11 |
-| Fluffy | 1993-02-04 | 2001-08-29 | 8 |
-| Puffball | 1999-03-30 | 2001-08-29 | 2 |
-| Slim | 1996-04-29 | 2001-08-29 | 5 |
-| Whistler | 1997-12-09 | 2001-08-29 | 3 |
-+----------+------------+--------------+------+
-@end example
-
-Um die Ausgabe nach Alter (@code{age}) statt nach @code{name} zu sortieren,
-benutzen Sie einfach eine andere @code{ORDER BY}-Klausel:
-
-@example
-mysql> SELECT name, geburtstag, CURRENT_DATE,
- -> (YEAR(CURRENT_DATE)-YEAR(geburtstag))
- -> - (RIGHT(CURRENT_DATE,5)<RIGHT(geburtstag,5))
- -> AS age
- -> FROM pet ORDER BY age;
-+----------+------------+--------------+------+
-| name | geburtstag | CURRENT_DATE | age |
-+----------+------------+--------------+------+
-| Chirpy | 1998-09-11 | 2001-08-29 | 2 |
-| Puffball | 1999-03-30 | 2001-08-29 | 2 |
-| Whistler | 1997-12-09 | 2001-08-29 | 3 |
-| Slim | 1996-04-29 | 2001-08-29 | 5 |
-| Claws | 1994-03-17 | 2001-08-29 | 7 |
-| Fluffy | 1993-02-04 | 2001-08-29 | 8 |
-| Fang | 1990-08-27 | 2001-08-29 | 11 |
-| Bowser | 1989-08-31 | 2001-08-29 | 11 |
-| Buffy | 1989-05-13 | 2001-08-29 | 12 |
-+----------+------------+--------------+------+
-@end example
-
-
-Eine �hnliche Anfrage kann benutzt werden, um das Alter am Sterbetag bei
-Tieren festzustellen, die gestorben sind. Das k�nnen Sie feststellen, indem
-Sie �berpr�fen, ob der @code{sterbetag}-Wert @code{NULL} ist. Dann
-berechnen Sie f�r diejenigen Tiere mit Nicht-@code{NULL}-Werten den
-Unterschied zwischen @code{sterbetag}- und @code{geburtstag}-Werten:
-
-@example
-mysql> SELECT name, geburtstag, sterbetag,
- -> (YEAR(sterbetag)-YEAR(geburtstag)) - (RIGHT(sterbetag,5)<RIGHT(geburtstag,5))
- -> AS age
- -> FROM pet WHERE sterbetag IS NOT NULL ORDER BY age;
-+--------+------------+------------+------+
-| name | geburtstag | sterbetag | age |
-+--------+------------+------------+------+
-| Bowser | 1989-08-31 | 1995-07-29 | 5 |
-+--------+------------+------------+------+
-@end example
-
-Die Anfrage benutzt @code{sterbetag IS NOT NULL} statt @code{sterbetag !=
-NULL}, weil @code{NULL} ein spezieller Wert ist. Das wird sp�ter erkl�rt.
-@xref{Working with NULL, , Mit @code{NULL}-Werten arbeiten}.
-
-Was ist, wenn Sie wissen wollen, welche Tiere n�chsten Monat Geburtstag
-haben? F�r diese Art von Berechnung sind Jahre und Tage irrelevant. Sie
-wollen lediglich den Monatsanteil der @code{geburtstag}-Spalte extrahieren.
-MySQL bietet etliche Funktionen f�r die Extraktion von Datumsanteilen, wie
-@code{YEAR()}, @code{MONTH()} und @code{DAYOFMONTH()}. @code{MONTH()} ist
-hier die richtige Funktion. Um festzustellen, wie sie funktioniert, geben
-Sie eine Anfrage ein, die sowohl die Werte von @code{geburtstag} als auch
-die von @code{MONTH(geburtstag)} ausgibt:
-
-@example
-mysql> SELECT name, geburtstag, MONTH(geburtstag) FROM pet;
-+----------+------------+-------------------+
-| name | geburtstag | MONTH(geburtstag) |
-+----------+------------+-------------------+
-| Fluffy | 1993-02-04 | 2 |
-| Claws | 1994-03-17 | 3 |
-| Buffy | 1989-05-13 | 5 |
-| Fang | 1990-08-27 | 8 |
-| Bowser | 1989-08-31 | 8 |
-| Chirpy | 1998-09-11 | 9 |
-| Whistler | 1997-12-09 | 12 |
-| Slim | 1996-04-29 | 4 |
-| Puffball | 1999-03-30 | 3 |
-+----------+------------+-------------------+
-@end example
-
-Tiere mit Geburtstagen im kommenden Monat zu finden ist ebenfalls leicht.
-Nehmen wir an, der aktuelle Monat ist April. Dann ist der Monatswert
-@code{4} und Sie suchen nach Tieren, die im Mai (Monat 5) geboren sind, wie
-folgt:
-
-@example
-mysql> SELECT name, geburtstag FROM pet WHERE MONTH(geburtstag) = 5;
-+-------+------------+
-| name | geburtstag |
-+-------+------------+
-| Buffy | 1989-05-13 |
-+-------+------------+
-@end example
-
-Ein bisschen komplizierter ist es, wenn der aktuelle Monat Dezember ist.
-Hier k�nnen Sie nicht einfach eins zur Monatszahl (@code{12}) hinzuf�gen,
-weil es keinen 13. Monat gibt. Statt dessen suchen Sie nach Tieren, die im
-Januar (Monat 1) geboren sind.
-
-Sie k�nnen die Anfrage sogar so schreiben, dass sie unabh�ngig davon
-funktioniert, was der aktuelle Monat ist. Auf diese Art brauchen Sie keine
-bestimmte Monatszahl in der Anfrage benutzen. @code{DATE_ADD()} erlaubt
-Ihnen, einem gegebenen Datum ein Zeitintervall hinzuzuf�gen. Wenn Sie dem
-Wert von @code{NOW()} einen Monat hinzuf�gen und dann den Monatsanteil mit
-@code{MONTH()} extrahieren, ergibt das den Monat, der die kommenden
-Geburtstage enth�lt:
-
-@example
-mysql> SELECT name, geburtstag FROM pet
- -> WHERE MONTH(geburtstag) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));
-@end example
-
-Eine andere M�glichkeit, diese Aufgabe zu erf�llen, ist, @code{1} zu
-addieren, um den n�chsten Monat nach dem aktuellen zu erhalten (nach
-Gebrauch der Modulo-Funktion (@code{MOD}), um den Monatswert auf @code{0}
-zu stellen, falls er aktuell @code{12}) ist:
-
-@example
-mysql> SELECT name, geburtstag FROM pet
- -> WHERE MONTH(geburtstag) = MOD(MONTH(NOW()), 12) + 1;
-@end example
-
-@code{MONTH} gibt eine Zahl zwischen 1 und 12 zur�ck.
-@code{MOD(irgendwas,12)} gibt eine Zahl zwischen 0 und 11 zur�ck. Daher
-muss die Addition nach @code{MOD()} erfolgen, weil wir ansonsten von
-November (11) bis Januar (1) gehen w�rden.
-
-
-@node Working with NULL, Pattern matching, Date calculations, Retrieving data
-@c German node Mit NULL arbeiten
-@subsubsection Mit @code{NULL}-Werten arbeiten
-
-@findex NULL
-@cindex NULL-Wert
-
-Der @code{NULL}-Wert birgt �berraschungen, bis Sie mit ihm vertraut sind.
-Konzeptionell bedeutet @code{NULL} einen fehlenden oder unbekannten Wert.
-Er wird in einiger Hinsicht anders als andere Werte behandelt. Um auf
-@code{NULL} zu testen, k�nnen Sie nicht die arithmetischen
-Vergleichoperatoren wie @code{=}, @code{<} oder @code{!=} verwenden. Um
-sich das zu veranschaulichen, probieren Sie folgenden Anfrage:
-
-@example
-mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL;
-+----------+-----------+----------+----------+
-| 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL |
-+----------+-----------+----------+----------+
-| NULL | NULL | NULL | NULL |
-+----------+-----------+----------+----------+
-@end example
-
-Wie man sieht, erh�lt man aus diesen Vergleichen keine sinnvollen
-Ergebnisse. Benutzen Sie statt dessen die @code{IS NULL}- und @code{IS NOT
-NULL}-Operatoren:
-
-@example
-mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
-+-----------+---------------+
-| 1 IS NULL | 1 IS NOT NULL |
-+-----------+---------------+
-| 0 | 1 |
-+-----------+---------------+
-@end example
-
-In MySQL bedeutet 0 oder @code{NULL} logisch Falsch und alles sonstige
-bedeutet logisch Wahr. Der vorgabem��ige Wahrheitswert einer Boolschen
-Operation ist 1.
-
-Diese besondere Behandlung von @code{NULL} ist der Grund, warum es im
-vorherigen Abschnitt notwendig war, mit @code{sterbetag IS NOT NULL}
-anstelle von @code{sterbetag != NULL} festzustellen, welche Tiere nicht
-mehr leben.
-
-
-@node Pattern matching, Counting rows, Working with NULL, Retrieving data
-@c German node Suchmuster
-@subsubsection �bereinstimmende Suchmuster
-
-@cindex �bereinstimmende Suchmuster
-@cindex �bereinstimmung, Suchmuster
-@cindex Ausdr�cke, erweitert
-
-MySQL stellt Standard-SQL-Suchmuster-�bereinstimmung zur Verf�gung, ebenso
-wie eine Art der Suchmuster-�bereinstimmung, die auf regul�ren Ausdr�cken
-basiert, die denen �hnlich sind, die von Unix-Hilfsprogrammen wie
-@code{vi}, @code{grep} und @code{sed} benutzt werden.
-
-SQL-Suchmuster-�bereinstimmung gestattet Ihnen, @samp{_} zu benutzen, um
-ein einzelnes Zeichen und @samp{%}, um eine beliebige Anzahl von Zeichen
-(inklusive des 0-Zeichens) zu finden. In den MySQL-SQL-Suchmustern spielt
-die Gro�-/Kleinschreibung vorgabem��ig keine Rolle. Einige Beispiele sind
-unten dargestellt. Beachten Sie, dass Sie @code{=} oder @code{!=} nicht
-benutzen k�nnen, wenn Sie SQL-Suchmuster benutzen. Stattdessen m�ssen Sie
-die @code{LIKE}- oder @code{NOT LIKE}-Vergleichsoperatoren benutzen.
-
-So finden Sie Namen, die mit @samp{b} anfangen:
-
-@example
-mysql> SELECT * FROM pet WHERE name LIKE "b%";
-+--------+----------+------+------------+------------+------------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+--------+----------+------+------------+------------+------------+
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-| Bowser | Diane | Hund | m | 1989-08-31 | 1995-07-29 |
-+--------+----------+------+------------+------------+------------+
-@end example
-
-So finden Sie Namen, die auf @samp{fy} enden:
-
-@example
-mysql> SELECT * FROM pet WHERE name LIKE "%fy";
-+--------+----------+-------+------------+------------+-----------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+--------+----------+-------+------------+------------+-----------+
-| Fluffy | Harold | Katze | w | 1993-02-04 | NULL |
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-+--------+----------+-------+------------+------------+-----------+
-@end example
-
-So finden Sie Namen, die @samp{w} enthalten:
-
-@example
-mysql> SELECT * FROM pet WHERE name LIKE "%w%";
-+----------+----------+---------+-------------+------------+------------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+----------+----------+---------+-------------+------------+------------+
-| Claws | Gwen | Katze | m | 1994-03-17 | NULL |
-| Bowser | Diane | Hund | m | 1989-08-31 | 1995-07-29 |
-| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
-+----------+----------+---------+-------------+------------+------------+
-@end example
-
-Um Namen zu finden, die genau f�nf Zeichen enthalten, benutzen Sie das
-@samp{_}-Suchmuster-Zeichen:
-
-@example
-mysql> SELECT * FROM pet WHERE name LIKE "_____";
-+-------+----------+---------+-------------+------------+-----------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+-------+----------+---------+-------------+------------+-----------+
-| Claws | Gwen | Katze | m | 1994-03-17 | NULL |
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-+-------+----------+---------+-------------+------------+-----------+
-@end example
-
-Die andere Art von Suchmuster-�bereinstimmung benutzt erweiterte regul�re
-Ausdr�cke. Wenn Sie bei dieser Art von Suchmuster auf �bereinstimmung
-pr�fen, benutzen Sie die @code{REGEXP}- und @code{NOT REGEXP}-Operatoren
-(oder @code{RLIKE} und @code{NOT RLIKE}, die synonym sind).
-
-Einige Charakteristika erweiterter regul�rer Ausdr�cke sind:
-
-@itemize @bullet
-@item
-@samp{.} findet jedes beliebige Zeichen.
-
-@item
-Eine Zeichenklasse @samp{[...]} findet jedes Zeichen innerhalb der
-eckigen Klammern. So stimmt zum Beispiel @samp{[abc]} mit @samp{a},
-@samp{b} oder @samp{c} �berein. Um einen Bereich von Zeichen zu benennen,
-benutzen Sie einen Bindestrich. @samp{[a-z]} stimmt mit jedem Buchstaben in
-Kleinschreibung �berein, wohingegen @samp{[0-9]} mit jeder Ziffer
-�bereinstimmt.
-
-@item
-@samp{*} stimmt mit null oder mehr Instanzen der Sache �berein, die ihm
-voransteht. @samp{x*} zum Beispiel stimmt mit einer beliebigen Anzahl von
-@samp{x}-Zeichen �berein. @samp{[0-9]*} stimmt mit einer beliebigen Anzahl
-von Ziffern �berein, und @samp{.*} mit jeder Anzahl von irgendetwas.
-
-@item
-Regul�re Ausdr�cke achten auf Gro�-/Kleinschreibung, aber Sie k�nnen eine
-Zeichenklasse benutzen, um beide Schreibungen zu finden, wenn Sie wollen.
-@samp{[aA]} zum Beispiel stimmt mit @samp{a} in Gro�- und Kleinschreibung
-�berein und @samp{[a-zA-Z]} mit jedem Buchstaben in Gro�- und
-Kleinschreibung.
-
-@item
-Das Suchmuster stimmt �berein, wenn es irgendwo in dem Wert auftaucht, der
-�berpr�ft wird. (SQL-Suchmuster stimmen nur �berein, wenn sie mit dem
-gesamten Wert �bereinstimmen.)
-
-@item
-Um ein Suchmuster so zu verankern, dass er mit dem Anfang oder dem Ende des
-�berpr�ften Werts �bereinstimmen muss, benutzen Sie @samp{^} am Anfang oder
-@samp{$} am Ende des Suchmusters.
-@end itemize
-
-Um darzustellen, wie erweiterte regul�re Ausdr�cke funktionieren, werden
-die @code{LIKE}-Anfragen von oben noch einmal mit @code{REGEXP} gezeigt.
-
-Um Namen zu finden, die mit @samp{b} anfangen, benutzen Sie @samp{^}, um
-auf �bereinstimmung am Anfang des Namens zu pr�fen:
-
-@example
-mysql> SELECT * FROM pet WHERE name REGEXP "^b";
-+--------+-----------+---------+-------------+------------+------------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+--------+-----------+---------+-------------+------------+------------+
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-| Bowser | Diane | Hund | m | 1989-08-31 | 1995-07-29 |
-+--------+-----------+---------+-------------+------------+------------+
-@end example
-
-Vor MySQL-Version 3.23.4 achtet @code{REGEXP} auf Gro�-/Kleinschreibung.
-Daher gibt diese Anfrage ein Ergebnis ohne Zeilen zur�ck. Um sowohl Gro�-
-als auch Kleinschreibung von @samp{b} zu finden, benutzen Sie statt dessen
-folgende Anfrage:
-
-@example
-mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
-@end example
-
-Ab MySQL 3.23.4 m�ssen Sie, um die Beachtung der Gro�-/Kleinschreibung in
-einem @code{REGEXP}-Vergleich zu erzwingen, das @code{BINARY}-Schl�sselwort
-verwenden, um eine der Zeichenketten zu einer bin�ren Zeichenkette zu
-machen. Diese Anfrage stimmt nur mit @samp{b} in Kleinschreibung am Anfang
-eines Namens �berein:
-
-@example
-mysql> SELECT * FROM pet WHERE name REGEXP BINARY "^b";
-@end example
-
-Um Namen zu finden, die auf @samp{fy} enden, benutzen Sie @samp{$}, um
-�bereinstimmung am Ende des Namens zu finden:
-
-@example
-mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
-+--------+-----------+---------+-------------+------------+-----------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+--------+-----------+---------+-------------+------------+-----------+
-| Fluffy | Harold | Katze | w | 1993-02-04 | NULL |
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-+--------+-----------+---------+-------------+------------+-----------+
-@end example
-
-Um Namen zu finden, die @samp{w} in Gro�- oder Kleinschreibung enthalten,
-benutzen Sie diese Anfrage:
-
-@example
-mysql> SELECT * FROM pet WHERE name REGEXP "w";
-+----------+----------+---------+-------------+------------+------------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+----------+----------+---------+-------------+------------+------------+
-| Claws | Gwen | Katze | m | 1994-03-17 | NULL |
-| Bowser | Diane | Hund | m | 1989-08-31 | 1995-07-29 |
-| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
-+----------+----------+---------+-------------+------------+------------+
-@end example
-
-Weil ein Suchmuster mit regul�ren Ausdr�cken an beliebiger Stelle im Wert
-gefunden wird, ist es bei der vorherigen Anfrage nicht notwendig, ein
-Jokerzeichen (Wildcard) auf irgendeine Seite des Suchmusters zu setzen, um
-nach �bereinstimmung im gesamten Wert zu suchen, wie es bei SQL-Suchmustern
-der Fall sein m�sste.
-
-Um Namen zu finden, die genau f�nf Zeichen enthalten, benutzen Sie @samp{^}
-und @samp{$}, um mit Anfang und Ende des Namens �bereinstimmung zu finden,
-und f�nf Instanzen von @samp{.} dazwischen:
-
-@example
-mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";
-+-------+-----------+---------+-------------+------------+-----------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+-------+-----------+---------+-------------+------------+-----------+
-| Claws | Gwen | Katze | m | 1994-03-17 | NULL |
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-+-------+-----------+---------+-------------+------------+-----------+
-@end example
-
-Sie k�nnten die vorherige Anfrage auch unter Verwendung des @samp{@{n@}}-
-``wiederhole-@code{n}-mal''-Operators schreiben:
-
-@example
-mysql> SELECT * FROM pet WHERE name REGEXP "^.@{5@}$";
-+-------+-----------+---------+-------------+------------+-----------+
-| name | besitzer | art | geschlecht | geburtstag | sterbetag |
-+-------+-----------+---------+-------------+------------+-----------+
-| Claws | Gwen | Katze | m | 1994-03-17 | NULL |
-| Buffy | Harold | Hund | w | 1989-05-13 | NULL |
-+-------+-----------+---------+-------------+------------+-----------+
-@end example
-
-
-@node Counting rows, Multiple tables, Pattern matching, Retrieving data
-@c German node Zeilen z�hlen
-@subsubsection Zeilen z�hlen
-
-@cindex Zeilen, z�hlen
-@cindex Tabellen, Zeilen z�hlen
-@cindex z�hlen, Tabellenzeilen
-
-Datenbanken werden oft benutzt, um die Frage zu beantworten, wie oft eine
-bestimmte Art von Daten in einer Tabelle erscheint. Sie wollen
-beispielsweise wissen, wie viele Haustiere Sie haben, oder wie viele
-Haustiere jeder Besitzer hat, oder Sie wollen verschiedene Arten von
-Z�hlungen Ihrer Tiere durchf�hren.
-
-Die Gesamtzahl der Tiere z�hlen, die Sie haben, ist dieselbe Frage wie
-``Wie viele Zeilen sind in der @code{pet}-Tabelle?'', denn es gibt einen
-Datensatz pro Haustier. Die @code{COUNT()}-Funktion z�hlt die Anzahl von
-Nicht-@code{NULL}-Ergebnissen, daher lautet die Anfrage, um Ihre Tiere zu
-z�hlen, wie folgt:
-
-@example
-mysql> SELECT COUNT(*) FROM pet;
-+----------+
-| COUNT(*) |
-+----------+
-| 9 |
-+----------+
-@end example
-
-Sie haben vorher schon einmal die Namen der Leute abgefragt, die Haustiere
-besitzen. Sie k�nnen @code{COUNT()} benutzen, wenn Sie herausfinden wollen,
-wie viele Tiere jeder Besitzer hat:
-
-@example
-mysql> SELECT besitzer, COUNT(*) FROM pet GROUP BY besitzer;
-+-----------+----------+
-| besitzer | COUNT(*) |
-+-----------+----------+
-| Benny | 2 |
-| Diane | 2 |
-| Gwen | 3 |
-| Harold | 2 |
-+-----------+----------+
-@end example
-
-Beachten Sie die Benutzung von @code{GROUP BY}, um alle Datens�tze f�r
-jeden @code{besitzer} zu gruppieren. Ohne das erhalten Sie eine
-Fehlermeldung:
-
-@example
-mysql> SELECT besitzer, COUNT(besitzer) FROM pet;
-ERROR 1140 at line 1: Mixing of GROUP columns (MIN(),MAX(),COUNT()...)
-with no GROUP columns is illegal if there is no GROUP BY clause
-@end example
-
-@code{COUNT()} und @code{GROUP BY} sind n�tzlich, um Ihre Daten auf
-verschiedene Weise zu charakterisieren. Die folgenden Beispiele zeigen
-verschiedene M�glichkeiten, um Z�hlungen Ihrer Tiere durchzuf�hren.
-
-Anzahl der Tiere pro Art:
-
-@example
-mysql> SELECT art, COUNT(*) FROM pet GROUP BY art;
-+---------+----------+
-| art | COUNT(*) |
-+---------+----------+
-| Vogel | 2 |
-| Katze | 2 |
-| Hund | 3 |
-| Hamster | 1 |
-| Schlange| 1 |
-+---------+----------+
-@end example
-
-Anzahl der Tiere pro Geschlecht:
-
-@example
-mysql> SELECT geschlecht, COUNT(*) FROM pet GROUP BY geschlecht;
-+-------------+----------+
-| geschlecht | COUNT(*) |
-+-------------+----------+
-| NULL | 1 |
-| w | 4 |
-| m | 4 |
-+-------------+----------+
-@end example
-
-(In dieser Ausgabe zeigt @code{NULL} an, dass das Geschlecht unbekannt
-ist.)
-
-Anzahl der Tiere pro Kombination von Art und Geschlecht:
-
-@example
-mysql> SELECT art, geschlecht, COUNT(*) FROM pet GROUP BY art, geschlecht;
-+---------+-------------+----------+
-| art | geschlecht | COUNT(*) |
-+---------+-------------+----------+
-| Vogel | NULL | 1 |
-| Vogel | w | 1 |
-| Katze | w | 1 |
-| Katze | m | 1 |
-| Hund | w | 1 |
-| Hund | m | 2 |
-| Hamster | w | 1 |
-| Schlange| m | 1 |
-+---------+-------------+----------+
-@end example
-
-Sie m�ssen nicht die gesamte Tabelle abfragen, wenn Sie @code{COUNT()}
-benutzen. Die vorherige Anfrage beispielsweise sieht lediglich f�r Hunde
-und Katzen wie folgt aus:
-
-@example
-mysql> SELECT art, geschlecht, COUNT(*) FROM pet
- -> WHERE art = "Hund" OR art = "Katze"
- -> GROUP BY art, geschlecht;
-+---------+-------------+----------+
-| art | geschlecht | COUNT(*) |
-+---------+-------------+----------+
-| Katze | w | 1 |
-| Katze | m | 1 |
-| Hund | w | 1 |
-| Hund | m | 2 |
-+---------+-------------+----------+
-@end example
-
-Oder wenn Sie die Anzahl von Tieren pro Geschlecht wissen wollen,
-beschr�nkt auf die Tiere, deren Geschlecht bekannt ist:
-
-@example
-mysql> SELECT art, geschlecht, COUNT(*) FROM pet
- -> WHERE geschlecht IS NOT NULL
- -> GROUP BY art, geschlecht;
-+---------+-------------+----------+
-| art | geschlecht | COUNT(*) |
-+---------+-------------+----------+
-| Vogel | w | 1 |
-| Katze | w | 1 |
-| Katze | m | 1 |
-| Hund | w | 1 |
-| Hund | m | 2 |
-| Hamster | w | 1 |
-| Schlange| m | 1 |
-+---------+-------------+----------+
-@end example
-
-
-@node Multiple tables, , Counting rows, Retrieving data
-@c German node Mehrere Tabellen
-@subsubsection Mehr als eine Tabelle benutzen
-
-@cindex Tabellen, mehrere
-
-In der @code{pet}-Tabelle behalten Sie die �bersicht �ber Ihre Haustiere.
-Wenn Sie weitere Informationen �ber sie aufzeichnen wollen, beispielsweise
-Ereignisse in ihrem Leben wie Besuche beim Tierarzt oder wenn Nachwuchs zur
-Welt kommt, brauchen Sie eine weitere Tabelle. Wie sollte diese aussehen?
-Sie ben�tigt:
-
-@itemize @bullet
-@item
-Den Namen des Haustiers, damit Sie wissen, auf welches Tier sich jedes
-Ereignis bezieht.
-
-@item
-Ein Datum, damit Sie wissen, wann sich das Ereignis zugetragen hat.
-
-@item
-Ein Feld, um das Ereignis zu beschreiben.
-
-@item
-Ein Feld f�r den Typ des Ereignisses, wenn Sie in der Lage sein wollen,
-Ereignisse zu kategorisieren.
-@end itemize
-
-Nach diesen Vor�berlegungen k�nnte das @code{CREATE TABLE}-Statement f�r
-die @code{ereignis}-Tabelle wie folgt aussehen:
-
-@example
-mysql> CREATE TABLE ereignis (name VARCHAR(20), datum DATE,
- -> typ VARCHAR(15), bemerkung VARCHAR(255));
-@end example
-
-Wie bei der @code{pet}-Tabelle ist es am einfachsten, die anf�nglichen
-Datens�tze mit Hilfe einer TAB-getrennten Textdatei einzuladen, die
-folgende Informationen enth�lt:
-
-@multitable @columnfractions .15 .15 .15 .55
-@item Fluffy @tab 1995-05-15 @tab Nachwuchs @tab 4 K�tzchen, 3 weiblich, 1 m�nnlich
-@item Buffy @tab 1993-06-23 @tab Nachwuchs @tab 5 H�ndchen, 2 weiblich, 3 m�nnlich
-@item Buffy @tab 1994-06-19 @tab Nachwuchs @tab 3 H�ndchen, 3 weiblich
-@item Chirpy @tab 1999-03-21 @tab Tierarzt @tab Schnabel gerade gebogen
-@item Slim @tab 1997-08-03 @tab Tierarzt @tab Gebrochene Rippe
-@item Bowser @tab 1991-10-12 @tab Zwinger
-@item Fang @tab 1991-10-12 @tab Zwinger
-@item Fang @tab 1998-08-28 @tab Geburtstag @tab Geschenk: neues Kauspielzeug
-@item Claws @tab 1998-03-17 @tab Geburtstag @tab Geschenk: neues Flohhalsband
-@item Whistler @tab 1998-12-09 @tab Geburtstag @tab Erster Geburtstag
-@end multitable
-
-Laden Sie die Datens�tze wie folgt ein:
-
-@example
-mysql> LOAD DATA LOCAL INFILE "ereignis.txt" INTO TABLE ereignis;
-@end example
-
-Auf der Grundlage dessen, was Sie durch die Abfragen der @code{pet}-Tabelle
-gelernt haben, sollten sie in der Lage sein, Abfragen der Datens�tze der
-@code{ereignis}-Tabelle durchzuf�hren, was prinzipiell dasselbe ist. Aber
-wann ist die @code{ereignis}-Tabelle allein nicht ausreichend, um Fragen zu
-beantworten, die Sie stellen k�nnten?
-
-Nehmen wir an, Sie wollen herausfinden, wie alt jedes Haustier war, als es
-Nachwuchs bekam. In der @code{ereignis}-Tabelle steht, wann das geschah,
-aber um das Alter der Mutter auszurechnen, wird ihr Geburtstag ben�tigt.
-Weil dieser in der @code{pet}-Tabelle steht, brauchen Sie f�r diese Anfrage
-beide Tabellen:
-
-@example
-mysql> SELECT pet.name, (TO_DAYS(datum) - TO_DAYS(geburtstag))/365 AS age,anmerkung
- -> FROM pet, ereignis
- -> WHERE pet.name = ereignis.name AND typ = "Nachwuchs";
-+--------+------+------------------------------------+
-| name | age | anmerkung |
-+--------+------+------------------------------------+
-| Fluffy | 2.27 | 4 k�tzchen, 3 weiblich, 1 m�nnlich |
-| Buffy | 4.12 | 5 h�ndchen, 2 weiblich, 3 m�nnlich |
-| Buffy | 5.10 | 3 h�ndchen, 3 weiblich |
-+--------+------+------------------------------------+
-@end example
-
-Zu dieser Anfrage gibt es einiges anzumerken:
-
-@itemize @bullet
-@item
-In der @code{FROM}-Klausel stehen zwei Tabellen, weil die Anfrage aus
-beiden Tabellen Informationen herausziehen muss.
-
-@item
-Wenn Sie Informationen aus mehreren Tabellen verbinden (englisch: join),
-m�ssen Sie angeben, wie Datens�tze in der einen Tabelle mit solchen in der
-anderen Tabelle in �bereinstimmung gebracht werden k�nnen. Das ist einfach,
-weil beide eine @code{name}-Spalte haben. Die Anfrage benutzt die
-@code{WHERE}-Klausel, um Datens�tze beider Tabellen basierend auf den
-@code{name}-Werten in �bereinstimmung zu bringen.
-
-@item
-Weil die @code{name}-Spalte in beiden Tabellen vorkommt, m�ssen Sie
-angeben, welche Tabelle Sie meinen, wenn Sie auf die Spalte verweisen. Das
-wird gemacht, indem dem Spaltennamen der Tabellenname voran gestellt wird.
-@end itemize
-
-Sie m�ssen nicht unbedingt zwei verschiedene Tabellen haben, um eine
-Verkn�pfung (Join) durchzuf�hren. Manchmal ist es n�tzlich, eine Tabelle
-mit sich selbst zu verkn�pfen, wenn Sie n�mlich Datens�tze in einer Tabelle
-mit Datens�tze in derselben Tabelle vergleichen wollen. Um zum Beispiel
-Zuchtpaare unter Ihren Haustieren zu finden, k�nnen Sie die
-@code{pet}-Tabelle mit sich selbst verkn�pfen, um Paare von m�nnlichen und
-weiblichen Tieren derselben Art zusammen zu bringen:
-
-@example
-mysql> SELECT p1.name, p1.geschlecht, p2.name, p2.geschlecht, p1.art
- -> FROM pet AS p1, pet AS p2
- -> WHERE p1.art = p2.art AND p1.geschlecht = "w" AND p2.geschlecht = "m";
-+--------+-------------+--------+-------------+---------+
-| name | geschlecht | name | geschlecht | art |
-+--------+-------------+--------+-------------+---------+
-| Fluffy | w | Claws | m | Katze |
-| Buffy | w | Fang | m | Hund |
-| Buffy | w | Bowser | m | Hund |
-+--------+-------------+--------+-------------+---------+
-@end example
-
-In dieser Anfrage legen wir Aliase f�r den Tabellennamen fest, um auf die
-Spalten verweisen zu k�nnen und um auseinander zu halten, auf welche
-Instanz der Tabelle sich jede Spaltenreferenz bezieht.
-
-
-@node Getting information, Examples, Database use, Tutorial
-@c German node Informationen bekommen
-@section Informationen �ber Datenbanken und Tabellen
-
-@cindex Datenbanken, Informationen �ber
-@cindex Tabellen, Informationen �ber
-@findex DESCRIBE
-
-Was ist, wenn Sie den Namen einer Datenbank oder Tabelle vergessen haben
-oder f�r eine gegebene Tabelle die Struktur nicht mehr kennen (wie zum
-Beispiel die Spalten hei�en)? MySQL l�st solcherlei Probleme mit diversen
-Statements, die Informationen �ber die Datenbanken und Tabellen
-bereitstellen, die es unterst�tzt.
-
-@code{SHOW DATABASES} kennen Sie schon. Dieses listet die Datenbanken auf,
-die vom Server verwaltet werden. Um herauszufinden, welche Datenbank
-aktuell ausgew�hlt ist, benutzen Sie die @code{DATABASE()}-Funktion:
-
-@example
-mysql> SELECT DATABASE();
-+------------+
-| DATABASE() |
-+------------+
-| menagerie |
-+------------+
-@end example
-
-Wenn Sie noch keine Datenbank ausgew�hlt haben, ist das Ergebnis leer.
-
-Um herauszufinden, welche Tabellen die aktuelle Datenbank enth�lt (wenn Sie
-sich zum Beispiel �ber den Namen einer Tabelle nicht sicher sind), benutzen
-Sie folgenden Befehl:
-
-@example
-mysql> SHOW TABLES;
-+---------------------+
-| Tables in menagerie |
-+---------------------+
-| ereignis |
-| pet |
-+---------------------+
-@end example
-
-Wenn Sie die Struktur einer Tabelle sehen wollen, ist der
-@code{DESCRIBE}-Befehl n�tzlich. Er zeigt Informationen �ber jede
-Tabellenspalte an:
-
-@example
-mysql> DESCRIBE pet;
-+------------+-------------+------+-----+---------+-------+
-| Field | Type | Null | Key | Default | Extra |
-+------------+-------------+------+-----+---------+-------+
-| name | varchar(20) | YES | | NULL | |
-| besitzer | varchar(20) | YES | | NULL | |
-| art | varchar(20) | YES | | NULL | |
-| geschlecht | char(1) | YES | | NULL | |
-| geburtstag | date | YES | | NULL | |
-| sterbetag | date | YES | | NULL | |
-+------------+-------------+------+-----+---------+-------+
-@end example
-
-@code{Field} zeigt den Spaltennamen, @code{Type} ist der Datentyp der
-Spalte, @code{Null} zeigt an, ob die Spalte @code{NULL}-Werte enthalten darf
-oder nicht, @code{Key} zeigt an, ob die Spalte indiziert ist oder nicht und
-@code{Default} legt den Vorgabewert der Spalte fest.
-
-Wenn Sie Indexe auf eine Tabelle haben, zeigt Ihnen @code{SHOW INDEX FROM
-tabelle} Informationen �ber diese an.
-
-
-@node Examples, Batch mode, Getting information, Tutorial
-@c German node Beispiele
-@section Beispiele gebr�uchlicher Anfragen (Queries)
-
-@cindex Anfragen, Beispiele
-@cindex Beispiele, Anfragen
-
-Hier finden sich Beispiele, wie gel�ufige Probleme mit MySQL gel�st werden
-k�nnen.
-
-Einige der Beispiele benutzen die Tabelle @code{shop}, die den St�ckpreis
-f�r jeden Artikel f�r bestimmte H�ndler enth�lt. Unter der Annahme, dass
-jeder H�ndler einen einzelnen fest Preis pro Artikel hat, ist
-(@code{artikel}, @code{haendler}) der Prim�rschl�ssel f�r diese Datens�tze.
-
-Starten Sie das Kommandozeilen-Werkzeug @code{mysql} und w�hlen Sie eine
-Datenbank aus:
-
-@example
-mysql ihr-datenbank-name
-@end example
-
-(Bei den meisten MySQL-Installationen k�nnen Sie die Datenbank 'test'
-ausw�hlen.)
-
-Erzeugen Sie die Beispiel-Tabelle wie folgt:
-
-@example
-CREATE TABLE shop (
- artikel INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
- haendler CHAR(20) DEFAULT '' NOT NULL,
- preis DOUBLE(16,2) DEFAULT '0.00' NOT NULL,
- PRIMARY KEY(artikel, dealer));
-
-INSERT INTO shop VALUES
-(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69),
-(3,'D',1.25),(4,'D',19.95);
-@end example
-
-Die Beispieldaten sehen jetzt so aus:
-
-@example
-mysql> SELECT * FROM shop;
-
-+---------+---------+-------+
-| artikel | haendler| preis |
-+---------+---------+-------+
-| 0001 | A | 3.45 |
-| 0001 | B | 3.99 |
-| 0002 | A | 10.99 |
-| 0003 | B | 1.45 |
-| 0003 | C | 1.69 |
-| 0003 | D | 1.25 |
-| 0004 | D | 19.95 |
-+---------+---------+-------+
-@end example
-
-
-
-@menu
-* example-Maximum-column::
-* example-Maximum-row::
-* example-Maximum-column-group::
-* example-Maximum-column-group-row::
-* example-user-variables::
-* example-Foreign keys::
-* Searching on two keys::
-* Calculating days::
-@end menu
-
-@node example-Maximum-column, example-Maximum-row, Examples, Examples
-@c German node Beispiel Maximum-Spalte
-@subsection Der h�chste Wert einer Spalte
-
-``Was ist die h�chste Artikelnummer?''
-
-@example
-SELECT MAX(artikel) AS artikel FROM shop
-
-+---------+
-| artikel |
-+---------+
-| 4 |
-+---------+
-@end example
-
-
-@node example-Maximum-row, example-Maximum-column-group, example-Maximum-column, Examples
-@c German node Beispiel Maximum-Zeile
-@subsection Die Zeile, die den h�chsten Wert einer bestimmten Spalte enth�lt
-
-``Suche Artikelnummer, H�ndler und Preis des teuersten Artikels.''
-
-In ANSI-SQL wird das mit einer Unterabfrage (Sub-Query) durchgef�hrt:
-
-@example
-SELECT artikel, haendler, preis
-FROM shop
-WHERE preis=(SELECT MAX(preis) FROM shop)
-@end example
-
-In MySQL (was noch keine Unterabfragen hat) f�hren Sie das in zwei
-Schritten durch:
-
-@enumerate
-@item
-Mit einem @code{SELECT}-Statement ermitteln Sie den h�chsten Preis in der
-Tabelle.
-@item
-Mit diesem Wert stellen Sie die aktuelle Anfrage zusammen:
-@example
-SELECT artikel, haendler, preis
-FROM shop
-WHERE preis=19.95
-@end example
-@end enumerate
-
-Eine andere L�sung besteht darin, alle Zeilen absteigend nach Preis zu
-sortieren und nur die erste Zeile zu nehmen, indem Sie die
-MySQL-spezifische @code{LIMIT}-Klausel benutzen:
-
-@example
-SELECT artikel, haendler, preis
-FROM shop
-ORDER BY preis DESC
-LIMIT 1
-@end example
-
-@strong{ACHTUNG}: Wenn es mehrere teuerste Artikel gibt (die zum Beispiel
-alle 19.95 kosten), zeigt die @code{LIMIT}-L�sung nur einen davon!
-
-
-@node example-Maximum-column-group, example-Maximum-column-group-row, example-Maximum-row, Examples
-@c German node Beispiel Maximum-Spalte-Gruppe
-@subsection H�chster Wert einer Spalte pro Gruppe
-
-``Was ist der h�chste Preis pro Artikel?''
-
-@example
-SELECT artikel, MAX(preis) AS preis
-FROM shop
-GROUP BY artikel
-
-+---------+-------+
-| artikel | preis |
-+---------+-------+
-| 0001 | 3.99 |
-| 0002 | 10.99 |
-| 0003 | 1.69 |
-| 0004 | 19.95 |
-+---------+-------+
-@end example
-
-
-@node example-Maximum-column-group-row, example-user-variables, example-Maximum-column-group, Examples
-@c German node Beispiel Maximum-Spalte-Gruppe-Zeile
-@subsection Die Zeilen, die das gruppenweise Maximum eines bestimmten Felds enthalten
-
-``Suche f�r jeden Artikel den oder die H�ndler mit den teuersten Preisen.''
-
-In ANSI-SQL w�rden Sie das wie folgt mit einer Unterabfrage erledigen:
-
-@example
-SELECT artikel, haendler, preis
-FROM shop s1
-WHERE preis=(SELECT MAX(s2.preis)
- FROM shop s2
- WHERE s1.artikel = s2.artikel);
-@end example
-
-In MySQL macht man das am besten in mehreren Schritten:
-
-@enumerate
-@item
-Die Liste (artikel,maxpreis) holen.
-@item
-F�r jeden Artikel die korrespondierenden Zeilen holen, die den h�chsten
-Preis gespeichert haben.
-@end enumerate
-
-Das kann auf einfache Weise mit einer tempor�ren Tabelle geschehen:
-
-@example
-CREATE TEMPORARY TABLE tmp (
- artikel INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
- preis DOUBLE(16,2) DEFAULT '0.00' NOT NULL);
-
-LOCK TABLES shop read;
-
-INSERT INTO tmp SELECT artikel, MAX(preis) FROM shop GROUP BY artikel;
-
-SELECT shop.artikel, haendler, shop.preis FROM shop, tmp
-WHERE shop.artikel=tmp.artikel AND shop.preis=tmp.preis;
-
-UNLOCK TABLES;
-
-DROP TABLE tmp;
-@end example
-
-Wenn Sie keine @code{TEMPORARY}-Tabelle benutzen, m�ssen Sie zus�tzlich die
-'tmp'-Tabelle sperren.
-
-``Kann das mit einer einzigen Anfrage durchgef�hrt werden?''
-
-Ja, aber nur unter Verwendung eines recht ineffizienten Tricks, den wir den
-``MAX-CONCAT-Trick'' nennen:
-
-@example
-SELECT artikel,
- SUBSTRING( MAX( CONCAT(LPAD(preis,6,'0'),haendler) ), 7) AS haendler,
- 0.00+LEFT( MAX( CONCAT(LPAD(preis,6,'0'),haendler) ), 6) AS preis
-FROM shop
-GROUP BY artikel;
-
-+---------+---------+-------+
-| artikel | haendler| preis |
-+---------+---------+-------+
-| 0001 | B | 3.99 |
-| 0002 | A | 10.99 |
-| 0003 | C | 1.69 |
-| 0004 | D | 19.95 |
-+---------+---------+-------+
-@end example
-
-Das letzte Beispiel kann etwas effizienter gemacht werden, wenn man das
-Aufteilen der verketteten Spalte im Client durchf�hrt.
-
-
-@node example-user-variables, example-Foreign keys, example-Maximum-column-group-row, Examples
-@c German node Beispiel Benutzer-Variablen
-@subsection Wie Benutzer-Variablen verwendet werden
-
-Sie k�nnen MySQL-Benutzer-Variablen verwenden, um Ergebnisse
-zwischenzuspeichern, ohne sie in tempor�re Variablen im Client speichern zu
-m�ssen.
-@xref{Variables}.
-
-Um zum Beispiel die Artikel mit dem h�chsten und dem niedrigsten Preis
-herauszufinden, k�nnen Sie folgendes machen:
-
-@example
-select @@min_preis:=min(preis),@@max_preis:=max(preis) from shop;
-select * from shop where preis=@@min_preis or preis=@@max_preis;
-
-+---------+---------+-------+
-| artikel | haendler| preis |
-+---------+---------+-------+
-| 0003 | D | 1.25 |
-| 0004 | D | 19.95 |
-+---------+---------+-------+
-@end example
-
-
-@node example-Foreign keys, Searching on two keys, example-user-variables, Examples
-@c German node Beispiel Fremdschl�ssel
-@subsection Wie Fremdschl�ssel (Foreign Keys) verwendet werden
-
-@cindex Fremdschl�ssel
-@cindex Schl�ssel, Fremdschl�ssel
-
-Sie brauchen keine Fremdschl�ssel, um zwei Tabellen zu verkn�pfen.
-
-Das einzige, was MySQL nicht durchf�hrt, ist der @code{CHECK}, um
-sicherzustellen, dass die Schl�ssel, die Sie benutzen, in der oder den
-Tabelle(n) existieren, auf die Sie verweisen, und es l�scht auch nicht
-automatisch Zeilen aus einer Tabelle mit einer Fremdschl�ssel-Definition.
-Wenn Sie Ihre Schl�ssel wie gew�hnlich benutzen, funktioniert das gut:
-
-
-@example
-CREATE TABLE personen (
- id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
- name CHAR(60) NOT NULL,
- PRIMARY KEY (id)
-);
-
-CREATE TABLE hemden (
- id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
- stil ENUM('t-shirt', 'polo', 'dress') NOT NULL,
- farbe ENUM('rot', 'blau', 'orange', 'wei�', 'schwarz') NOT NULL,
- besitzer SMALLINT UNSIGNED NOT NULL references personen,
- PRIMARY KEY (id)
-);
-
-
-INSERT INTO personen VALUES (NULL, 'Antonio Paz');
-
-INSERT INTO hemden VALUES
-(NULL, 'polo', 'blau', LAST_INSERT_ID()),
-(NULL, 'dress', 'wei�', LAST_INSERT_ID()),
-(NULL, 't-shirt', 'blau', LAST_INSERT_ID());
-
-
-INSERT INTO personen VALUES (NULL, 'Lilliana Angelovska');
-
-INSERT INTO hemden VALUES
-(NULL, 'dress', 'orange', LAST_INSERT_ID()),
-(NULL, 'polo', 'rot', LAST_INSERT_ID()),
-(NULL, 'dress', 'blau', LAST_INSERT_ID()),
-(NULL, 't-shirt', 'wei�', LAST_INSERT_ID());
-
-
-SELECT * FROM personen;
-+----+---------------------+
-| id | name |
-+----+---------------------+
-| 1 | Antonio Paz |
-| 2 | Lilliana Angelovska |
-+----+---------------------+
-
-SELECT * FROM hemden;
-+----+---------+--------+----------+
-| id | stil | farbe | besitzer |
-+----+---------+--------+----------+
-| 1 | polo | blau | 1 |
-| 2 | dress | wei� | 1 |
-| 3 | t-shirt | blau | 1 |
-| 4 | dress | orange | 2 |
-| 5 | polo | rot | 2 |
-| 6 | dress | blau | 2 |
-| 7 | t-shirt | wei� | 2 |
-+----+---------+--------+----------+
-
-
-SELECT h.* FROM personen p, hemden h
- WHERE p.name LIKE 'Lilliana%'
- AND h.besitzer = p.id
- AND h.farbe <> 'wei�';
-
-+----+-------+--------+----------+
-| id | stil | farbe | besitzer |
-+----+-------+--------+----------+
-| 4 | dress | orange | 2 |
-| 5 | polo | rot | 2 |
-| 6 | dress | blau | 2 |
-+----+-------+--------+----------+
-@end example
-
-
-@node Searching on two keys, Calculating days, example-Foreign keys, Examples
-@c German node Suche �ber zwei Schl�ssel
-@subsection �ber zwei Schl�ssel suchen
-
-@findex UNION
-@cindex Suchen, zwei Schl�ssel
-@cindex Schl�ssel, suchen �ber zwei
-MySQL optimiert derzeit noch nicht, wenn Sie �ber zwei unterschiedliche
-Schl�ssel suchen, die mit @code{OR} kombiniert werden (eine Suche mit einem
-Schl�ssel mit verschiedenen @code{OR}-Teilen wird recht gut optimiert):
-
-@example
-SELECT feld1_index, feld2_index FROM test_tabelle WHERE feld1_index = '1'
-OR feld2_index = '1'
-@end example
-
-Der Grund liegt darin, dass wir bislang noch keine Zeit hatten, hierf�r
-eine effiziente M�glichkeit zu implementieren, die das f�r allgemeine F�lle
-abhandelt. (Die @code{AND}-Handhabung ist im Vergleich jetzt komplett
-allgemein und funktioniert sehr gut.)
-
-In der Zwischenzeit k�nnen Sie dieses Problem sehr effizient l�sen, indem
-Sie eine @code{TEMPORARY}-Tabelle verwenden. Diese Art der Optimierung ist
-ebenfalls sehr gut, wenn Sie sehr komplizierte Anfragen verwenden, bei
-denen der SQL-Server die Optimierungen in falscher Reihenfolge durchf�hrt.
-
-@example
-CREATE TEMPORARY TABLE tmp
-SELECT feld1_index, feld2_index FROM test_tabelle WHERE feld1_index = '1';
-INSERT INTO tmp
-SELECT feld1_index, feld2_index FROM test_tabelle WHERE feld2_index = '1';
-SELECT * from tmp;
-DROP TABLE tmp;
-@end example
-
-Diese M�glichkeit der Anfrage ist im Endeffekt ein @code{UNION} von zwei
-Anfragen.
-
-
-@node Calculating days, , Searching on two keys, Examples
-@c German node Tage berechnen
-@subsection Besuche pro Tag berechnen
-
-@findex BIT_OR
-@findex BIT_COUNT
-@findex <<
-@cindex Bit_Funktionen, Beispiel
-
-Folgendes zeigt, wie Sie die Bit-Gruppen-Funktionen benutzen k�nnen, um die
-Anzahl der Tage pro Monat zu z�hlen, in denen ein Benutzer eine Web-Seite
-besucht hat.
-
-@example
-CREATE TABLE t1 (jahr YEAR(4), monat INT(2) UNSIGNED ZEROFILL, tag INT(2) UNSIGNED ZEROFILL);
-INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),(2000,2,23),(2000,2,23);
-
-SELECT jahr,monat,BIT_COUNT(BIT_OR(1<<tag)) AS tage FROM t1 GROUP BY jahr,monat;
-
-Das gibt folgendes Ergebnis zur�ck:
-
-+------+-------+------+
-| jahr | monat | tage |
-+------+-------+------+
-| 2000 | 01 | 3 |
-| 2000 | 02 | 2 |
-+------+-------+------+
-@end example
-
-Dies berechnet, wie viele verschiedene Tage f�r eine gegebene
-Jahr-Monats-Kombination benutzt wurden, bei automatischer Entfernung
-doppelter Eintr�ge (Duplikate).
-
-
-@node Batch mode, Twin, Examples, Tutorial
-@c German node Stapelbetrieb
-@section @code{mysql} im Stapelbetrieb (Batch Mode)
-
-@cindex Modi, Stapel
-@cindex Stapelbetrieb
-@cindex Laufenlassen, Stapelbetrieb
-@cindex Skript-Dateien
-@cindex Dateien, Skript
-
-In den vorherigen Abschnitten haben Sie @code{mysql} interaktiv benutzt, um
-Anfragen einzugeben und die Ergebnisse zu betrachten. Sie k�nnen
-@code{mysql} auch im Stapelbetrieb benutzen. Daf�r schreiben Sie dei
-Befehle, die Sie ausf�hren wollen, in eine Datei, und teilen @code{mysql}
-dann mit, seine Eingaben aus dieser Datei zu lesen:
-
-@example
-shell> mysql < stapel-datei
-@end example
-
-Wenn Sie auf der Kommandozeile Verbindungsparameter angeben m�ssen, k�nnte
-der Befehl wie folgt aussehen:
-
-@example
-shell> mysql -h host -u user -p < stapel-datei
-Enter password: ********
-@end example
-
-Wenn Sie @code{mysql} auf diese Weise benutzen, erzeugen Sie eine
-Skript-Datei und f�hren dann das Skript aus.
-
-Warum sollten Sie ein Skript benutzen? Hier sind ein paar Gr�nde:
-
-@itemize @bullet
-@item
-Wenn Sie eine Anfrage wiederholt ausf�hren (sagen wir jeden Tag oder jede
-Woche), vermeiden Sie mit einem Skript, dass Sie sie jedes Mal zur
-Ausf�hrung erneut eintippen m�ssen.
-
-@item
-Sie k�nnen aus existierenden Anfragen neue Anfragen erzeugen, die �hnlich
-sind, indem Sie die Skript-Dateien kopieren und editieren.
-
-@item
-Der Stapelbetrieb kann auch f�r die Entwicklung einer Anfrage n�tzlich
-sein, insbesondere, wenn Sie mehrzeilige Befehle oder Befehlssequenzen aus
-mehreren Statements entwickeln. Wenn Sie einen Fehler machen, m�ssen Sie
-nicht alles noch einmal tippen, sondern editieren einfach Ihr Skript, um
-den Fehler zu beheben, und weisen @code{mysql} an, es erneut auszuf�hren.
-
-@item
-Wenn Sie eine Anfrage haben, die eine gr��ere Ausgabe erzeugt, k�nnen Sie
-die Ausgabe durch einen Pager laufen lassen, statt zuzusehen, wie Sie �ber
-den Bildschirm flimmert:
-
-@example
-shell> mysql < stapel-datei | more
-@end example
-
-@item
-F�r weitere Verarbeitung k�nnen Sie die Ausgabe auch in eine Datei lenken:
-
-@example
-shell> mysql < stapel-datei > mysql.ausgabe
-@end example
-
-@item
-Sie k�nnen Ihr Skript an andere Leute verteilen, so dass auch sie die
-Befehle laufen lassen k�nnen.
-
-@item
-In einigen Situationen ist interaktive Benutzung nicht angebracht, zum
-Beispiel dann, wenn Sie eine Anfrage durch einen @code{cron}-Job ausf�hren
-lassen. In diesem Fall brauchen Sie Stapelbetrieb.
-@end itemize
-
-Das Standard-Ausgabeformat ist anders (pr�ziser), wenn Sie @code{mysql} im
-Stapelbetrieb laufen lassen, als wenn Sie es interaktiv nutzen. Die Ausgabe
-von @code{SELECT DISTINCT art FROM pet} zum Beispiel sieht so aus, wenn Sie
-sie interaktiv laufen lassen:
-
-@example
-+---------+
-| art |
-+---------+
-| Vogel |
-| Katze |
-| Hund |
-| Hamster |
-| Schlange|
-+---------+
-@end example
-
-Aber wie folgt, wenn sie im Stapelbetrieb l�uft:
-
-@example
-art
-Vogel
-Katze
-Hund
-Hamster
-Schlange
-@end example
-
-Wenn Sie im Stapelbetrieb das interaktive Ausgabeformat haben wollen,
-benutzen Sie @code{mysql -t}. Um die Befehle auszugeben, die ausgef�hrt
-werden, benutzen Sie @code{mysql -vvv}.
-
-
-@node Twin, Apache, Batch mode, Tutorial
-@c German node Twin
-@section Anfragen aus dem Zwillings-Projekt
-
-@cindex Zwillingsforschung, Anfragen
-@cindex Anfragen, Zwillingsforschungs-Projekt
-
-Bei Analytikerna und Lentus haben wir die Systeme und die Feldarbeit f�r
-ein gro�es Forschungsprojekt gemacht. Dieses Projekt ist eine
-Zusammenarbeit zwischen dem Institut f�r Umweltmedizin des Karolinska
-Institutes, Stockholm, und der Abteilung f�r klinische Forschung bei
-Altersprozessen und Psychologie der University of Southern California.
-
-Das Projekt beinhaltet einen Screening-Teil, bei dem alle Zwillinge in
-Schweden, die �lter als 65 Jahre sind, per Telefon interviewt wurden.
-Zwillinge, die bestimmte Kriterien erf�llen, werden im n�chsten Schritt
-weiter untersucht. In diesem sp�teren Stadium werden Zwillinge, die
-teilnehmen wollen, von einem Arzt-Schwester-Team besucht. Einige
-Untersuchungen beinhalten physische und neuropsychologische Untersuchungen,
-Labortests, Neuroimaging, Bewertungen des psychischen Zustands und eine
-Sammlung der Familiengeschichten. Zus�tzlich werden Daten �ber medizinische
-und umweltbedingte Risikofaktoren gesammelt.
-
-Weitere Informationen zu den Zwillingsstudien finden Sie hier:
-
-@example
-@url{http://www.imm.ki.se/TWIN/TWINGREATBRITAINW.HTM}
-@end example
-
-Der sp�tere Teil des Projekts wird mit einer Web-Schnittstelle verwaltet,
-die Perl und MySQL benutzt.
-
-Jeden Abend werden alle Daten der Interviews in eine MySQL-Datenbank
-verschoben.
-
-
-
-@menu
-* Twin pool::
-* Twin event::
-@end menu
-
-@node Twin pool, Twin event, Twin, Twin
-@c German node Twin-Pool
-@subsection Alle nicht verteilten Zwillinge finden
-
-Mit folgender Anfrage wird festgelegt, wer in den zweiten Teil des Projekts
-geht:
-
-@example
-select
- concat(p1.id, p1.tvab) + 0 as tvid,
- concat(p1.christian_name, " ", p1.surname) as Name,
- p1.postal_code as Code,
- p1.city as City,
- pg.abrev as Area,
- if(td.participation = "Aborted", "A", " ") as A,
- p1.dead as dead1,
- l.event as event1,
- td.suspect as tsuspect1,
- id.suspect as isuspect1,
- td.severe as tsevere1,
- id.severe as isevere1,
- p2.dead as dead2,
- l2.event as event2,
- h2.nurse as nurse2,
- h2.doctor as doctor2,
- td2.suspect as tsuspect2,
- id2.suspect as isuspect2,
- td2.severe as tsevere2,
- id2.severe as isevere2,
- l.finish_date
-from
- twin_project as tp
- /* For Twin 1 */
- left join twin_data as td on tp.id = td.id and tp.tvab = td.tvab
- left join informant_data as id on tp.id = id.id and tp.tvab = id.tvab
- left join harmony as h on tp.id = h.id and tp.tvab = h.tvab
- left join lentus as l on tp.id = l.id and tp.tvab = l.tvab
- /* For Twin 2 */
- left join twin_data as td2 on p2.id = td2.id and p2.tvab = td2.tvab
- left join informant_data as id2 on p2.id = id2.id and p2.tvab = id2.tvab
- left join harmony as h2 on p2.id = h2.id and p2.tvab = h2.tvab
- left join lentus as l2 on p2.id = l2.id and p2.tvab = l2.tvab,
- person_data as p1,
- person_data as p2,
- postal_groups as pg
-where
- /* p1 gets main twin and p2 gets his/her twin. */
- /* ptvab is a field inverted by tvab */
- p1.id = tp.id and p1.tvab = tp.tvab and
- p2.id = p1.id and p2.ptvab = p1.tvab and
- /* Just the sceening survey */
- tp.survey_no = 5 and
- /* Skip if partner died before 65 but allow emigration (dead=9) */
- (p2.dead = 0 or p2.dead = 9 or
- (p2.dead = 1 and
- (p2.sterbetag_date = 0 or
- (((to_days(p2.sterbetag_date) - to_days(p2.geburtstagday)) / 365)
- >= 65))))
- and
- (
- /* Twin is suspect */
- (td.future_contact = 'Yes' and td.suspect = 2) or
- /* Twin is suspect - Informant is Blessed */
- (td.future_contact = 'Yes' and td.suspect = 1 and id.suspect = 1) or
- /* No twin - Informant is Blessed */
- (ISNULL(td.suspect) and id.suspect = 1 and id.future_contact = 'Yes') or
- /* Twin broken off - Informant is Blessed */
- (td.participation = 'Aborted'
- and id.suspect = 1 and id.future_contact = 'Yes') or
- /* Twin broken off - No inform - Have partner */
- (td.participation = 'Aborted' and ISNULL(id.suspect) and p2.dead = 0))
- and
- l.event = 'Finished'
- /* Get at area code */
- and substring(p1.postal_code, 1, 2) = pg.code
- /* Not already distributed */
- and (h.nurse is NULL or h.nurse=00 or h.doctor=00)
- /* Has not refused or been aborted */
- and not (h.status = 'Refused' or h.status = 'Aborted'
- or h.status = 'Died' or h.status = 'Other')
-order by
- tvid;
-@end example
-
-Einige Erl�uterungen:
-@table @asis
-@item @code{concat(p1.id, p1.tvab) + 0 as tvid}
-Wir wollen nach den verketteten @code{id} und @code{tvab} in numerischer
-Reihenfolge sortieren. Indem wir @code{0} hinzuf�gen, bringen wir MySQL
-dazu, das Ergebnis als Zahl zu behandeln.
-@item Spalte @code{id}
-Diese identifiziert ein Zwillingspaar. Sie ist in allen Tabellen Schl�ssel.
-@item Spalte @code{tvab}
-Diese identifiziert ein Zwillingspaar. Sie hat einen Wert von @code{1} oder
-@code{2}.
-@item Spalte @code{ptvab}
-Sie ist die Umkehrung von @code{tvab}. Wenn @code{tvab} @code{1} ist, ist
-sie @code{2}, und umgekehrt. Sie ist daf�r da, MySQL die Optimierung der
-Anfrage zu erleichtern.
-@end table
-Diese Anfrage demonstriert unter anderem, wie man ein Nachschlagen (Lookup)
-in einer Tabelle von derselben Tabelle aus mit einem Join durchf�hrt
-(@code{p1} und @code{p2}). In dem Beispiel wird das dazu benutzt, um
-festzustellen, ob der Partner eines Zwillings vor Erreichen des 65.
-Lebensjahrs starb. Wenn das der Fall ist, wird die Zeile nicht
-zur�ckgegeben.
-
-Das Geschilderte existiert in allen Tabellen mit zwillingsbezogenen
-Informationen. Wir haben einen Schl�ssel auf beide @code{id,tvab} (alle
-Tabellen), und auf @code{id,ptvab} (@code{person_data}), um Anfragen
-schneller zu machen.
-
-Auf unserer Produktionsmaschine (einer 200MHz-UltraSPARC) gibt diese
-Anfrage etwa 150 bis 200 Zeilen zur�ck und ben�tigt weniger als eine
-Sekunde.
-
-Die aktuelle Anzahl von Datens�tzen in den oben benutzten Tabellen:
-@multitable @columnfractions .3 .5
-@item @strong{Tabelle} @tab @strong{Zeilen}
-@item @code{person_data} @tab 71074
-@item @code{lentus} @tab 5291
-@item @code{twin_project} @tab 5286
-@item @code{twin_data} @tab 2012
-@item @code{informant_data} @tab 663
-@item @code{harmony} @tab 381
-@item @code{postal_groups} @tab 100
-@end multitable
-
-
-@node Twin event, , Twin pool, Twin
-@c German node Twin-Ereignis
-@subsection Eine Tabelle �ber den Zustand von Zwillingspaaren zeigen
-
-Jedes Interview endet mit einem Statuscode, genannt @code{ereignis}. Die
-unten stehende Anfrage wird benutzt, um eine Tabelle �ber alle
-Zwillingspaare anzuzeigen, kombiniert mit dem Ereignis. Das zeigt an, wie
-viele Paare beider Zwillingen im Zustand beendet sind, bei wie vielen
-Paaren ein Zwilling im Zustand beendet ist, welche ein Interview abgelehnt
-haben usw.
-
-@example
-select
- t1.event,
- t2.event,
- count(*)
-from
- lentus as t1,
- lentus as t2,
- twin_project as tp
-where
- /* We are looking at one pair at a time */
- t1.id = tp.id
- and t1.tvab=tp.tvab
- and t1.id = t2.id
- /* Just the sceening survey */
- and tp.survey_no = 5
- /* This makes each pair only appear once */
- and t1.tvab='1' and t2.tvab='2'
-group by
- t1.event, t2.event;
-@end example
-
-
-@node Apache, , Twin, Tutorial
-@c German node Apache
-@section MySQL mit Apache benutzen
-
-@cindex Apache
-
-
-
-
-Der Contrib-Abschnitt beinhaltet Programme, mit denen Sie Ihre Benutzer
-durch eine MySQL-Datenbank authentifizieren k�nnen, und mit denen Sie Ihre
-Logdateien in eine MySQL-Tabelle schreiben k�nnen. @xref{Contrib}.
-
-Sie k�nnen das Log-Format von Apache so �ndern, dass es durch MySQL leicht
-gelesen werden kann, indem Sie folgendes in die Apache-Konfigurationsdatei
-schreiben:
-
-@example
-LogFormat \
- "\"%h\",%@{%Y%m%d%H%M%S@}t,%>s,\"%b\",\"%@{Content-Type@}o\", \
- \"%U\",\"%@{Referer@}i\",\"%@{User-Agent@}i\""
-@end example
-
-In MySQL k�nnen Sie dann etwas wie das hier tun:
-
-@example
-LOAD DATA INFILE '/local/access_log' INTO TABLE tabelle
-FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\'
-@end example
-
-
-@node MySQL Database Administration, MySQL Optimisation, Tutorial, Top
-@c German node MySQL-Datenbankadministration
-@chapter MySQL-Datenbankadministration
-
-
-
-@menu
-* Configuring MySQL::
-* Privilege system::
-* User Account Management::
-* Disaster Prevention::
-* Database Administration::
-* Localisation::
-* Server-Side Scripts::
-* Client-Side Scripts::
-* Log Files::
-* Replication::
-@end menu
-
-@node Configuring MySQL, Privilege system, MySQL Database Administration, MySQL Database Administration
-@c German node MySQL konfigurieren
-@section MySQL konfigurieren
-
-
-
-
-@menu
-* Command-line options::
-* Option files::
-* Installing many servers::
-* Multiple servers::
-@end menu
-
-@node Command-line options, Option files, Configuring MySQL, Configuring MySQL
-@c German node Kommandozeilenoptionen
-@subsection mysqld-Kommandozeilenoptionen
-
-@findex Kommandozeilenoptionen
-@cindex Optionen, Kommandozeile
-@cindex mysqld-Optionen
-
-@code{mysqld} akzeptiert folgende Kommandozeilenoptionen:
-
-@table @code
-@item --ansi
-ANSI-SQL-Syntax anstelle von MySQL-Syntax benutzen. @xref{ANSI mode}.
-
-@item -b, --basedir=path
-Pfad zum Installationsverzeichnis. Gew�hnlich werden alle Pfade relativ zu
-diesem aufgel�st.
-
-@item --big-tables
-gro�e Ergebnismengen zulassen, indem alle tempor�ren Mengen in eine Datei
-gesichert werden. Das l�st die meisten 'table full'-Fehler, verlangsamt
-aber in den F�llen Anfragen, in denen Tabellen im Speicher ausreichen
-w�rden. Ab Version 3.23.2 ist MySQL in der Lage, das automatisch zu l�sen,
-indem f�r kleine tempor�re Tabellen der Arbeitsspeicher benutzt wird und
-auf Festplatten-Tabellen umgeschaltet wird, wenn das n�tig ist.
-
-@item --bind-address=IP
-IP-Adresse zum Anbinden (bind).
-
-@item --character-sets-dir=path
-Verzeichnis, wo Zeichens�tze sind. @xref{Character sets}.
-
-@item --chroot=path
-Chroot den @code{mysqld}-Daemon beim Start. Empfohlene
-Sicherheitsma�nahme. Wird allerdings @code{LOAD DATA INFILE} und
-@code{SELECT ... INTO OUTFILE} etwas einschr�nken.
-
-@item --core-file
-Schreibt eine Core-Datei, wenn @code{mysqld} stirbt. Auf manchen Systemen
-m�ssen Sie zus�tzliche @code{--core-file-size} f�r @code{safe_mysqld}
-angeben. @xref{safe_mysqld, ,@code{safe_mysqld}}.
-
-@item -h, --datadir=path
-Pfad zum Datenbank-Wurzelverzeichnis.
-
-@item --default-character-set=charset
-Setzt den vorgabem��igen Zeichensatz. @xref{Character sets}.
-
-@item --default-table-type=type
-Setzt den vorgabem��igen Tabellentyp f�r Tabellen. @xref{Table types}.
-
-@item --debug[...]=
-Wenn MySQL mit @code{--with-debug} konfiguriert ist, k�nnen Sie diese
-Option benutzen, um eine Trace-Datei dar�ber zu erhalten, was @code{mysqld}
-tut. @xref{Making trace files}.
-
-@item --delay-key-write-for-all-tables
-Schl�sselpuffer (Key Buffer) f�r jegliche @code{MyISAM}-Tabellen nicht
-leeren (flush).
-@xref{Server parameters}.
-
-@item --enable-locking
-System-Sperren einschalten. Beachten Sie, dass Sie bei der Benutzung dieser
-Option auf Systemen, die kein voll funktionsf�higes lockd() besitzen (wie
-Linux), mysqld leicht zum Deadlock bringen k�nnen.
-
-@item -T, --exit-info
-Eine Bit-Maske verschiedener Flags, mit denen man den mysqld-Server
-debuggen kann. Man sollte diese Option nicht benutzen, wenn man nicht ganz
-genau wei�, was sie tut!
-
-@item --flush
-Alle �nderungen nach jedem SQL-Befehl auf Platte zur�ckschreiben (flush).
-Normalerweise schreibt MySQL alle �nderungen nach jedem SQL-Befehl auf
-Platte und l��t das Betriebssystem sich um das Synchronisieren auf Platte
-k�mmern.
-@xref{Crashing}.
-
-@item -?, --help
-Kurze Hilfe ausgeben und beenden.
-
-@item --init-file=file
-Beim Start SQL-Befehle aus dieser Datei lesen.
-
-@item -L, --language=...
-Client-Fehlermeldungen in der angegebenen Sprache. Kann als voller Pfad
-angegeben werden. @xref{Languages}.
-
-@item -l, --log[=datei]
-Loggt Verbindungen und Anfragen in datei. @xref{Query log}.
-
-@item --log-isam[=datei]
-Loggt alle ISAM- / MyISAM-�nderungen in datei (wird nur benutzt, um ISAM /
-MyISAM zu debuggen).
-
-@item --log-slow-queries[=datei]
-Loggt alle Anfragen, die l�nger als @code{long_query_time} Sekunden f�r die
-Ausf�hrung ben�tigt haben, in datei. @xref{Slow query log}.
-
-@item --log-update[=datei]
-Loggt Updates in @code{datei.#}, wobei @code{#} eine eindeutige Zahl ist,
-falls nicht vorgegeben.
-@xref{Update log}.
-
-@item --log-long-format
-Loggt einige zus�tzliche Informationen ins Update-Log. Wenn Sie
-@code{--log-slow-queries} benutzen, werden Anfragen, die keine Indexe
-benutzen, in die Langsame-Anfragen-Log-Datei geloggt.
-
-@item --low-priority-updates
-Operationen, die Tabellen �ndern
-(@code{INSERT}/@code{DELETE}/@code{UPDATE}), haben geringere Priorit�t als
-Selects. Das kann auch mit @code{@{INSERT | REPLACE | UPDATE | DELETE@}
-LOW_PRIORITY ...} durchgef�hrt werden, um lediglich die Priorit�t einer
-einzelnen Anfrage zu verringern, oder mit @code{SET OPTION
-SQL_LOW_PRIORITY_UPDATES=1}, um die Priorit�t in einem Thread zu �ndern.
-@xref{Table locking}.
-
-@item --memlock
-Sperrt den @code{mysqld}-Prozess in den Arbeitsspeicher. Das funktioniert
-nur, wenn Ihr System den @code{mlockall()}-Systemaufruf versteht (wie
-Solaris). Das kann helfen, wenn Sie Probleme damit haben, dass Ihr
-Betriebssystem @code{mysqld} veranlasst, auf Platte zu swappen.
-
-@item --myisam-recover [=option[,option...]]], wobei option eine
-Kombination von @code{DEFAULT}, @code{BACKUP}, @code{FORCE} oder
-@code{QUICK} ist. Sie k�nnen sie auch explizit auf @code{""} setzen, wenn
-Sie diese Option ausschalten wollen. Wenn die Option benutzt wird,
-�berpr�ft @code{mysqld} beim �ffnen, ob die Tabelle als zerst�rt markiert
-ist oder ob die Tabelle nicht ordnungsgem�� geschlossen wurde. (Die letzte
-Option funktioniert nur, wenn Sie mysqld mit @code{--skip-locking} laufen
-lassen). Wenn das der Fall ist, l��t @code{mysqld} eine �berpr�fung der
-Tabelle laufen. Wenn die Tabelle besch�digt war, versucht @code{mysqld},
-sie zu reparieren.
-
-Folgende Optionen beeinflussen, wie repair funktioniert.
-
-@multitable @columnfractions .3 .7
-@item DEFAULT @tab Dasselbe, als w�rde man f�r @code{--myisam-recover}
- keine Option angeben.
-@item BACKUP @tab Wenn die Tabelle w�hrend der Wiederherstellung ge�ndert
- wurde, eine Datensicherung der @file{tabelle.MYD}-Datendatei als
- @file{tabelle-datetime.BAK} speichern.
-@item FORCE @tab Eine Wiederherstellung selbst dann laufen lassen, wenn
- man mehr als eine Zeile aus der .MYD-Datei verlieren wird.
-@item QUICK @tab Die Zeilen der Tabelle nicht �berpr�fen, wenn es keine
- gel�schten Blocks gibt.
-@end multitable
-
-Bevor eine Tabelle automatisch repariert wird, f�gt MySQL dar�ber eine
-Bemerkung in das Fehler-Log. Wenn Sie in der Lage sein wollen, die meisten
-Sachen ohne Benutzer-Intervention zu beheben, sollten Sie die Optionen
-@code{BACKUP,FORCE} benutzen. Das erzwingt ein Reparieren einer Tabelle,
-selbst wenn dabei einige Zeilen gel�scht w�rden, erh�lt aber die alte
-Datendatei als Datensicherung, so dass Sie sp�ter herausfinden k�nnen, was
-passiert ist.
-
-@item --pid-file=pfad
-Pfad zur pid-Datei, die von @code{safe_mysqld} benutzt wird.
-
-@item -P, --port=...
-Port-Nummer, um auf TCP/IP-Verbindungen zu warten (listen).
-
-@item -o, --old-protocol
-Das 3.20-Protokoll f�r Kompatibilit�t mit einigen sehr alten Clients
-benutzen.
-
-@item --one-thread
-Nur einen Thread benutzen (zum Debuggen unter Linux). @xref{Debugging server}.
-
-@item -O, --set-variable var=option
-Weist einer Variablen einen Wert zu. @code{--help} listet Variablen auf.
-Sie finden eine komplette Beschreibung aller Variablen im @code{SHOW
-VARIABLES}-Abschnitt dieses Handbuchs. @xref{SHOW VARIABLES}. Der Abschnitt
-�ber das Tunen der Serverparameter enth�lt Informationen dar�ber, wie man
-diese optimiert. @xref{Server parameters}.
-
-@item --safe-mode
-Einige Optimierungsschritte �berspringen. Setzt
-@code{--skip-delay-key-write} voraus.
-
-@item --safe-show-database
-Keine Datenbanken anzeigen, f�r die der Benutzer keine Zugriffsrechte hat.
-
-@item --safe-user-create
-Wenn das angeschaltet ist, kann ein Benutzer keine neuen Benutzer mit dem
-GRANT-Befehl anlegen, wenn der Benutzer kein @code{INSERT}-Zugriffsrecht
-auf die @code{mysql.user}-Tabelle oder irgend welche Spalten dieser Tabelle
-hat.
-
-@item --skip-concurrent-insert
-Die F�higkeit abschalten, gleichzeitig auf @code{MyISAM}-Tabellen
-auszuw�hlen (select) und einzuf�gen (insert). (Sollte nur benutzt werden,
-wenn Sie der Meinung sind, ein Bug in diesem Feature gefunden zu haben.)
-
-@item --skip-delay-key-write
-Die @code{delay_key_write}-Option f�r alle Tabellen ignorieren.
-@xref{Server parameters}.
-
-@item --skip-grant-tables
-Diese Option veranlasst den Server, das Zugriffsrechte-System �berhaupt
-nicht zu benutzen. Das gibt jedem @emph{vollen Zugriff} auf alle
-Datenbanken! (Einen laufenden Server k�nnen Sie anweisen, die
-Berechtigungstabellen erneut zu verwenden, indem Sie @code{mysqladmin
-flush-privileges} oder @code{mysqladmin reload} ausf�hren.)
-
-@item --skip-host-cache
-Nie den Host-Name-Cache f�r schnellere Name-IP-Aufl�sung benutzen, sondern
-statt dessen bei jeder Verbindung beim DNS-Server anfragen. @xref{DNS}.
-
-@item --skip-locking
-System-Sperren nicht benutzen. Um @code{isamchk} oder @code{myisamchk}
-auszuf�hren, m�ssen Sie den Server herunter fahren. @xref{Stability}.
-Beachten Sie, dass Sie in MySQL-Version 3.23 @code{REPAIR} und @code{CHECK}
-benutzen k�nnen, um @code{MyISAM}-Tabellen zu reparieren / zu pr�fen.
-
-@item --skip-name-resolve
-Hostnamen werden nicht aufgel�st. Alle @code{Host}-Spaltenwerte in den
-Berechtigungstabellen m�ssen IP-Nummern oder @code{localhost} sein.
-@xref{DNS}.
-
-@item --skip-networking
-Auf �berhaupt keine TCP/IP-Verbindungen warten (listen). Jede Interaktion
-mit @code{mysqld} muss �ber Unix-Sockets erfolgen. Diese Option wird
-ausdr�cklich empfohlen f�r Systeme, auf denen nur lokale Anfragen
-(Requests) erlaubt sind. @xref{DNS}.
-
-@item --skip-new
-Keine neuen, m�glicherweise falschen Routinen benutzen. Setzt
-@code{--skip-delay-key-write} voraus. Setzt ausserdem den vorgabem��igen
-Tabellentyp auf @code{ISAM}. @xref{ISAM}.
-
-@item --skip-symlink
-Keine Dateien l�schen oder umbenennen, auf die eine mit Symlink verkn�pfte
-Datei im Daten-Verzeichnis zeigt.
-
-@item --skip-safemalloc
-Wenn MySQL mit @code{--with-debug=full} konfiguriert wird, �berpr�fen alle
-Programme den Arbeitsspeicher auf �berlauf, bei jeder Speicher-Allokation
-und -Freigabe. Da dieses Pr�fen sehr langsam ist, k�nnen Sie es vermeiden,
-wenn Sie keine Arbeitsspeicherpr�fung ben�tigten, indem Sie diese Option
-benutzen.
-
-@item --skip-show-database
-Keine 'SHOW DATABASE'-Befehle zulassen, wenn der Benutzer keine
-@strong{process}-Berechtigung hat.
-
-@item --skip-stack-trace
-Keine Stack-Traces schreiben. Diese Option ist n�tzlich, wenn Sie
-@code{mysqld} unter einem Debugger laufen lassen. @xref{Debugging server}.
-
-@item --skip-thread-priority
-Benutzung von Thread-Priorit�ten abschalten, um schnellere Antwortzeiten zu
-erzielen.
-
-@item --socket=pfad
-Socket-Datei, die anstelle des vorgabem��igen @code{/tmp/mysql.sock} f�r
-lokale Verbindungen benutzt wird.
-
-@item --sql-mode=option[,option[,option...]]
-Option kann jede beliebige Kombination von @code{REAL_AS_FLOAT},
-@code{PIPES_AS_CONCAT}, @code{ANSI_QUOTES}, @code{IGNORE_SPACE},
-@code{SERIALIZE} und @code{ONLY_FULL_GROUP_BY} sein. Sie kann auch leer
-sein (@code{""}), wenn Sie dies zur�cksetzen wollen.
-
-Alle oben angegebenen Optionen festlegen ist dasselbe wie --ansi benutzen.
-Mit dieser Option kann man nur ben�tigte SQL-Modi anschalten.
-@xref{ANSI mode}.
-
-@item transaction-isolation= @{ READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE @}
-Setzt das vorgabem��ige Transaktions-Isolations-Level.
-@c German FIX unsplit @xref
-@xref{SET TRANSACTION}.
-
-@item -t, --tmpdir=pfad
-Pfad f�r tempor�re Dateien. Es kann n�tzlich sein, wenn Ihr vorgabem��iges
-@code{/tmp}-Verzeichnis auf einer Partition liegt, die zu klein ist, um
-tempor�re Tabellen zu speichern.
-
-@item -u, --user=benutzername
-Den @code{mysqld}-Daemon unter dem Benutzer @code{benutzername} laufen
-lassen. Diese Option ist @emph{zwingend notwendig}, wenn @code{mysqld} als
-Root gestartet wird.
-
-@item -V, --version
-Versionsinformationen ausgeben und beenden.
-
-@item -W, --warnings
-Warnmeldungen wie @code{Aborted connection...} in die @code{.err}-Datei
-ausgeben. @xref{Communication errors}.
-@end table
-
-
-@node Option files, Installing many servers, Command-line options, Configuring MySQL
-@c German node Optionsdateien
-@subsection my.cnf-Optionsdateien
-
-@cindex Vorgabem��ige Optionen
-@cindex Optionsdateien
-@cindex Erzeugen, vorgabem��ige Startoptionen
-@cindex Startoptionen, vorgabem��ige
-
-Seit Version 3.22 kann MySQL vorgabem��ige Startoptionen f�r den Server
-und f�r Clients aus Optionsdateien lesen.
-
-MySQL liest Vorgabeoptionen aus folgenden Dateien unter Unix:
-
-@tindex .my.cnf-Datei
-@multitable @columnfractions .3 .7
-@item @strong{Dateiname} @tab @strong{Zweck}
-@item @code{/etc/my.cnf} @tab Globale Optionen
-@item @code{DATADIR/my.cnf} @tab Server-spezifische Optionen
-@item @code{defaults-extra-file} @tab Die Datei, die mit --defaults-extra-file=# festgelegt wird
-@item @code{~/.my.cnf} @tab Benutzerspezifische Optionen
-@end multitable
-
-@code{DATADIR} ist das MySQL-Daten-Verzeichnis (typischerweise
-@file{/usr/local/mysql/data} bei einer Bin�rinstallation oder
-@file{/usr/local/var} bei einer Quellinstallation). Beachten Sie, dass das
-das Verzeichnis ist, das zur Konfigurationszeit festgelegt wurde, nicht
-das, das mit @code{--datadir} festgelegt wird, wenn @code{mysqld} startet!
-(@code{--datadir} hat keinen Einfluss darauf, wo der Server nach
-Optionsdateien sucht, denn er sucht nach ihnen, bevor er irgend welche
-Kommandozeilenargumente verarbeitet.)
-
-MySQL liest Vorgabeoptionen aus folgenden Dateien unter Windows:
-
-@multitable @columnfractions .3 .7
-@item @strong{Dateiname} @tab @strong{Zweck}
-@item @code{Windows-System-Verzeichnis\my.ini} @tab Globale Optionen
-@item @code{C:\my.cnf} @tab Globale Optionen
-@item @code{C:\mysql\data\my.cnf} @tab Server-spezifische Optionen
-@end multitable
-
-Beachten Sie, dass Sie unter Windows alle Pfade mit @code{/} statt mit
-@code{\} angeben sollten. Wenn Sie @code{\} benutzen, m�ssen Sie das
-doppelt (@code{\\}) tun, weil @code{\} in MySQL das Fluchtzeichen
-(Escape-Character) ist.
-
-@cindex Umgebungsvariablen
-MySQL versucht, Optionsdateien in der oben angegebenen Reihenfolge zu
-lesen. Wenn es mehrere Optionsdateien gibt, erlangt eine Option, die in
-einer Datei festgelegt wird, die sp�ter gelesen wird, Vorrang �ber dieselbe
-Option, die in einer sonstigen Optionsdatei festgelegt wurde. Optionen, die
-auf der Kommandozeile festgelegt werden, erlangen Vorrang vor Optionen in
-jeglichen Optionsdateien. Einige Optionen k�nnen durch Umgebungsvariablen
-festgelegt werden. Optionen, die auf der Kommandozeile oder in
-Optionsdateien festgelegt werden, haben Vorrang vor Werten in
-Umgebungsvariablen. @xref{Environment variables}.
-Folgende Programme unterst�tzen Optionsdateien: @code{mysql},
-@code{mysqladmin}, @code{mysqld}, @code{mysqldump}, @code{mysqlimport},
-@code{mysql.server}, @code{myisamchk} und @code{myisampack}.
-
-Sie k�nnen Optionsdateien benutzen, um jede beliebig lange Option
-festzulegen, die ein Programm unterst�tzt! Starten Sie das Programm mit
-@code{--help}, um eine Liste der verf�gbaren Optionen zu erhalten.
-
-Eine Optionsdatei kann Zeilen der folgenden Formate enthalten:
-
-@table @code
-@item #Kommentar
-Kommentarzeilen fangen mit @samp{#} oder @samp{;} an. Leere Zeilen werden
-ignoriert.
-
-@item [group]
-@code{group} ist der Name des Programms oder der Gruppe, f�r das oder die
-Sie Optionen setzen wollen. Nach einer Gruppen-Zeile beziehen sich alle
-@code{option}- oder @code{set-variable}-Zeilen auf die benannte Gruppe, bis
-zum Ende der Optionsdatei oder bis eine andere Gruppe angegeben wird.
-
-@item option
-Das ist �quivalent zu @code{--option} auf der Kommandozeile.
-
-@item option=value
-Das ist �quivalent zu @code{--option=value} auf der Kommandozeile.
-
-@item set-variable = variable=value
-Das ist �quivalent zu @code{--set-variable variable=value} auf der Kommandozeile.
-Diese Syntax muss verwendet werden, um eine @code{mysqld}-Variable zu
-setzen.
-@end table
-
-Die @code{client}-Gruppe gestattet Ihnen, Optionen anzugeben, die sich auf
-alle MySQL-Clients (nicht auf @code{mysqld}) beziehen. Diese Gruppe eignet
-sich bestens daf�r, das Passwort festzulegen, das Sie benutzen, um sich mit
-dem Server zu verbinden. (Stellen Sie jedoch sicher, dass die Optionsdatei
-nur f�r Sie les- und schreibbar ist.)
-
-Beachten Sie, dass bei Optionen und Werten alle f�hrenden Leerzeichen und
-solche am Zeilenende automatisch entfernt werden. Sie k�nnen in der
-Zeichenkette f�r den Wert die Escape-Sequenzen @samp{\b}, @samp{\t},
-@samp{\n}, @samp{\r}, @samp{\\} und @samp{\s} benutzen (@samp{\s} ist das
-Leerzeichen).
-
-Hier ist eine typische globale Optionsdatei:
-
-@example
-[client]
-port=3306
-socket=/tmp/mysql.sock
-
-[mysqld]
-port=3306
-socket=/tmp/mysql.sock
-set-variable = key_buffer_size=16M
-set-variable = max_allowed_packet=1M
-
-[mysqldump]
-quick
-@end example
-
-Hier ist eine typische Benutzer-Optionsdatei:
-
-@example
-[client]
-# Folgendes Passwort wird an alle Standard-MySQL-Clients geschickt:
-password=mein_password
-
-[mysql]
-no-auto-rehash
-set-variable = connect_timeout=2
-
-[mysqlhotcopy]
-interactive-timeout
-
-@end example
-
-@tindex .my.cnf Datei
-Wenn Sie eine Quelldistribution haben, finden Sie Beispielkonfigurationen
-in den Dateien mit Namen @file{my-xxxx.cnf} im
-@file{Support-files}-Verzeichnis. Wenn Sie eine Bin�rdistribution haben,
-suchen Sie im @file{DIR/support-files}-Verzeichnis, wobei @code{DIR} der
-Pfadname zum MySQL-Installationsverzeichnis ist (typischerweise
-@file{/usr/local/mysql}). Aktuell finden Sie dort beispielhafte
-Konfigurationsdateien f�r kleine, mittlere, gro�e und sehr gro�e Systeme.
-Sie k�nnen @file{my-xxxx.cnf} in Ihr Heimatverzeichnis kopieren, um damit
-zu experimentieren (benennen Sie die Kopie in @file{.my.cnf} um).
-
-Alle MySQL-Clients, die Optionsdateien unterst�tzen, unterst�tzen folgende
-Optionen:
-
-@multitable @columnfractions .40 .60
-@item --no-defaults @tab Keine Optionsdateien einlesen.
-@item --print-defaults @tab Den Programmnamen und alle Optionen, die das Programm erhalten wird, ausgeben.
-@item --defaults-file=voller-pfad-zur-vorgabe-datei @tab Nur die angegebene Konfigurationsdatei benutzen.
-@item --defaults-extra-file=voller-pfad-zur-vorgabe-datei @tab Diese Konfigurationsdatei nach der globalen Konfigurationsdatei einlesen, aber vor der Benutzer-Konfigurationsdatei.
-@end multitable
-
-Beachten Sie, dass die oben aufgef�hrten Optionen auf der Kommandozeile
-zuerst angegeben werden m�ssen, damit sie funktionieren!
-@code{--print-defaults} kann jedoch direkt nach den
-@code{--defaults-xxx-file}-Befehlen angegeben werden.
-
-Hinweis f�r Entwickler: Optionsdatei-Handhabung ist schlicht dadurch
-implementiert, dass alle �bereinstimmenden Optionen verarbeitet werden
-(das hei�t, Optionen in der entsprechenden Gruppe), vor jeglichen
-Kommandozeilen-Argumenten. Das funktioniert sehr gut bei Programmen, die
-die letzte Instanz einer Option benutzen, die mehrfach festgelegt wurde.
-Wenn Sie ein altes Programm benutzen, das mehrfach festgelegte Optionen auf
-diese Art handhabt, aber keine Optionsdateien liest, m�ssen Sie nur zwei
-Zeilen hinzuf�gen, um diese F�higkeit hinzuzuf�gen. Sehen Sie im Quellcode
-irgend eines Standard-MySQL-Clients nach, wie das gemacht wird.
-
-In Shellskripts k�nnen Sie den @file{my_print_defaults}-Befehl benutzen, um
-die Konfigurationsdateien zu parsen:
-
-@example
-
-shell> my_print_defaults client mysql
---port=3306
---socket=/tmp/mysql.sock
---no-auto-rehash
-@end example
-
-Die Ausgabe enth�lt alle Optionen f�r die Gruppen 'client' und 'mysql'.
-
-
-@node Installing many servers, Multiple servers, Option files, Configuring MySQL
-@c German node Viele Server installieren
-@subsection Viele Server auf derselben Maschine installieren
-
-@cindex Nach der Installation, mehrere Server
-@cindex Mehrere Server installieren
-@cindex Mehrere Server starten
-
-In einigen F�llen brauchen Sie vielleicht viele verschiedene
-@code{mysqld}-Daemons (Server), die auf derselben Maschine laufen.
-Beispielsweise wollen Sie eine neue MySQL-Version zum Testen benutzen,
-w�hrend gleichzeitig eine alte Version f�r die Produktion l�uft, oder Sie
-wollen verschiedenen Benutzern Zugriff auf verschiedene
-@code{mysqld}-Server geben, die sie selbst verwalten.
-
-Eine M�glichkeit, einen neuen Server laufen zu lassen, besteht darin, ihn
-mit einem anderen Socket und einem anderen Port wie folgt zu starten:
-
-@tindex @code{MYSQL_UNIX_PORT}-Umgebungsvariable
-@tindex @code{MYSQL_TCP_PORT}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_UNIX_PORT}
-@tindex Umgebungsvariable, @code{MYSQL_TCP_PORT}
-@example
-shell> MYSQL_UNIX_PORT=/tmp/mysqld-neu.sock
-shell> MYSQL_TCP_PORT=3307
-shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
-shell> scripts/mysql_install_db
-shell> bin/safe_mysqld &
-@end example
-
-Der Umgebungsvariablen-Appendix beinhaltet eine Liste anderer
-Umgebungsvariablen, die Sie benutzen k�nnen, um @code{mysqld} zu steuern.
-@xref{Environment variables}.
-
-Der oben gezeigte Weg ist die 'schnelle und schmutzige' L�sung, die man
-�blicherweise zum Testen benutzt. Das nette daran ist, dass alle
-Verbindungen, die Sie in obiger Shell aufbauen, automatisch an den neuen
-laufenden Server weiter geleitet werden!
-
-Wenn Sie dasselbe dauerhafter durchf�hren wollen, sollten Sie f�r jeden
-Server eine Optionsdatei erzeugen. @xref{Option files}. In Ihrem
-Startskript, das beim Hochfahren ausgef�hrt wird (mysql.server?) sollten
-Sie f�r beide Server folgendes festlegen:
-
-@code{safe_mysqld --default-file=pfad-zur-optionsdatei}
-
-Zumindest folgende Optionen sollten f�r jeden Server unterschiedlich sein:
-
-@table @code
-@item port=#
-@item socket=pfad
-@item pid-file=pfad
-@end table
-
-Folgende Optionen sollten unterschiedlich sein, wenn sie benutzt werden:
-
-@table @code
-@item log=pfad
-@item log-bin=pfad
-@item log-update=pfad
-@item log-isam=pfad
-@item bdb-logdir=pfad
-@end table
-
-Wenn Sie mehr Performance erreichen wollen, k�nnen Sie auch folgendes
-unterschiedlich festlegen:
-
-@table @code
-@item tmpdir=pfad
-@item bdb-tmpdir=pfad
-@end table
-
-@xref{Command-line options}.
-
-Wenn Sie bin�re MySQL-Versionen installieren (.tar-Dateien) und sie mit
-@code{./bin/safe_mysqld} starten, m�ssen Sie in den meisten F�llen
-lediglich die @code{socket}- und @code{port}-Argumente in
-@code{safe_mysqld} hinzuf�gen / �ndern.
-
-
-
-
-@node Multiple servers, , Installing many servers, Configuring MySQL
-@c German node Mehrere Server
-@subsection Viele MySQL-Server auf derselben Maschine laufen lassen
-
-@cindex Mehrere Server
-@cindex Servers, mehrere
-@cindex Laufen lassen, mehrere Server
-
-Unter bestimmten Umst�nden wollen Sie vielleicht mehrere Server auf
-derselben Maschine laufen lassen. Beispielsweise wollen Sie ein neues
-MySQL-Release testen, Ihre bestehende Produktionseinrichtung aber
-unangetastet lassen. Oder Sie sind ein Internet-Service-Provider, der
-unabh�ngige MySQL-Installationen f�r verschiedene Kunden hat.
-
-Wenn Sie mehrere Server laufen lassen wollen, ist es am einfachsten, die
-Server mit unterschiedlichen TCP/IP-Ports und Socket-Dateien laufen zu
-lassen, damit sie nicht beide auf demselben TCP/IP-Port oder derselben
-Socket-Datei auf Verbindungen warten. @xref{mysqld_multi, ,
-@code{mysqld_multi}}.
-
-Nehmen wir einen existierenden Server an, der auf die existierende
-Port-Nummer und Socket-Datei konfiguriert ist. Sie konfigurieren einen
-neuen Server mit einem @code{configure}-Befehl, etwa wie folgt:
-
-@example
-shell> ./configure --with-tcp-port=port_nummer \
- --with-unix-socket-path=datei \
- --prefix=/usr/local/mysql-3.22.9
-@end example
-
-Hier m�ssen @code{port_nummer} und @code{datei} anders als die
-vorgabem��igen Werte sein. Der @code{--prefix}-Wert sollte ein
-Installationsverzeichnis festlegen, das anders ist als dasjenige, unter dem
-die existierende MySQL-Installation liegt.
-
-Sie k�nnen den Socket, der vom aktuell laufenden MySQL-Server benutzt wird,
-mit folgendem Befehl feststellen:
-
-@example
-shell> mysqladmin -h hostname --port=port_nummer variables
-@end example
-
-Wenn Sie ``@code{localhost}'' als Hostnamen festlegen, benutzt
-@code{mysqladmin} Unix-Sockets anstelle von TCP/IP.
-
-Wenn Sie einen MySQL-Server auf dem Port laufen haben, den Sie benutzt
-haben, bekommen Sie eine Liste der wichtigsten konfigurierbaren Variablen
-in MySQL, inklusive des Socketnamens.
-
-Sie m�ssen keinen neuen MySQL-Server kompilieren, nur um ihn mit einem
-anderen Port und Socket zu starten. Sie k�nnen Port und Socket zur Laufzeit
-als Optionen von @code{safe_mysqld} festlegen:
-
-@example
-shell> /pfad/zu/safe_mysqld --socket=datei --port=port_nummer
-@end example
-
-@code{mysqld_multi} kann ebenfalls @code{safe_mysqld} (oder @code{mysqld})
-als Argument nehmen und die Optionen von einer Konfigurationsdatei an
-@code{safe_mysqld} und weiter an @code{mysqld} durchreichen.
-
-Wenn Sie den neuen Server mit demselben Datenbankverzeichnis laufen lassen
-und Loggen angeschaltet haben, sollten Sie auch den Namen der Logdateien
-f�r @code{safe_mysqld} mit @code{--log}, @code{--log-update} oder
-@code{--log-slow-queries} festlegen. Ansonsten versuchen beide Server, in
-dieselbe Logdatei zu schreiben.
-
-@strong{ACHTUNG}: Normalerweise sollten Sie nie zulassen, dass zwei Server
-Daten in derselben Datenbank aktualisieren! Wenn Ihr Betriebssystem kein
-fehlerfreies System-Sperren (System Locking) unterst�tzt, f�hrt das zu
-unliebsamen �berraschungen!
-
-Wenn Sie f�r den zweiten Server ein anderes Datenbankverzeichnis benutzen
-wollen, k�nnen Sie das mit der @code{--datadir=path}-Option f�r
-@code{safe_mysqld} angeben.
-
-@strong{HINWEIS:} Mehrere MySQL-Server (@code{mysqld}) auf verschiedenen
-Maschinen laufen lassen, die auf ein gemeinsames Datenverzeichnis �ber
-@code{NFS} zugreifen, ist generell eine @strong{SCHLECHTE IDEE}! Das
-Problem liegt darin, dass @code{NFS} zum Flaschenhals in Punkto
-Geschwindigkeit wird, denn es ist nicht f�r solche Zwecke gedacht. Und
-letztlich m�ssten Sie immer noch eine L�sung daf�r finden, dass sich zwei
-oder mehr @code{mysqlds} nicht in die Quere kommen. Momentan gibt es keine
-Plattform, die mit 100%-iger Zuverl�ssigkeit Datei-Sperren (File Locking,
-gew�hnlich mit dem @code{lockd}-Daemon) in jeder Situation durchf�hrt.
-Dennoch stellt @code{NFS} ein weiteres m�gliches Risiko dar, denn es macht
-es dem @code{lockd}-Daemon noch schwieriger, Datei-Sperren zu handhaben.
-Machen Sie es sich also leicht und vergessen Sie diese Idee! Die
-funktionierende L�sung ist, einen Computer mit einem Betriebssystem
-einzusetzen, dass Threads effizient handhabt und mehrere Prozessoren hat.
-
-Wenn Sie sich mit einem MySQL-Server verbinden wollen, der mit einem
-anderen Port l�uft als mit dem, der in Ihren Client kompiliert ist, k�nnen
-Sie folgende Methoden benutzen:
-
-@itemize @bullet
-@item
-Starten Sie den Client mit @code{--host 'hostname' --port=port_nummer}, um
-sich �ber TCP/IP zu verbinden, oder mit @code{[--host localhost]
---socket=datei}, um sich �ber ein Unix-Socket zu verbinden.
-
-@item
-In Ihren C- oder Perl-Programmen k�nnen Sie die Port- oder Socket-Argumente
-angeben, wenn Sie sich mit dem MySQL-Server verbinden.
-
-@item
-Wenn Sie das Perl-@code{DBD::mysql}-Modul benutzen, k�nnen Sie die Optionen
-aus den MySQL-Optionsdateien lesen. @xref{Option files}.
-
-@example
-$dsn = "DBI:mysql:test;mysql_read_default_group=client;mysql_read_default_file=/usr/local/mysql/data/my.cnf"
-$dbh = DBI->connect($dsn, $user, $password);
-@end example
-
-@item
-@tindex MYSQL_UNIX_PORT-Umgebungsvariable
-@tindex MYSQL_TCP_PORT-Umgebungsvariable
-@tindex Umgebungsvariable, MYSQL_UNIX_PORT
-@tindex Umgebungsvariable, MYSQL_TCP_PORT
-Setzen Sie die @code{MYSQL_UNIX_PORT}- und
-@code{MYSQL_TCP_PORT}-Umgebungsvariablen, so dass sie auf den Unix-Socket
-und TCP/IP-Port zeigen, bevor Sie Ihre Clients starten. Wenn Sie
-normalerweise eine speziellen Socket oder Port benutzen, sollten Sie die
-Befehle zum Setzen dieser Umgebungsvariablen in Ihrer @file{.login}-Datei
-unterbringen.
-@xref{Environment variables}.
-
-@item
-@tindex .my.cnf Datei
-Legen Sie den vorgabem��igen Socket und TCP/IP-Port in der
-@file{.my.cnf}-Datei in Ihrem Heimatverzeichnis fest.
-@xref{Option files}.
-@end itemize
-
-
-@node Privilege system, User Account Management, Configuring MySQL, MySQL Database Administration
-@c German node Berechtigungssystem
-@section Allgemeine Sicherheitsthemen und das MySQL-Zugriffsberechtigungssystem
-
-@cindex System, Sicherheit
-@cindex Zugriffsberechtigungen
-@cindex Berechtigungen, Zugriff
-@cindex Sicherheitssystem
-@cindex ACLs
-
-MySQL hat ein fortgeschrittenes, aber nicht standardisiertes Sicherheits-
-bzw. Berechtigungssystem. Dieser Abschnitt beschreibt, wie es funktioniert.
-
-
-
-@menu
-* General security::
-* Security::
-* Privileges options::
-* What Privileges::
-* Privileges::
-* Privileges provided::
-* Connecting::
-* Connection access::
-* Request access::
-* Access denied::
-@end menu
-
-@node General security, Security, Privilege system, Privilege system
-@c German node Allgemeine Sicherheitsrichtlinien
-@subsection Allgemeine Sicherheitsrichtlinien
-
-Jeder, der MySQL auf einem Computer benutzt, der mit dem Internet verbunden
-ist, sollte diesen Abschnitt lesen, um die gebr�uchlichsten
-Sicherheitsfehler zu vermeiden.
-
-Wenn wir �ber Sicherheit sprechen, unterstreichen wir die Notwendigkeit,
-den gesamten Server-Host (und nicht nur den MySQL-Server) gegen alle Arten
-m�glicher Angriffe abzusichern: Lauschangriffe, �nderungen (Altering),
-Playback und Dienstverweigerung (Denial of Service). Dieser Abschnitt deckt
-nicht alle Aspekte von Verf�gbarkeit und Fehlertoleranz ab.
-
-MySQL benutzt ein Sicherheitssystem, das auf Zugriffssteuerungslisten
-(Access Control Lists, ACLs) f�r alle Verbindungen, Anfragen und sonstige
-Operationen basiert, die ein Benutzer durchf�hren kann. Zus�tzlich gibt es
-einige Unterst�tzung f�r SSL-verschl�sselte Verbindungen zwischen
-MySQL-Clients und -Servern. Viele der hier geschilderten Konzepte sind
-�berhaupt nicht spezifisch f�r MySQL, sondern beziehen sich auf fast alle
-Applikationen.
-
-Wenn Sie MySQL laufen lassen, sollten Sie m�glichst immer folgende
-Richtlinien beachten:
-
-@itemize @bullet
-@item
-GEBEN SIE NIEMALS JEMANDEM AUSSER DEM MySQL-ROOT-BENUTZER ZUGRIFF AUF DIE
-@code{user}-TABELLE IN DER @code{mysql}-DATENBANK! Das verschl�sselte
-Passwort ist das echte Passwort in MySQL. Wenn Sie das in der the
-@code{user}-Tabelle aufgef�hrte Passwort f�r einen gegebenen Benutzer
-kennen, k�nnen Sie sich leicht als dieser Benutzer einloggen, wenn Sie
-Zugriff auf den Host haben, der f�r dieses Benutzerkonto aufgef�hrt ist.
-
-@item
-Lernen Sie das MySQL-Zugriffsberechtigungssystem. Die @code{GRANT}- und
-@code{REVOKE}-Befehle werden benutzt, um den Zugriff auf MySQL zu steuern.
-Gew�hren Sie nicht mehr Zugriffsrechte als notwendig. Gew�hren Sie niemals
-Zugriffsrechte f�r alle Hosts.
-
-Checkliste:
-@itemize @minus
-@item
-Probieren Sie @code{mysql -u root}. Wenn es Ihnen gelingt, sich erfolgreich
-mit dem Server zu verbinden, ohne nach einem Passwort gefragt zu werden,
-haben Sie ein Problem, denn jeder kann sich als MySQL-@code{root}-Benutzer
-mit dem Server verbinden und hat volle Berechtigungen! Lesen Sie in diesem
-Fall noch einmal die MySQL-Installationsanweisungen durch und achten Sie
-insbesondere auf den Teil, der sich mit dem Setzen des
-@code{root}-Passworts besch�ftigt.
-@item
-Benutzen Sie den Befehl @code{SHOW GRANTS} und pr�fen Sie nach, wer Zugriff
-auf was hat. Entfernen Sie die Berechtigungen, die nicht notwendig sind,
-indem Sie den @code{REVOKE}-Befehl benutzen.
-@end itemize
-@item
-Halten Sie keine Klartext-Passw�rter in Ihrer Datenbank. Wenn Ihr Computer
-kompromittiert wird, kann der Einbrecher die gesamte Liste von Passw�rtern
-nehmen und benutzen. Benutzen Sie statt dessen @code{MD5()} oder eine
-andere Einweg-Hash-Funktion.
-@item
-Benutzen Sie keine Passw�rter aus Lexika. Es gibt spezielle Programme, um
-diese zu knacken. Selbst Passw�rter wie ``xfish98'' sind sehr schlecht.
-Viel besser ist ``duag98'', was dasselbe Wort ``fish'' enth�lt, aber um
-eine Taste nach links auf einer QUERTZ-Tastatur verschoben. Eine weitere
-Methode ist, etwas wie ``Mhall'' zu benutzen, was die ersten Buchstaben des
-Satzes ``Mary had a little lamb'' enth�lt. Das l��t sich leicht merken und
-eintippen, aber schwierig durch jemanden erraten, der es nicht kennt.
-@item
-Investieren Sie in eine Firewall. Diese sch�tzt sie vor mindestens 50%
-aller Exploits in jeglicher Software. Installieren Sie MySQL hinter einer
-Firewall oder in einer entmilitarisierten Zone (Demilitarized Zone, DMZ).
-
-Checkliste:
-@itemize @minus
-@item
-Versuchen Sie, Ihre Ports vom Internet aus zu scannen, indem Sie ein Werkzeug
-wie @code{nmap} benutzen. MySQL benutzt vorgabem��ig Port 3306. Dieser
-Port sollte von nicht vertrauensw�rdigen Hosts aus unerreichbar sein. Eine
-weitere einfache Methode, um zu �berpr�fen, ob Ihr MySQL-Port offen ist
-oder nicht, ist, den folgenden Befehl von einer entfernten Maschine aus zu
-benutzen, wobei @code{server_host} der Hostname Ihres MySQL-Servers ist:
-
-@example
-shell> telnet server_host 3306
-@end example
-
-Wenn Sie eine Verbindung und einige sinnlose Zeichen erhalten, ist der Port
-offen und sollte auf Ihrer Firewall oder Ihrem Router geschlossen werden,
-sofern Sie nicht einen wirklich guten Grund haben, ihn offen zu halten.
-Wenn @code{telnet} einfach h�ngt oder die Verbindung abgelehnt wird, ist
-alles in Ordnung, der Port ist blockiert.
-@end itemize
-
-@item
-Trauen Sie keinen Daten, die von Benutzern eingegeben werden. Sie k�nnen
-versuchen, Ihren Code auszutricksen, indem Sie spezielle oder escapete
-Zeichenfolgen in Web-Formulare, URLs oder sonstige Applikationen, die Sie
-hergestellt haben, eingeben. Stellen Sie sicher, dass Ihre Applikation
-sicher bleibt, wenn ein Benutzer etwas wie ``@code{; DROP DATABASE
-mysql;}'' eingibt. Das ist ein extremes Beispiel, aber gro�e
-Sicherheitsl�cken und Datenverlust k�nnen eintreten, wenn ein Hacker
-�hnliche Techniken benutzt und Sie nicht darauf vorbereitet sind.
-
-Denken Sie auch daran, numerische Daten zu �berpr�fen. Ein h�ufiger Fehler
-besteht darin, nur Zeichenketten zu sch�tzen. Manchmal denken Leute, dass
-eine Datenbank, die nur �ffentlich zug�ngliche Daten enth�lt, nicht
-gesch�tzt werden muss. Das stimmt nicht. Auf solche Datenbanken k�nnen
-zumindest Dienstverweigerungsangriffe (Denial-of-Service-Attacken)
-durchgef�hrt werden. Die einfachste Art, sich vor dieser Art von Angriffen
-zu sch�tzen, ist, Apostrophe um numerische Konstanten herum zu benutzen:
-@code{SELECT * FROM tabelle WHERE ID='234'} statt @code{SELECT * FROM
-tabelle WHERE ID=234}. MySQL wandelt diese Zeichenkette automatisch in eine
-Zahl um und entfernt alle nicht-numerischen Zeichen aus ihr.
-
-Checkliste:
-@itemize @minus
-@item
-Alle Web-Applikationen:
-@itemize @bullet
-@item
-Versuchen Sie, @samp{'} und @samp{"} in alle Ihr Web-Formulare einzugeben.
-Wenn Sie irgend welche MySQL-Fehler erhalten, untersuchen Sie das Problem
-unverz�glich!
-@item
-Versuchen Sie, jedwede dynamischen URLs zu �ndern, indem Sie @code{%22}
-(@samp{"}), @code{%23} (@samp{#}) und @code{%27} (@samp{'}) zu den URLs
-hinzuf�gen.
-@item
-Versuchen Sie, Datentypen in dynamischen URLs von numerischen zu
-Zeichentypen zu �ndern, die Zeichen aus den vorherigen Beispielen
-enthalten. Ihre Applikation sollte gegen solche und �hnliche Angriffe
-sicher sein.
-@item
-Versuchen Sie Buchstaben, Leerzeichen und Sonderzeichen anstelle von Zahlen
-in numerische Felder einzugeben. Ihre Applikation sollte diese entfernen,
-bevor sie sie MySQL �bergibt, und Ihre Applikation sollte einen Fehler
-erzeugen. Es ist sehr gef�hrlich, nicht gepr�fte Werte an MySQL zu
-�bergeben!
-@item
-�berpr�fen Sie Datengr��en, bevor Sie sie an MySQL �bergeben.
-@item
-�berlegen Sie, ob es sinnvoll ist, dass sich Ihre Applikation mit einem
-anderen Benutzernamen mit der Datenbank verbindet als mit dem, den Sie f�r
-Verwaltungszwecke benutzen. Geben Sie Applikationen nicht mehr
-Zugriffsberechtigungen als sie brauchen.
-@end itemize
-@item
-Benutzer von PHP:
-@itemize @bullet
-@item Sehen Sie sich die @code{addslashes()}-Funktion an.
-Ab PHP 4.0.3 ist eine @code{mysql_escape_string()}-Funktion verf�gbar, die
-auf der Funktion mit demselben Namen in der MySQL-C-API basiert.
-@end itemize
-@item
-Benutzer der MySQL-C-API:
-@itemize @bullet
-@item Sehen Sie sich den @code{mysql_escape_string()}-API-Aufruf an.
-@end itemize
-@item
-Benutzer von MySQL++:
-@itemize @bullet
-@item Sehen Sie sich die @code{escape}- und @code{quote}-Modifier f�r
-Query-Streams an.
-@end itemize
-@item
-Benutzer der Perl-DBI:
-@itemize @bullet
-@item Sehen Sie sich die @code{quote()}-Methode an oder benutzen Sie
-Platzhalter.
-@end itemize
-@item
-Benutzer von Java-JDBC:
-@itemize @bullet
-@item Benutzen Sie ein @code{PreparedStatement}-Objekt und Platzhalter.
-@end itemize
-@end itemize
-
-@item
-�bermitteln Sie keine Klartextdaten (unverschl�sselte Daten) �ber das
-Internet. Diese Daten sind f�r jeden zug�nglich, der Zeit und M�glichkeit
-hat, sie abzuh�ren und sie f�r die eigenen Zwecke zu benutzen. Benutzen Sie
-statt dessen ein verschl�sseltes Protokoll wie SSL oder SSH. MySQL
-unterst�tzt ab Version 4.0.0 interne SSL-Verbindungen.
-SSH-Port-Forwarding kann benutzt werden, um einen verschl�sselten (und
-komprimierten) Kommunikationstunnel zu erzeugen.
-@item
-Lernen Sie die Benutzung der @code{tcpdump}- und @code{strings}-Utilities.
-In den meisten F�llen k�nnen Sie mit einem Befehl wie dem folgenden
-feststellen, ob MySQL-Datenstr�me verschl�sselt sind oder nicht:
-
-@example
-shell> tcpdump -l -i eth0 -w - src or dst port 3306 | strings
-@end example
-
-(Das funktioniert unter Linux und sollte mit kleineren �nderungen auf
-anderen Systemen funktionieren.) Achtung: Wenn Sie keine Daten sehen,
-hei�t das nicht immer, dass sie verschl�sselt sind. Wenn Sie hohe
-Sicherheit ben�tigen, sollten Sie sich mit einem Sicherheitsexperten in
-Verbindung setzen.
-@end itemize
-
-
-@node Security, Privileges options, General security, Privilege system
-@c German node Sicherheit
-@subsection Wie Sie MySQL gegen Cracker sicher machen
-
-@cindex Cracker, Sicherheit gegen
-@cindex Sicherheit, gegen Cracker
-
-Wenn Sie sich mit einem MySQL-Server verbinden, sollten Sie normalerweise
-ein Passwort benutzen. Das Passwort wird nicht als Klartext �ber die
-Verbindung �bermittelt. Allerdings ist der Verschl�sselungsalgorithmus
-nicht sehr stark, so dass ein cleverer Angreifer mit einiger M�he das
-Passwort knacken kann, wenn er in der Lage ist, den Verkehr zwischen Client
-und Server abzuh�ren. Wenn die Verbindung zwischen Client und Server �ber
-ein nicht vertrauensw�rdiges Netzwerk geht, sollten Sie einen SSH-Tunnel
-benutzen, um die Kommunikation zu verschl�sseln.
-
-Jede sonstige Information wird als Klartext �bermittelt, die von jedem
-gelesen werden kann, der in der Lage ist, die Verbindung abzuh�ren. Wenn
-Sie das beunruhigt, k�nnen Sie das komprimierte Protokoll benutzen (ab
-MySQL-Version 3.22), um so etwas zu erschweren. Um die Dinge noch sicherer
-zu machen, sollten Sie @code{ssh} benutzen. Sie finden einen Open-Source-
-@code{ssh}-Client auf @uref{http://www.openssh.org} und einen kommerziellen
-@code{ssh}-Client auf @uref{http://www.ssh.com}. Mit diesen erhalten Sie
-eine verschl�sselte TCP/IP-Verbindung zwischen einem MySQL-Server und einem
-MySQL-Client.
-
-Um ein MySQL-System sicher zu machen, sollten Sie auf jeden Fall folgende
-Vorschl�ge in Betracht ziehen:
-
-@itemize @bullet
-@item
-Benutzen Sie Passw�rter f�r alle MySQL-Benutzer. Bedenken Sie, dass sich
-jeder beliebige als andere Person einloggen kann, und zwar so einfach wie
-@code{mysql -u anderer_benutzer db_name}, wenn @code{anderer_benutzer} kein
-Passwort hat. Es ist ein normales Verhalten bei
-Client-Server-Applikationen, dass der Client einen beliebigen Benutzernamen
-angeben kann. Sie k�nnen das Passwort f�r alle Benutzer �ndern, indem Sie
-das @code{mysql_install_db}-Skript editieren, bevor Sie es laufen lassen,
-oder nur das Passwort f�r den MySQL-@code{root}-Benutzer, wie folgt:
-
-@example
-shell> mysql -u root mysql
-mysql> UPDATE user SET Password=PASSWORD('neues_passwort')
- WHERE user='root';
-mysql> FLUSH PRIVILEGES;
-@end example
-
-@item
-Lassen Sie den MySQL-Daemon nicht als Unix-@code{root}-Benutzer laufen. Das
-ist sehr gef�hrlich, denn jeder Benutzer mit @code{FILE}-Berechtigung ist
-dann in der Lage, Dateien als @code{root} zu erzeugen (zum Beispiel
-@code{~root/.bashrc}). Um das zu verhindern, weigert sich @code{mysqld},
-als @code{root} zu laufen, es sei denn, das wird direkt durch die
-@code{--user=root}-Option angegeben.
-
-@code{mysqld} kann unter einem gew�hnlichen Benutzer ohne besondere Rechte
-laufen. Sie k�nnen auch einen neuen Unix-Benutzer @code{mysql} anlegen, um
-alles noch sicherer zu machen. Wenn Sie @code{mysqld} als ein anderer
-Unix-Benutzer laufen lassen, m�ssen Sie nicht den @code{root}-Benutzernamen
-in der @code{user}-Tabelle �ndern, denn MySQL-Benutzernamen haben nichts
-mit den Unix-Benutzernamen zu tun. Um @code{mysqld} als anderer
-Unix-Benutzer zu starten, f�gen Sie eine @code{user}-Zeile hinzu, die den
-Benutzernamen zur @code{[mysqld]}-Gruppe der
-@file{/etc/my.cnf}-Optionsdatei oder der @file{my.cnf}-Optionsdatei im
-Daten-Verzeichnis des Servers hinzuf�gt. Beispiel:
-
-@example
-[mysqld]
-user=mysql
-@end example
-
-Das bewirkt, dass der Server als der festgelegte Benutzer gestartet wird,
-egal ob Sie ihn manuell oder mit @code{safe_mysqld} oder
-@code{mysql.server} starten. Weitere Details finden Sie unter @ref{Privilege changes, , MySQL-Benutzer �ndern}.
-
-@item
-Unterst�tzen Sie keine Symlinks auf Tabellen (das kann mit der
-@code{--skip-symlink}-Option abgeschaltet werden). Das ist insbesondere
-wichtig, wenn Sie @code{mysqld} als Root laufen lassen, weil jeder, der
-Schreibzugriff auf das mysqld-Daten-Verzeichnis hat, dann jede Datei im
-System zerst�ren k�nnte!
-@xref{Symbolic links to tables}.
-
-@item
-�berpr�fen Sie, dass der Unix-Benutzer, der @code{mysqld} laufen l��t, der
-einzige Benutzer mit Lese-/Schreibzugriffen auf die Datenbankverzeichnisse
-ist.
-
-@item
-Geben Sie nicht allen Benutzern das @strong{process}-Zugriffsrecht. Die
-Ausgabe von @code{mysqladmin processlist} zeigt den Text der aktuell
-ausgef�hrten Anfragen, so dass jeder, der diesen Befehl ausf�hren darf, in
-der Lage w�re, eine Anfrage eines anderen Benutzers wie @code{UPDATE user
-SET password=PASSWORD('not_secure')} einzusehen.
-
-@code{mysqld} reserviert eine zus�tzliche Verbindung f�r Benutzer, die das
-@strong{process}-Zugriffsrecht haben, so dass sich ein
-MySQL-@code{root}-Benutzer einloggen und Dinge �berpr�fen kann, selbst wenn
-alle normalen Verbindungen in Benutzung sind.
-
-@item
-Geben Sie nicht allen Benutzern das @strong{file}-Zugriffsrecht. Jeder
-Benutzer, der dieses Zugriffsrecht hat, kann irgendwo im Dateisystem
-Dateien mit den Rechten des the @code{mysqld}-Daemons schreiben! Um das
-etwas sicherer zu machen, sind alle Dateien, die mit @code{SELECT ... INTO
-OUTFILE} erzeugt werden, f�r jeden lesbar und k�nnen keine existierenden
-Dateien �berschreiben.
-
-@tindex /etc/passwd
-Das @strong{file}-Zugriffsrecht kann auch benutzt werden, um jede Datei zu
-lesen, auf die der Unix-Benutzer Zugriff hat, als der der Server l�uft. Das
-k�nnte zum Beispiel durch Benutzung von @code{LOAD DATA} missbraucht
-werden, um @file{/etc/passwd} in eine Tabelle zu laden, die anschlie�end
-mit @code{SELECT} gelesen wird.
-
-@item
-Wenn Sie Ihrem DNS nicht trauen, sollten Sie IP-Nummern anstelle von
-Hostnamen in den Berechtigungstabellen verwenden. In jedem Fall sollten Sie
-sehr vorsichtig damit sein, Eintr�ge in Berechtigungstabellen vorzunehmen,
-die Hostnamen mit Platzhaltern (Wildcards) verwenden!
-
-@item
-Wenn Sie die Anzahl der Verbindungen f�r einen einzelnen Benutzer
-beschr�nken wollen, k�nnen Sie das tun, indem Sie die
-@code{max_user_Verbindungen}-Variable in @code{mysqld} setzen.
-@end itemize
-
-
-
-@node Privileges options, What Privileges, Security, Privilege system
-@c German node Berechtigungsoptionen
-@subsection Startoptionen f�r @code{mysqld} in Bezug auf Sicherheit
-
-Folgende @code{mysqld}-Optionen ber�hren Sicherheitsaspekte:
-
-@table @code
-@item --safe-show-database
-Mit dieser Option gibt @code{SHOW DATABASES} nur die Datenbanken zur�ck,
-f�r die der Benutzer irgend welche Rechte hat.
-
-@item --safe-user-create
-Wenn das angeschaltet ist, kann ein Benutzer keine neuen Benutzer mit dem
-@code{GRANT}-Befehl anlegen, wenn der kein @code{INSERT}-Zugriffsrecht auf
-die @code{mysql.user}-Tabelle hat. Wenn Sie dem Benutzer nur das Recht
-geben wollen, neue Benutzer mit den Berechtigungen anzulegen, die er
-vergeben darf, sollten Sie ihm folgende Berechtigung geben:
-
-@example
-GRANT INSERT(benutzer) on mysql.user to 'benutzer'@'hostname';
-@end example
-
-Das stellt sicher, dass der Benutzer keine Berechtigungsspalten direkt
-�ndern kann, sondern daf�r den @code{GRANT}-Befehl benutzen muss.
-
-@item --skip-grant-tables
-Diese Option veranlasst den Server, das Berechtigungssystem �berhaupt nicht
-zu benutzen. Das gibt jedem @emph{vollen Zugriff} auf alle Datenbanken!
-(Einen laufenden Server k�nnen Sie veranlassen, die Berechtigungstabellen
-erneut zu verwenden, indem Sie @code{mysqladmin flush-privileges} oder
-@code{mysqladmin reload} ausf�hren.)
-
-@item --skip-name-resolve
-Hostnamen werden nicht aufgel�st. Alle @code{Host}-Spaltenwerte in den
-Berechtigungstabellen m�ssen IP-Nummern oder @code{localhost} sein.
-
-@item --skip-networking
-Keine TCP/IP-Verbindungen �ber das Netzwerk zulassen. Alle Verbindungen zu
-@code{mysqld} m�ssen �ber Unix-Sockets gemacht werden. Diese Option ist
-ungeeignet f�r Systeme, die MIT-pThreads benutzen, weil das
-MIT-pThreads-Paket keine Unix-Sockets unterst�tzt.
-
-@item --skip-show-database
-Mit dieser Option gibt das @code{SHOW DATABASES}-Statement nichts zur�ck.
-
-@end table
-
-
-@node What Privileges, Privileges, Privileges options, Privilege system
-@c German node Welche Berechtigungen
-@subsection Was das Berechtigungssystem macht
-
-@cindex System, Berechtigungen
-@cindex Berechtigungssystem
-@cindex Passw�rter, Sicherheit
-
-Die prim�re Funktion des MySQL-Berechtigungssystem ist, einen Benutzer zu
-authentifizieren, der sich von einem gegebenen Host aus verbindet, und
-diesen Benutzer Berechtigungen auf eine Datenbank zuzuordnen, wie
-@strong{select}, @strong{insert}, @strong{update} und @strong{delete}.
-
-Zus�tzliche Funktionalit�t beinhaltet die M�glichkeit, einen anonymen
-Benutzer anzulegen und Berechtigungen f�r MySQL-spezifische Funktionen wie
-@code{LOAD DATA INFILE} und f�r administrative Operationen zu gew�hren.
-
-
-@node Privileges, Privileges provided, What Privileges, Privilege system
-@c German node Berechtigungen
-@subsection Wie das Berechtigungssystem funktioniert
-
-@cindex Berechtigungssystem, Beschreibung
-
-Das MySQL-Berechtigungssystem stellt sicher, dass alle Benutzer nur genau
-die Dinge tun d�rfen, zu denen sie berechtigt sind. Wenn Sie sich mit einem
-MySQL-Server verbinden, wird Ihre Identit�t @strong{durch den Host, von dem
-Sie sich aus verbinden,} festgelegt und @strong{durch den Benutzernamen,
-den Sie angeben}. Das System gew�hrt Berechtigungen gem�� Ihrer Identit�t
-und gem�� dem, @strong{was Sie tun wollen}.
-
-MySQL zieht sowohl Hostnamen als auch Benutzernamen heran, um Sie zu
-identifizieren, weil es kaum Grund gibt anzunehmen, dass ein gegebener
-Benutzername derselben Person woanders auf dem Internet geh�rt. So muss zum
-Beispiel der Benutzer @code{bill}, der sich von @code{whitehouse.gov} aus
-verbindet, nicht notwendigerweise dieselbe Person sein, die sich als
-Benutzer @code{bill} von @code{microsoft.com} aus verbindet.
-MySQL erlaubt Ihnen deshalb, Benutzer auf unterschiedlichen Hosts
-auseinander zu halten, die zuf�llig denselben Namen haben: Sie k�nnen
-@code{bill} einen Satz von Berechtigungen f�r Verbindungen von
-@code{whitehouse.gov} und einen anderen Satz von Berechtigungen f�r
-Verbindungen von @code{microsoft.com} aus gew�hren.
-
-Die MySQL-Zugriffskontrolle l�uft in zwei Phasen ab:
-
-@itemize @bullet
-@item
-Phase 1: Der Server �berpr�ft, ob Sie das Recht haben, sich verbinden zu
-k�nnen.
-
-@item
-Phase 2: Angenommen, Sie haben das Recht, sich zu verbinden, dann �berpr�ft
-der Server jede Anfrage, die Sie absetzen, um festzustellen, ob Sie
-ausreichende Rechte haben, um diese auszuf�hren. Wenn Sie zum Beispiel
-Zeilen aus einer Tabellen in einer Datenbank ausw�hlen oder eine Tabelle in
-einer Datenbank l�schen, stellt der Server sicher, dass Sie die
-@strong{select}-Berechtigung f�r die Tabelle bzw. die
-@strong{drop}-Berechtigung f�r die Datenbank haben.
-@end itemize
-
-Der Server benutzt die @code{user}-, @code{db}- und @code{host}-Tabellen in
-der @code{mysql}-Datenbank in beiden Phasen der Zugriffskontrolle. Die
-Felder in diesen Berechtigungstabellen sind unten dargestellt:
-
-@multitable @columnfractions .2 .25 .25 .25
-@item @strong{Tabellenname} @tab @code{user} @tab @code{db} @tab @code{host}
-
-@item @strong{Geltungsbereichs-Felder} @tab @code{Host} @tab @code{Host} @tab @code{Host}
-@item @tab @code{User} @tab @code{Db} @tab @code{Db}
-@item @tab @code{Password} @tab @code{User} @tab
-
-@item @strong{Berechtigungs-Felder} @tab @code{Select_priv} @tab @code{Select_priv} @tab @code{Select_priv}
-@item @tab @code{Insert_priv} @tab @code{Insert_priv} @tab @code{Insert_priv}
-@item @tab @code{Update_priv} @tab @code{Update_priv} @tab @code{Update_priv}
-@item @tab @code{Delete_priv} @tab @code{Delete_priv} @tab @code{Delete_priv}
-@item @tab @code{Index_priv} @tab @code{Index_priv} @tab @code{Index_priv}
-@item @tab @code{Alter_priv} @tab @code{Alter_priv} @tab @code{Alter_priv}
-@item @tab @code{Create_priv} @tab @code{Create_priv} @tab @code{Create_priv}
-@item @tab @code{Drop_priv} @tab @code{Drop_priv} @tab @code{Drop_priv}
-@item @tab @code{Grant_priv} @tab @code{Grant_priv} @tab @code{Grant_priv}
-@item @tab @code{References_priv} @tab @tab
-@item @tab @code{Reload_priv} @tab @tab
-@item @tab @code{Shutdown_priv} @tab @tab
-@item @tab @code{Process_priv} @tab @tab
-@item @tab @code{File_priv} @tab @tab
-@end multitable
-
-In der zweiten Phase der Zugriffskontrolle (Anfrage-Verifikation), zieht
-der Server gegebenenfalls zus�tzlich die @code{tables_priv}- und
-@code{columns_priv}-Tabellen heran, falls Ihre Anfrage Tabellen betrifft.
-Die Felder in diesen Tabellen sind unten dargestellt:
-
-@multitable @columnfractions .2 .25 .25
-@item @strong{Tabellenname} @tab @code{tables_priv} @tab @code{columns_priv}
-
-@item @strong{Geltungsbereichs-Felder} @tab @code{Host} @tab @code{Host}
-@item @tab @code{Db} @tab @code{Db}
-@item @tab @code{User} @tab @code{User}
-@item @tab @code{Table_name} @tab @code{Table_name}
-@item @tab @tab @code{Column_name}
-
-@item @strong{Berechtigungs-Felder} @tab @code{Table_priv} @tab @code{Column_priv}
-@item @tab @code{Column_priv} @tab
-
-@item @strong{Sonstige Felder} @tab @code{Timestamp} @tab @code{Timestamp}
-@item @tab @code{Grantor} @tab
-@end multitable
-
-Jede Berechtigungstabelle enth�lt Geltungsbereichsfelder und
-Berechtigungsfelder.
-
-Geltungsbereichsfelder legen den Geltungsbereich jedes Eintrags in den
-Tabellen fest, das hei�t, der Kontext, f�r den der Eintrag gilt. So w�rde
-zum Beispiel ein @code{user}-Tabelleneintrag mit @code{Host}- und
-@code{User}-Werten von @code{'thomas.loc.gov'} und @code{'bob'} benutzt
-werden, um Verbindungen zum Server zu authentifizieren, die von @code{bob}
-vom Host @code{thomas.loc.gov} gemacht werden. In �hnlicher Weise bewirkt
-ein @code{db}-Tabelleneintrag in die Felder @code{Host}, @code{User} und
-@code{Db} mit @code{'thomas.loc.gov'}, @code{'bob'} und @code{'reports'},
-dass diese benutzt werden, wenn sich @code{bob} vom Host
-@code{thomas.loc.gov} verbindet und auf die @code{reports}-Datenbank zugreift.
-Die @code{tables_priv}- und @code{columns_priv}-Tabellen enthalten
-Geltungsbereichsfelder, die Tabellen oder Tabellen-Spalten-Kombinationen
-angeben, auf die sich der jeweilige Eintrag bezieht.
-
-@cindex Gro�-/Kleinschreibung, bei der Zugriffspr�fung
-F�r Zwecke der Zugriffspr�fung sind Vergleiche von @code{Host}-Werten
-unabh�ngig von der verwendeten Gro�-/Kleinschreibung. @code{User},
-@code{Password}, @code{Db} und @code{Table_name}-Werte sind abh�ngig von
-der verwendeten Gro�-/Kleinschreibung. @code{Column_name}-Werte sind ab
-MySQL-Version 3.22.12 unabh�ngig von der verwendeten
-Gro�-/Kleinschreibung.
-
-Berechtigungsfelder zeigen die Berechtigungen an, die durch den
-Tabelleneintrag gew�hrt werden, das hei�t, welche Operationen durchgef�hrt
-werden k�nnen. Der Server kombiniert die Informationen in den verschiedenen
-Berechtigungstabellen, um daraus eine komplette Beschreibung der
-Berechtigungen des Benutzers zu formulieren. Die Regeln, nach denen hierbei
-vorgegangen wird, sind in @ref{Request access} beschrieben.
-
-Geltungsbereichsfelder sind Zeichenketten, die wie unten dargestellt
-deklariert werden. Der Vorgabewert f�r jedes Feld ist die leere
-Zeichenkette:
-
-@multitable @columnfractions .15 .15 .7
-@item @strong{Feldname} @tab @strong{Typ}
-@item @code{Host} @tab @code{CHAR(60)}
-@item @code{User} @tab @code{CHAR(16)}
-@item @code{Password} @tab @code{CHAR(16)}
-@item @code{Db} @tab @code{CHAR(64)} @tab (@code{CHAR(60)} f�r
-die @code{tables_priv}- und @code{columns_priv}-Tabellen)
-@item @code{Table_name} @tab @code{CHAR(60)}
-@item @code{Column_name} @tab @code{CHAR(60)}
-@end multitable
-
-In den @code{user}-, @code{db}- und @code{host}-Tabellen werden alle Felder
-als @code{ENUM('N','Y')} deklariert. Jedes Feld kann einen Wert von
-@code{'N'} oder @code{'Y'} haben. Der Vorgabewert ist @code{'N'}.
-
-In den @code{tables_priv}- und @code{columns_priv}-Tabellen werden Felder
-als @code{SET}-Felder deklariert:
-
-@multitable @columnfractions .2 .2 .6
-@item @strong{Tabellenname} @tab @strong{Feldname} @tab @strong{M�gliche Set-Elemente}
-@item @code{tables_priv} @tab @code{Table_priv} @tab @code{'Select', 'Insert',
-'Update', 'Delete', 'Create', 'Drop', 'Grant', 'Referenzs', 'Index', 'Alter'}
-@item @code{tables_priv} @tab @code{Column_priv} @tab @code{'Select', 'Insert',
-'Update', 'References'}
-@item @code{columns_priv} @tab @code{Column_priv} @tab @code{'Select', 'Insert',
-'Update', 'References'}
-@end multitable
-
-Kurz gesagt benutzt der Server die Berechtigungstabellen wie folgt:
-
-@itemize @bullet
-@item
-Das @code{user}-Tabellenbereichsfeld legt fest, ob eingehende Verbindungen
-zugelassen oder abgewiesen werden. Bei zugelassenen Verbindungen zeigen
-Berechtigungen, die in der @code{user}-Tabelle vergeben sind, die globalen
-(Superuser-) Rechte des Benutzers an. Diese Berechtigungen treffen auf
-@strong{alle} Datenbanken auf dem Server zu.
-
-@item
-Die @code{db}- und @code{host}-Tabellen werden zusammen benutzt:
-
-@itemize @minus
-@item
-Die Geltungsbereichsfelder der @code{db}-Tabelle legen fest, welche
-Benutzer auf welche Datenbanken von welchen Hosts aus zugreifen k�nnen. Die
-Berechtigungsfelder legen fest, welche Operationen zugelassen sind.
-
-@item
-Die @code{host}-Tabelle wird als Erweiterung der @code{db}-Tabelle benutzt,
-wenn Sie wollen, dass ein gegebener @code{db}-Tabelleneintrag auf
-verschiedene Hosts zutrifft. Wenn Sie zum Beispiel wollen, dass ein
-Benutzer eine Datenbank von mehreren Hosts in Ihrem Netzwerk aus benutzen
-kann, lassen Sie den @code{Host}-Wert in der @code{db}-Tabelle des
-Benutzers leer, und f�llen dann die @code{host}-Tabelle mit einem Eintrag
-f�r jeden dieser Hosts. Dieser Mechanismus ist ausf�hrlicher in
-@ref{Request access} beschrieben.
-@end itemize
-
-@item
-Die @code{tables_priv}- und @code{columns_priv}-Tabellen sind der
-@code{db}-Tabelle �hnlich, aber feink�rniger: Sie beziehen sich auf
-Tabellen- und Spaltenebenen und nicht auf Datenbankebene.
-@end itemize
-
-Beachten Sie, dass die Verwaltungsberechtigungen (@strong{reload},
-@strong{shutdown} usw.) nur in der @code{user}-Tabelle festgelegt werden.
-Das liegt daran, dass Verwaltungsoperationen Operationen auf dem Server
-selbst sind und nicht Datenbank-spezifisch, so dass es keinen Grund gibt,
-solche Berechtigungen in den anderen Berechtigungstabellen aufzuf�hren. So
-muss nur die @code{user}-Tabelle untersucht werden um festzustellen, ob man
-Verwaltungsoperationen durchf�hren kann oder nicht.
-
-Das @strong{file}-Zugriffsrecht wird auch nur in der @code{user}-Tabelle
-festgelegt. Es ist als solches keine Verwaltungsberechtigung, aber Ihre
-M�glichkeit, Dateien auf dem Server zu lesen oder zu schreiben, ist
-unabh�ngig von der Datenbank, auf die Sie zugreifen.
-
-Der @code{mysqld}-Server liest die Inhalte der Berechtigungstabellen
-einmal, und zwar beim Start. �nderungen in den Berechtigungstabellen werden
-wirksam wie in @ref{Privilege changes} geschildert.
-
-Wenn Sie die Inhalte der Berechtigungstabellen �ndern, sollten Sie
-sicherstellen, dass Ihre �nderungen Berechtigungen einf�hren, die Sie so
-haben wollen. Hilfe bei der Diagnose von Problemen finden Sie unter
-@ref{Access denied}. Hinweise zu Sicherheitsthemen finden Sie unter
-@pxref{Security}.
-
-Ein n�tzliches Diagnosetool ist das @code{mysqlaccess}-Skript, das Yves
-Carlier f�r die MySQL-Distribution bereit gestellt hat. Rufen Sie
-@code{mysqlaccess} mit der @code{--help}-Option auf, um herauszufinden, wie
-es funktioniert. Beachten Sie, dass @code{mysqlaccess} den Zugriff nur
-anhand der @code{user}-, @code{db}- und @code{host}-Tabellen �berpr�ft. Es
-�berpr�ft keine Tabellen- oder Spaltenebenen-Berechtigungen.
-
-
-@node Privileges provided, Connecting, Privileges, Privilege system
-@c German node Zur Verf�gung gestellte Berechtigungen
-@subsection Von MySQL zur Verf�gung gestellte Berechtigungen
-
-@cindex Berechtigungsinformation, Speicherort
-
-Informationen �ber Benutzerberechtigungen sind in den @code{user}-,
-@code{db}-, @code{host}-, @code{tables_priv}- und
-@code{columns_priv}-Tabellen in der @code{mysql}-Datenbank gespeichert (das
-hei�t in der Datenbank, die @code{mysql} hei�t). Der MySQL-Server liest
-die Inhalte dieser Tabellen, wenn er startet, und in den F�llen, die unter
-@ref{Privilege changes} geschildert sind.
-
-Die Namen, die in diesem Handbuch benutzt werden, um auf die Berechtigungen
-zu verweisen, die MySQL zur Verf�gung stellt, sind unten dargestellt,
-zusammen mit den Tabellenspaltennamen, die jeder Berechtigung in the
-Berechtigungstabellen zugeordnet sind, und dem Kontext, auf den die
-Berechtigung zutrifft.
-
-@multitable @columnfractions .15 .25 .6
-@item @strong{Berechtigung} @tab @strong{Spalte} @tab @strong{Kontext}
-@item @strong{select} @tab @code{Select_priv} @tab Tabellen
-@item @strong{insert} @tab @code{Insert_priv} @tab Tabellen
-@item @strong{update} @tab @code{Update_priv} @tab Tabellen
-@item @strong{delete} @tab @code{Delete_priv} @tab Tabellen
-@item @strong{index} @tab @code{Index_priv} @tab Tabellen
-@item @strong{alter} @tab @code{Alter_priv} @tab Tabellen
-@item @strong{create} @tab @code{Create_priv} @tab Datenbanken, Tabellen oder Indexe
-@item @strong{drop} @tab @code{Drop_priv} @tab Datenbanken oder Tabellen
-@item @strong{grant} @tab @code{Grant_priv} @tab Datenbanken oder Tabellen
-@item @strong{References} @tab @code{References_priv} @tab Datenbanken oder Tabellen
-@item @strong{reload} @tab @code{Reload_priv} @tab Serververwaltung
-@item @strong{shutdown} @tab @code{Shutdown_priv} @tab Serververwaltung
-@item @strong{process} @tab @code{Process_priv} @tab Serververwaltung
-@item @strong{file} @tab @code{File_priv} @tab Dateizugriff auf den Server
-@end multitable
-
-Die @strong{select}-, @strong{insert}-, @strong{update}- und
-@strong{delete}-Berechtigungen erlauben Ihnen, Operationen auf Zeilen in
-existierenden Tabellen in einer Datenbank durchzuf�hren.
-
-@code{SELECT}-Statements erfordern die @strong{select}-Berechtigung nur
-dann, wenn tats�chlich Zeilen aus einer Tabelle abgerufen werden. Sie
-k�nnen bestimmte @code{SELECT}-Statements selbst ohne Berechtigung
-durchf�hren, um auf jede der Datenbanken auf dem Server zuzugreifen.
-Beispielsweise k�nnten Sie den @code{mysql}-Client als einfachen
-Taschenrechner benutzen:
-
-@example
-mysql> SELECT 1+1;
-mysql> SELECT PI()*2;
-@end example
-
-Die @strong{index}-Berechtigung erlaubt Ihnen, Indexe zu erzeugen oder zu
-entfernen.
-
-Die @strong{alter}-Berechtigung erlaubt Ihnen, @code{ALTER TABLE} zu
-benutzen.
-
-Die @strong{create}- und @strong{drop}-Berechtigungen erlauben Ihnen, neue
-Datenbanken und Tabellen zu erzeugen oder bestehende Datenbanken und
-Tabellen zu entfernen.
-
-Denken Sie daran, dass ein Benutzer, dem Sie die @strong{drop}-Berechtigung
-f�r die @code{mysql}-Datenbank gew�hren, in der Lage ist, die Datenbank zu
-l�schen, in der die MySQL-Zugriffsberechtigungen gespeichert sind!
-
-Die @strong{grant}-Berechtigung erlaubt Ihnen, die Berechtigungen, die Sie
-selbst besitzen, an andere Benutzer zu vergeben.
-
-Die @strong{file}-Berechtigung erlaubt Ihnen, Dateien auf dem Server zu
-lesen und zu schreiben, wenn Sie die @code{LOAD DATA INFILE}- und
-@code{SELECT ... INTO OUTFILE}-Statements benutzen. Jeder Benutzer, dem
-diese Berechtigung gew�hrt wurde, kann jedwede Datei lesen oder schreiben,
-die der MySQL-Server lesen oder schreiben darf.
-
-Die restlichen Berechtigungen werden f�r Verwaltungsoperationen benutzt,
-die mit dem @code{mysqladmin}-Programm durchgef�hrt werden. Die unten
-stehende Tabelle zeigt, welche @code{mysqladmin}-Befehle mit jeder
-Verwaltungsberechtigung ausgef�hrt werden k�nnen:
-
-@multitable @columnfractions .15 .85
-@item @strong{Berechtigung} @tab @strong{Befehle, die dem Berechtigten erlaubt sind}
-@item @strong{reload} @tab @code{reload}, @code{refresh},
-@code{flush-privileges}, @code{flush-hosts}, @code{flush-logs} und
-@code{flush-tables}
-@item @strong{shutdown} @tab @code{shutdown}
-@item @strong{process} @tab @code{processlist}, @code{kill}
-@end multitable
-
-Der @code{reload}-Befehl weist den Server an, die Berechtigungstabellen neu
-einzulesen. Der @code{refresh}-Befehl schreibt alle Tabellen auf Platte
-(flush) und �ffnet und schlie�t die Log-Dateien. @code{flush-privileges}
-ist ein Synonym f�r @code{reload}. Die anderen @code{flush-*}-Befehle
-f�hren Funktionen aus, die @code{refresh} �hnlich sind, aber im Umfang
-beschr�nkter und daher in einigen F�llen zu bevorzugen. Wenn Sie zum
-Beispiel nur die Log-Dateien flushen wollen, ist @code{flush-logs}
-@code{refresh} vorzuziehen.
-
-Der @code{shutdown}-Befehl f�hrt den Server herunter.
-
-Der @code{processlist}-Befehl zeigt Informationen �ber die Threads an, die
-im Server ausgef�hrt werden. Der @code{kill}-Befehl killt Server-Threads.
-Ihre eigenen Threads k�nnen Sie jederzeit anzeigen oder killen, aber Sie
-brauchen die @strong{process}-Berechtigung, um Threads anzuzeigen oder zu
-killen, die von anderen Benutzern initiiert wurden. @xref{KILL}.
-
-Es ist generell eine gute Idee, Berechtigungen nur den Nutzern zu gew�hren,
-die diese tats�chlich brauchen, aber speziell bei folgenden Berechtigungen
-sollten Sie besondere Vorsicht walten lassen:
-
-@itemize @bullet
-@item
-Die @strong{grant}-Berechtigung erlaubt Benutzern, Ihre Berechtigungen an
-andere Benutzer zu �bertragen. Zwei Benutzer mit unterschiedlichen
-Berechtigungen und mit der @strong{grant}-Berechtigung sind in der Lage,
-Ihre Berechtigungen zu kombinieren.
-
-@item
-Die @strong{alter}-Berechtigung kann benutzt werden, um das
-Berechtigungssystem zu unterlaufen, indem Tabellen umbenannt werden.
-
-@item
-Die @strong{file}-Berechtigung kann missbraucht werden, um jede �ffentlich
-lesbare Datei auf dem Server in eine Datenbanktabelle einzulesen, auf deren
-Inhalte dann mit @code{SELECT} zugegriffen werden kann. Das beinhaltet die
-Inhalte aller Datenbanken, die vom Server gehostet werden!
-
-@item
-Die @strong{shutdown}-Berechtigung kann missbraucht werden, um andere
-Benutzer komplett vom Server auszuschlie�en, indem der Server beendet
-wird.
-
-@item
-Die @strong{process}-Berechtigung kann benutzt werden, um den Klartext von
-momentan ablaufenden Anfragen einzusehen, inklusive Anfragen, die
-Passw�rter setzen oder �ndern.
-
-@item
-Zugriffsrechte auf die @code{mysql}-Datenbank k�nnen benutzt werden, um
-Passw�rter zu �ndern und auf sonstige Berechtigungsinformationen
-zuzugreifen. (Passw�rter werden verschl�sselt gespeichert, daher kann ein
-b�swilliger Benutzer sie nicht einfach lesen und anschlie�end die
-Klartext-Passw�rter kennen.) Wenn man auf die
-@code{mysql.user}-Passwort-Spalte zugreifen kann, kann man das nutzen, um
-sich als beliebiger Benutzer am MySQL-Server anzumelden. (Mit ausreichenden
-Rechten kann derselbe Benutzer dann Passw�rter durch eigene ersetzen.)
-@end itemize
-
-Es gibt einige Dinge, die Sie mit dem MySQL-Berechtigungssystem nicht tun
-k�nnen:
-
-@itemize @bullet
-@item
-Sie k�nnen nicht ausdr�cklich festlegen, dass ein bestimmter Benutzer
-keinen Zugriff haben soll. Das hei�t, Sie k�nnen nicht explizit mit einem
-bestimmten Benutzer vergleichen und dann die Verbindung ablehnen.
-
-@item
-Sie k�nnen nicht festlegen, dass ein Benutzer das Recht hat, Tabellen in
-einer Datenbank zu erzeugen oder zu l�schen, aber nicht die Datenbank
-selbst zu erzeugen oder zu l�schen.
-@end itemize
-
-
-@node Connecting, Connection access, Privileges provided, Privilege system
-@c German node Verbinden
-@subsection Verbinden mit dem MySQL-Server
-
-@cindex Verbinden, mit dem MySQL-Server
-@cindex Vorgabem��iger Hostname
-@cindex Hostname, Vorgabe
-@cindex Server, verbinden
-
-MySQL-Client-Programme erfordern im Allgemeinen, dass Sie
-Verbindungsparameter festlegen, wenn Sie sich mit einem MySQL-Server
-verbinden wollen: Der Host, mit dem Sie sich verbinden wollen, Ihr
-Benutzername und Ihr Passwort. Beispielsweise kann der @code{mysql}-Client
-wie folgt gestartet werden (optionale Argumente sind in @samp{[} und
-@samp{]} eingeschlossen):
-
-@example
-shell> mysql [-h hostname] [-u benutzername] [-pihr_passwort]
-@end example
-
-Alternative Formen der @code{-h}-, @code{-u}- und @code{-p}-Optionen sind
-@code{--host=hostname}, @code{--user=benutzername} und
-@code{--password=ihr_passwort}. Beachten Sie, dass zwischen @code{-p} oder
-@code{--password=} und dem folgenden Passwort @emph{kein Leerzeichen}
-steht!
-
-@strong{ACHTUNG:} Ein Passwort auf der Kommandozeile anzugeben ist nicht
-sicher! Jeder Benutzer auf Ihrem System kann dann Ihr Passwort
-herausfinden, indem er einen Befehl wie @code{ps auxww} eingibt.
-@xref{Option files}.
-
-@code{mysql} benutzt Vorgabewerte f�r Verbindungsparameter, die auf der
-Kommandozeile nicht angegeben sind:
-
-@itemize @bullet
-@item
-Der vorgabem��ige Hostname ist @code{localhost}.
-
-@item
-Der vorgabem��ige Benutzername ist Ihr Unix-Loginname.
-
-@item
-Es wird kein Passwort �bergeben, wenn @code{-p} fehlt.
-@end itemize
-
-F�r einen Unix-Benutzer @code{joe} sind daher folgende Befehle
-gleichbedeutend:
-
-@example
-shell> mysql -h localhost -u joe
-shell> mysql -h localhost
-shell> mysql -u joe
-shell> mysql
-@end example
-
-Andere MySQL-Clients verhalten sich �hnlich.
-
-Auf Unix-Systemen k�nnen Sie andere Vorgabewerte festlegen, die benutzt
-werden, wenn Sie eine Verbindung aufmachen, so dass Sie diese nicht jedes
-Mal auf der Kommandozeile eingeben m�ssen, wenn Sie ein Client-Programm
-aufrufen. Das kann auf verschiedene Weise gemacht werden:
-
-@itemize @bullet
-@item
-@tindex .my.cnf-Datei
-Sie k�nnen Verbindungsparameter im @code{[client]}-Abschnitt der
-@file{.my.cnf}-Konfigurationsdatei in Ihrem Heimatverzeichnis festlegen.
-Der relevante Abschnitt der Datei sieht etwa wie folgt aus:
-
-@example
-[client]
-host=hostname
-user=benutzername
-password=ihr_passwort
-@end example
-
-@xref{Option files}.
-
-@item
-@tindex @code{MYSQL_HOST}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_HOST}
-@tindex @code{MYSQL_PWD}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_PWD}
-@tindex @code{USER}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{USER}
-Sie k�nnen Verbindungsparameter festlegen, indem Sie Umgebungsvariablen
-benutzen. Der Host kann f�r @code{mysql} festgelegt werden, indem
-@code{MYSQL_HOST} benutzt wird. Der MySQL-Benutzername kann mit @code{USER}
-festgelegt werden (nur f�r Windows). Das Passwort kann mit @code{MYSQL_PWD}
-festgelegt werden (aber das ist unsicher, siehe n�chster Abschnitt).
-@xref{Environment variables}.
-@end itemize
-
-
-@node Connection access, Request access, Connecting, Privilege system
-@c German node Verbindungszugriff
-@subsection Zugriffskontrolle, Phase 1: Verbindungs�berpr�fung
-
-@cindex Zugriffskontrolle
-@cindex Kontrolle �ber den Zugriff
-@cindex Verbindung, �berpr�fung
-@cindex Testen, Verbindung mit dem Server
-
-Wenn Sie versuchen, sich mit einem MySQL-Server zu verbinden, akzeptiert
-der Server die Verbindung oder weist sie zur�ck, abh�ngig von Ihrer
-Identit�t und davon, ob Sie diese mit dem korrekten Passwort verifizieren
-k�nnen. Falls nicht, lehnt der Server den Zugriff vollst�ndig ab. Ansonsten
-akzeptiert der Server die Verbindung, geht dann in Phase 2 und wartet auf
-Anfragen.
-
-Ihre Identit�t basiert auf zwei Informationsbestandteilen:
-
-@itemize @bullet
-@item
-Dem Host, von dem Sie sich verbinden
-
-@item
-Ihrem MySQL-Benutzernamen
-@end itemize
-
-Die Identit�ts�berpr�fung wird anhand der drei Geltungsbereichs-Felder der
-@code{user}-Tabelle, n�mlich (@code{Host}, @code{User} und @code{Password})
-durchgef�hrt. Der Server akzeptiert die Verbindung nur, wenn ein
-@code{user}-Tabelleneintrag mit Ihrem Hostnamen und Benutzernamen
-�bereinstimmt und Sie das korrekte Passwort angeben k�nnen.
-
-Werte in den Geltungsbereichs-Feldern der @code{user}-Tabelle k�nnen wie folgt
-festgelegt werden:
-
-@itemize @bullet
-@item
-Ein @code{Host}-Wert kann ein Hostname oder eine IP-Nummer sein, oder
-@code{'localhost'}, was die lokale Maschine angibt.
-
-@item
-@cindex Platzhalter (Wildcards), in der @code{mysql.user}-Tabelle
-Sie k�nnen die Platzhalterzeichen @samp{%} und @samp{_} im @code{Host}-Feld
-benutzen.
-
-@item
-Ein @code{Host}-Wert @code{'%'} stimmt mit jedem Hostnamen �berein.
-
-@item
-Ein leerer @code{Host}-Wert bedeutet, dass die Berechtigung zusammen mit
-dem Eintrag in der @code{host}-Tabelle gilt, der mit dem angegebenen
-Hostnamen �bereinstimmt. Weitere Informationen hierzu finden Sie im
-n�chsten Kapitel.
-
-@cindex Netmask-Notation, in der @code{mysql.user}-Tabelle
-@item
-Ab MySQL-Version 3.23 k�nnen @code{Host}-Werte als IP-Nummern festgelegt
-werden, und Sie k�nnen eine Netmask festlegen, die angibt, wie viele
-Adress-Bits f�r die Netzwerknummer benutzt werden. Beispiel:
-
-@example
-GRANT ALL PRIVILEGES on db.* to david@@'192.58.197.0/255.255.255.0';
-@end example
-
-Das erlaubt jedem, sich von einer IP zu verbinden, bei der folgendes gilt:
-
-@example
-benutzer_ip & netmask = host_ip.
-@end example
-
-Im obigen Beispiel k�nnen sich alle IP's im Intervall zwischen 192.58.197.0
-bis 192.58.197.255 mit dem MySQL-Server verbinden.
-
-@item
-@cindex anonymer Benutzer
-Platzhalterzeichen sind im @code{User}-Feld nicht erlaubt. Sie k�nnen aber
-einen leeren Wert angeben, der mit jedem Namen �bereinstimmt. Wenn der
-Eintrag in der @code{user}-Tabelle, der mit einer hereinkommenden
-Verbindung �bereinstimmt, einen leeren Benutzernamen hat, wird angenommen,
-dass der Benutzer der anonyme Benutzer ist (der Benutzer ohne Namen), und
-nicht der Name, den der Client tats�chlich angegeben hat. Das bedeutet,
-dass ein leerer Benutzername f�r alle weiteren Zugriffs�berpr�fungen
-w�hrend der laufenden Verbindung benutzt wird (also w�hrend Phase 2).
-
-@item
-Das @code{Password}-Feld kann leer sein. Das bedeutet nicht, dass jedes
-Passwort �bereinstimmt, sondern dass der Benutzer sich ohne Angabe eines
-Passworts verbinden muss.
-@end itemize
-
-@findex PASSWORD()
-Nicht-leere @code{Password}-Werte repr�sentieren verschl�sselte Passw�rter.
-MySQL speichert Passw�rter nicht im Klartext, so dass jeder sie sehen
-k�nnte. Statt dessen wird das Passwort eines Benutzers, der sich zu
-verbinden versucht, verschl�sselt (unter Benutzung der
-@code{PASSWORD()}-Funktion). Das verschl�sselte Passwort wird dann benutzt,
-wenn Client / Server pr�fen, ob das Passwort korrekt ist (das geschieht,
-ohne dass das verschl�sselte Passwort jemals �ber die Verbindung �bertragen
-wird). Beachten Sie, dass aus der Sicht von MySQL das verschl�sselte
-Passwort das ECHTE Passwort ist, daher sollten Sie niemandem Zugriff darauf
-geben! Insbesondere sollten Sie keinem normalen Benutzer Lesezugriff auf
-die Tabellen der @code{mysql}-Datenbank geben!
-
-Die unten stehenden Beispiele zeigen, wie unterschiedliche Kombinationen
-von @code{Host}- und-@code{User}-Werten in den
-@code{user}-Tabelleneintr�gen auf hereinkommende Verbindungen zutreffen:
-
-@multitable @columnfractions .25 .15 .60
-@item @code{Host} @strong{Wert} @tab @code{User} @strong{Wert} @tab @strong{Verbindungen, die mit dem Eintrag �bereinstimmen}
-@item @code{'thomas.loc.gov'} @tab @code{'fred'} @tab @code{fred}, der sich von @code{thomas.loc.gov} aus verbindet
-@item @code{'thomas.loc.gov'} @tab @code{''} @tab Jeder Benutzer, der sich von @code{thomas.loc.gov} aus verbindet
-@item @code{'%'} @tab @code{'fred'} @tab @code{fred}, der sich von jedem Host aus verbindet
-@item @code{'%'} @tab @code{''} @tab Jeder Benutzer, der sich von jedem Host aus verbindet
-@item @code{'%.loc.gov'} @tab @code{'fred'} @tab @code{fred}, der sich von jedem beliebigen Host in der @code{loc.gov}-Dom�ne aus verbindet
-@item @code{'x.y.%'} @tab @code{'fred'} @tab @code{fred}, der sich von @code{x.y.net}, @code{x.y.com}, @code{x.y.edu} usw. aus verbindet (wahrscheinlich eher unsinnig)
-@item @code{'144.155.166.177'} @tab @code{'fred'} @tab @code{fred}, der sich vom Host mit der IP-Adresse @code{144.155.166.177} aus verbindet
-@item @code{'144.155.166.%'} @tab @code{'fred'} @tab @code{fred}, der sich von jedem beliebigen Host im Class-C-Subnet @code{144.155.166} aus verbindet
-@item @code{'144.155.166.0/255.255.255.0'} @tab @code{'fred'} @tab Dasselbe wie im vorherigen Beispiel
-@end multitable
-
-Weil Sie im @code{Host}-Feld IP-Platzhalterwerte verwenden k�nnen
-(beispielsweise @code{'144.155.166.%'}, was mit jedem Host in einem Subnet
-�bereinstimmt), besteht die M�glichkeit, dass jemand diese F�higkeit
-ausbeutet, indem er einen Host zum Beispiel
-@code{144.155.166.somewhere.com} nennt. Um solche Versuche zu vereiteln,
-verbietet MySQL den Vergleich mit Hostnamen, die mit Ziffern und einem
-Punkt �bereinstimmen. Wenn Sie daher einen Host haben, der so wie
-@code{1.2.foo.com} benannt ist, wird sein Name nie mit der
-@code{Host}-Spalte der Berechtigungstabellen �bereinstimmen. Nur eine
-IP-Nummer kann mit dem IP-Platzhalterwert �bereinstimmen.
-
-Eine hereinkommende Verbindung kann mit mehr als einem Eintrag in der
-@code{user}-Tabelle �bereinstimmen. Beispielsweise w�rde eine Verbindung
-von @code{thomas.loc.gov} aus durch @code{fred} mit mehreren der oben
-genannten Eintr�ge �bereinstimmen. Wie entscheidet der Server, welcher der
-Eintr�ge benutzt werden soll, wenn mehrere zutreffen? Der Server l�st
-dieses Problem, indem er die @code{user}-Tabelle nach dem Einlesen beim
-Start sortiert, und danach die Eintr�ge in sortierter Form durchsieht, wenn
-ein Benutzer versucht, sich zu verbinden. Der erste �bereinstimmende
-Eintrag ist der, der benutzt wird.
-
-Das Sortieren der @code{user}-Tabelle funktioniert wie folgt. Nehmen Sie
-an, dass die @code{user}-Tabelle so aussieht:
-
-@example
-+-----------+----------+-
-| Host | User | ...
-+-----------+----------+-
-| % | root | ...
-| % | jeffrey | ...
-| localhost | root | ...
-| localhost | | ...
-+-----------+----------+-
-@end example
-
-Wenn der Server die Tabelle liest, ordnet er die Eintr�ge mit den
-spezifischsten Eintr�gen f�r die @code{Host}-Werte zuerst ein (@code{'%'}
-in der @code{Host}-Spalte bedeutet ``jeder Host'' und ist am
-unspezifischsten). Eintr�ge mit denselben @code{Host}-Werten werden mit den
-spezifischsten @code{User}-Werten zuerst geordnet (ein leerer
-@code{User}-Wert bedeutet ``jeder Benutzer'' und ist am
-unspezifischsten). Die daraus resultierende sortierte @code{user}-Tabelle
-sieht wie folgt aus:
-
-@example
-+-----------+----------+-
-| Host | User | ...
-+-----------+----------+-
-| localhost | root | ...
-| localhost | | ...
-| % | jeffrey | ...
-| % | root | ...
-+-----------+----------+-
-@end example
-
-@cindex Berechtigungstabellen, sortieren
-@cindex sortieren, Berechtigungstabellen
-@cindex @code{user}-Tabelle, sortieren
-Beim Versuch einer Verbindung durchsucht der Server die sortierten Eintr�ge
-und benutzt die ersten �bereinstimmenden. Bei einer Verbindung von
-@code{localhost} aus durch @code{jeffrey} stimmen die Werte zuerst mit den
-Eintr�gen von @code{'localhost'} in der @code{Host}-Spalte �berein. Hiervon
-stimmt der Eintrag mit dem leeren Benutzernamen sowohl mit dem verbindenden
-Host als auch mit dem Benutzernamen �berein. (@code{'%'/'jeffrey'} h�tte
-auch �bereingestimmt, aber er ist nicht der erste Tabelleneintrag, der
-gefunden wird.)
-
-Hier ist ein weiteres Beispiel. Nehmen Sie an, die @code{user}-Tabelle
-sieht wie folgt aus:
-
-@example
-+----------------+----------+-
-| Host | User | ...
-+----------------+----------+-
-| % | jeffrey | ...
-| thomas.loc.gov | | ...
-+----------------+----------+-
-@end example
-
-Die sortierte Tabelle sieht wie folgt aus:
-
-@example
-+----------------+----------+-
-| Host | User | ...
-+----------------+----------+-
-| thomas.loc.gov | | ...
-| % | jeffrey | ...
-+----------------+----------+-
-@end example
-
-Eine Verbindung von @code{thomas.loc.gov} aus durch @code{jeffrey} stimmt
-mit dem ersten Eintrag �berein, wohingegen eine Verbindung von
-@code{whitehouse.gov} aus durch @code{jeffrey} mit dem zweiten Eintrag
-�bereinstimmt.
-
-Ein h�ufiges Missverst�ndnis besteht darin zu denken, dass bei einem
-angegebenen Benutzernamen alle Eintr�ge, die explizit den Benutzer nennen,
-zuerst benutzt werden, wenn der Server versucht, eine �bereinstimmung f�r
-die Verbindung zu finden. Das stimmt schlicht nicht. Das vorherige Beispiel
-stellt das dar, wobei eine Verbindung von @code{thomas.loc.gov} aus durch
-@code{jeffrey} zuerst gerade nicht mit dem Eintrag �bereinstimmt, der
-@code{'jeffrey'} als @code{User}-Feldwert enth�lt, sondern mit dem Eintrag,
-der keinen Benutzernamen enth�lt!
-
-Wenn Sie Probleme haben, sich mit dem Server zu verbinden, geben Sie die
-@code{user}-Tabelle aus und sortieren Sie sich von Hand, um zu sehen, wo
-die erste �bereinstimmung stattfindet.
-
-
-@node Request access, Access denied, Connection access, Privilege system
-@c German node Anfragezugriff
-@subsection Zugriffskontrolle, Phase 2: Anfrage�berpr�fung
-
-Wenn Sie erst einmal eine Verbindung hergestellt haben, geht der Server in
-Phase 2. Bei jeder Anfrage, die �ber diese Verbindung hereinkommt, pr�ft
-der Server, ob Sie ausreichende Berechtigungen haben, sie auszuf�hren,
-wobei es auf die Operation ankommt, die Sie ausf�hren wollen. Hier kommen
-die Berechtigungsfelder der Berechtigungstabellen ins Spiel. Diese
-Berechtigungen k�nnen aus jeder der @code{user}-, @code{db}-,
-@code{host}-, @code{tables_priv}- oder @code{columns_priv}-Tabellen
-stammen. Die Berechtigungstabellen werden mit @code{GRANT}- und
-@code{REVOKE}-Befehlen ver�ndert. @xref{GRANT, , @code{GRANT}}. (Hilfreich
-sind die Ausf�hrungen unter @ref{Privileges}, wo die Felder aufgelistet
-sind, die sich in jeder der Berechtigungstabellen finden.)
-
-Die @code{user}-Tabelle gew�hrt Berechtigungen, die Ihnen auf globaler
-Ebene zugeordnet sind und die unabh�ngig von der gerade aktuellen Datenbank
-zutreffen. Wenn beispielsweise die @code{user}-Tabelle Ihnen die
-@strong{delete}-Berechtigung gew�hrt, k�nnen Sie Zeilen aus jeder Datenbank
-auf dem Server-Host l�schen! Mit anderen Worten: Berechtigungen in der
-@code{user}-Tabelle sind Superuser-Berechtigungen. Es ist klug,
-Berechtigungen in der @code{user}-Tabelle nur Superusern wie Server- oder
-Datenbankverwaltern zu gew�hren. Bei anderen Benutzern sollten Sie
-Berechtigungen in der @code{user}-Tabelle auf @code{'N'} gesetzt lassen und
-Berechtigungen nur auf Datenbank-Ebene gew�hren, indem Sie die @code{db}-
-und @code{host}-Tabellen benutzen.
-
-@cindex anonymer Benutzer
-@cindex Platzhalter, in @code{mysql.db}-Tabelle
-@cindex Platzhalter, in @code{mysql.host}-Tabelle
-Die @code{db}- und @code{host}-Tabellen gew�hren Datenbank-spezifische
-Berechtigungen. Werte in den Geltungsbereichs-Feldern k�nnen wie folgt
-festgelegt werden:
-
-@itemize @bullet
-@item
-Die Platzhalterzeichen @samp{%} und @samp{_} k�nnen in den @code{Host}- und
-@code{Db}-Feldern jeder Tabelle benutzt werden.
-
-@item
-Ein @code{'%'}-@code{Host}-Wert in der @code{db}-Tabelle bedeutet ``jeder
-Host.'' Ein leerer @code{Host}-Wert in der @code{db}-Tabelle bedeutet
-``sieh in der @code{host}-Tabelle wegen weiterer Informationen nach''.
-
-@item
-Ein @code{'%'}- oder leerer @code{Host}-Wert in der @code{host}-Tabelle
-bedeutet ``jeder Host''.
-
-@item
-Ein @code{'%'}- oder leerer @code{Db}-Wert in einer der Tabellen bedeutet
-``jede Datenbank''.
-
-@item
-Ein leerer @code{User}-Wert in einer der Tabellen entspricht dem anonymen
-Benutzer.
-@end itemize
-
-@cindex Berechtigungstabellen, sortieren
-@cindex sortieren, Berechtigungstabellen
-@cindex @code{db}-Tabelle, sortieren
-@cindex @code{host}-Tabelle, sortieren
-Die @code{db}- und @code{host}-Tabellen werden eingelesen und sortiert,
-wenn der Server hoch f�hrt (zur gleichen Zeit, wenn er die
-@code{user}-Tabelle einliest). Die @code{db}-Tabelle wird nach den
-Geltungsbereichs-Feldern @code{Host}, @code{Db} und @code{User} sortiert.
-Die @code{host}-Tabelle wird nach den Geltungsbereichs-Feldern @code{Host}
-und @code{Db} sortiert. Bei der @code{user}-Tabelle werden die
-spezifischsten Werte zuerst und die unspezifischsten Werte zuletzt
-einsortiert, und wenn der Server nach �bereinstimmenden Eintr�gen sucht,
-benutzt er die erste �bereinstimmung, die er findet.
-
-
-@cindex Platzhalter, in @code{mysql.tables_priv}-Tabelle
-@cindex Platzhalter, in @code{mysql.columns_priv}-Tabelle
-Die @code{tables_priv}- und @code{columns_priv}-Tabellen gew�hren Tabellen-
-und Spalten-spezifische Berechtigungen. Werte in der
-Geltungsbereichs-Feldern k�nnen wie folgt festgelegt werden:
-
-@itemize @bullet
-@item
-Die Platzhalterzeichen @samp{%} und @samp{_} k�nnen im @code{Host}-Feld
-beider Tabellen benutzt werden.
-
-@item
-Ein @code{'%'}- oder leerer @code{Host}-Wert in jeder der beiden Tabellen bedeutet ``jeder Host.''
-
-@item
-Die @code{Db}-, @code{Table_name}- und @code{Column_name}-Felder d�rfen in
-beiden Tabellen keine Platzhalter enthalten oder leer sein.
-@end itemize
-
-Die @code{tables_priv}- und @code{columns_priv}-Tabellen werden nach den
-@code{Host}-, @code{Db}- und @code{User}-Feldern sortiert. Das geschieht
-�hnlich wie das Sortieren der @code{db}-Tabelle, wenngleich das Sortieren
-einfacher ist, weil nur das @code{Host}-Feld Platzhalter enthalten darf.
-
-Der Prozess der Anfragen�berpr�fung ist weiter unten beschrieben. (Wenn Sie
-mit dem Quelltext f�r die Zugangs�berpr�fung vertraut sind, werden Sie
-feststellen, dass die Beschreibung hier leicht vom im Code verwendeten
-Algorithmus abweicht. Die Beschreibung stellt dar, was der Code tats�chlich
-tut; sie weicht nur deshalb ab, um die Erkl�rung zu erleichtern.)
-
-Bei Verwaltungsanfragen (@strong{shutdown}, @strong{reload} usw.) pr�ft der
-Server nur den @code{user}-Tabelleneintrag, weil das die einzige Tabelle
-ist, die Verwaltungsberechtigungen festlegt. Zugriff wird gew�hrt, wenn der
-Eintrag die verlangte Operation erlaubt, ansonsten wird er verweigert. Wenn
-Sie zum Beispiel @code{mysqladmin shutdown} ausf�hren wollen, aber Ihr
-@code{user}-Tabelleneintrag Ihnen nicht die @strong{shutdown}-Berechtigung
-gew�hrt, wird der Zugriff verweigert, ohne dass die @code{db}- oder
-@code{host}-Tabellen gepr�ft werden. (Sie enthalten keine
-@code{Shutdown_priv}-Spalte, daher gibt es keinen Grund, sie zur Pr�fung
-heranzuziehen.)
-
-Bei Datenbank-bezogenen Anfragen (@strong{insert}, @strong{update} usw.)
-pr�ft der Server zuerst die globalen (superuser-) Berechtigungen, indem er
-im @code{user}-Tabelleneintrag nachsieht. Wenn der Eintrag die verlangte
-Operation erlaubt, wird der Zugriff gew�hrt. Wenn die globalen
-Berechtigungen in der @code{user}-Tabelle unzureichend sind, stellt der
-Server die Datenbank-spezifischen Berechtigungen des Benutzers fest, indem
-er die @code{db}- und @code{host}-Tabellen pr�ft:
-
-@enumerate
-@item
-Der Server sieht in der @code{db}-Tabelle nach einer �bereinstimmung in den
-@code{Host}-, @code{Db}- und @code{User}-Feldern nach. In den @code{Host}-
-und @code{User}-Feldern wird nach �bereinstimmung mit dem Hostnamen
-gesucht, von dem aus sich der Benutzer verbindet, und nach �bereinstimmung
-mit dem MySQL-Benutzernamen. Im @code{Db}-Feld wird nach �bereinstimmung
-mit der Datenbank gesucht, mit der sich der Benutzer verbinden will. Wenn
-es keinen Eintrag f�r @code{Host} und @code{User} gibt, wird der Zugriff
-verweigert.
-
-@item
-Wenn es keinen �bereinstimmenden @code{db}-Tabelleneintrag gibt und das
-@code{Host}-Feld nicht leer ist, bestimmt dieser Eintrag die
-Datenbank-spezifischen Berechtigungen des Benutzers.
-
-@item
-Wenn das @code{Host}-Feld des �bereinstimmenden @code{db}-Tabelleneintrags
-leer ist, bedeutet das, dass die @code{host}-Tabelle festlegt, welchen
-Hosts Zugriff auf die Datenbank erlaubt werden soll. In diesem Fall schl�gt
-der Server weiter in der @code{host}-Tabelle nach, um eine �bereinstimmung
-in den @code{Host}- und @code{Db}-Feldern zu finden. Wenn kein
-@code{host}-Tabelleneintrag passt, wird der Zugriff verweigert. Bei einer
-�bereinstimmung werden die Datenbank-spezifischen Berechtigungen des
-Benutzers als Schnittmenge (@emph{nicht} Vereinigungsmenge!) der
-Berechtigungen in den @code{db}- und @code{host}-Tabelleneintr�gen
-berechnet, was die Berechtigungen ergibt, die in beiden Eintr�gen
-@code{'Y'} sind. (Auf diese Weise k�nnen Sie allgemeine Berechtigungen in
-den @code{db}-Tabelleneintr�gen vergeben und diese dann fallweise von Host
-zu Host beschr�nken, indem Sie die @code{host}-Tabelleneintr�ge benutzen.)
-@end enumerate
-
-Nachdem die Datenbank-spezifischen Berechtigungen festgestellt wurden, die
-durch die @code{db}- und @code{host}-Tabelleneintr�ge gew�hrt werden, f�gt
-der Server diese zu den globalen Berechtigungen in der @code{user}-Tabelle
-hinzu. Wenn das Ergebnis die verlangte Operation erlaubt, wird der Zugriff
-gew�hrt. Ansonsten pr�ft der Server die Tabellen- und
-Spalten-Berechtigungen des Benutzers in den @code{tables_priv}- und
-@code{columns_priv}-Tabellen und f�gt diese zu den Benutzerberechtigungen
-hinzu. Aus dem Ergebnis ergibt sich, ob der Zugriff erlaubt oder verweigert
-wird.
-
-Als Boole'scher Term ausgedr�ckt kann die vorstehende Beschreibung der
-Berechnung der Benutzerrechte wie folgt zusammengefasst werden:
-
-@example
-globale Berechtigungen
-ODER (Datenbankberechtigungen UND Hostberechtigungen)
-ODER Tabellenberechtigungen
-ODER Spaltenberechtigungen
-@end example
-
-Vielleicht ist es nicht offensichtlich, warum der Server bei anf�nglich als
-unzureichend herausgefundenen globalen @code{user}-Eintragsberechtigungen
-f�r die verlangte Operation diese Berechtigungen anschlie�end zu den
-Datenbank-, Tabellen- und Spalten-spezifischen Berechtigungen hinzuz�hlt.
-Der Grund liegt darin, dass eine Anfrage m�glicherweise mehr als eine Sorte
-von Berechtigungen erfordert. Wenn Sie beispielsweise ein @code{INSERT ...
-SELECT}-Statement ausf�hren, brauchen Sie eventuell sowohl die
-@strong{insert}- als auch die @strong{select}-Berechtigung. Ihre
-Berechtigungen m�gen so sein, dass der @code{user}-Tabelleneintrag eine
-Berechtigung enth�lt und der @code{db}-Tabelleneintrag die andere. In
-diesem Fall haben Sie die notwendigen Berechtigungen, die Anfrage
-auszuf�hren, aber das Server kann das nicht aus nur einer der beiden
-Tabellen heraus erkennen, sondern muss daf�r die Eintr�ge beider Tabellen
-kombinieren.
-
-@cindex @code{host}-Tabelle
-@cindex Tabellen, @code{host}
-
-Die @code{host}-Tabelle kann benutzt werden, um eine Liste sicherer Server
-zu pflegen.
-
-Bei TcX enth�lt die @code{host}-Tabelle eine Liste aller Maschine des
-lokalen Netzwerks. Diesen werden alle Berechtigungen gew�hrt.
-
-Sie k�nnen die @code{host}-Tabelle auch dazu benutzen, die Host
-aufzuf�hren, die @emph{nicht} sicher sind. Nehmen Sie an, Sie haben eine
-Maschine @code{oeffentlich.ihre.domaene}, die an einem �ffentlichen Ort
-ist, den Sie als nicht sicher erachten. Sie k�nnen allen Hosts in Ihrem
-Netzwerk Zugriff gew�hren ausser dieser Maschine, indem Sie die
-@code{host}-Tabelleneintr�ge wie folgt benutzen:
-
-@example
-+--------------------------+----+-
-| Host | Db | ...
-+--------------------------+----+-
-| oeffentlich.ihre.domane | % | ... (alle Berechtigungen auf 'N' gesetzt)
-| %.ihre.domaene | % | ... (alle Berechtigungen auf 'Y' gesetzt)
-+--------------------------+----+-
-@end example
-
-@cindex Berechtigungen, �nderungen
-@cindex �nderungen der Berechtigungen
-@cindex Tabellen, gew�hren
-@cindex Berechtigungstabellen
-
-Nat�rlich sollten Sie Ihre Eintr�ge in die Berechtigungstabellen immer
-testen (indem Sie zum Beispiel @code{mysqlaccess} benutzen), um
-sicherzustellen, dass Ihre Zugriffsberechtigungen tats�chlich so gesetzt
-sind, wie Sie denken.
-
-
-@node Access denied, , Request access, Privilege system
-@c German node Zugriff verweigert
-@subsection Gr�nde f�r @code{Access denied}-Fehler
-
-Wenn Sie beim Verbindungsversuch zu einem MySQL-Server @code{Access
-denied}-Fehler bekommen, gibt Ihnen die folgende Liste ein paar Hinweise,
-das Problem zu beheben:
-
-@itemize @bullet
-@item
-Haben Sie nach der Installation von MySQL das
-@code{mysql_install_db}-Skript laufen lassen, um die anf�nglichen
-Berechtigungstabelleninhalte zu konfigurieren? Wenn nicht, tun Sie das!
-@xref{Default privileges}. Testen Sie die anf�nglichen
-Berechtigungen, indem Sie folgenden Befehl ausf�hren:
-
-@example
-shell> mysql -u root test
-@end example
-
-Der Server sollte die Verbindung ohne Fehlermeldung zulassen. Stellen Sie
-auch sicher, dass Sie eine Datei @file{user.MYD} im
-MySQL-Datenbankverzeichnis haben. �blicherweise ist das
-@file{PFAD/var/mysql/user.MYD}, wobei @code{PFAD} der Pfadname zum
-MySQL-Installationsverzeichnis ist.
-
-@item
-Nach einer gerade durchgef�hrten Installation sollten Sie sich mit dem
-Server verbinden und Ihre Benutzer und deren Zugriffsberechtigungen
-einrichten:
-
-@example
-shell> mysql -u root mysql
-@end example
-
-Der Server sollte die Verbindung zulassen, weil der
-MySQL-@code{root}-Benutzer anf�nglich kein Passwort hat. Das ist ein
-Sicherheitsrisiko, daher sollten Sie das @code{root}-Passwort einrichten,
-w�hrend Sie Ihre anderen MySQL-Benutzer einrichten.
-
-Wenn Sie versuchen, sich als @code{root} zu verbinden, und folgenden Fehler
-erhalten:
-
-@example
-Access denied for user: '@@unknown' to database mysql
-@end example
-
-hei�t das, dass Sie in der @code{user}-Tabelle keinen Eintrag
-@code{'root'} im @code{User}-Spaltenwert haben und dass @code{mysqld} den
-Hostnamen f�r Ihren Client nicht aufl�sen kann. In diesem Fall m�ssen Sie
-den Server mit der @code{--skip-grant-tables}-Option neu starten und Ihrer
-@file{/etc/hosts}- oder @file{\windows\hosts}-Datei einen Eintrag f�r Ihren
-Host hinzuf�gen.
-
-@item
-Wenn Sie einen Fehler wie folgt erhalten:
-
-@example
-shell> mysqladmin -u root -pxxxx ver
-Access denied for user: 'root@@localhost' (Using password: YES)
-@end example
-
-bedeutet das, dass Sie ein falsches Passwort benutzen. @xref{Passwords}.
-
-Wenn Sie das Root-Passwort vergessen haben, k�nnen Sie @code{mysqld} mit
-@code{--skip-grant-tables} neu starten, um das Passwort zu �ndern. Diese
-Option wird weiter hinten im Handbuch ausf�hrlicher beschrieben.
-
-Wenn Sie den obigen Fehler erhalten, obwohl Sie kein Passwort angegeben
-haben, bedeutet das, dass in einer der @code{my.ini}-Dateien ein falsches
-Passwort steht. @xref{Option files}. Sie k�nnen die Benutzung der
-Optionsdateien mit der @code{--no-defaults}-Option wie folgt verhindern:
-
-@example
-shell> mysqladmin --no-defaults -u root ver
-@end example
-
-@item
-@cindex @code{mysql_fix_privilege_tables}
-Wenn Sie eine bestehende MySQL-Installation von einer Version vor 3.22.11
-auf Version 3.22.11 oder sp�ter aktualisiert haben, haben Sie das
-@code{mysql_fix_privilege_tables}-Skript ausgef�hrt? Falls nicht, tun Sie
-das! Die Struktur der Berechtigungstabellen hat sich ab MySQL-Version
-3.22.11 ge�ndert, als das @code{GRANT}-Statement mit Funktion erf�llt
-wurde.
-
-@item
-Falls es aussieht, als h�tten sich Ihre Berechtigungen mitten in einer
-Sitzung ge�ndert, kann es sein, dass ein Superuser sie ge�ndert hat. Das
-Neuladen der Berechtigungstabellen betrifft neue
-Client-Verbindungen, aber auch bestehende Verbindungen, wie in
-@ref{Privilege changes} beschrieben.
-
-@item
-Wenn Sie es nicht schaffen, dass Ihr Passwort funktioniert, denken Sie
-daran, dass Sie die @code{PASSWORD()}-Funktion benutzen m�ssen, wenn Sie
-das Passwort mit den @code{INSERT}-, @code{UPDATE}- oder @code{SET
-PASSWORD}-Statements setzen. Die @code{PASSWORD()}-Funktion wird nicht
-ben�tigt, wenn Sie das Passwort mit dem @code{GRANT ... INDENTIFIED
-BY}-Statement oder dem @code{mysqladmin password}-Befehl setzen.
-@xref{Passwords}.
-
-@item
-@code{localhost} ist ein Synonym f�r Ihren lokalen Hostnamen und
-gleichzeitig der vorgabem��ige Host, mit dem sich Clients versuchen zu
-verbinden, wenn Sie nicht explizit einen Hostnamen angeben. Verbindungen zu
-@code{localhost} funktionieren jedoch nicht, wenn Sie auf einem System
-arbeiten, das MIT-pThreads benutzt (@code{localhost}-Verbindungen werden
-�ber Unix-Sockets hergestellt, die von MIT-pThreads nicht unterst�tzt
-werden). Um auf solchen Systemen Probleme zu vermeiden, sollten Sie die
-@code{--host}-Option zu benutzen, um den Serverhost explizit anzugeben. Das
-stellt eine TCP/IP-Verbindung zum @code{mysqld}-Server her. In diesem Fall
-muss Ihr echter Hostname in den @code{user}-Tabelleneintr�gen auf dem
-Server-Host stehen. (Das gilt sogar dann, wenn Sie ein Client-Programm auf
-demselben Host fahren, wo der Server l�uft.)
-
-@item
-Wenn Sie beim Versuch, sich mit @code{mysql -u user_name db_name} mit einer
-Datenbank zu verbinden, einen @code{Access denied}-Fehler erhalten, gibt es
-eventuell ein Problem mit der @code{user}-Tabelle. Das k�nnen Sie
-�berpr�fen, indem Sie @code{mysql -u root mysql} und folgendes
-SQL-Statement absetzen:
-
-@example
-mysql> SELECT * FROM user;
-@end example
-
-Das Ergebnis sollte einen Eintrag enthalten, in dem die @code{Host}- und
-@code{User}-Spalten mit dem Hostnamen Ihres Computers und Ihrem
-MySQL-Benutzernamen �bereinstimmen.
-
-@item
-Die @code{Access denied}-Fehlermeldung sagt Ihnen, als wer Sie sich
-versuchen einzuloggen, den Host, von dem aus Sie versuchen, sich zu
-verbinden, und ob Sie ein Passwort benutzen oder nicht. Normalerweise
-sollten Sie in der @code{user}-Tabelle einen Eintrag haben, der exakt mit
-Ihrem Hostnamen und Ihrem Benutzernamen �bereinstimmt, die in der
-Fehlermeldung ausgegeben wurden. Wenn Sie zum Beispiel eine Fehlermeldung
-erhalten, die @code{Using password: NO} enth�lt, bedeutet das, dass Sie
-versuchen sich einzuloggen, ohne ein Passwort anzugeben.
-
-@item
-Wenn Sie folgenden Fehler erhalten, wenn Sie sich von einem anderen Host
-als dem, auf dem der MySQL-Server l�uft, zu verbinden, gibt es keine Zeile
-in der @code{user}-Tabelle, die mit Ihrem Host �bereinstimmt:
-
-@example
-Host ... is not allowed to connect to this MySQL server
-@end example
-
-Das k�nnen Sie mit dem Kommandozeilentool @code{mysql} beheben (auf dem
-Serverhost!) und eine Zeile zur @code{user}-, @code{db}- oder
-@code{host}-Tabelle hinzuf�gen, die eine Benutzername-/Hostname-Kombination
-enth�lt, von wo aus Sie sich verbinden wollen; danach f�hren Sie
-@code{mysqladmin flush-privileges} aus. Wenn Sie nicht MySQL-Version 3.22
-laufen lassen und die IP-Nummer oder den Hostnamen der Maschine nicht
-kennen, von der aus Sie sich verbinden, sollten Sie einen Eintrag mit
-@code{'%'} als @code{Host}-Spaltenwert in die @code{user}-Tabelle einf�gen
-und @code{mysqld} mit der @code{--log}-Option auf der Servermaschine neu
-starten. Nach dem Verbinden von der Client-Maschine aus zeigt die
-Information im MySQL-Log an, wie Sie sich wirklich verbunden haben.
-(Ersetzen Sie danach @code{'%'} im @code{user}-Tabelleneintrag durch den
-tats�chlichen Hostnamen, der im Log steht. Ansonsten erhalten Sie ein
-System, das unsicher ist.)
-
-Ein weiterer Grund f�r diesen Fehler unter Linux kann sein, dass Sie eine
-Bin�rversion von MySQL benutzen, die mit einer anderen glibc-Version
-kompiliert wurde als die, die Sie benutzen. In diesem Fall sollten Sie
-entweder die glibc Ihres Betriebssystems aktualisieren oder die
-Quellversion von MySQL herunter laden und sie selbst kompilieren. Ein
-Quell-RPM l��t sich normalerweise sehr einfach kompilieren und
-installieren, daher stellt dies kein gro�es Problem dar.
-
-@item
-Wenn Sie eine Fehlermeldung erhalten, in der der Hostname nicht angezeigt
-wird oder eine IP-Nummer ist, obwohl Sie sich mit einem Hostnamen versuchen
-zu verbinden:
-
-@example
-shell> mysqladmin -u root -pxxxx -h ein-hostname ver
-Access denied f�r user: 'root@' (Using password: YES)
-@end example
-
-bedeutet das, dass MySQL einen Fehler beim Aufl�sen der IP zu einem
-Hostnamen erhielt. In diesem Fall k�nnen Sie @code{mysqladmin flush-hosts}
-ausf�hren, um den internen DNS-Cache zu flushen. @xref{DNS}.
-
-Einige dauerhafte L�sungen sind:
-
-@itemize @minus
-@item
-Versuchen Sie herauszufinden, was mit Ihrem DNS-Server nicht funktioniert,
-und beheben Sie das Problem.
-
-@item
-Geben Sie in den MySQL-Berechtigungstabellen IP-Nummern statt Hostnamen an.
-
-@item
-Starten Sie @code{mysqld} mit @code{--skip-name-resolve}.
-
-@item
-Starten Sie @code{mysqld} mit @code{--skip-host-cache}.
-
-@item
-Verbinden Sie sich zu @code{localhost} wenn Sie Server und Client auf
-derselben Maschine laufen lassen.
-
-@item
-Tragen Sie die Client-Maschinennamen in @code{/etc/hosts} ein.
-@end itemize
-
-@item
-Wenn @code{mysql -u root test} funktioniert, aber @code{mysql -h
-your_hostname -u root test} zu @code{Access denied} f�hrt, haben Sie
-eventuell nicht den korrekten Namen Ihres Hosts in der @code{user}-Tabelle.
-Ein h�ufiges Problem hierbei ist, dass der @code{Host}-Wert im
-@code{user}-Tabelleneintrag einen unqualifizierten Hostnamen festlegt, die
-Namensaufl�sungsroutinen Ihres Systems aber einen voll qualifizierten
-Dom�nennamen zur�ckgeben (oder umgekehrt). Wenn Sie zum Beispiel einen
-Eintrag mit dem Host @code{'tcx'} in der @code{user}-Tabelle haben, Ihr DNS
-MySQL aber mitteilt, dass Ihr Hostname @code{'tcx.subnet.se'} ist,
-funktioniert der Eintrag nicht. F�gen Sie der @code{user}-Tabelle einen
-Eintrag hinzu, der die IP-Nummer Ihres Hosts als @code{Host}-Spaltenwert
-enth�lt. (Alternativ k�nnten Sie der @code{user}-Tabelle einen Eintrag mit
-einem @code{Host}-Wert hinzuf�gen, der einen Platzhalter enth�lt, zum
-Beispiel @code{'tcx.%'}. Allerdings ist die Benutzung von
-Hostnamensendungen mit @samp{%} @emph{unsicher} und wird daher @emph{nicht}
-empfohlen!)
-
-@item
-Wenn @code{mysql -u benutzername test} funktioniert, aber @code{mysql -u
-benutzername andere_datenbank} nicht, haben Sie wahrscheinlich keinen
-Eintrag f�r @code{andere_datenbank} in der @code{db}-Tabelle.
-
-@item
-Wenn @code{mysql -u benutzername datenbankname} funktioniert, wenn es auf
-der Servermaschine ausgef�hrt wird, aber @code{mysql -u hostname -u
-benutzername datenbankname} nicht, wenn es auf einer anderen Clientmaschine
-ausgef�hrt wird, ist die Clientmaschine wahrscheinlich nicht in der
-@code{user}-Tabelle oder der @code{db}-Tabelle aufgef�hrt.
-
-@item
-Wenn Sie gar nicht herausfinden k�nnen, warum Sie @code{Access denied}
-erhalten, entfernen Sie aus der @code{user}-Tabelle alle Eintr�ge, die
-@code{Host}-Werte haben, die Platzhalter enthalten (Eintr�ge, die @samp{%}
-oder @samp{_} enthalten). Ein sehr h�ufiger Fehler besteht darin, einen
-neuen Eintrag mit @code{Host}=@code{'%'} und
-@code{User}=@code{'irgendein_benutzer'} in der Annahme hinzuzuf�gen, dass
-einem das erlaubt, @code{localhost} anzugeben, um sich von derselben
-Maschine aus zu verbinden. Der Grund, warum das nicht funktioniert, ist,
-dass die vorgabem��igen Berechtigungen einen Eintrag mit
-@code{Host}=@code{'localhost'} und @code{User}=@code{''} enthalten. Weil
-dieser Eintrag einen @code{Host}-Wert @code{'localhost'} hat, der
-spezifischer ist als @code{'%'}, wird er vorrangig vor dem neuen Eintrag
-benutzt, wenn man sich von @code{localhost} verbindet! Das korrekte
-Vorgehen ist, einen zweiten Eintrag mit @code{Host}=@code{'localhost'} und
-@code{User}=@code{'irgendein_benutzer'} hinzuzuf�gen, oder den Eintrag mit
-@code{Host}=@code{'localhost'} und @code{User}=@code{''} zu entfernen.
-
-@item
-Wenn Sie den folgenden Fehler erhalten, gibt es eventuell Probleme mit der
-@code{db}- oder der @code{host}-Tabelle:
-
-@example
-Access to database denied
-@end example
-
-Wenn der aus der @code{db}-Tabelle ausgew�hlte Eintrag einen leeren Wert in
-der @code{Host}-Spalte hat, stellen Sie sicher, dass es einen oder mehrere
-korrespondierende Eintr�ge in der @code{host}-Tabelle gibt, die festlegen,
-auf welche Hosts der @code{db}-Tabelleneintrag zutrifft.
-
-Wenn Sie bei der Benutzung der SQL-Befehle @code{SELECT ... INTO OUTFILE}
-oder @code{LOAD DATA INFILE} einen Fehler erhalten, enth�lt Ihr Eintrag in
-der @code{user}-Tabelle wahrscheinlich keine angeschaltete
-@strong{file}-Berechtigung.
-
-@item
-@cindex Konfigurationsdateien
-@cindex Umgebungsvariablen
-@tindex .my.cnf-Datei
-Denken Sie daran, dass Client-Programme Verbindungsparameter benutzen, die
-in Konfigurationsdateien oder Umgebungsvariablen festgelegt sind.
-@xref{Environment variables}. Wenn ein Client anscheinend falsche
-vorgabem��ige Verbindungsparameter sendet, wenn Sie diese nicht auf der
-Kommandozeile angeben, �berpr�fen Sie Ihre Umgebung und die
-@file{.my.cnf}-Datei in Ihrem Heimatverzeichnis. �berpr�fen Sie
-gegebenenfalls auch systemweite MySQL-Konfigurationsdateien, obwohl es sehr
-viel unwahrscheinlicher ist, dass Client-Verbindungsparameter in diesen
-festgelegt werden. @xref{Option files}. Wenn Sie beim Laufenlassen eines
-Clients ohne irgend welche Optionen @code{Access denied} erhalten, stellen
-Sie sicher, dass Sie kein altes Passwort in irgendeiner Optionsdatei
-angegeben haben! @xref{Option files}.
-
-@item
-Wenn Sie in den Berechtigungstabellen direkte �nderungen vornehmen (indem
-Sie ein @code{INSERT}- oder @code{UPDATE}-Statement benutzen) und Ihre
-�nderungen anscheinend ignoriert werden, denken Sie daran, dass sie ein
-@code{FLUSH PRIVILEGES}-Statement absetzen m�ssen oder einen
-@code{mysqladmin flush-privileges}-Befehl ausf�hren, um den Server zu
-veranlassen, die Berechtigungstabellen neu einzulesen. Ansonsten haben Ihre
-�nderungen keine Auswirkung, bis der Server das n�chste Mal gestartet wird.
-Denken Sie auch daran, wenn Sie ein @code{root}-Passwort mit einem
-@code{UPDATE}-Befehl festgelegt haben, dass Sie dieses solange nicht
-angeben m�ssen, bis Sie die Berechtigungen flushen, weil der Server vorher
-nicht wei�, dass Sie Ihr Passwort ge�ndert haben!
-
-@item
-Wenn Sie Zugriffsprobleme mit einem Perl-, PHP-, Python- oder ODBC-Programm
-haben, versuchen Sie, sich mit @code{mysql -u benutzername datenbankname}
-oder @code{mysql -u benutzername -pihr_passwort datenbankname} zu
-verbinden. Wenn es Ihnen gelingt, sich mittels des @code{mysql}-Clients zu
-verbinden, gibt es ein Problem mit Ihrem Programm und nicht mit den
-Zugriffsberechtigungen. (Beachten Sie, dass zwischen @code{-p} und dem
-Passwort kein Leerzeichen steht; alternativ k�nnen Sie auch die
-@code{--password=ihr_passwort}-Syntax benutzen, um Ihr Passwort anzugeben.
-Wenn Sie die @code{-p}-Option allein benutzen, wird MySQL eine
-Eingabeaufforderung f�r das Passwort anzeigen.)
-
-@item
-Zum Testen starten Sie den @code{mysqld}-Daemon mit der
-@code{--skip-grant-tables}-Option. Anschlie�end k�nnen Sie die
-MySQL-Berechtigungstabellen �ndern und das @code{mysqlaccess}-Skript
-benutzen, um zu sehen, ob Ihre �nderungen den gew�nschten Effekt haben oder
-nicht. Wenn Sie mit Ihren �nderungen zufrieden sind, f�hren Sie
-@code{mysqladmin flush-privileges} aus, um @code{mysqld} mitzuteilen, die
-neuen Berechtigungstabellen zu benutzen. @strong{Beachten Sie:} Das
-Neuladen der Berechtigungstabellen �berschreibt die
-@code{--skip-grant-tables}-Option. Das erlaubt Ihnen, den Server zu
-veranlassen, die Berechtigungstabellen wieder zu benutzen, ohne ihn
-herunter und dann wieder herauf fahren zu m�ssen.
-
-@item
-Wenn alles andere fehlschl�gt, starten Sie den @code{mysqld}-Daemon mit
-einer Debugging-Option (zum Beispiel @code{--debug=d,general,query}). Das
-gibt Host- und Benutzerinformationen �ber Verbindungsversuche aus sowie
-Informationen �ber jeden abgesetzten Befehl. @xref{Making trace files}.
-
-@item
-Wenn Sie irgend welche anderen Probleme mit den MySQL-Berechtigungstabellen
-haben und meinen, das Problem der Mailing-Liste mitteilen zu m�ssen,
-stellen Sie immer einen Auszug Ihrer MySQL-Berechtigungstabellen zur
-Verf�gung. Sie k�nnen einen Auszug der Tabellen mit dem @code{mysqldump
-mysql}-Befehl erzeugen. Berichten Sie Ihr Problem - wie immer - unter
-Benutzung des @code{mysqlbug}-Skripts. @xref{Bug reports}. In einigen
-F�llen m�ssen Sie vielleicht @code{mysqld} mit @code{--skip-grant-tables}
-neu starten, um @code{mysqldump} benutzen zu k�nnen.
-@end itemize
-
-
-@node User Account Management, Disaster Prevention, Privilege system, MySQL Database Administration
-@c German node Benutzerkontenverwaltung
-@section MySQL-Benutzerkonten-Verwaltung
-
-
-
-@menu
-* GRANT::
-* User names::
-* Privilege changes::
-* Default privileges::
-* Adding users::
-* User resources::
-* Passwords::
-* Password security::
-@end menu
-
-@node GRANT, User names, User Account Management, User Account Management
-@c German node GRANT
-@subsection @code{GRANT}- und @code{REVOKE}-Syntax
-
-@findex GRANT
-@findex REVOKE
-
-@cindex Berechtigungen, gew�hren
-@cindex Berechtigungen, entziehen
-@cindex global Berechtigungen
-@cindex entziehen, Berechtigungen
-@cindex gew�hren, Berechtigungen
-
-@example
-GRANT berechtigung_art [(spalten_liste)] [, berechtigung_art [(spalten_liste)] ...]
- ON @{tabelle | * | *.* | datenbank.*@}
- TO benutzername [IDENTIFIED BY 'passwort']
- [, benutzername [IDENTIFIED BY 'passwort'] ...]
- [REQUIRE
- [@{SSL| X509@}]
- [CIPHER cipher [AND]]
- [ISSUER issuer [AND]]
- [SUBJECT subject]]
- [WITH GRANT OPTION]
-
-REVOKE berechtigung_art [(spalten_liste)] [, berechtigung_art [(spalten_liste)] ...]
- ON @{tabelle | * | *.* | datenbank.*@}
- FROM benutzername [, benutzername ...]
-@end example
-
-@code{GRANT} ist implementiert ab MySQL Version 3.22.11. Bei fr�heren
-MySQL-Versionen bewirkt das @code{GRANT}-Statement nichts.
-
-Die @code{GRANT}- und @code{REVOKE}-Befehle erlauben Systemverwaltern,
-Benutzer anzulegen und MySQL-Benutzern Rechte auf vier Berechtigungsebenen
-zu gew�hren und zu entziehen:
-
-@table @strong
-@item Globale Ebene
-Globale Berechtigungen betreffen alle Datenbanken auf einem gegebenen
-Server. Diese Berechtigungen werden in der @code{mysql.user}-Tabelle
-gespeichert.
-
-@item Datenbank-Ebene
-Datenbank-Berechtigungen betreffen alle Tabellen in einer gegebenen
-Datenbank. Diese Berechtigungen werden in den @code{mysql.db}- und
-@code{mysql.host}-Tabellen gespeichert.
-
-@item Tabellen-Ebene
-Tabellen-Berechtigungen betreffen alle Spalten in einer gegebenen Tabelle.
-Diese Berechtigungen werden in der @code{mysql.tables_priv}-Tabelle
-gespeichert.
-
-@item Spalten-Ebene
-Spalten-Berechtigungen betreffen einzelne Spalten in einer gegebenen
-Tabelle. Diese Berechtigungen werden in der
-@code{mysql.columns_priv}-Tabelle gespeichert.
-@end table
-
-Wenn Sie ein @code{GRANT} f�r einen Benutzer angeben, den es nicht gibt,
-wird dieser Benutzer erzeugt. Beispiele, wie @code{GRANT} funktioniert,
-finden Sie unter @ref{Adding users}.
-
-Bei @code{GRANT} und @code{REVOKE}-Statements kann @code{berechtigung_art}
-wie folgt angegeben werden:
-
-@example
-ALL PRIVILEGES FILE RELOAD
-ALTER INDEX SELECT
-CREATE INSERT SHUTDOWN
-DELETE PROCESS UPDATE
-DROP REFERENCES USAGE
-@end example
-
-@code{ALL} ist ein Synonym f�r @code{ALL PRIVILEGES}. @code{REFERENCES} ist
-noch nicht implementiert. @code{USAGE} ist momentan ein Synonym f�r ``keine
-Berechtigungen''. Es kann benutzt werden, um einen Benutzer zu erzeugen,
-der keine Berechtigungen hat.
-
-Um einem Benutzer die @strong{grant}-Berechtigung zu entziehen, benutzen
-Sie einen @code{berechtigung_art}-Wert @code{GRANT OPTION}:
-
-@example
-REVOKE GRANT OPTION ON ... FROM ...;
-@end example
-
-Die einzigen @code{berechtigung_art}-Werte, die Sie f�r eine Tabelle
-festlegen k�nnen, sind @code{SELECT}, @code{INSERT}, @code{UPDATE},
-@code{DELETE}, @code{CREATE}, @code{DROP}, @code{GRANT}, @code{INDEX} und
-@code{ALTER}.
-
-Die einzigen @code{berechtigung_art}-Werte, die Sie f�r eine Spalte
-festlegen k�nnen (im Falle, dass Sie eine @code{spalten_liste}-Klausel
-benutzen), sind @code{SELECT}, @code{INSERT} und @code{UPDATE}.
-
-Sie k�nnen globale Berechtigungen setzen, indem Sie die @code{ON
-*.*}-Syntax benutzen. Datenbank-Berechtigungen setzen Sie mit der @code{ON
-datenbank.*}-Syntax. Wenn Sie @code{ON *} setzen und eine aktuelle
-Datenbank ausgew�hlt haben, setzen Sie die Berechtigungen f�r diese
-Datenbank. (@strong{ACHTUNG:} Wenn Sie @code{ON *} festlegen und
-@emph{keine} aktuelle Datenbank ausgew�hlt haben, betrifft das die globalen
-Berechtigungen!)
-
-Um die Rechtegew�hrung f�r Benutzer von uneindeutigen Hosts aus zu
-erm�glichen, unterst�tzt MySQL den @code{benutzername}-Wert in der Form
-@code{benutzer@@host}. Wenn Sie eine @code{user}-Zeichenkette festlegen
-wollen, die Sonderzeichen enth�lt (wie @samp{-}), oder eine
-@code{host}-Zeichenkette, die Sonderzeichen oder Platzhalterzeichen enth�lt
-(wie @samp{%}), k�nnen Sie Benutzernamen oder Hostnamen in
-Anf�hrungszeichen setzen (beispielsweise @code{'test-benutzer'@@'test-hostname'}).
-
-Sie k�nnen im Hostnamen Platzhalter angeben. @code{benutzer@@"%.loc.gov"}
-zum Beispiel trifft auf @code{benutzer} f�r jeden Host in der Dom�ne
-@code{loc.gov} zu. @code{benutzer@@"144.155.166.%"} trifft auf
-@code{benutzer} f�r jeden Host im @code{144.155.166}-Class-C-Subnetz zu.
-
-Die einfache Form @code{benutzer} ist ein Synonym f�r
-@code{benutzer@@"%"}. @strong{ACHTUNG:} Wenn Sie anonymen Benutzern
-erlauben, sich mit dem MySQL-Server zu verbinden (was vorgabem��ig der
-Fall ist), sollten Sie auch alle lokalen Benutzer als
-@code{benutzer@@localhost} hinzuf�gen, weil ansonsten der Eintrag f�r den
-anonymen Benutzer f�r den lokalen Host in der @code{mysql.user}-Tabelle
-benutzt wird, wenn der Benutzer versucht, sich von der lokalen Maschine in
-den MySQL-Server einzuloggen! Anonyme Benutzer werden definiert, indem
-Eintr�ge mit @code{User=''} in die @code{mysql.user}-Tabelle eingef�gt
-werden. Das k�nnen Sie mit folgender Anfrage �berpr�fen:
-
-@example
-mysql> SELECT Host,User FROM mysql.user WHERE User='';
-@end example
-
-Momentan unterst�tzt @code{GRANT} nur Host-, Datenbank-, Tabellen- und
-Spaltennamen mit maximal 60 Zeichen. Ein Benutzername kann bis zu 16
-Zeichen lang sein.
-
-Die Berechtigungen f�r eine Tabelle oder Spalte werden durch ein logisches
-ODER der Berechtigungen auf jeder der vier Berechtigungsebenen zusammen
-gesetzt. Wenn die @code{mysql.user}-Tabelle beispielsweise festlegt, dass
-ein Benutzer eine globalen @strong{select}-Berechtigung hat, kann diese
-nicht durch Eintr�ge auf Datenbank-, Tabellen- oder Spaltenebene widerrufen
-werden.
-
-Die Berechtigungen f�r eine Spalte k�nnen wie folgt berechnet werden:
-
-@example
-Globale Berechtigungen
-ODER (Datenbank-Berechtigungen UND Host-Berechtigungen)
-ODER Tabellen-Berechtigungen
-ODER Spalten-Berechtigungen
-@end example
-
-In den meisten F�llen k�nnen Sie einem Benutzer Rechte auf lediglich einer
-der Berechtigungsebenen gew�hren, wodurch das Leben nicht so kompliziert
-ist wie oben dargestellt. Die Details der Prozedur zur �berpr�fung der
-Berechtigungen sind in @ref{Privilege system} dargestellt.
-
-Wenn Sie Berechtigungen f�r eine Benutzer-/Hostname-Kombination gew�hren,
-die in der @code{mysql.user}-Tabelle nicht existiert, wird ein Eintrag
-hinzugef�gt und verbleibt dort, bis der mit einem @code{DELETE}-Befehl
-gel�scht wird. Mit anderen Worten: @code{GRANT} kann eventuell
-@code{user}-Tabelleneintr�ge erzeugen, aber @code{REVOKE} entfernt diese
-nicht, sondern Sie m�ssen das explizit mit @code{DELETE} machen.
-
-@cindex Passw�rter, setzen
-Ab MySQL-Version 3.22.12 wird, wenn ein neuer Benutzer erzeugt wird oder
-wenn Sie globale Grant-Berechtigungen haben, das Passwort des Benutzers
-durch die @code{IDENTIFIED BY}-Klausel festgelegt, wenn eine angegeben
-wird. Wenn der Benutzer bereits ein Passwort hat, wird es durch das neue
-ersetzt.
-
-@strong{ACHTUNG:} Wenn Sie einen neuen Benutzer anlegen, aber keine
-@code{IDENTIFIED BY}-Klausel angeben, hat der neue Benutzer kein Passwort.
-Das ist unsicher.
-
-Passw�rter k�nnen auch mit dem @code{SET PASSWORD}-Befehl gesetzt werden.
-@xref{SET OPTION, , @code{SET OPTION}}.
-
-Wenn Sie Berechtigungen f�r eine Datenbank gew�hren, wird ein Eintrag in
-der @code{mysql.db}-Tabellen erzeugt, falls notwendig. Wenn alle
-Berechtigungen f�r die Datenbank mit @code{REVOKE} widerrufen wurden, wird
-dieser Eintrag gel�scht.
-
-Wenn ein Benutzer �berhaupt keine Berechtigungen auf eine Tabelle hat, wird
-die Tabelle nicht angezeigt, wenn der Benutzer nach einer Liste von
-Tabellen anfragt (zum Beispiel mit einem @code{SHOW TABLES}-Statement).
-
-Die @code{mit GRANT OPTION}-Klausel gibt dem Benutzer die M�glichkeit,
-anderen Benutzern jegliche der Berechtigungen zu vergeben, die der Benutzer
-auf der angegebenen Berechtigungsebene hat. Sie sollten vorsichtig damit
-sein, wem Sie die @strong{grant}-Berechtigung geben, denn zwei Benutzer mit
-unterschiedlichen Berechtigungen k�nnen in der Lage sein, Ihre
-Berechtigungen zu addieren!
-
-Sie k�nnen einem Benutzer keine Berechtigung gew�hren, die Sie selbst nicht
-haben; die @strong{grant}-Berechtigung erlaubt Ihnen nur, die
-Berechtigungen zu vergeben, die Sie selbst besitzen.
-
-Wenn Sie einem Benutzer die @strong{grant}-Berechtigung auf einer
-bestimmten Berechtigungsebene geben, denken Sie daran, dass der Benutzer
-jegliche Berechtigungen, die der Benutzer schon besitzt (oder die ihm in
-Zukunft gew�hrt werden!), auf dieser Ebene auch an andere Benutzer gew�hrt
-werden k�nnen. Nehmen Sie an, Sie gew�hren einem Benutzer die
-@strong{insert}-Berechtigung auf eine Datenbank. Wenn Sie danach die
-@strong{select}-Berechtigung auf die Datenbank mit @code{WITH GRANT OPTION}
-gew�hren, kann der Benutzer nicht nur die @strong{select}-Berechtigung
-weiter geben, sondern auch @strong{insert}. Wenn Sie dem Benutzer danach
-die @strong{update}-Berechtigung auf die Datenbank gew�hren, kann der
-Benutzer insgesamt @strong{insert}, @strong{select} und @strong{update}
-weiter geben.
-
-Sie sollten einem normalen Benutzer keine @strong{alter}-Berechtigung
-gew�hren. Wenn Sie das tun, kann der Benutzer versuchen, das
-Berechtigungssystem zu unterlaufen, indem er Tabellen umbenennt!
-
-Beachten Sie: Wenn Sie Tabellen- oder Spalten-Berechtigungen auch nur f�r
-einen Benutzer gew�hren, untersucht der Server Tabellen- und
-Spalten-Berechtigungen f�r alle Benutzer. Dadurch wird MySQL etwas
-langsamer.
-
-Wenn @code{mysqld} startet, werden alle Berechtigungen in den Speicher
-eingelesen. Datenbank-, Tabellen- und Spalten-Berechtigungen werden sofort
-wirksam. Berechtigungen auf Benutzerebene werden wirksam, wenn sich der
-Benutzer das n�chste Mal verbindet. �nderungen in den
-Berechtigungstabellen, die Sie mit @code{GRANT} oder @code{REVOKE}
-durchf�hren, werden vom Server sofort bemerkt. Wenn Sie
-Berechtigungstabellen manuell �ndern (mit @code{INSERT}, @code{UPDATE}
-usw.), m�ssen Sie ein @code{FLUSH PRIVILEGES}-Statement ausf�hren oder
-@code{mysqladmin flush-privileges} laufen lassen, um den Server zu
-veranlassen, die Berechtigungstabellen neu zu laden.
-@xref{Privilege changes}.
-
-@cindex ANSI SQL, Unterschiede zu
-Die gr��ten Unterschiede zwischen ANSI SQL und MySQL-Versionen von
-@code{GRANT} sind:
-
-@itemize @bullet
-@item
-In MySQL werden Berechtigungen f�r eine Benutzername-/Hostname-Kombination
-vergeben und nicht nur f�r einen Benutzernamen.
-
-@item
-ANSI SQL hat keine globalen oder Datenbankebene-Berechtigungen und
-unterst�tzt nicht alle Berechtigungsarten, die MySQL unterst�tzt. MySQL
-unterst�tzt nicht die ANSI-SQL-@code{TRIGGER}-, @code{EXECUTE}- oder
-@code{UNDER}-Berechtigungen.
-
-@item
-ANSI-SQL-Berechtigungen werden auf hierarchische Art strukturiert. Wenn Sie
-einen Benutzer entfernen, werden alle Berechtigungen, die dieser Benutzer
-gew�hrt hat, widerrufen. In MySQL werden die gew�hrten Berechtigungen nicht
-automatisch widerrufen, sondern Sie m�ssen das selbst tun.
-
-@item
-Wenn Sie in MySQL das @code{INSERT}-Recht nur f�r Teile der Spalten einer
-Tabelle haben, k�nnen Sie dennoch @code{INSERT}-Statements auf der Tabelle
-ausf�hren. Die Spalten, f�r die Sie keine @code{INSERT}-Berechtigung haben,
-werden auf ihre Vorgabewerte gesetzt. ANSI SQL erfordert, dass Sie die
-@code{INSERT}-Berechtigung auf alle Spalten haben.
-
-@item
-Wenn Sie eine Tabelle in ANSI SQL l�schen, werden alle Berechtigungen f�r
-die Tabelle widerrufen. Wenn Sie eine Berechtigung in ANSI SQL widerrufen,
-werden alle Berechtigungen, die auf dieser Berechtigung basierend gew�hrt
-wurden, widerrufen. In MySQL k�nnen Berechtigungen nur explizit mit
-@code{REVOKE}-Befehlen oder durch die Manipulation der
-MySQL-Berechtigungstabellen widerrufen werden.
-@end itemize
-
------------
-@cindex SSL- und X509-Grundlagen
-MySQL unterst�tzt SSL-verschl�sselte Verbindungen. Um zu verstehen, wie
-MySQL SSL benutzt, m�ssen wir einige Grundlagen von SSL und X509 erl�utern.
-Leute, die damit schon vertraut sind, k�nnen dieses Kapitel �berspringen.
-
-Vorgabem��ig benutzt MySQL unverschl�sselte Verbindungen zwischen Client
-und Server. Das hei�t, dass jeder auf dem Weg dazwischen lauschen und Ihre
-Daten, die �bertragen werden, mitlesen kann. Dar�ber hinaus k�nnten einige
-Leute auch den Inhalt von Daten �ndern, die zwischen Client und Server
-ausgetauscht werden. M�glicherweise haben Sie auch wirklich geheime Daten
-�ber �ffentliche Netzwerke zu �bertragen, und eine �ffentlichkeit solcher
-Art ist unakzeptabel.
-
-SSL ist ein Protokoll, das unterschiedliche Verschl�sselungsalgorithmen
-benutzt, um sicherzustellen, dass Daten aus einem �ffentlichen Netzwerk
-vertraut werden kann. Es besitzt Mechanismen, um Ver�nderungen, Verlust
-oder wiederholtes Abspielen (Replay) von Daten zu entdecken. SSL enth�lt
-auch Algorithmen, um die Identit�t zu erkennen und zu �berpr�fen, indem der
-X509-Standard benutzt wird.
-
-@cindex Was ist Verschl�sselung
-Mittels Verschl�sselung werden jegliche Arten von Daten unlesbar gemacht.
-Dar�ber hinaus werden in der heutigen Praxis Verschl�sselungsalgorithmen
-viele weitere Elemente hinzugef�gt. Sie sollten vielen Arten bekannter
-Angriffe widerstehen, wie dem Herumspielen mit der Reihenfolge
-verschl�sselter Nachrichten oder dem doppelten Abspielen (Replay) von
-Daten.
-
-@cindex Was ist ein X509-Zertifikat?
-X509 ist der Standard, der es erm�glicht, jemanden im Internet zu
-identifizieren. Er wird meistens beim E-Commerce �ber das Internet benutzt.
-Kurz gesagt sollte es ein Unternehmen namens "Zertifizierungsautorit�t"
-geben, die jedem elektronische Zertifikate zuordnet, der diese braucht.
-Zertifikate beruhen auf asymmetrischen Verschl�sselungsalgorithmen, die
-zwei Verschl�sselungsschl�ssel haben - �ffentlichen und geheimen.
-Zertifikatsbesitzer k�nnen ihre Identit�t jeder anderen Seite beweisen.
-Zertifikate beinhalten den �ffentlichen Schl�ssel des Besitzers. Alle
-Daten, die damit verschl�sselt werden, k�nnen nur vom Besitzer des geheimen
-Schl�ssels entschl�sselt werden.
-
-@cindex M�gliche Fragen:
-Frage: Warum benutzt MySQL nicht standardm��ig verschl�sselte Verbindungen?
-Antwort: Weil es MySQL langsamer macht. Jede zus�tzliche Funktionalit�t
-erfordert, dass ein Computer zus�tzliche Arbeit verrichtet, und das
-Verschl�sseln von Daten ist eine CPU-intensive Operation, die leicht die
-Zeit und Leistung �bertreffen kann, die MySQL selbst verbraucht und
-ben�tigt. MySQL ist vorgabem��ig auf Geschwindigkeit optimiert.
-Frage: Ich brauche mehr Informationen �ber SSL / X509 / Verschl�sselung
-usw.
-Antwort: Benutzen Sie Ihre bevorzugte Internet-Suchmaschine und suchen Sie
-nach den Schl�sselw�rtern, die Sie interessieren.
-
-
-@cindex SSL-bezogene Optionen
-
-MySQL kann x509-Zertifikat-Attribute pr�fen, zus�tzlich zum meist benutzten
-Benutzername-/Passwort-Schema. Alle gew�hnlich Optionen werden immer noch
-ben�tigt (Benutzername, Passw�rter, IP-Adressmaske,
-Datenbank-/Tabellenname).
-
-Es gibt verschiedene M�glichkeiten, Verbindungen zu begrenzen:
-
-@itemize @bullet
-@item
-Ohne jegliche SSL-/X509-Optionen werden alle Arten verschl�sselter und
-unverschl�sselter Verbindungen zugelassen, wenn Benutzername und Passwort
-g�ltig sind.
-
-@item
-Die @code{REQUIRE SSL}-Option erzwingt SSL-verschl�sselte Verbindungen.
-Beachten Sie, dass dieses Erfordernis �bergangen werden kann, wenn es
-irgend welche weiteren ACL-Datens�tze gibt, die Verbindungen ohne SSL
-zulassen.
-
-Beispiel:
-@example
-GRANT ALL PRIVILEGES ON test.* TO root@@localhost IDENTIFIED BY "goodsecret" REQUIRE SSL
-@end example
-
-
-@item
-* @code{REQUIRE X509} Wenn ein X509-Zertifikat erforderlich ist, bedeutet
-das, dass der Client ein g�ltiges Zertifikat haben muss, aber wir k�mmern
-uns nicht um das genaue Zertifikat, den Herausgeber (Issuer) oder den
-Betreff (Subject). Die einzige Einschr�nkung ist, dass es m�glich sein
-sollte, seine Unterschrift (Signature) mit einigen unserer CA-Zertifikate
-zu �berpr�fen.
-
-Beispiel:
-@example
-GRANT ALL PRIVILEGES ON test.* TO root@@localhost IDENTIFIED BY "goodsecret" REQUIRE X509
-@end example
-
-@item
-@code{REQUIRE ISSUER issuer} macht Verbindungen restriktiver: Jetzt muss
-der Client ein g�ltiges X509-Zertifikat vorlegen, das von einem CA-Issuer
-herausgegeben wurde. Die Benutzung von X509-Zertifikaten impliziert immer
-Verschl�sselung, daher wird die Option "SSL" nicht mehr ben�tigt.
-
-Beispiel:
-@example
-GRANT ALL PRIVILEGES ON test.* TO root@@localhost IDENTIFIED BY "goodsecret" REQUIRE ISSUER "C=FI, ST=Some-State, L=Helsinki, O=MySQL Finnland AB, CN=Tonu Samuel/Email=tonu@@mysql.com"
-@end example
-
-@item
-@code{REQUIRE SUBJECT betreff} erfordert, dass der Client ein g�ltiges
-X509-Zertifikat mit dem Betreff "betreff" darauf hat. Wenn der Client ein
-g�ltiges Zertifikat hat, was aber einen anderen Betreff besitzt, wird die
-Verbindung nicht zugelassen.
-
-Beispiel:
-@example
-GRANT ALL PRIVILEGES ON test.* TO root@@localhost IDENTIFIED BY "goodsecret" REQUIRE SUBJECT "C=EE, ST=Some-State, L=Tallinn, O=MySQL demo client certificate, CN=Tonu Samuel/Email=tonu@@mysql.com"
-@end example
-
-@item
-@code{REQUIRE CIPHER cipher} wird ben�tigt um sicherzustellen, dass
-Chiffrierungen und Schl�ssell�ngen benutzt werden, die stark genug sind.
-SSL selbst kann schwach sein, wenn alte Algorithmen mit kurzen
-Verschl�sselungsschl�sseln benutzt werden. Wenn diese Option benutzt wird,
-k�nnen wir exakte Chiffrierungen anfordern, bevor die Verbindung erlaubt
-wird.
-
-Beispiel:
-@example
-GRANT ALL PRIVILEGES ON test.* TO root@@localhost IDENTIFIED BY "goodsecret" REQUIRE CIPHER "EDH-RSA-DES-CBC3-SHA"
-@end example
-
-Es ist erlaubt, die Optionen in Kombination wie folgt zu benutzen:
-@example
-GRANT ALL PRIVILEGES ON test.* TO root@@localhost IDENTIFIED BY "goodsecret"
- REQUIRE SUBJECT "C=EE, ST=Some-State, L=Tallinn, O=MySQL demo client certificate, CN=Tonu Samuel/Email=tonu@@mysql.com"
- AND ISSUER "C=FI, ST=Some-State, L=Helsinki, O=MySQL Finnland AB, CN=Tonu Samuel/Email=tonu@@mysql.com"
- AND CIPHER "EDH-RSA-DES-CBC3-SHA"
-@end example
-
-Es ist aber nicht erlaubt, irgend eine der Optionen doppelt zu benutzen.
-Nur unterschiedliche Optionen d�rfen gemischt werden.
-@end itemize
------------
-
-@node User names, Privilege changes, GRANT, User Account Management
-@c German node Benutzernamen
-@subsection MySQL-Benutzernamen und -Passw�rter
-
-@cindex Benutzernamen und Passw�rter
-@cindex Passw�rter, f�r Benutzer
-
-Es gibt mehrere Unterschiede in der Art, wie Benutzernamen und Passw�rter
-von MySQL benutzt werden, und der Art, wie sie von Unix oder Windows
-benutzt werden:
-
-@itemize @bullet
-@item
-Benutzernamen, wie sie von MySQL f�r Authentifizierungszwecke benutzt
-werden, haben nicht zu tun mit Unix-Benutzernamen (Login-Namen) oder
-Windows-Benutzernamen. Die meisten MySQL-Clients versuchen sich zwar
-vorgabem��ig einzuloggen, indem sie den aktuellen Unix-Benutzernamen als
-den MySQL-Benutzernamen verwenden, aber das geschieht nur aus Gr�nden der
-Bequemlichkeit. Client-Programme lassen zu, dass ein anderer Name mit den
-@code{-u}- oder @code{--user}-Optionen angegeben wird. Das bedeutet, dass
-Sie eine Datenbank nicht auf irgend eine Weise sicher machen k�nnen, wenn
-nicht alle MySQL-Benutzernamen Passw�rter haben. Jeder kann versuchen, sich
-mit dem Server zu verbinden, indem er irgend einen Namen angibt, und wird
-damit Erfolg haben, wenn er einen Namen angibt, der kein Passwort hat.
-
-@item
-MySQL-Benutzernamen k�nnen bis zu 16 Zeichen lang sein; Unix-Benutzernamen
-sind typischerweise auf 8 Zeichen begrenzt.
-
-@item
-MySQL-Passw�rter haben nichts mit Unix-Passw�rtern zu tun. Es gibt keine
-notwendige Verbindungen zwischen dem Passwort, das Sie benutzen, um sich an
-einer Unix-Maschine anzumelden, und dem Passwort, das Sie benutzen, um auf
-eine Datenbank auf dieser Maschine zuzugreifen.
-
-@item
-@c German FIX unsplit @ref
-MySQL verschl�sselt Passw�rter mit einem anderen Algorithmus als dem, der
-w�hrend des Unix-Login-Prozesses benutzt wird, siehe die Beschreibungen der
-@code{PASSWORD()}- und @code{ENCRYPT()}-Funktionen in
-@ref{Miscellaneous functions}.
-Beachten Sie, dass trotz der Tatsache, dass das Passwort
-'zerhackt' gespeichert wird, es ausreicht, Ihr 'zerhacktes' Passwort zu
-kennen, um sich am MySQL-Server anmelden zu k�nnen!
-@end itemize
-
-MySQL-Benutzer und ihre Berechtigungen werden normalerweise mit dem
-@code{GRANT}-Befehl erzeugt. @xref{GRANT}.
-
-Wenn Sie sich an einem MySQL-Server mit einem Kommandozeilen-Client
-anmelden, sollten Sie das Passwort mit @code{--password=ihr-passwort}
-eingeben. @xref{Connecting}.
-
-@example
-mysql --user=monty --password=rate_mal datenbankname
-@end example
-
-Wenn Sie m�chten, dass der Client eine Eingabeaufforderung f�r das Passwort
-pr�sentiert, sollten Sie @code{--password} ohne Argument benutzen.
-
-@example
-mysql --user=monty --password datenbankname
-@end example
-
-Oder in der kurzen Form:
-
-@example
-mysql -u monty -p datenbankname
-@end example
-
-Beachten Sie, dass in den letzten Beispielen 'datenbankname' @strong{NICHT}
-das Passwort ist.
-
-Wenn Sie die @code{-p}-Option zur Eingabe des Passworts benutzen wollen,
-tun Sie das wie folgt:
-
-@example
-mysql -u monty -prate_mal datenbankname
-@end example
-
-Auf einigen Systemen k�rzt die Bibliothek, die MySQL benutzt, um die
-Eingabeaufforderung f�r das Passwort auszugeben, das Passwort auf 8
-Zeichen. Intern hat MySQL keine Beschr�nkung hinsichtlich der L�nge des
-Passworts.
-
-
-@node Privilege changes, Default privileges, User names, User Account Management
-@c German node Berechtigungs�nderungen
-@subsection Wann Berechtigungs�nderungen wirksam werden
-
-Wenn @code{mysqld} startet, werden alle Berechtigungstabelleninhalte in den
-Arbeitsspeicher eingelesen und werden zu diesem Zeitpunkt wirksam.
-
-�nderungen in den Berechtigungstabellen, die mit @code{GRANT},
-@code{REVOKE} oder @code{SET PASSWORD} durchgef�hrt werden, werden
-unmittelbar vom Server bemerkt.
-
-Wenn Sie die Berechtigungstabellen manuell �ndern (mit @code{INSERT},
-@code{UPDATE} usw.), m�ssen Sie ein @code{FLUSH PRIVILEGES}-Statement
-ausf�hren oder @code{mysqladmin flush-privileges} oder @code{mysqladmin
-reload} laufen lassen, um den Server anzuweisen, die Berechtigungstabellen
-neu einzulesen. Ansonsten haben Ihre �nderungen @emph{keine Auswirkung},
-bis Sie den Server neu starten. Wenn Sie die Berechtigungstabellen manuell
-�ndern, aber vergessen, die Berechtigungen neu zu laden, werden Sie sich
-wundern, warum trotz Ihrer �nderungen kein Unterschied zu bemerken ist!
-
-Wenn der Server bemerkt, dass sich die Berechtigungstabellen ge�ndert
-haben, werden bestehende Client-Verbindungen wie folgt davon betroffen:
-
-@itemize @bullet
-@item
-Tabellen- und Spalten-Berechtigungs�nderungen werden bei der n�chsten
-Anfrage des Clients wirksam.
-
-@item
-Datenbank-Berechtigungs�nderungen werden beim n�chsten @code{USE
-datenbank}-Befehl wirksam.
-@end itemize
-
-Globale Berechtigungs�nderungen und Passwort�nderungen werden beim n�chsten
-Mal wirksam, wenn sich der Client verbindet.
-
-
-@node Default privileges, Adding users, Privilege changes, User Account Management
-@c German node Vorgabem��ige Berechtigungen
-@subsection Einrichtung der anf�nglichen MySQL-Berechtigungen
-
-@cindex Berechtigungen, vorgabem��ig
-@cindex Vorgaben, Berechtigungen
-@cindex Root-Passwort
-@cindex Superuser
-@cindex Benutzer, Root
-@cindex anonymer Benutzer
-@cindex Passwort, Root-Benutzer
-
-Nach der Installation von MySQL konfigurieren Sie die anf�nglichen
-Zugriffsberechtigungen, indem Sie @code{scripts/mysql_install_db} laufen
-lassen.
-@xref{Quick install}.
-Das @code{mysql_install_db}-Skript startet den @code{mysqld}-Server und
-initialisiert dann die Berechtigungstabellen, so dass diese folgenden Satz
-an Berechtigungen enthalten:
-
-@itemize @bullet
-@item
-Der MySQL-@code{root}-Benutzer wird als Superuser angelegt, der alles tun
-darf. Verbindungen m�ssen vom lokalen Host aus gemacht werden.
-
-@strong{HINWEIS:}
-Das anf�ngliche @code{root}-Passwort ist leer, daher kann sich jeder als
-@code{root} @emph{ohne Passwort} verbinden und hat alle Berechtigungen.
-
-@item
-@cindex anonymer Benutzer
-Ein anonymer Benutzer wird erzeugt, der mit Datenbanken, die den Namen
-@code{'test'} haben oder mit @code{'test_'} anfangen, alles tun darf.
-Verbindungen m�ssen vom lokalen Host aus gemacht werden. Das hei�t, dass
-sich jeder lokale Benutzer ohne Passwort verbinden kann und als anonymer
-Benutzer behandelt wird.
-
-@item
-Andere Berechtigungen werden verweigert. Beispielsweise k�nnen normale
-Benutzer nicht @code{mysqladmin shutdown} oder @code{mysqladmin
-processlist} benutzen.
-@end itemize
-
-@strong{HINWEIS:} Die vorgabem��igen Berechtigungen sind unter Windows
-anders.
-@xref{Windows running}.
-
-Weil Ihre Installation anfangs weit offen ist, sollten Sie als eins der
-ersten Dinge ein Passwort f�r den MySQL-@code{root}-Benutzer anlegen. Das
-k�nnen Sie wie folgt tun (beachten Sie, dass das Passwort mit der
-@code{PASSWORD()}-Funktion angegeben wird):
-
-@example
-shell> mysql -u root mysql
-mysql> UPDATE user SET Password=PASSWORD('neues_passwort')
- WHERE user='root';
-mysql> FLUSH PRIVILEGES;
-@end example
-
-Ab MySQL-Version 3.22 k�nnen Sie das @code{SET PASSWORD}-Statement
-benutzen:
-
-@example
-shell> mysql -u root mysql
-mysql> SET PASSWORD FOR root=PASSWORD('neues_passwort');
-@end example
-
-Eine weitere M�glichkeit, das Passwort zu setzen, besteht in der Benutzung
-des @code{mysqladmin}-Befehls:
-
-@example
-shell> mysqladmin -u root password neues_passwort
-@end example
-
-Nur Benutzer mit Schreib-/Aktualisierungszugriff auf die
-@code{mysql}-Datenbank k�nnen das Passwort f�r andere Benutzer �ndern. Alle
-normalen Benutzer (nicht anonyme Benutzer) k�nnen nur ihr eigenes Passwort
-�ndern, entweder mit einem der obigen Befehle oder mit @code{SET
-PASSWORD=PASSWORD('neues_passwort')}.
-
-Denken Sie daran, wenn Sie das Passwort in der @code{user}-Tabelle direkt
-mit der ersten Methode �ndern, dass Sie den Server anweisen m�ssen, die
-Berechtigungstabellen neu einzulesen (mit @code{FLUSH PRIVILEGES}), weil
-die �nderungen ansonsten nicht wahrgenommen werden.
-
-Sobald das @code{root}-Passwort gesetzt wurde, m�ssen Sie in der Folge
-immer das Passwort angeben, wenn Sie sich als @code{root} mit dem Server
-verbinden.
-
-Eventuell wollen Sie das @code{root}-Passwort leer lassen, damit Sie es f�r
-die weitere Konfiguration oder f�r Tests nicht angeben m�ssen. Stellen Sie
-jedoch sicher, dass Sie es setzen, bevor Sie Ihre Installation f�r irgend
-welche Produktionsaufgaben benutzen.
-
-Sehen Sie im @code{scripts/mysql_install_db}-Skript nach, wie es die
-vorgabem��igen Berechtigungen installiert. Sie k�nnen das als Grundlage
-f�r das Hinzuf�gen weiterer Benutzer nehmen.
-
-Wenn Sie wollen, dass die anf�nglichen Berechtigungen anders sind als die
-gerade beschriebenen, k�nnen Sie @code{mysql_install_db} ab�ndern, bevor
-Sie es benutzen.
-
-@cindex Berechtigungstabellen, neu erzeugen
-@cindex neu erzeugen, Berechtigungstabellen
-Um die Berechtigungstabellen komplett neu zu erzeugen, entfernen Sie alle
-@file{.frm}-, @file{.MYI}- und @file{.MYD}-Dateien im Verzeichnis, das die
-@code{mysql}-Datenbank enth�lt. (Das ist das Verzeichnis namens
-@file{mysql} unter dem Datenbank-Verzeichnis, was aufgelistet wird, wenn
-Sie @code{mysqld --help} laufen lassen.) Lassen Sie dann das
-@code{mysql_install_db}-Skript laufen, eventuell nachdem Sie es editiert
-haben, um die Berechtigungen zu enthalten, die Sie haben wollen.
-
-@strong{HINWEIS:} Bei MySQL-Versionen vor Version 3.22.10 sollten Sie die
-@file{.frm}-Dateien NICHT l�schen. Wenn Sie das versehentlich doch tun,
-m�ssen Sie sie aus Ihrer MySQL-Distribution zur�ck kopieren, bevor Sie
-@code{mysql_install_db} laufen lassen.
-
-
-@node Adding users, User resources, Default privileges, User Account Management
-@c German node Benutzer hinzuf�gen
-@subsection Neue MySQL-Benutzer hinzuf�gen
-
-@findex GRANT-Statement
-@findex Statements, GRANT
-
-@cindex Berechtigungen, hinzuf�gen
-@cindex hinzuf�gen, neue Benutzerberechtigungen
-@cindex Benutzerberechtigungen, hinzuf�gen
-
-Sie k�nnen Benutzer auf zwei Arten hinzuf�gen: Indem Sie
-@code{GRANT}-Statements verwenden oder indem Sie die
-MySQL-Berechtigungstabellen direkt ver�ndern. Die bevorzugte Methode ist,
-@code{GRANT}-Statements zu benutzen, denn sie sind pr�ziser und weniger
-fehleranf�llig. @xref{GRANT}.
-
-Ausserdem gibt es eine Menge von Dritten beigesteuerte Programme wie
-@code{phpmyadmin}, die benutzt werden k�nnen, um Benutzer zu erzeugen und
-zu verwalten. @xref{Contrib}.
-
-Die unten stehenden Beispiele zeigen, wie man den @code{mysql}-Client
-benutzt, um neue Benutzer zu erzeugen. Die Beispiele setzen voraus, dass
-Berechtigungen mit den Vorgabewerten eingerichtet wurden, die im vorherigen
-Abschnitt beschrieben wurden. Um also �nderungen machen zu k�nnen, m�ssen
-Sie sich von derselben Maschine aus verbinden, wo @code{mysqld} l�uft, und
-Sie m�ssen sich als MySQL-@code{root}-Benutzer verbinden, und der
-@code{root}-Benutzer muss die @strong{insert}-Berechtigung f�r die
-@code{mysql}-Datenbank und die @strong{reload}-Verwaltungsberechtigung
-haben. Wenn Sie bereits das @code{root}-Benutzerpasswort ge�ndert haben,
-m�ssen Sie es f�r die unten stehenden @code{mysql}-Befehle eingeben.
-
-Sie f�gen neue Benutzer mit @code{GRANT}-Statements hinzu:
-
-@example
-shell> mysql --user=root mysql
-mysql> GRANT ALL PRIVILEGES ON *.* TO monty@@localhost
- IDENTIFIED BY 'ein_passwort' WITH GRANT OPTION;
-mysql> GRANT ALL PRIVILEGES ON *.* TO monty@@"%"
- IDENTIFIED BY 'ein_passwort' WITH GRANT OPTION;
-mysql> GRANT RELOAD,PROCESS ON *.* TO admin@@localhost;
-mysql> GRANT USAGE ON *.* TO dummy@@localhost;
-@end example
-
-Diese @code{GRANT}-Statements richten drei neue Benutzer ein:
-
-@table @code
-@item monty
-Einen echten Superuser, der sich von irgendwo her mit dem Server verbinden
-kann, aber das Passwort @code{'ein_passwort'} daf�r verwenden muss.
-Beachten Sie, dass man @code{GRANT}-Statements sowohl f�r
-@code{monty@@localhost} als auch f�r @code{monty@@"%"} verwenden muss. Wenn
-man keinen Eintrag mit @code{localhost} hinzuf�gt, hat der Eintrag f�r den
-anonymen Benutzer f�r @code{localhost} Vorrang, der durch
-@code{mysql_install_db} angelegt wird, wenn man sich vom lokalen Host aus
-verbindet, weil dieser einen spezifischeren @code{Host}-Feldwert hat und
-daher fr�her in der @code{user}-Tabellen-Sortierreihenfolge auftaucht.
-
-@item admin
-Ein Benutzer, der sich ohne Passwort von @code{localhost} aus verbinden
-kann und der die @strong{reload}- und @strong{process}-
-Verwaltungsberechtigungen hat. Das erlaubt dem Benutzt, die
-@code{mysqladmin reload}-, @code{mysqladmin refresh}- und @code{mysqladmin
-flush-*}-Befehle sowie @code{mysqladmin processlist} auszuf�hren. Es werden
-keine Datenbank-bezogenen Berechtigungen gew�hrt. (Diese k�nnen sp�ter
-gew�hrt werden, indem zus�tzliche @code{GRANT}-Statements ausgef�hrt
-werden.)
-
-@item dummy
-Ein Benutzer, der sich ohne Passwort verbinden kann, aber nur vom lokalen
-Host aus. Die globalen Berechtigungen sind alle auf @code{'N'} gesetzt -
-diese @code{USAGE}-Berechtigung erlaubt Ihnen, einen Benutzer ohne
-Berechtigungen anzulegen. Es wird angenommen, dass Sie sp�ter
-Datenbank-spezifische Berechtigungen gew�hren.
-@end table
-
-@findex INSERT-Statement, Grant-Berechtigungen
-@findex Statements, INSERT
-Sie k�nnen dieselben Benutzerzugriffsinformationen direkt mittels
-@code{INSERT}-Statements eingeben und dann den Server anweisen, die
-Berechtigungstabellen neu zu laden:
-
-@example
-shell> mysql --user=root mysql
-mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('ein_passwort'),
- 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
-mysql> INSERT INTO user VALUES('%','monty',PASSWORD('ein_passwort'),
- 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
-mysql> INSERT INTO user SET Host='localhost',User='admin',
- Reload_priv='Y', Process_priv='Y';
-mysql> INSERT INTO user (Host,User,Password)
- VALUES('localhost','dummy','');
-mysql> FLUSH PRIVILEGES;
-@end example
-
-Abh�ngig von Ihrer MySQL-Version m�ssen Sie oben eventuell eine andere
-Anzahl von @code{'Y'}-Werten eingeben (Versionen vor Version 3.22.11 hatten
-weniger Berechtigungsspalten). Beim @code{admin}-Benutzer wird die besser
-lesbare @code{INSERT}-Syntax benutzt, die ab Version 3.22.11 verf�gbar ist.
-
-Beachten Sie, dass Sie f�r die Einrichtung eines Superusers lediglich einen
-@code{user}-Tabelleneintrag mit Berechtigungsfeldern einrichten m�ssen, die
-auf @code{'Y'} gesetzt sind. Es sind keine @code{db}- oder
-@code{host}-Tabelleneintr�ge n�tig.
-
-The Berechtigungsspalten in der @code{user}-Tabelle wurden im letzten
-@code{INSERT}-Statement nicht explizit gesetzt (f�r den Benutzer
-@code{dummy}), daher erhalten diese Spalten ihren Vorgabewert von
-@code{'N'}. Das ist dasselbe, was @code{GRANT USAGE} macht.
-
-Das folgende Beispiel f�gt einen Benutzer @code{custom} hinzu, der sich von
-@code{localhost}, @code{server.domain} und @code{whitehouse.gov} aus
-verbinden kann. Er will auf die @code{bankkonto}-Datenbank nur von
-@code{localhost} aus zugreifen, auf die @code{spesen}-Datenbank nur von
-@code{whitehouse.gov} aus und auf die @code{kunde}-Datenbank von allen drei
-Hosts aus. Er will von allen drei Hosts aus das Passwort @code{dumm}
-benutzen.
-
-Um die Berechtigungen dieses Benutzers mit @code{GRANT}-Statements
-einzurichten, geben Sie folgende Befehle ein:
-
-@example
-shell> mysql --user=root mysql
-mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
- ON bankkonto.*
- TO custom@@localhost
- IDENTIFIED BY 'dumm';
-mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
- ON spesen.*
- TO custom@@whitehouse.gov
- IDENTIFIED BY 'dumm';
-mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
- ON kunde.*
- TO custom@@'%'
- IDENTIFIED BY 'dumm';
-@end example
-
-Der Grund, warum wir Grant-Statements f�r den Benutzer 'custom' eingeben,
-ist, dass wir dem Benutzer Zugriff auf MySQL sowohl von der lokalen
-Maschine mit Unix-Sockets als auch von der entfernten Maschine
-'whitehouse.gov' �ber TCP/IP geben wollen.
-
-Um die Benutzerberechtigungen durch direkte �nderungen an den
-Berechtigungstabellen einzugeben, geben Sie folgende Befehle ein (beachten
-Sie das @code{FLUSH PRIVILEGES} am Ende):
-
-@example
-shell> mysql --user=root mysql
-mysql> INSERT INTO user (Host,User,Password)
- VALUES('localhost','custom',PASSWORD('dumm'));
-mysql> INSERT INTO user (Host,User,Password)
- VALUES('server.domain','custom',PASSWORD('dumm'));
-mysql> INSERT INTO user (Host,User,Password)
- VALUES('whitehouse.gov','custom',PASSWORD('dumm'));
-mysql> INSERT INTO db
- (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
- Create_priv,Drop_priv)
- VALUES
- ('localhost','bankkonto','custom','Y','Y','Y','Y','Y','Y');
-mysql> INSERT INTO db
- (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
- Create_priv,Drop_priv)
- VALUES
- ('whitehouse.gov','spesen','custom','Y','Y','Y','Y','Y','Y');
-mysql> INSERT INTO db
- (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
- Create_priv,Drop_priv)
- VALUES('%','kunde','custom','Y','Y','Y','Y','Y','Y');
-mysql> FLUSH PRIVILEGES;
-@end example
-
-Die ersten drei @code{INSERT}-Statements f�gen @code{user}-Tabelleneintr�ge
-hinzu, die dem Benutzer @code{custom} erlauben, sich von den verschiedenen
-Hosts aus mit dem gegebenen Passwort zu verbinden, gew�hren ihm aber keine
-Berechtigungen (alle Berechtigungen werden auf den Vorgabewert @code{'N'}
-gesetzt). Die n�chsten drei @code{INSERT}-Statements f�gen
-@code{db}-Tabelleneintr�ge hinzu, die @code{custom} Berechtigungen f�r die
-@code{bankkonto}-, @code{spesen}- und @code{kunde}-Datenbanken gew�hren,
-aber nur, wenn auf sie von den korrekten Hosts aus zugegriffen wird. Wie
-immer, wenn die Berechtigungstabellen direkt ver�ndert werden, muss dem
-Server gesagt werden, dass er sie neu laden muss (mit @code{FLUSH
-PRIVILEGES}), damit die Berechtigungs�nderungen wirksam werden.
-
-Wenn Sie einem bestimmten Benutzer Zugriff von irgendeiner Maschine in
-einer gegebenen Dom�ne geben wollen, k�nnen Sie ein @code{GRANT}-Statement
-wie das folgende absetzen:
-
-@example
-mysql> GRANT ...
- ON *.*
- TO benutzername@@"%.domaene.de"
- IDENTIFIED BY 'passwort';
-@end example
-
-Um dasselbe durch direkte �nderung der Berechtigungstabellen einzugeben,
-machen Sie folgendes:
-
-@example
-mysql> INSERT INTO user VALUES ('%.domaene.de', 'benutzername',
- PASSWORD('passwort'),...);
-mysql> FLUSH PRIVILEGES;
-@end example
-
-Sie k�nnen auch @code{xmysqladmin}, @code{mysql_webadmin} und sogar
-@code{xmysql} benutzen, um die Werte in den Berechtigungstabellen
-einzuf�gen, zu �ndern und zu aktualisieren. Sie finden diese Werkzeuge unter
-@uref{http://www.mysql.com/downloads/contrib/,Contrib-Verzeichnis der
-MySQL-Website}.
-
-@node User resources, Passwords, Adding users, User Account Management
-@c New section added by arjen 2002-05-17 to keep en/de in sync
-@subsection Limiting user resources
-
-@c FIX Original section text - to be translated.
-@c FIX Also check manual.texi for other mentions of MAX_..._PER_HOUR
-
-Starting from MySQL 4.0.2 one can limit certain resources per user.
-
-So far, the only available method of limiting user usage of MySQL
-server resources has been setting the @code{max_user_connections}
-startup variable to a non-zero value. But this method is strictly
-global and does not allow for management of individual users, which
-could be of paricular interest to Internet Service Providers.
-
-Therefore, management of three resources is introduced on the
-individual user level:
-
-@itemize @bullet
-@item Number of all queries per hour:
-All commands that could be run by a user.
-@item Number of all updates per hour:
-Any command that changes any table or database.
-@item Number of connections made per hour:
-New connections opened per hour.
-@end itemize
-
-A user in the aforementioned context is a single entry in the
-@code{user} table, which is uniquely identified by its @code{user}
-and @code{host} columns.
-
-All users are by default not limited in using the above resources,
-unless the limits are granted to them. These limits can be granted
-@strong{only} via global @code{GRANT (*.*)}, using this syntax:
-
-@example
-GRANT ... WITH MAX_QUERIES_PER_HOUR = N1
- MAX_UPDATES_PER_HOUR = N2
- MAX_CONNECTIONS_PER_HOUR = N3;
-@end example
-
-One can specify any combination of the above resources.
-N1, N2 and N3 are integers and stands for count / hour.
-
-If user reaches any of the above limits withing one hour, his
-connection will be terminated or refused and the appropriate error
-message shall be issued.
-
-Current usage values for a particular user can be flushed (set to zero)
-by issuing a @code{GRANT} statement with any of the above clauses,
-including a @code{GRANT} statement with the current values.
-
-Also, current values for all users will be flushed if privileges are
-reloaded (in the server or using @code{mysqladmin reload})
-or if the @code{FLUSH USER_RESOURCES} command is issued.
-
-The feature is enabled as soon as a single user is granted with any
-of the limiting @code{GRANT} clauses.
-
-As a prerequisite for enabling this feature, the @code{user} table in
-the @code{mysql} database must contain the additional columns, as
-defined in the table creation scripts @code{mysql_install_db} and
-@code{mysql_install_db.sh} in @file{scripts} subdirectory.
-
-@node Passwords, Password security, User resources, User Account Management
-@c German node Passw�rter
-@subsection Passw�rter einrichten
-
-@findex PASSWORD()
-@findex SET PASSWORD Statement
-
-@cindex Passw�rter, setzen
-@cindex setzen, Passw�rter
-
-In den meisten F�llen sollten Sie @code{GRANT} benutzen, um Ihre Benutzer /
-Passw�rter einzurichten, daher trifft das folgende nur f�r fortgeschrittene
-Benutzer zu. @xref{GRANT, , @code{GRANT}}.
-
-Die Beispiele in den vorherigen Abschnitten erl�utern ein wichtiges
-Prinzip: Wenn Sie ein nicht leeres Passwort mit @code{INSERT}- oder
-@code{UPDATE}-Statements setzen, m�ssen Sie die @code{PASSWORD()}-Funktion
-benutzen, um es zu verschl�sseln. Das liegt daran, dass die
-@code{user}-Tabelle Passw�rter in verschl�sselter Form speichert, nicht als
-Klartext. Wenn Sie diese Tatsache vergessen, ist es m�glich, dass sie
-Passw�rter wie folgt setzen:
-
-@example
-shell> mysql -u root mysql
-mysql> INSERT INTO user (Host,User,Password)
- VALUES('%','heinzholger','keks');
-mysql> FLUSH PRIVILEGES;
-@end example
-
-Das Ergebnis ist, dass der Klartextwert @code{'keks'} als Passwort in
-der @code{user}-Tabelle gespeichert ist. Wenn der Benutzer @code{heinzholger}
-versucht, sich mittels dieses Passworts mit dem Server zu verbinden,
-verschl�sselt der @code{mysql}-Client es mit @code{PASSWORD()}, erzeugt
-damit einen Authentifikationsvektor, der auf dem @strong{verschl�sselten}
-Passwort und einer Zufallszahl basiert, die er vom Server erh�lt, und
-schickt das Ergebnis zum Server. Der Server benutzt den
-@code{password}-Wert in der @code{user}-Tabelle (den @strong{nicht
-verschl�sselten} Wert @code{'keks'}), um dieselben Berechnungen
-durchzuf�hren, und vergleicht die Ergebnisse. Der Vergleich schl�gt fehl
-und der Server verweigert die Verbindung:
-
-@example
-shell> mysql -u heinzholger -pkeks test
-Access denied
-@end example
-
-Passw�rter m�ssen verschl�sselt sein, wenn sie in die @code{user}-Tabelle
-eingef�gt werden, daher h�tte das @code{INSERT}-Statement also wie folgt
-formuliert sein m�ssen:
-
-@example
-mysql> INSERT INTO user (Host,User,Password)
- VALUES('%','heinzholger',PASSWORD('keks'));
-@end example
-
-Sie m�ssen die @code{PASSWORD()}-Funktion auch benutzen, wenn Sie @code{SET
-PASSWORD}-Statements gebrauchen:
-
-@example
-mysql> SET PASSWORD FOR heinzholger@@"%" = PASSWORD('keks');
-@end example
-
-Wenn Sie Passw�rter mit dem @code{GRANT ... IDENTIFIED BY}-Statement oder
-dem @code{mysqladmin password}-Befehl setzen, wird die
-@code{PASSWORD()}-Funktion nicht ben�tigt. Beide sorgen daf�r, dass das
-Passwort verschl�sselt wird, daher w�rden Sie ein Passwort @code{'keks'}
-wie folgt setzen:
-
-@example
-mysql> GRANT USAGE ON *.* TO heinzholger@@"%" IDENTIFIED BY 'keks';
-@end example
-
-oder
-
-@example
-shell> mysqladmin -u heinzholger password keks
-@end example
-
-@strong{NOTE:} @code{PASSWORD()} verschl�sselt Passw�rter nicht auf
-dieselbe Art, wie das bei Unix-Passw�rtern der Fall ist. Wenn daher Ihr
-Unix-Passwort und Ihr MySQL-Passwort identisch sind, sollten Sie daraus
-nicht schlie�en, dass @code{PASSWORD()} denselben Verschl�sselungswert
-ergibt wie der, der in der Unix-Passwortdatei gespeichert ist.
-@xref{User names}.
-
-
-@node Password security, , Passwords, User Account Management
-@c German node Passwort-Sicherheit
-@subsection Wie Sie Ihre Passw�rter sicher halten
-
-Es ist nicht ratsam, Ihr Passwort so einzugeben, dass es von anderen
-Benutzern entdeckt werden kann. Die verschiedenen Methoden, Passw�rter
-bei der Benutzung von Client-Programmen einzugeben, sind unten aufgef�hrt,
-jeweils mit einer Einsch�tzung des Risikos der Methode:
-
-@itemize @bullet
-@item
-Geben Sie einem normalen Benutzer nie Zugriff auf die
-@code{mysql.user}-Tabelle. Wenn jemand das verschl�sselte Passwort f�r
-einen Benutzer kennt, erm�glicht ihm das, sich als dieser Benutzer
-einzuloggen. Die Passw�rter sind nur 'zerhackt', so dass niemand das echte
-Passwort sehen k�nnen sollte, das Sie benutzen (falls Sie ein �hnliches
-Passwort f�r Ihre anderen Applikationen benutzen sollten).
-
-@item
-Sie k�nnen auf der Kommandozeile die @code{-pyour_pass}- oder
-@code{--password=your_pass}-Option benutzen. Das ist bequem, aber unsicher,
-weil Ihr Passwort f�r Systemzustandsprogramme (wie @code{ps}) sichtbar
-wird, die m�glicherweise von anderen Benutzer aufgerufen werden, um
-Kommandozeilen anzuzeigen. (MySQL-Clients �berschreiben typischerweise die
-Kommandozeilenargumente w�hrend der Initialisierungssequenz mit Nullen,
-dennoch gibt es einen kurzen Zeitraum, w�hrend dessen der Wert sichtbar
-ist.)
-
-@item
-Sie k�nnen eine @code{-p}- oder @code{--password}-Option (ohne
-@code{ihr_passwort}-Wert) benutzen. In diesem Fall erbittet das
-Client-Programm das Passwort vom Terminal:
-@findex -p-Option
-@findex -password-Option
-
-@example
-shell> mysql -u benutzername -p
-Enter password: ********
-@end example
-
-Die @samp{*}-Zeichen stehen f�r Ihr Passwort.
-
-Es ist sicherer, Ihr Passwort auf diese Art einzugeben statt auf der
-Kommandozeile, weil es f�r andere Benutzer nicht sichtbar wird. Diese
-Methode ist jedoch nur f�r Programme geeignet, die interaktiv laufen. Wenn
-Sie einen Client von einem Skript aus aufrufen wollen, das nicht interaktiv
-l�uft, gibt es keine M�glichkeit, das Passwort vom Terminal aus einzugeben.
-Auf solchen Systemen kann es sogar vorkommen, dass die erste Zeile Ihres
-Skripts gelesen und (f�lschlicherweise) als Ihr Passwort interpretiert
-wird!
-
-@item
-@tindex .my.cnf-Datei
-Sie k�nnen Ihr Passwort in einer Konfigurationsdatei speichern.
-Beispielsweise k�nnen Sie Ihr Passwort im @code{[client]}-Abschnitt der
-@file{.my.cnf}-Datei in Ihrem Heimatverzeichnis auff�hren:
-
-@example
-[client]
-password=ihr_passwort
-@end example
-
-Wenn Sie Ihr Passwort in @file{.my.cnf} speichern, sollte die Datei nicht
-f�r die Gruppe (group) lesbar oder schreibbar sein. Stellen Sie sicher,
-dass der Zugriffsmodus der Datei @code{400} oder @code{600} ist.
-
-@xref{Option files}.
-@item
-Sie k�nnen Ihr Passwort in der @code{MYSQL_PWD}-Umgebungsvariablen
-speichern, aber diese Methode wird als extrem unsicher erachtet und sollte
-nicht gew�hlt werden. Einige Versionen von @code{ps} beinhalten eine
-Option, die Umgebung laufender Prozesse anzeigen zu lassen; Ihr Passwort
-w�rde dann f�r alle im Klartext lesbar sein, wenn Sie @code{MYSQL_PWD}
-setzen. Selbst auf Systemen ohne eine solche Version von @code{ps} ist es
-nicht ratsam, anzunehmen, dass es keine andere Methode gibt,
-Prozessumgebungen einzusehen. @xref{Environment variables}.
-@end itemize
-
-Alles in allem sind die sichersten Methoden, das Passwort entweder durch
-Client-Programm entgegen nehmen zu lassen oder es in einer sauber
-abgesicherten @file{.my.cnf}-Datei einzugeben.
-
-
-@node Disaster Prevention, Database Administration, User Account Management, MySQL Database Administration
-@c German node Katastrophenschutz und Wiederherstellung
-@section Katastrophenschutz und Wiederherstellung
-
-
-
-@menu
-* Backup::
-* BACKUP TABLE::
-* RESTORE TABLE::
-* CHECK TABLE::
-* REPAIR TABLE::
-* Table maintenance::
-* Maintenance regimen::
-* Table-info::
-@end menu
-
-@node Backup, BACKUP TABLE, Disaster Prevention, Disaster Prevention
-@c German node Datensicherung
-@subsection Datenbank-Datensicherungen
-
-@cindex Datenbanken, Datensicherungen
-@cindex Datensicherungen
-
-Weil MySQL-Tabellen als Dateien gespeichert werden, ist es leicht, eine
-Datensicherung durchzuf�hren. Um eine konsistente Datensicherung zu
-erhalten, machen Sie ein @code{LOCK TABLES} auf die relevanten Tabellen,
-gefolgt von @code{FLUSH TABLES} f�r die Tabellen.
-@xref{LOCK TABLES, , @code{LOCK TABLES}}.
-@xref{FLUSH, , @code{FLUSH}}.
-Sie brauchen lediglich eine Lesesperre (Read Lock); das erlaubt anderen
-Threads, die Tabellen weiterhin abzufragen, w�hrend Sie eine Kopie der
-Dateien im Datenbank-Verzeichnis machen. @code{FLUSH TABLE} wird ben�tigt,
-um sicherzustellen, dass alle aktiven Indexseiten auf Platte zur�ck
-geschrieben werden, bevor Sie die Datensicherung beginnen.
-
-Wenn Sie eine Tabellensicherung auf SQL-Ebene machen wollen, k�nnen Sie
-@code{SELECT INTO OUTFILE} oder @code{BACKUP TABLE} benutzen.
-@xref{SELECT}. @xref{BACKUP TABLE}.
-
-Eine weitere M�glichkeit, eine Datenbank zu sichern, stellt die Benutzung
-des @code{mysqldump}-Programms oder des @code{mysqlhotcopy-Skript}s dar.
-@xref{mysqldump, , @code{mysqldump}}. @xref{mysqlhotcopy, ,
-@code{mysqlhotcopy}}.
-
-@enumerate
-@item
-Machen Sie eine komplette Sicherung Ihrer Datenbanken:
-
-@example
-shell> mysqldump --tab=/pfad/zum/verzeichnis/ --opt --full
-
-or
-
-shell> mysqlhotcopy Datenbank /pfad/zum/verzeichnis/
-@end example
-
-Sie k�nnen auch einfach alle Tabellendateien (@file{*.frm}-, @file{*.MYD}-
-und @file{*.MYI}-Dateien) kopieren, solange der Server nicht gerade etwas
-aktualisiert. Das Skript @code{mysqlhotcopy} benutzt diese Methode.
-
-@item
-@cindex Log-Dateien, Namen
-Halten Sie @code{mysqld} an, wenn er l�uft, und starten Sie ihn mit der
-@code{--log-update[=datei]}-Option. @xref{Update log}. Die
-Update-Log-Datei(en) gibt Ihnen die Information, die Sie daf�r ben�tigen,
-um �nderungen an der Datenbank zu replizieren, die ab dem Zeitpunkt
-durchgef�hrt wurden, als Sie @code{mysqldump} ausf�hrten.
-@end enumerate
-
-Wenn Sie etwas wiederherstellen m�ssen, versuchen Sie zun�chst, Ihre
-Tabellen mit @code{REPAIR TABLE} oder @code{myisamchk -r} wieder
-herzustellen. Das sollte in 99,9% aller F�lle funktionieren. Wenn
-@code{myisamchk} fehlschl�gt, probieren Sie folgende Prozedur (das
-funktioniert nur, wenn Sie MySQL mit @code{--log-update} gestartet haben.
-@xref{Update log}.):
-
-@enumerate
-@item
-Stellen Sie die originale @code{mysqldump}-Datensicherung wieder her.
-@item
-F�hren Sie folgenden Befehl aus, um die Aktualisierungen (Updates) im
-Bin�r-Log noch einmal laufen zu lassen:
-
-@example
-shell> mysqlbinlog hostname-bin.[0-9]* | mysql
-@end example
-
-Wenn Sie das Update-Log benutzen, k�nnen Sie folgendes machen:
-
-@example
-shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql
-@end example
-@end enumerate
-
-@code{ls} wird benutzt, um alle Update-Log-Dateien in der richtigen
-Reihenfolge zu erhalten.
-
-Mit @code{SELECT * INTO OUTFILE 'datei' FROM tabelle} k�nnen Sie auch
-selektive Datensicherungen herstellen und diese wieder herstellen mit
-@code{LOAD DATA INFILE 'datei' REPLACE ...}. Um Duplikate zu vermeiden,
-ben�tigen Sie einen Prim�rschl�ssel (@code{PRIMARY KEY}) oder einen
-eindeutigen Schl�ssel (@code{UNIQUE}) in der Tabelle. Das Schl�sselwort
-@code{REPLACE} f�hrt dazu, dass alte Datens�tze durch neue ersetzt werden,
-wenn ein neuer Datensatz einen alten auf einem eindeutigen Schl�sselwert
-duplizieren w�rde.
-
-Wenn Sie bei der Datensicherung auf Ihrem System Performance-Probleme
-bekommen, k�nnen Sie diese l�sen, indem Sie Replikation einrichten und die
-Datensicherungen auf dem Slave statt auf dem Master durchf�hren.
-@xref{Replication Intro}.
-
-Wenn Sie ein Veritas-Dateisystem benutzen, k�nnen Sie folgendes tun:
-
-@enumerate
-@item
-F�hren Sie einen Client- (Perl ?) @code{FLUSH TABLES mit READ LOCK} aus.
-
-@item
-Forken Sie eine Shell oder f�hren Sie einen anderen Client aus @code{mount
-vxfs snapshot}.
-
-@item
-F�hren Sie im ersten Client @code{UNLOCK TABLES} aus.
-
-@item
-Kopieren Sie die Dateien von snapshot
-
-@item
-Unmounten Sie snapshot
-@end enumerate
-
-
-@node BACKUP TABLE, RESTORE TABLE, Backup, Disaster Prevention
-@c German node BACKUP TABLE
-@subsection @code{BACKUP TABLE}-Syntax
-
-@findex BACKUP TABLE
-
-@cindex Datensicherungen, Datenbank
-
-@example
-BACKUP TABLE tabelle[,tabelle...] TO '/pfad/zum/backup/verzeichnis'
-@end example
-
-Machen Sie eine Kopie aller Tabellendateien ins Datensicherungsverzeichnis,
-was die Mindestanforderung f�r die Wiederherstellung darstellt. Momentan
-funktioniert das nur bei @code{MyISAM}-Tabellen. Bei @code{MyISAM}-Tabellen
-kopiert man @code{.frm}- (Definition) und @code{.MYD}- (Daten) Dateien. Die
-Indexdatei kann aus diesen beiden aufgebaut werden.
-
-@c German FIX changed @xref to @ref
-Bevor Sie diesen Befehl ausf�hren, sehen Sie bitte unter
-@ref{Backup} nach.
-
-W�hrend der Datensicherung gilt eine Lesesperre (Read Lock) f�r jede
-Tabelle, eine nach der anderen, w�hrend sie gesichert werden. Wenn Sie
-mehrere Tabellen als Schnappschuss sichern wollen, m�ssen Sie zuerst ein
-@code{LOCK TABLES} ausf�hren, das eine Lesesperre f�r jede Tabelle in der
-zu sichernden Gruppe enth�lt.
-
-Der Befehl gibt eine Tabelle mit folgenden Spalten zur�ck:
-
-@multitable @columnfractions .35 .65
-@item @strong{Spalte} @tab @strong{Wert}
-@item Table @tab Tabellenname
-@item Op @tab Immer ``backup''
-@item Msg_type @tab @code{status}, @code{error}, @code{info} oder @code{warning}.
-@item Msg_text @tab Die Meldung.
-@end multitable
-
-Beachten Sie, dass @code{BACKUP TABLE} erst ab MySQL 3.23.25 verf�gbar ist.
-
-
-@node RESTORE TABLE, CHECK TABLE, BACKUP TABLE, Disaster Prevention
-@c German node RESTORE TABLE
-@subsection @code{RESTORE TABLE}-Syntax
-
-@findex RESTORE TABLE
-
-@example
-RESTORE TABLE tabelle[,tabelle...] FROM '/pfad/zum/backup/verzeichnis'
-@end example
-
-Stellt die Tabelle(n) aus der Datensicherung her, die mit @code{BACKUP
-TABLE} gesichert wurde(n). Bestehende Tabellen werden nicht �berschrieben;
-wenn Sie �ber bestehende Tabellen wiederherstellen wollen, erhalten Sie
-eine Fehlermeldung. RESTORE ben�tigt l�nger als Datensicherung, weil der Index neu
-aufgebaut werden muss. Je mehr Schl�ssel Sie haben, desto l�nger dauert es.
-Genau wie @code{BACKUP TABLE} funktioniert RESTORE momentan nur mit
-@code{MyISAM}-Tabellen.
-
-
-Der Befehl gibt eine Tabelle mit folgenden Spalten zur�ck:
-
-@multitable @columnfractions .35 .65
-@item @strong{Spalte} @tab @strong{Wert}
-@item Table @tab Tabellenname
-@item Op @tab Immer ``restore''
-@item Msg_type @tab @code{status}, @code{error}, @code{info} oder @code{warning}.
-@item Msg_text @tab Die Meldung.
-@end multitable
-
-
-@node CHECK TABLE, REPAIR TABLE, RESTORE TABLE, Disaster Prevention
-@c German node CHECK TABLE
-@subsection @code{CHECK TABLE}-Syntax
-
-@findex CHECK TABLE
-
-@example
-CHECK TABLE tabelle[,tabelle...] [option [option...]]
-
-option = QUICK | FAST | MEDIUM | EXTENDED | CHANGED
-@end example
-
-@code{CHECK TABLE} funktioniert nur bei @code{MyISAM}-Tabellen. Bei
-@code{MyISAM}-Tabellen ist es dasselbe, wie @code{myisamchk -m tabelle}
-�ber die Tabelle laufen zu lassen.
-
-Wenn Sie keine Option angeben, wird @code{MEDIUM} benutzt.
-
-Pr�ft die Tabelle(n) auf Fehler. Bei @code{MyISAM}-Tabellen werden die
-Schl�ssel-Statistiken aktualisiert. Der Befehl gibt eine Tabelle mit
-folgenden Spalten zur�ck:
-
-@multitable @columnfractions .35 .65
-@item @strong{Spalte} @tab @strong{Wert}
-@item Table @tab Tabellenname
-@item Op @tab Immer ``check''.
-@item Msg_type @tab @code{status}, @code{error}, @code{info} oder @code{warning}.
-@item Msg_text @tab Die Meldung.
-@end multitable
-
-Beachten Sie, dass Sie viele Zeilen an Information f�r jede gepr�fte
-Tabelle erhalten. Die letzte Zeile enth�lt den @code{Msg_type status} und
-sollte normalerweise @code{OK} sein. Wenn Sie nicht @code{OK} erhalten, oder @code{Not
-checked}, sollten Sie im Normalfall eine Reparatur der Tabelle durchf�hren.
-@xref{Table maintenance}. @code{Not checked} bedeutet, dass bei der Tabelle
-der angegebene @code{TYPE} MySQL mitgeteilt hat, dass es keinerlei
-Notwendigkeit gab, die Tabelle zu pr�fen.
-
-Die unterschiedlichen Pr�foptionen stehen f�r folgendes:
-
-@multitable @columnfractions .20 .80
-@item @strong{Option} @tab @strong{Bedeutung}
-@item @code{QUICK} @tab Keine Zeilen nach falschen Verkn�pfungen (Links) durchsehen (scannen).
-@item @code{FAST} @tab Nur Tabellen pr�fen, die nicht ordnungsgem�� geschlossen wurden.
-@item @code{CHANGED} @tab Nur Tabellen pr�fen, die seit der letzten Pr�fung ge�ndert wurden oder die nicht ordnungsgem�� geschlossen wurden.
-@item @code{MEDIUM} @tab Zeilen durchsehen (scannen), um zu best�tigen, dass gel�schte Verkn�pfungen (Links) in Ordnung sind. Diese Option berechnet auch eine Schl�ssel-Pr�fsumme f�r die Zeilen und best�tigt diese mit einer berechneten Pr�fsumme f�r die Schl�ssel.
-@item @code{EXTENDED} @tab Schl�gt komplett alle Schl�ssel f�r jede Zeile nach (Lookup). Hierdurch wird sichergestellt, dass die Tabelle 100% konsistent ist, aber das ben�tigt lange Zeit!
-@end multitable
-
-Bei @code{MyISAM}-Tabellen dynamischer Gr��e f�hrt eine Pr�fung immer
-eine @code{MEDIUM}-Pr�fung durch. Bei Zeilen statischer L�nge wird das
-Durchsehen (Scan) der Zeilen durch @code{QUICK} und @code{FAST}
-�bersprungen, weil solche Zeilen sehr selten besch�digt sind.
-
-Sie k�nnen Pr�foptionen wie folgt kombinieren:
-
-@example
-CHECK TABLE test_tabelle FAST QUICK;
-@end example
-
-Das w�rde nur eine QUICK-Pr�fung der Tabelle durchf�hren, wenn diese nicht
-ordnungsgem�� geschlossen worden w�re.
-
-@strong{HINWEIS:} In einigen F�llen kann @code{CHECK TABLE} zu einer
-�nderung der Tabelle f�hren! Das geschieht, wenn die Tabelle als
-'besch�digt' oder 'nicht ordnungsgem�� geschlossen' gekennzeichnet ist,
-aber @code{CHECK TABLE} keine Probleme in der Tabelle gefunden hat. In
-diesem Fall kennzeichnet @code{CHECK TABLE} die Tabelle als in Ordnung.
-
-Wenn eine Tabelle besch�digt ist, liegt das Problem h�chst wahrscheinlich
-in den Indexen und nicht im Daten-Teil. Alle oben genannten Pr�foptionen
-pr�fen die Indexe gr�ndlich und sollten daher die meisten Fehler finden.
-
-Wenn Sie lediglich eine Tabelle pr�fen wollen, von der Sie annehmen, dass
-sie in Ordnung ist, sollten Sie keine Pr�foptionen oder die
-@code{QUICK}-Option angeben. Letztere sollte benutzt werden, wenn Sie es
-eilig haben und das sehr geringe Risiko auf sich nehmen k�nnen, dass
-@code{QUICK} keinen Fehler in der Daten-Datei findet. (In den meisten F�llen
-sollte MySQL bei normalem Gebrauch jeden Fehler in der Daten-Datei finden.
-Wenn das geschieht, wird die Tabelle als 'besch�digt' gekennzeichnet, was
-bedeutet, dass die Tabelle solange nicht benutzt werden kann, bis sie
-repariert ist.)
-
-@code{FAST} und @code{CHANGED} sind in erster Linie f�r die Benutzung durch
-ein Skript vorgesehen (zum Beispiel f�r die Ausf�hrung durch cron), wenn
-Sie Ihre Tabellen von Zeit zu Zeit pr�fen wollen. F�r die meisten
-Anwendungsf�lle sollte man @code{FAST} vor @code{CHANGED} bevorzugen. (Der
-einzige Fall, wo das nicht so ist, ist, wenn Sie vermuten, einen Bug im
-@code{MyISAM}-Code gefunden zu haben.)
-
-@code{EXTENDED} ist nur f�r den Fall vorgesehen, dass Sie eine normale
-Pr�fung haben durchlaufen lassen, aber immer noch seltsame Fehler von einer
-Tabelle erhalten, wenn MySQL versucht, eine Zeile zu aktualisieren oder
-eine Zeile �ber einen Schl�ssel zu finden (das ist sehr unwahrscheinlich,
-wenn eine normale Pr�fung durchgelaufen ist!).
-
-Es wurde berichtet, dass bei der Tabellenpr�fung einige Dinge nicht
-automatisch korrigiert werden k�nnen:
-
-@itemize @bullet
-@item
-@code{Found row where the auto_increment column has the value 0}.
-
-Das bedeutet, dass es in der Tabelle eine Zeile gibt, in der die
-@code{auto_increment}-Index-Spalte den Wert 0 enth�lt. (Es ist m�glich,
-eine Zeile zu erzeugen, in der die auto_increment-Spalte 0 ist, indem man
-die Spalte explizit mit einem @code{UPDATE}-Statement auf 0 setzt.)
-
-Das ist f�r sich genommen kein Fehler, kann aber Probleme verursachen, wenn
-Sie die Tabelle dumpen und dann wiederherstellen, oder ein @code{ALTER
-TABLE} auf die Tabelle machen. In diesen F�llen �ndert sich der Wert der
-auto_increment-Spalte gem�� den Regeln f�r auto_increment-Spalten, was
-Probleme wie doppelte Schl�sseleintragsfehler bringen k�nnte.
-
-Um diese Warnmeldung loszuwerden, f�hren Sie einfach ein
-@code{UPDATE}-Statement durch und setzen die Spalte auf irgend einen
-anderen Wert als 0.
-@end itemize
-
-
-@node REPAIR TABLE, Table maintenance, CHECK TABLE, Disaster Prevention
-@c German node REPAIR TABLE
-@subsection @code{REPAIR TABLE}-Syntax
-
-@findex REPAIR TABLE
-
-@example
-REPAIR TABLE tabelle[,tabelle...] [QUICK] [EXTENDED]
-@end example
-
-@code{REPAIR TABLE} funktioniert nur bei @code{MyISAM}-Tabellen und ist
-dasselbe, wie @code{myisamchk -r tabelle} auf die Tabelle auszuf�hren.
-
-Normalerweise sollten sie diesen Befehl nie ausf�hren m�ssen, aber wenn ein
-Ungl�ck passiert, ist es sehr wahrscheinlich, dass Sie alle Daten einer
-MyISAM-Tabelle mit @code{REPAIR TABLE} retten k�nnen. Wenn Ihre Tabellen
-h�ufig besch�digt werden, sollten Sie versuchen, den Grund hierf�r
-herauszufinden! @xref{Crashing}. @xref{MyISAM table problems}.
-
-@code{REPAIR TABLE} repariert eine m�glicherweise besch�digte Tabelle. Der
-Befehl gibt eine Tabelle mit folgenden Spalten zur�ck:
-
-@multitable @columnfractions .35 .65
-@item @strong{Spalte} @tab @strong{Wert}
-@item Table @tab Tabellenname
-@item Op @tab Immer ``repair''
-@item Msg_type @tab @code{status}, @code{error}, @code{info} oder @code{warning}.
-@item Msg_text @tab Die Meldung.
-@end multitable
-
-Beachten Sie, dass Sie viele Zeilen an Informationen f�r jede reparierte
-Tabelle erhalten. Die letzte Zeile enth�lt den @code{Msg_type status} und
-sollte normalerweise @code{OK} sein. Wenn Sie nicht @code{OK} erhalten,
-sollten Sie versuchen, die Tabelle mit @code{myisamchk -o} zu reparieren,
-weil @code{REPAIR TABLE} noch nicht alle Optionen von @code{myisamchk}
-enth�lt. In naher Zukunft werden wir das flexibler gestalten.
-
-Wenn @code{QUICK} angegeben wird, versucht MySQL lediglich ein
-@code{REPAIR} des Indexbaums.
-
-Wenn Sie @code{EXTENDED} benutzen, erzeugt MySQL den Index Zeile f�r Zeile,
-anstatt einen Index auf einmal durch Sortieren zu erzeugen. Das kann bei
-Schl�sseln fester L�nge besser sein, wenn Sie lange @code{char()}-Schl�ssel
-haben, die sich gut komprimieren lassen.
-
-
-@node Table maintenance, Maintenance regimen, REPAIR TABLE, Disaster Prevention
-@c German node Tabellenwartung
-@subsection Benutzung von @code{myisamchk} f�r Tabellenwartung und Absturzreparatur
-
-Ab MySQL-Version 3.23.13 k�nnen Sie MyISAM-Tabellen mit dem @code{CHECK
-TABLE}-Befehl �berpr�fen. @xref{CHECK TABLE}. Mit dem @code{REPAIR
-TABLE}-Befehl k�nnen Sie Tabellen reparieren. @xref{REPAIR TABLE}.
-
-Um MyISAM-Tabellen (@code{.MYI} und @code{.MYD}) zu �berpr�fen und / oder
-zu reparieren, sollten sie das @code{myisamchk}-Dienstprogramm benutzen. Um
-ISAM-Tabellen (@code{.ISM} und @code{.ISD}) zu �berpr�fen und / oder zu
-reparieren, sollten Sie das @code{isamchk}-Dienstprogramm benutzen.
-@xref{Table types}.
-
-Der folgende Text behandelt @code{myisamchk}, trifft aber voll umf�nglich
-auch auf das alte @code{isamchk} zu.
-
-Sie k�nnen das @code{myisamchk}-Dienstprogramm benutzen, um Informationen �ber
-Ihre Datenbanktabellen zu erhalten, sie zu pr�fen und zu reparieren, oder
-um sie zu optimieren. Die folgenden Abschnitte beschreiben, wie man
-@code{myisamchk} aufruft (inklusive einer Beschreibung seiner Optionen),
-wie man einen Wartungsplan f�r Tabellen erstellt und wie die
-unterschiedlichen Funktionen von @code{myisamchk} benutzt werden.
-
-In den meisten F�llen k�nnen Sie auch den Befehl @code{OPTIMIZE TABLES}
-benutzen, um Tabellen zu optimieren und zu reparieren, aber dieser ist
-nicht so schnell und (in Fall wirklich schwerer Fehler) nicht so
-zuverl�ssig wie @code{myisamchk}.
-Auf der anderen Seite ist @code{OPTIMIZE TABLE} leichter zu benutzen, und
-Sie brauchen sich nicht um das Flushen von Tabellen zu k�mmern.
-@xref{OPTIMIZE TABLE, , @code{OPTIMIZE TABLE}}.
-
-Obwohl das Reparieren bei @code{myisamchk} recht sicher ist, ist es immer
-eine gute Idee, eine Datensicherung zu machen, bevor eine Reparatur
-durchgef�hrt wird (oder etwas Sonstiges, das viele �nderungen an einer
-Tabelle durchf�hrt).
-
-
-
-@menu
-* myisamchk syntax::
-* myisamchk general options::
-* myisamchk check options::
-* myisamchk repair options::
-* myisamchk other options::
-* myisamchk memory::
-* Crash recovery::
-* Check::
-* Repair::
-* Optimisation::
-@end menu
-
-@node myisamchk syntax, myisamchk general options, Table maintenance, Table maintenance
-@c German node myisamchk-Syntax
-@subsubsection Aufrufsyntax von @code{myisamchk}
-
-@code{myisamchk} wird wie folgt aufgerufen:
-
-@example
-shell> myisamchk [optionen] tabelle
-@end example
-
-@code{optionen} legt fest, was @code{myisamchk} tun soll. Die Optionen sind
-unten beschrieben. (Sie erhalten eine Liste der Optionen, wenn Sie
-@code{myisamchk --help} eingeben.) Ohne Optionen aufgerufen pr�ft
-@code{myisamchk} einfach nur Ihre Tabelle. Um mehr Informationen zu
-erhalten oder @code{myisamchk} anzuweisen, korrigierende Aktionen
-durchzuf�hren, geben Sie Optionen wie unten und in den folgenden
-Abschnitten beschrieben an.
-
-@code{tabelle} ist die Datenbanktabelle, die Sie pr�fen oder reparieren
-wollen. Wenn Sie @code{myisamchk} anderswo als im Datenbank-Verzeichnis
-ausf�hren, m�ssen Sie den Pfad zur Datei angeben, denn @code{myisamchk}
-wei� nicht, wo Ihre Datenbank liegt. In der Tat k�mmert sich
-@code{myisamchk} nicht darum, ob die Dateien, die es bearbeiten soll, in
-einem Datenbank-Verzeichnis liegen oder nicht; sie k�nnen diese Dateien
-daher an eine andere Stelle kopieren und die Wiederherstellungsoperationen
-dort durchf�hren.
-
-Sie k�nnen in der @code{myisamchk}-Befehlszeile mehrere Tabellen angeben,
-wenn Sie wollen. Sie k�nnen auch einen Namen als Indexdateinamen angeben
-(mit dem Suffix @file{.MYI}), was Ihnen gestattet, alle Tabellen in einem
-Verzeichnis anzugeben, indem Sie das Muster @file{*.MYI} benutzen. Wenn Sie
-zum Beispiel in einem Datenbank-Verzeichnis sind, k�nnen Sie alle Tabellen
-im Verzeichnis wie folgt pr�fen:
-
-@example
-shell> myisamchk *.MYI
-@end example
-
-Wenn Sie nicht im Datenbank-Verzeichnis sind, k�nnen Sie alle dortigen
-Tabellen pr�fen, indem Sie den Pfad zum Verzeichnis angeben:
-
-@example
-shell> myisamchk /pfad/zum/datenbank_verzeichnis/*.MYI
-@end example
-
-Sie k�nnen sogar alle Tabellen in allen Datenbanken pr�fen, indem Sie einen
-Platzhalter im Pfad zum MySQL-Daten-Verzeichnis angeben:
-
-@example
-shell> myisamchk /pfad/zum/datadir/*/*.MYI
-@end example
-
-Um schnell alle Tabellen zu pr�fen, wird folgender Befehl empfohlen:
-
-@example
-myisamchk --silent --fast /pfad/zum/datadir/*/*.MYI
-isamchk --silent /pfad/zum/datadir/*/*.ISM
-@end example
-
-Wenn Sie alle Tabellen pr�fen und alle Tabellen reparieren wollen, die
-besch�digt sind, k�nnen Sie folgende Kommandozeile eingeben:
-
-@example
-myisamchk --silent --force --fast --update-state -O key_buffer=64M -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M /pfad/zum/datadir/*/*.MYI
-isamchk --silent --force -O key_buffer=64M -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M /pfad/zum/datadir/*/*.ISM
-@end example
-
-Hierbei wird angenommen, dass Sie mehr als 64 MB Arbeitsspeicher frei
-haben.
-
-Wenn Sie einen Fehler wie den folgenden erhalten:
-
-@example
-myisamchk: warning: 1 clients is using oder hasn't closed the table properly
-@end example
-
-Bedeutet das, dass Sie versuchen, eine Tabelle zu �berpr�fen, die durch ein
-anderes Programm aktualisiert wurde (wie dem @code{mysqld}-Server), das die
-Datei noch nicht geschlossen hat oder das abgest�rzt ist, ohne die Datei
-ordnungsgem�� zu schlie�en.
-
-Wenn @code{mysqld} l�uft, m�ssen Sie ein Sync/Schlie�en aller Tabellen mit
-@code{FLUSH TABLES} erzwingen und sicherstellen, dass niemand die Tabellen
-benutzt, w�hrend Sie @code{myisamchk} laufen lassen. In MySQL-Version 3.23
-ist die einfachste M�glichkeit, dieses Problem zu vermeiden, die Benutzung
-von @code{CHECK TABLE} anstelle von @code{myisamchk}.
-
-
-
-@node myisamchk general options, myisamchk check options, myisamchk syntax, Table maintenance
-@c German node Allgemeine Optionen f�r myisamchk
-@subsubsection Allgemeine Optionen f�r @code{myisamchk}
-
-@cindex Optionen, @code{myisamchk}
-@cindex @code{myisamchk}, Optionen
-
-@code{myisamchk} unterst�tzt folgende Optionen:
-
-@table @code
-@item -# oder --debug=debug_optionen
-Ausgabe eines Debug-Logs. Die Zeichenkette @code{debug_optionen} ist h�ufig
-@code{'d:t:o,dateiname'}.
-@item -? oder --help
-Hilfetext ausgeben und beenden.
-@item -O var=option, --set-variable var=option
-Setzt den Wert einer Variablen. M�gliche Variablen und ihre Vorgabewerte
-f�r myisamchk k�nnen mit @code{myisamchk --help} herausgefunden werden:
-@multitable @columnfractions .3 .7
-@item key_buffer_size @tab 523264
-@item read_buffer_size @tab 262136
-@item write_buffer_size @tab 262136
-@item sort_buffer_size @tab 2097144
-@item sort_key_blocks @tab 16
-@item decode_bits @tab 9
-@end multitable
-
-@code{sort_buffer_size} wird benutzt, wenn Schl�ssel repariert werden,
-indem Schl�ssel sortiert werden, was der Normalfall ist, wenn Sie
-@code{--recover} benutzen.
-
-@code{key_buffer_size} wird benutzt, wenn Sie die Tabelle mit
-@code{--extended-check} pr�fen oder wenn die Schl�ssel repariert werden,
-indem Schl�ssel Zeile f�r Zeile in die Tabelle eingef�gt werden (als wenn
-normale Einf�geoperationen (Insert) durchgef�hrt werden). Eine Reparatur
-mittels Key-Buffer (Schl�sselpuffer) wird in folgenden F�llen benutzt:
-
-@itemize @bullet
-@item
-Wenn Sie @code{--safe-recover} benutzen.
-@item
-Wenn die tempor�ren Dateien, die ben�tigt werden, um die Schl�ssel zu
-sortieren, mehr als zweimal so Gro� werden w�rden, als wenn die
-Schl�sseldatei direkt erzeugt w�rde. Das ist oft dann der Fall, wenn Sie
-gro�e @code{CHAR}-, @code{VARCHAR}- oder @code{TEXT}-Schl�ssel haben, weil
-das Sortieren die gesamten Schl�ssel w�hrend des Sortierens speichern muss.
-Wenn Sie viel tempor�ren Platz haben und @code{myisamchk} zwingen k�nnen,
-mittels Sortieren zu reparieren, k�nnen Sie die
-@code{--sort-recover}-Option benutzen.
-@end itemize
-
-Die Reparatur durch den Key-Buffer (Schl�sselpuffer) nimmt weit weniger
-Plattenplatz in Anspruch als wenn Sortieren benutzt wird, ist aber auch
-viel langsamer.
-
-Wenn Sie eine schnellere Reparatur wollen, setzen Sie die obigen Variablen
-auf ungef�hr 1/4 Ihres verf�gbaren Arbeitsspeichers. Sie k�nnen beide
-Variablen auf gro�e Werte setzen, weil nur einer der oben aufgef�hrten
-Puffer zur gleichen Zeit benutzt wird.
-
-@item -s oder --silent
-Schweigsamer Modus. Ausgaben erfolgen nur im Fehlerfall. Sie k�nnen
-@code{-s} doppelt benutzen (@code{-ss}), um @code{myisamchk} sehr
-schweigsam zu machen.
-@item -v oder --verbose
-Geschw�tziger Modus. Es werden mehr Informationen ausgegeben. Dies kann
-auch bei @code{-d} und @code{-e} benutzt werden. Benutzen Sie @code{-v}
-mehrfach (@code{-vv}, @code{-vvv}), um noch ausf�hrlichere Meldungen
-auszugeben!
-@item -V oder --version
-Die aktuelle Version von @code{myisamchk} ausgeben und beenden.
-@item -w or, --wait
-Statt einen Fehler auszugeben, wenn die Tabelle gesperrt ist, warten, bis
-die Tabelle entsperrt ist, bevor fortgefahren wird. Beachten Sie: Wenn Sie
-@code{mysqld} auf der Tabelle mit @code{--skip-locking} laufen lassen, kann
-die Tabelle nur mit einem weiteren @code{myisamchk}-Befehl gesperrt werden.
-@end table
-
-
-@node myisamchk check options, myisamchk repair options, myisamchk general options, Table maintenance
-@c German node Pr�foptionen f�r myisamchk
-@subsubsection Pr�foptionen f�r @code{myisamchk}
-
-@cindex Pr�foptionen, myisamchk
-@cindex Tabellen, pr�fen
-
-@table @code
-@item -c oder --check
-Tabelle auf Fehler �berpr�fen. Das ist die vorgabem��ige Operation, wenn
-Sie @code{myisamchk} keine sonstigen Optionen angeben, die dies
-�berschreiben.
-
-@item -e oder --extend-check
-Tabelle SEHR gr�ndlich pr�fen (was recht langsam ist, wenn Sie viele Indexe
-haben). Diese Option sollte nur in Extremf�llen benutzt werden.
-Normalerweise sollten @code{myisamchk} oder @code{myisamchk --medium-check}
-in fast allen F�llen in der Lage sein, herauszufinden, ob es in der Tabelle
-irgend welche Fehler gibt.
-
-Wenn Sie @code{--extended-check} benutzen und viel Arbeitsspeicher haben,
-setzen Sie den Wert von @code{key_buffer_size} um etliches herauf!
-
-@item -F oder --fast
-Nur Tabellen pr�fen, die nicht ordnungsgem�� geschlossen wurden.
-@item -C oder --check-only-changed
-Nur Tabellen pr�fen, die seit der letzten Pr�fung ge�ndert wurden.
-@item -f oder --force
-@code{myisamchk} mit @code{-r} (repair) auf die Tabelle neu starten, wenn
-@code{myisamchk} in der Tabelle irgend welche Fehler findet.
-@item -i oder --information
-Statistische Informationen �ber die Tabelle, die gepr�ft wird, ausgeben.
-@item -m oder --medium-check
-Schneller als extended-check, findet aber nur 99,99% aller Fehler. Das
-sollte allerdings in den meisten F�llen ausreichen.
-@item -U oder --update-state
-In der @file{.MYI}-Datei speichern, wann die Tabelle gepr�ft wurde und ob
-die Tabelle besch�digt wurde. Das sollte benutzt werden, um vollen Nutzen
-aus der @code{--check-only-changed}-Option ziehen zu k�nnen. Sie sollten
-diese Option nicht benutzen, wenn der @code{mysqld}-Server die Tabelle
-benutzt und Sie ihn mit @code{--skip-locking} laufen lassen.
-@item -T oder --read-only
-Die Tabelle nicht als gepr�ft kennzeichnen. Das ist hilfreich, wenn Sie
-@code{myisamchk} benutzen, um eine Tabelle zu pr�fen, die von irgend einer
-anderen Applikation benutzt wird, die kein Sperren durchf�hrt (wie
-@code{mysqld --skip-locking}).
-@end table
-
-
-@node myisamchk repair options, myisamchk other options, myisamchk check options, Table maintenance
-@c German node Reparaturoptionen f�r myisamchk
-@subsubsection Reparaturoptionen f�r @code{myisamchk}
-
-@cindex Reparaturoptionen, myisamchk
-@cindex Dateien, reparieren
-
-Folgende Optionen werden benutzt, wenn Sie @code{myisamchk} mit @code{-r}
-oder @code{-o} starten:
-
-@table @code
-@item -D # oder --data-file-length=#
-Maximale L�nge der Daten-Datei (wenn die Daten-Datei neu erzeugt wird, wenn
-sie 'voll' ist).
-@item -e oder --extend-check
-Es wird versucht, jede m�gliche Zeile der Daten-Datei wiederherzustellen.
-Normalerweise wird dies auch eine Menge Zeilen-'M�ll' finden. Benutzen Sie
-diese Option nur dann, wenn Sie v�llig verzweifelt sind.
-@item -f oder --force
-Alte tempor�re Dateien (@code{tabelle.TMD}) werden �berschrieben, anstatt
-abzubrechen.
-@item -k # oder keys-used=#
-Wenn Sie ISAM benutzen, weist das den ISAM-Tabellen-Handler an, nur die
-ersten @code{#}-Indexe zu benutzen. Wenn Sie @code{MyISAM} benutzen, sagt
-es dem Handler, welche Schl�ssel benutzt werden sollen, wobei jedes
-Bin�rbit f�r einen Schl�ssel steht (der erste Schl�ssel ist Bit 0). Das
-kann benutzt werden, um schnelleres Einf�gen (Insert) zu erreichen!
-Deaktivierte Indexe k�nnen reaktiviert werden, indem man @code{myisamchk
--r} benutzt.
-@item -l oder --no-symlinks
-Symbolischen Links wird nicht gefolgt. Normalerweise repariert
-@code{myisamchk} die Tabelle, auf die ein Symlink verweist. Diese Option
-gibt es in MySQL 4.0 nicht, weil MySQL 4.0 w�hrend der Reparatur keine
-Symlinks entfernt.
-@item -r oder --recover
-Kann fast alles reparieren, ausser eindeutige Schl�ssel, die nicht
-eindeutig sind (was ein extrem unwahrscheinlicher Fehler bei ISAM- /
-MyISAM-Tabellen ist). Wenn Sie eine Tabelle wiederherstellen wollen,
-sollten Sie zuerst diese Option ausprobieren. Nur wenn myisamchk berichtet,
-dass die Tabelle mit @code{-r} nicht wiederhergestellt werden kann, sollten
-Sie @code{-o} probieren. (Hinweis: Im unwahrscheinlichen Fall, dass
-@code{-r} fehlschl�gt, ist die Daten-Datei immer noch intakt.) Wenn Sie
-viel Arbeitsspeicher haben, sollten Sie die Gr��e von
-@code{sort_buffer_size} herauf setzen!
-@item -o oder --safe-recover
-Benutzt eine alte Wiederherstellungsmethode (liest alle Zeilen der Reihe
-nach und aktualisiert alle Indexb�ume, basierend auf den gefundenen
-Zeilen); das ist sehr viel langsamer als @code{-r}, kann aber eine Reihe
-sehr unwahrscheinlicher F�lle behandeln, die @code{-r} nicht behandeln
-kann. Diese Wiederherstellungsmethode benutzt viel weniger Plattenspeicher
-als @code{-r}. Normalerweise sollte man immer zuerst versuchen, mit
-@code{-r} zu reparieren und nur im Falle des Fehlschlagens @code{-o}
-benutzen.
-
-Wenn Sie viel Arbeitsspeicher haben, sollten Sie die Gr��e von
-@code{key_buffer_size} herauf setzen!
-@item -n oder --sort-recover
-Zwingt @code{myisamchk} zu sortieren, um Schl�ssel aufzul�sen, selbst wenn
-die tempor�ren Dateien sehr Gro� sein sollten. Diese Option hat keine
-Auswirkung, wenn Sie Volltextschl�ssel in der Tabelle haben.
-
-@item --character-sets-dir=...
-Verzeichnis, wo Zeichens�tze gespeichert sind.
-@item --set-character-set=name
-�ndert den Zeichensatz, der vom Index benutzt wird.
-@item -t oder --tmpdir=path
-Pfad zum Speichern tempor�rer Dateien. Wenn dieser nicht gesetzt ist,
-benutzt @code{myisamchk} hierf�r die Umgebungsvariable @code{TMPDIR}.
-@item -q oder --quick
-Repariert schneller, indem die Daten-Datei nicht ver�ndert wird. Man kann
-ein zweites @code{-q} angeben, um @code{myisamchk} zu zwingen, die
-Original-Daten-Datei zu �ndern, falls doppelte Schl�ssel auftreten.
-@item -u oder --unpack
-Datei entpacken, die mit myisampack gepackt wurde.
-@end table
-
-
-@node myisamchk other options, myisamchk memory, myisamchk repair options, Table maintenance
-@c German node Andere Optionen f�r myisamchk
-@subsubsection Weitere Optionen f�r @code{myisamchk}
-
-Weitere Aktionen, die @code{myisamchk} ausf�hren kann, neben der Pr�fung
-und Reparatur von Tabellen:
-
-@table @code
-@item -a oder --analyze
-Analysiert die Verteilung von Schl�sseln. Das verbessert die Performance
-bei Tabellenverkn�pfungen (Joins), indem der Join-Optimierer in die Lage
-versetzt wird, besser auszuw�hlen, in welcher Reihenfolge die Tabellen
-verkn�pft werden sollten und welche Schl�ssel er dabei verwenden sollte:
-@code{myisamchk --describe --verbose tabelle'} oder Benutzung von
-@code{SHOW KEYS} in MySQL.
-@item -d oder --description
-Gibt ein paar Informationen �ber die Tabelle aus.
-@item -A oder --set-auto-increment[=value]
-Zwingt auto_increment, mit diesem oder einem h�heren Wert anzufangen. Wenn
-kein Wert angegeben wird, wird der n�chste auto_increment-Wert auf den
-h�chsten benutzten Wert f�r den auto-Schl�ssel + 1 gesetzt.
-@item -S oder --sort-index
-Sortiert die Bl�cke des Indexbaums in Hoch-Niedrig-Reihenfolge. Das
-optimiert Suchoperationen und macht das Durchsehen (Scanning) von Tabellen
-nach Schl�sseln schneller.
-@item -R oder --sort-records=#
-Sortiert Datens�tze in �bereinstimmung mit einem Index. Das macht Ihre
-Daten viel konzentrierter und kann @code{SELECT} mit Bereichen und
-@code{ORDER BY}-Operationen auf diesem Index erheblich beschleunigen. (Beim
-ersten Sortieren kann das SEHR langsam sein!) Um die Anzahl von Indexen
-einer Tabelle herauszufinden, benutzen Sie @code{SHOW INDEX}, was die
-Indexe einer Tabelle in genau der Reihenfolge zeigt, in der
-@code{myisamchk} sie sieht. Indexe werden mit 1 beginnend nummeriert.
-@end table
-
-
-@node myisamchk memory, Crash recovery, myisamchk other options, Table maintenance
-@c German node Speicher bei myisamchk
-@subsubsection Speicherbenutzung von @code{myisamchk}
-
-@cindex memory usage, myisamchk
-
-Die Speicherzuordnung ist wichtig, wenn Sie @code{myisamchk} laufen lassen.
-@code{myisamchk} benutzt nicht mehr Speicher, als Sie mir der
-@code{-O}-Option festlegen. Wenn Sie @code{myisamchk} f�r sehr gro�e
-Dateien benutzen wollen, sollten Sie zuerst entscheiden, wieviel Speicher
-Sie benutzen wollen. Die Vorgabe liegt bei nur etwa 3 MB, um Dinge zu
-reparieren. Indem gr��ere Werte benutzt werden, k�nnen Sie
-@code{myisamchk} dazu bringen, schneller zu arbeiten. Wenn Sie
-beispielsweise 32 MB Arbeitsspeicher haben, k�nnten Sie Optionen wie die
-folgende benutzen (zus�tzlich zu weiteren Optionen, die Sie eventuell
-angeben):
-
-@example
-shell> myisamchk -O sort=16M -O key=16M -O read=1M -O write=1M ...
-@end example
-
-@code{-O sort=16M} sollte f�r die meisten F�lle ausreichen.
-
-Denken Sie daran, dass @code{myisamchk} tempor�re Dateien in @code{TMPDIR}
-benutzt. Wenn @code{TMPDIR} auf ein Speicher-Dateisystem zeigt, k�nnen
-Kein-Speicher-Fehler schnell auftreten. Wenn das passiert, setzen Sie
-@code{TMPDIR} so, dass es auf ein Verzeichnis mit mehr Speicherplatz zeigt
-und starten Sie @code{myisamchk} erneut.
-
-Beim Reparieren ben�tigt @code{myisamchk} gro�e Mengen von
-Festplattenspeicher:
-
-@itemize @bullet
-@item
-Die doppelte Gr��e der Daten-Datei (die Originaldatei und eine Kopie).
-Dieser Platz wird nicht ben�tigt, wenn die Reparatur mit @code{--quick}
-durchgef�hrt wird, weil in diesem Fall nur die Index-Datei neu erzeugt
-wird. Der Platz wird auf derselben Festplatte ben�tigt, wo die
-Original-Daten-Datei liegt!
-@item
-Platz f�r die neue Index-Datei, die die alte ersetzt. Die alte Index-Datei
-wird beim Start beschnitten, daher kann man diesen Platz �blicherweise
-ignorieren. Der Platz wird auf derselben Platte ben�tigt, auf der die
-Original-Index-Datei liegt!
-@item
-Wenn Sie @code{--recover} oder @code{--sort-recover} benutzen (aber nicht,
-wenn Sie @code{--safe-recover} benutzen), brauchen Sie Platz f�r einen
-Sortierpuffer (Sort Buffer) f�r:
-@code{(gr��ter_schl�ssel + zeilen_zeiger_l�nge) * anzahl_der_zeilen * 2}.
-Sie k�nnen die L�nge der Schl�ssel und die Zeilen-Zeiger-L�nger mit
-@code{myisamchk -dv tabelle} pr�fen.
-Dieser Platz wird auf der tempor�ren Platte zugeordnet (festgelegt durch
-@code{TMPDIR} oder @code{--tmpdir=#}).
-@end itemize
-
-Wenn Sie w�hrend der Reparatur ein Problem mit dem Plattenplatz bekommen,
-k�nnen Sie @code{--safe-recover} anstelle von @code{--recover}
-ausprobieren.
-
-
-@node Crash recovery, Check, myisamchk memory, Table maintenance
-@c German node Fehlerbeseitigung nach Abst�rzen
-@subsubsection Benutzung von @code{myisamchk} f�r die Fehlerbeseitigung nach Abst�rzen
-
-@cindex Absturz, Wiederherstellung
-@cindex Wiederherstellung, nach Absturz
-
-Wenn Sie @code{mysqld} mit @code{--skip-locking} laufen lassen (was auf
-einigen Systemen wie Linux die Vorgabe ist), k�nnen Sie @code{myisamchk}
-nicht zuverl�ssig daf�r benutzen, eine Tabelle zu pr�fen, wenn
-@code{mysqld} diese Tabelle benutzt. Wenn Sie sicher sein k�nnen, dass
-niemand auf die Tabellen mit @code{mysqld} zugreift, w�hrend Sie
-@code{myisamchk} laufen lassen, m�ssen Sie nur ein @code{mysqladmin
-flush-tables} durchf�hren, bevor Sie anfangen, die Tabellen zu pr�fen. Wenn
-Sie das nicht garantieren k�nnen, m�ssen Sie @code{mysqld} herunter fahren,
-w�hrend Sie die Tabellen pr�fen. Wenn Sie @code{myisamchk} laufen lassen,
-w�hren @code{mysqld} die Tabellen aktualisiert, erhalten Sie m�glicherweise
-die Meldung, dass eine Tabelle besch�digt ist, selbst wenn sie es nicht
-ist.
-
-Wenn Sie @code{--skip-locking} nicht benutzen, k�nnen Sie jederzeit
-@code{myisamchk} benutzen, um Tabellen zu pr�fen. W�hrend Sie das tun,
-warten alle Clients, die versuchen, die Tabelle zu aktualisieren, bis
-@code{myisamchk} fertig ist, bevor sie weiter machen.
-
-Wenn Sie @code{myisamchk} benutzen, um Tabellen zu reparieren oder zu
-optimieren, @strong{M�SSEN} Sie stets sicherstellen, dass der
-@code{mysqld}-Server die Tabelle nicht benutzt (das trifft auch zu, wenn
-Sie @code{--skip-locking} benutzen). Wenn Sie @code{mysqld} nicht herunter
-fahren, sollten Sie zumindest @code{mysqladmin flush-tables} ausf�hren,
-bevor Sie @code{myisamchk} benutzen.
-
-Dieses Kapitel beschreibt, wie man MySQL-Datenbanken auf Datenbesch�digung
-pr�ft und damit umgeht. Wenn Ihre Tabellen h�ufig besch�digt sind, wollten
-Sie versuchen, den Grund hierf�r herauszufinden! @xref{Crashing}.
-
-Der Abschnitt �ber @code{MyISAM}-Tabellen enth�lt Gr�nde, warum eine
-Tabelle besch�digt sein k�nnte. @xref{MyISAM table problems}.
-
-Wenn Sie eine Wiederherstellung nach einem Absturz durchf�hren, ist es
-wichtig zu wissen, das jede Tabelle @code{tabelle} in einer Datenbank mit
-drei Dateien im Datenbank-Verzeichnis korrespondiert:
-
-@multitable @columnfractions .2 .8
-@item @strong{Datei} @tab @strong{Zweck}
-@item @file{tabelle.frm} @tab Tabellendefinitionsdatei (form)
-@item @file{tabelle.MYD} @tab Daten-Datei (data)
-@item @file{tabelle.MYI} @tab Index-Datei (index)
-@end multitable
-
-Jeder der drei Dateitypen kann auf verschiedene Weisen besch�digt werden.
-Probleme treten aber zumeist bei Daten-Dateien und Index-Dateien auf.
-
-@code{myisamchk} funktioniert so, dass Zeile f�r Zeile eine Kopie der
-@file{.MYD}-(data)-Datei gemacht wird. Es beendet die Reparaturphase damit,
-dass die alte @file{.MYD}-Datei entfernt wird und die neue Datei mit dem
-Orginal-Dateinamen benannt wird. Wenn Sie @code{--quick} benutzen, erzeugt
-@code{myisamchk} keine tempor�re @file{.MYD}-Datei, sondern nimmt statt
-dessen an, dass die @file{.MYD}-Datei korrekt ist, und erzeugt nur eine
-neue Index-Datei, ohne die @file{.MYD}-Datei zu ber�hren. Das ist sicher,
-weil @code{myisamchk} automatisch feststellt, wenn die @file{.MYD}-Datei
-besch�digt ist, und die Reparatur in diesem Fall abbricht. Sie k�nnen
-@code{myisamchk} auch mit zwei @code{--quick}-Optionen aufrufen. In diesem
-Fall bricht @code{myisamchk} bei einigen Fehlern (wie doppelten
-Schl�sseleintr�gen) nicht ab, sondern versucht statt dessen, diese
-aufzul�sen, indem die @file{.MYD}-Datei ver�ndert wird. Normalerweise ist
-die Benutzung von zwei @code{--quick}-Optionen nur sinnvoll, wenn Sie zu
-wenig frei Plattenplatz haben, um eine normale Reparatur durchzuf�hren. In
-diesem Fall sollten Sie zumindest eine Datensicherung machen, bevor Sie
-@code{myisamchk} laufen lassen.
-
-
-@node Check, Repair, Crash recovery, Table maintenance
-@c German node Pr�fung
-@subsubsection Wie Tabellen auf Fehler �berpr�ft werden
-
-@cindex Pr�fen, Tabellen auf Fehler
-@cindex Tabellen, Fehlerpr�fung
-@cindex Fehler, Tabellen pr�fen auf
-
-Um eine MyISAM-Tabelle zu pr�fen, benutzen Sie folgende Befehle:
-
-@table @code
-@item myisamchk tabelle
-Das findet 99.99% aller Fehler. Nicht gefunden werden Besch�digungen, die
-@strong{NUR} die Daten-Datei betreffen (was sehr ungew�hnlich ist). Wenn
-Sie eine Tabelle pr�fen wollen, sollten Sie @code{myisamchk} normalerweise
-ohne Optionen oder entweder mit der @code{-s}- oder @code{--silent}-Option
-laufen lassen.
-
-@item myisamchk -m tabelle
-Das findet 99.999% aller Fehler. Zuerst pr�ft es alle Indexeintr�ge auf
-Fehler und liest dann alle Zeilen durch. Es berechnet eine Pr�fsumme f�r
-alle Schl�ssel in den Zeilen und best�tigt dann, dass die Pr�fsumme mit der
-Pr�fsumme f�r die Schl�ssel im Indexbaum �bereinstimmt.
-
-@item myisamchk -e tabelle
-Das f�hrt eine vollst�ndige, gr�ndlich Pr�fung aller Daten durch (@code{-e}
-bedeutet ``extended check'' - erweiterte Pr�fung). Es f�hrt ein Pr�f-Lesen
-jedes Schl�ssels f�r jede Zeile durch, um zu best�tigen, dass sie
-tats�chlich auf die richtige Zeile verweisen. Das kann bei einer gro�en
-Tabelle mit vielen Schl�sseln SEHR LANG dauern. @code{myisamchk} h�lt
-normalerweise an, wenn es den ersten Fehler gefunden hat. Wenn Sie mehr
-Informationen haben wollen, k�nnen Sie die
-@code{--verbose}-(@code{-v})-Option benutzen. Das veranlasst
-@code{myisamchk}, weiterzumachen, bis maximal 20 Fehler gefunden wurden.
-Bei normalem Gebrauch ist ein einfaches @code{myisamchk} (ohne weitere
-Argumente ausser dem Tabellennamen) ausreichend.
-
-@item myisamchk -e -i tabelle
-Wie der vorherige Befehl, jedoch weist die @code{-i}-Option
-@code{myisamchk} an, zus�tzlich einige statistische Informationen
-auszugeben.
-@end table
-
-
-@node Repair, Optimisation, Check, Table maintenance
-@c German node Reparatur
-@subsubsection Wie Tabellen repariert werden
-
-@cindex Tabellen, Reparatur
-@cindex Reparatur, Tabellen
-
-Der folgende Abschnitt behandelt nur die Benutzung von @code{myisamchk} mit
-@code{MyISAM}-Tabellen (Erweiterungen @code{.MYI} und @code{.MYD}). Wenn
-Sie @code{ISAM}-Tabellen benutzen (Erweiterungen @code{.ISM} und
-@code{.ISD}), sollten Sie statt dessen @code{isamchk} benutzen.
-
-Ab MySQL-Version 3.23.14 k�nnen Sie MyISAM-Tabellen mit dem
-@code{REPAIR TABLE}-Befehl reparieren. @xref{REPAIR TABLE}.
-
-Zu den Symptomen einer besch�digten Tabelle geh�ren Anfragen, die
-unerwartet abbrechen, und beobachtbare Fehler wie folgender:
-
-@itemize @bullet
-@item
-@file{tabelle.frm} is locked against change
-@item
-Can't find file @file{tabelle.MYI} (Errcode: ###)
-@item
-Unexpected end of file
-@item
-Record file is crashed
-@item
-Got error ### from table handler
-
-Um mehr Information �ber den Fehler zu erhalten, lassen Sie @code{perror
-###} laufen. Hier sind die h�ufigsten Fehler, die auf ein Problem mit der
-Tabelle hinweisen:
-
-@example
-shell> perror 126 127 132 134 135 136 141 144 145
-126 = Index-Datei ist besch�digt / falsches Dateiformat
-127 = Daten-Datei ist besch�digt
-132 = Alte Datenbank-Datei
-134 = Datensatz wurde bereits gel�scht (oder Daten-Datei besch�digt)
-135 = Kein Platz mehr in der Daten-Datei
-136 = Kein Platz mehr in der Index-Datei
-141 = Doppelter Eintrag f�r eindeutigen Schl�ssel oder Beschr�nkung beim Schreiben oder Aktualisiern
-144 = Tabelle ist besch�digt und die letzte Reparatur ist fehlgeschlagen
-145 = Tabelle ist als besch�digt gekennzeichnet und sollte repariert werden
-@end example
-
-Beachten Sie, dass Fehler 135 (kein Platz mehr in der Daten-Datei) kein
-Fehler ist, der durch eine einfache Reparatur behoben werden kann. In
-diesem Fall m�ssen Sie folgendes durchf�hren:
-
-@example
-ALTER TABLE tabelle MAX_ROWS=xxx AVG_ROW_LENGTH=yyy;
-@end example
-
-@end itemize
-
-In den anderen F�llen m�ssen Sie Ihre Tabellen reparieren. @code{myisamchk}
-kann �blicherweise die meisten Dinge, die schief gehen k�nnen, finden und
-beheben.
-
-Der Reparaturprozess l�uft in vier Phasen ab, die unten beschrieben sind.
-Bevor Sie anfangen, sollten Sie in das Datenbank-Verzeichnis wechseln und
-die Berechtigungen der Tabellen-Dateien pr�fen. Stellen Sie sicher, dass
-diese durch den Unix-Benutzer lesbar sind, unter dem @code{mysqld} l�uft
-(und f�r Sie, weil Sie auf die Dateien zugreifen m�ssen, wenn Sie sie
-pr�fen). Wenn Sie in der Folge Dateien ver�ndern m�ssen, m�ssen diese f�r
-Sie auch schreibbar sein.
-
-Wenn Sie MySQL-Version 3.23.16 und h�her benutzen, k�nnen (und sollten) Sie
-die @code{CHECK}- und @code{REPAIR}-Befehle benutzen, um
-@code{MyISAM}-Tabellen zu pr�fen und zu reparieren. @xref{REPAIR TABLE}.
-
-Der Handbuchabschnitt �ber Tabellenwartung beinhaltet die Optionen f�r
-@code{isamchk} / @code{myisamchk}. @xref{Table maintenance}.
-
-Der folgende Abschnitt ist f�r F�lle, in denen die obigen Befehle
-fehlschlagen, oder wenn Sie die erweiterten Features benutzen wollen, die
-@code{isamchk} / @code{myisamchk} zur Verf�gung stellt.
-
-Wenn Sie eine Tabelle von der Kommandozeile aus reparieren wollen, m�ssen
-Sie zuerst den @code{mysqld}-Server herunter fahren. Beachten Sie bei
-@code{mysqladmin shutdown} auf einen entfernten Server, dass der
-@code{mysqld}-Server noch f�r eine Weile aktiv bleibt, nachdem
-@code{mysqladmin} beendet ist, bis alle Anfragen beendet und alle Schl�ssel
-auf Platte zur�ck geschrieben (flush) wurden.
-
-@noindent
-@strong{Phase 1: Pr�fen Ihrer Tabellen}
-
-Lassen Sie @code{myisamchk *.MYI} laufen, oder @code{myisamchk -e *.MYI},
-wenn Sie mehr Zeit haben. Benutzen Sie die @code{-s}-(silent)-Option, um
-unn�tige Informationen zu unterdr�cken.
-
-Wenn der @code{mysqld}-Server herunter gefahren ist, sollten Sie die
-@code{--update}-Option benutzen, um @code{myisamchk} zu veranlassen, die
-Tabelle als 'gepr�ft' zu kennzeichnen.
-
-Sie m�ssen nur die Tabellen reparieren, bei denen @code{myisamchk} bekannt
-gibt, dass sie Fehler enthalten. Gehen Sie bei solchen Tabellen zu Phase 2
-�ber.
-
-Wenn Sie beim Pr�fen merkw�rdige Fehler erhalten (wie @code{out of
-memory}-Fehler), oder wenn @code{myisamchk} abst�rzt, gehen Sie zu Phase
-3.
-
-@noindent
-@strong{Phase 2: Einfache, sichere Reparatur}
-
-HINWEIS: Wenn Sie wollen, dass die Reparatur sehr viel schneller abl�uft,
-sollten Sie allen @code{isamchk/myisamchk}-Befehlen folgendes hinzuf�gen:
-@code{-O sort_buffer=# -O key_buffer=#} (wobei # etwa 1/4 des verf�gbaren
-Arbeitsspeichers ist).
-
-Probieren Sie zuerst @code{myisamchk -r -q tabelle} (@code{-r -q} bedeutet
-``quick recovery mode'' - schnelles Wiederherstellen). Dies versucht, die
-Index-Datei zu reparieren, ohne die Daten-Datei zu ber�hren. Wenn die
-Daten-Datei alles enth�lt, was sie sollte, und die L�schverkn�pfungen auf
-die korrekten Stellen in der Daten-Datei zeigen, sollte das funktionieren
-und die Tabelle ist repariert. Machen Sie dann mit der Reparatur der
-n�chsten Tabelle weiter. Ansonsten f�hren Sie folgende Prozedur durch:
-
-@enumerate
-@item
-Machen Sie eine Datensicherung der Daten-Datei, bevor Sie fortfahren.
-
-@item
-Geben Sie @code{myisamchk -r tabelle} (@code{-r} bedeutet ``recovery mode''
-- Wiederherstellung) ein. Das entfernt falsche und gel�schte Datens�tze aus
-der Daten-Datei und stellt die Index-Datei wieder her.
-
-@item
-Wenn die vorherigen Schritte fehlschlagen, geben Sie @code{myisamchk
---safe-recover tabelle} ein. Der Modus f�r sicheres Wiederherstellen
-benutzt eine alte Wiederherstellungsmethode, die ein paar F�lle behandelt,
-die der normale Wiederherstellungsmodus nicht behandelt (ist aber
-langsamer).
-@end enumerate
-
-Wenn Sie bei der Reparatur merkw�rdige Fehler erhalten (wie @code{out of
-memory}-Fehler), oder wenn @code{myisamchk} abst�rzt, gehen Sie zu Phase
-3.
-
-@noindent
-@strong{Phase 3: Schwierige Reparatur}
-
-Diese Phase sollten Sie nur dann erreichen, wenn der erste 16-KB-Block der
-Index-Datei zerst�rt ist oder falsche Informationen enth�lt, oder wenn die
-Index-Datei fehlt. In diesem Fall ist es notwendig, eine neue Index-Datei
-zu erzeugen. Das machen Sie wie folgt:
-
-@enumerate
-@item
-Verschieben Sie die Daten-Datei an einen sicheren Ort.
-
-@item
-Benutzen Sie die Tabellen-Beschreibungsdatei, um eine neue (leere)
-Daten-Datei und Index-Dateien zu erzeugen:
-
-@example
-shell> mysql datenbank
-mysql> SET AUTOCOMMIT=1;
-mysql> TRUNCATE TABLE tabelle;
-mysql> quit
-@end example
-
-Wenn Ihre SQL-Version kein @code{TRUNCATE TABLE} hat, benutzen Sie statt
-dessen @code{DELETE FROM tabelle}.
-
-@item
-Kopieren Sie Ihre alte Daten-Datei zur�ck, �ber die neu erzeugte
-Daten-Datei. (Verschieben Sie Ihre alte Daten-Datei nicht einfach, damit
-Sie eine Kopie erhalten, falls etwas schief geht.)
-@end enumerate
-
-Gehen Sie zur�ck zu Phase 2. @code{myisamchk -r -q} sollte jetzt
-funktionieren. (Das sollte keine Endlosschleife sein.)
-
-@noindent
-@strong{Phase 4: Sehr schwierige Reparatur}
-
-Diese Phase sollten Sie nur dann erreichen, wenn auch die
-Beschreibungsdatei besch�digt ist. Das sollte nie passieren, weil die
-Beschreibungsdatei nicht ver�ndert wird, nachdem die Tabelle erzeugt wurde:
-
-@enumerate
-@item
-Stellen Sie die Beschreibungsdatei von einer Datensicherung wieder her und
-gehen Sie zur�ck zu Phase 3. Sie k�nnen auch die Index-Datei
-wiederherstellen und zu Phase 2 zur�ck gehen. Im letzteren Fall sollten
-Sie mit @code{myisamchk -r} anfangen.
-
-@item
-Wenn Sie keine Datensicherung haben, aber genau wissen, wie die Tabelle
-erzeugt wurde, erzeugen Sie eine Kopie der Tabelle in einer anderen
-Datenbank. Entfernen Sie die neue Daten-Datei und verschieben Sie die
-Beschreibungs- und Index-Dateien von der anderen Datenbank in Ihre
-besch�digte Datenbank. Das ergibt neue Beschreibungs- und Index-Dateien,
-l��t aber die Daten-Datei in Ruhe. Gehen Sie zur�ck zu Phase 2 und
-versuchen Sie, die Index-Datei wiederherzustellen.
-@end enumerate
-
-
-@node Optimisation, , Repair, Table maintenance
-@c German node Optimierung
-@subsubsection Tabellenoptimierung
-
-@cindex Tabellen, Optimierung
-@cindex Optimierung, Tabellen
-
-Um fragmentierte Datens�tze zu vereinigen und verschwendeten Speicherplatz
-zu beseitigen, der sich durch L�schen und Aktualisieren von Datens�tzen
-ergibt, lassen Sie @code{myisamchk} im Wiederherstellungsmodus laufen:
-
-@example
-shell> myisamchk -r tabelle
-@end example
-
-Auf dieselbe Weise k�nnen Sie eine Tabelle optimieren, indem Sie das
-SQL-Statement @code{OPTIMIZE TABLE} benutzen. @code{OPTIMIZE TABLE} f�hrt
-eine Reparatur der Tabelle und eine Analyse der Schl�ssel durch und
-sortiert den Indexbaum, um schnelleres Nachschlagen der Schl�ssel (Key
-Lookup) zu erm�glichen. Ausserdem schaltet es die M�glichkeit ungewollter
-Interaktionen zwischen einem Dienstprogramm und dem Server aus, weil der Server
-bei der Benutzung von @code{OPTIMIZE TABLE} die ganze Arbeit verrichtet.
-@xref{OPTIMIZE TABLE}.
-
-@code{myisamchk} hat eine Anzahl weiterer Optionen, die Sie f�r die
-Verbesserung der Performance einer Tabelle benutzen k�nnen:
-
-@table @code
-@item -S, --sort-index
-@item -R index_nummer, --sort-records=index_nummer
-@item -a, --analyze
-@end table
-
-Eine detaillierte Beschreibung der Optionen steht unter
-@xref{myisamchk syntax}.
-
-
-@node Maintenance regimen, Table-info, Table maintenance, Disaster Prevention
-@c German node Wartungsplan
-@subsection Wartungsplan f�r Tabellen erstellen
-
-@cindex Wartung, Tabellen
-@cindex Tabellen, Wartungsplan
-
-Ab MySQL-Version 3.23.13 k�nnen Sie MyISAM-Tabellen mit dem @code{CHECK
-TABLE}-Befehl pr�fen. @xref{CHECK TABLE}. Sie k�nnen Tabellen mit dem
-@code{REPAIR TABLE}-Befehl reparieren. @xref{REPAIR TABLE}.
-
-Es ist eine gute Idee, Tabellen�berpr�fungen auf regelm��iger Basis
-durchzuf�hren statt darauf zu warten, dass Probleme auftreten. F�r
-Wartungszwecke benutzen Sie @code{myisamchk -s}, um Tabellen zu �berpr�fen.
-Die @code{-s}-Option (Kurzform f�r @code{--silent}) veranlasst
-@code{myisamchk}, im schweigsamen Modus zu laufen, wobei Meldungen nur
-ausgegeben werden, wenn Fehler auftreten.
-
-@tindex .pid-(process ID)-Datei
-Ebenfalls eine gute Idee ist es, Tabellen zu �berpr�fen, wenn der Server
-hoch f�hrt. Wenn beispielsweise die Maschine mitten w�hrend einer
-Aktualisierung (Update) neu gebootet hat, m�ssen Sie �blicherweise alle
-Tabellen pr�fen, die betroffen sein k�nnten. (Das ist ein Fall von
-``erwarteter Tabellenbesch�digung''.) Sie k�nnen @code{safe_mysqld} einen
-Test hinzuf�gen, der @code{myisamchk} laufen l��t, um alle Tabellen zu
-�berpr�fen, die innerhalb der letzten 24 Stunden ge�ndert wurden, wenn nach
-einem Reboot eine alte @file{.pid}-(process ID)-Datei �brig blieb. (Die
-@file{.pid}-Datei wird von @code{mysqld} erzeugt, wenn er hoch f�hrt, und
-entfernt, wenn er normal beendet wird. Die Anwesenheit einer
-@file{.pid}-Datei beim Systemstart zeigt an, dass @code{mysqld} regelwidrig
-abgebrochen wurde.)
-
-Eine noch bessere Testmethode besteht darin, jede Tabelle zu pr�fen, deren
-Zeit der letzten �nderung neuer ist als die der @file{.pid}-Datei.
-
-Ausserdem sollten Sie Ihre Tabellen regelm��ig w�hrend der normalen
-Systemt�tigkeit pr�fen. Bei MySQL AB lassen wir einen @code{cron}-Job
-laufen, um alle wichtigen Tabellen einmal pro Woche zu pr�fen, indem wir
-folgende Zeile in der @file{crontab}-Datei benutzen:
-
-@example
-35 0 * * 0 /pfad/zu/myisamchk --fast --silent /pfad/zu/datadir/*/*.MYI
-@end example
-
-Das gibt Informationen �ber besch�digte Tabellen aus, so dass wir diese
-pr�fen und reparieren k�nnen, falls notwendig.
-
-Da wir mittlerweile seit einigen Jahren keinerlei unerwartet besch�digte
-Tabellen hatten (Tabellen, die aus anderen Gr�nden als Hardware-Sch�den
-besch�digt wurden), reicht uns einmal pro Woche v�llig aus.
-
-Wir empfehlen, dass Sie jede Nacht @code{myisamchk -s} auf alle Tabellen
-ausf�hren, die w�hrend der letzten 24 Stunden aktualisiert wurden, bis Sie
-MySQL so sehr vertrauen, wie wir selbst das mittlerweile tun.
-
-@cindex Tabellen, defragmentieren
-Normalerweise brauchen Sie MySQL-Tabellen nicht so sehr warten. Wenn Sie
-Tabellen mit Zeilen dynamischer L�nge �ndern (Tabellen mit
-@code{VARCHAR}-, @code{BLOB}- oder @code{TEXT}-Spalten) oder Tabellen mit
-vielen gel�schten Zeilen haben, werden Sie diese von Zeit zu Zeit (einmal
-im Monat?) defragmentieren wollen bzw. freien Speicherplatz schaffen.
-
-Das k�nnen Sie mit @code{OPTIMIZE TABLE} auf die in Frage kommenden
-Tabellen tun, oder, wenn Sie den @code{mysqld}-Server f�r eine Weile
-herunter fahren k�nnen:
-
-@example
-isamchk -r --silent --sort-index -O sort_buffer_size=16M */*.ISM
-myisamchk -r --silent --sort-index -O sort_buffer_size=16M */*.MYI
-@end example
-
-
-@node Table-info, , Maintenance regimen, Disaster Prevention
-@c German node Tabelleninformation
-@subsection Informationen �ber eine Tabelle erhalten
-
-@cindex Tabellen, Informationen
-
-Um eine Beschreibung einer Tabelle oder Statistiken �ber sie zu erhalten,
-benutzen Sie die unten stehenden Befehle. Einige davon werden sp�ter
-detaillierter erl�utert:
-
-@table @code
-@item myisamchk -d tabelle
-L��t @code{myisamchk} im ``Beschreibungsmodus'' laufen, um eine
-Beschreibung Ihrer Tabelle zu erzeugen. Wenn Sie den MySQL-Server mit der
-@code{--skip-locking}-Option starten, kann @code{myisamchk} eventuell
-Fehler �ber eine Tabelle berichten, die aktualisiert wird, w�hrend es
-l�uft. Weil @code{myisamchk} jedoch im Beschreibungsmodus keine Tabelle
-�ndert, gibt es kein Risiko, dass Daten zerst�rt werden.
-
-@item myisamchk -d -v tabelle
-Um mehr Informationen �ber das, was @code{myisamchk} tut, zu erzeugen,
-f�gen Sie @code{-v} als Option hinzu, damit es im geschw�tzigen Modus
-l�uft.
-
-@item myisamchk -eis tabelle
-Zeigt nur die wichtigsten Informationen �ber die Tabelle. Das ist langsam,
-weil es die ganze Tabelle lesen muss.
-
-@item myisamchk -eiv tabelle
-Wie @code{-eis}, sagt aber zus�tzlich, was getan werden muss.
-@end table
-
-@cindex Beispiele, @code{myisamchk}-Ausgabe
-@cindex @code{myisamchk}, Beispiele der Ausgabe
-Beispiel einer @code{myisamchk -d}-Ausgabe:
-@example
-MyISAM file: firma.MYI
-Record format: Fixed length
-Data records: 1403698 Deleted blocks: 0
-Recordlength: 226
-
-table description:
-Key Start Len Index Type
-1 2 8 unique double
-2 15 10 multip. text packed stripped
-3 219 8 multip. double
-4 63 10 multip. text packed stripped
-5 167 2 multip. unsigned short
-6 177 4 multip. unsigned long
-7 155 4 multip. text
-8 138 4 multip. unsigned long
-9 177 4 multip. unsigned long
- 193 1 text
-@end example
-
-Beispiel einer @code{myisamchk -d -v}-Ausgabe:
-@example
-MyISAM file: firma
-Record format: Fixed length
-File-version: 1
-Creation time: 1999-10-30 12:12:51
-Recover time: 1999-10-31 19:13:01
-Status: checked
-Data records: 1403698 Deleted blocks: 0
-Datafile parts: 1403698 Deleted data: 0
-Datafilepointer (bytes): 3 Keyfile pointer (bytes): 3
-Max datafile length: 3791650815 Max keyfile length: 4294967294
-Recordlength: 226
-
-table description:
-Key Start Len Index Type Rec/key Root Blocksize
-1 2 8 unique double 1 15845376 1024
-2 15 10 multip. text packed stripped 2 25062400 1024
-3 219 8 multip. double 73 40907776 1024
-4 63 10 multip. text packed stripped 5 48097280 1024
-5 167 2 multip. unsigned short 4840 55200768 1024
-6 177 4 multip. unsigned long 1346 65145856 1024
-7 155 4 multip. text 4995 75090944 1024
-8 138 4 multip. unsigned long 87 85036032 1024
-9 177 4 multip. unsigned long 178 96481280 1024
- 193 1 text
-@end example
-
-Beispiel einer @code{myisamchk -eis}-Ausgabe:
-@example
-Checking MyISAMDatei: firma
-Key: 1: Keyblocks used: 97% Packed: 0% Max levels: 4
-Key: 2: Keyblocks used: 98% Packed: 50% Max levels: 4
-Key: 3: Keyblocks used: 97% Packed: 0% Max levels: 4
-Key: 4: Keyblocks used: 99% Packed: 60% Max levels: 3
-Key: 5: Keyblocks used: 99% Packed: 0% Max levels: 3
-Key: 6: Keyblocks used: 99% Packed: 0% Max levels: 3
-Key: 7: Keyblocks used: 99% Packed: 0% Max levels: 3
-Key: 8: Keyblocks used: 99% Packed: 0% Max levels: 3
-Key: 9: Keyblocks used: 98% Packed: 0% Max levels: 4
-Total: Keyblocks used: 98% Packed: 17%
-
-Records: 1403698 M.recordlength: 226 Packed: 0%
-Recordspace used: 100% Empty space: 0% Blocks/Record: 1.00
-Record blocks: 1403698 Delete blocks: 0
-Recorddata: 317235748 Deleted data: 0
-Lost space: 0 Linkdata: 0
-
-User time 1626.51, System time 232.36
-Maximum resident set size 0, Integral resident set size 0
-Non physical pagefaults 0, Physical pagefaults 627, Swaps 0
-Blocks in 0 out 0, Messages in 0 out 0, Signals 0
-Voluntary context switches 639, Involuntary context switches 28966
-@end example
-
-Beispiel einer @code{myisamchk -eiv}-Ausgabe:
-@example
-Checking MyISAM file: firma
-Data records: 1403698 Deleted blocks: 0
-- check file-size
-- check delete-chain
-block_size 1024:
-index 1:
-index 2:
-index 3:
-index 4:
-index 5:
-index 6:
-index 7:
-index 8:
-index 9:
-No recordlinks
-- check index reference
-- check data record references index: 1
-Key: 1: Keyblocks used: 97% Packed: 0% Max levels: 4
-- check data record references index: 2
-Key: 2: Keyblocks used: 98% Packed: 50% Max levels: 4
-- check data record references index: 3
-Key: 3: Keyblocks used: 97% Packed: 0% Max levels: 4
-- check data record references index: 4
-Key: 4: Keyblocks used: 99% Packed: 60% Max levels: 3
-- check data record references index: 5
-Key: 5: Keyblocks used: 99% Packed: 0% Max levels: 3
-- check data record references index: 6
-Key: 6: Keyblocks used: 99% Packed: 0% Max levels: 3
-- check data record references index: 7
-Key: 7: Keyblocks used: 99% Packed: 0% Max levels: 3
-- check data record references index: 8
-Key: 8: Keyblocks used: 99% Packed: 0% Max levels: 3
-- check data record references index: 9
-Key: 9: Keyblocks used: 98% Packed: 0% Max levels: 4
-Total: Keyblocks used: 9% Packed: 17%
-
-- check records und index references
-[LOTS OF ROW NUMBERS DELETED]
-
-Records: 1403698 M.recordlength: 226 Packed: 0%
-Recordspace used: 100% Empty space: 0% Blocks/Record: 1.00
-Record blocks: 1403698 Delete blocks: 0
-Recorddata: 317235748 Deleted data: 0
-Lost space: 0 Linkdata: 0
-
-User time 1639.63, System time 251.61
-Maximum resident set size 0, Integral resident set size 0
-Non physical pagefaults 0, Physical pagefaults 10580, Swaps 0
-Blocks in 4 out 0, Messages in 0 out 0, Signals 0
-Voluntary context switches 10604, Involuntary context switches 122798
-@end example
-
-Hier stehen die Gr��en der Daten- und Index-Dateien der Tabelle, die in
-den vorstehenden Beispielen benutzt wurde:
-
-@example
--rw-rw-r-- 1 monty tcx 317235748 Jan 12 17:30 firma.MYD
--rw-rw-r-- 1 davida tcx 96482304 Jan 12 18:35 firma.MYM
-@end example
-
-Erl�uterungen der Informationen, die @code{myisamchk} erzeugt, werden unten
-gegeben. ``keyfile'' ist die Index-Datei. ``Record'' und ``row'' sind
-Synonyme:
-
-@table @code
-@item ISAM file
-Name der ISAM-(Index)-Datei.
-
-@item Isam-version
-Version des ISAM-Formats. Momentan immer 2.
-
-@item Creation time
-Wann die Daten-Datei erzeugt wurde.
-
-@item Recover time
-Wann die Index-/Daten-Datei das letzte Mal rekonstruiert wurden.
-
-@item Data records
-Wie viele Datens�tze in der Tabelle sind.
-
-@item Deleted blocks
-Wie viele gel�schte Bl�cke noch Platz belegen.
-Sie k�nnen Ihre Tabelle optimieren, um diesen Platz zu minimieren.
-@xref{Optimisation}.
-
-@item Datafile: Parts
-Bei dynamischem Datensatzformat zeigt dies an, wie viele Datenbl�cke es
-gibt. Bei einer optimierten Tabelle ohne fragmentierte Datens�tze ist das
-dasselbe wie @code{Data records}.
-
-@item Deleted data
-Wie viele Bytes nicht zur�ckgewonnener gel�schter Daten es gibt.
-Sie k�nnen Ihre Tabelle optimieren, um diesen Platz zu minimieren.
-@xref{Optimisation}.
-
-@item Datafile pointer
-Die Gr��e des Daten-Datei-Zeigers in Bytes. Das sind normalerweise 2, 3, 4
-oder 5 Bytes. Die meisten Tabellen schaffen 2 Bytes, aber das kann bislang
-von MySQL noch nicht gesteuert werden. Bei festen Tabellen ist das eine
-Datensatzadresse. Bei dynamischen Tabellen ist es eine Byte-Adresse.
-
-@item Keyfile pointer
-Die Gr��e des Index-Datei-Zeigers in Bytes. Sie betr�gt normalerweise 1, 2
-oder 3 Bytes. Die meisten Tabellen schaffen 2 Bytes, aber das wird von
-MySQL automatisch berechnet. Es ist immer die Block-Adresse.
-
-@item Max datafile length
-Wie lang die Daten-Datei (@code{.MYD}-Datei) der Tabelle werden kann, in
-Bytes.
-
-@item Max keyfile length
-Wie lang die Index-Datei (@code{.MYI}-Datei) der Tabelle werden kann, in
-Bytes.
-
-@item Recordlength
-Wie viel Platz jeder Datensatz ben�tigt, in Bytes.
-
-@item Record format
-Das Format, das benutzt wird, um Tabellenzeilen zu speichern.
-Die oben stehenden Beispiele benutzen @code{Fixed length}.
-Andere m�gliche Werte sind @code{Compressed} und @code{Packed}.
-
-@item Table description
-Eine Liste aller Schl�ssel in der Tabelle. F�r jeden Schl�ssel werden
-einige Low-Level-Informationen angezeigt:
-
-@table @code
-@item Key
-Die Nummer des Schl�ssels.
-
-@item Start
-Wo im Datensatz dieser Index-Teil anf�ngt.
-
-@item Len
-Wie lang dieser Index-Teil ist. Bei gepackten Zahlen sollte das immer die
-gesamte L�nge der Spalte sein. Bei Zeichenketten kann es k�rzer als die
-gesamte L�nge der indizierten Spalte sein, weil Sie ein Prefix einer
-Zeichenkettenspalte indexieren k�nnen.
-
-@item Index
-@code{unique} oder @code{multip.} (multiple). Zeigt an, ob ein Wert einmal
-oder mehrfach in diesem Index vorkommen darf.
-
-@item Type
-Welchen Datentyp dieser Index-Teil hat. Das ist ein ISAM-Datentyp mit den
-Optionen @code{packed}, @code{stripped} oder @code{empty}.
-
-@item Root
-Adresse des Root-Index-Blocks.
-
-@item Blocksize
-Die Gr��e jedes Index-Blocks. Vorgabem��ig ist das 1024, doch dieser Wert
-kann beim Kompilieren ge�ndert werden.
-
-@item Rec/key
-Das ist ein statistischer Wert, der vom Optimierer benutzt wird. Es sagt
-aus, wie viele Datens�tze es pro Wert f�r diesen Schl�ssel gibt. Ein
-eindeutiger Schl�ssel hat immer einen Wert von 1. Das kann aktualisiert
-werden, nachdem eine Tabelle geladen wurde (oder in gr��erem Umfang
-ge�ndert) mit @code{myisamchk -a}. Wenn dies �berhaupt nicht aktualisiert
-wurde, wird ein Wert von 30 angenommen.
-@end table
-
-@item
-Im ersten Beispiel oben ist der neunte Schl�ssel ein mehrteiliger Schl�ssel
-mit zwei Teilen.
-
-@item Keyblocks used
-Welcher Prozentsatz von Schl�sselbl�cken benutzt wird. Weil die Tabellen,
-die in den Beispielen benutzt wurden, direkt vorher mit @code{myisamchk}
-reorganisiert wurden, sind diese Werte sehr hoch (sehr nahe am
-theoretischen Maximum).
-
-@item Packed
-MySQL versucht, Schl�ssel mit einem gemeinsamen Suffix zu packen. Das geht
-nur bei @code{CHAR}-, @code{VARCHAR} und @code{DECIMAL}-Schl�sseln. Bei
-langen Zeichenketten wie Namen kann das den benutzten Platz signifikant
-verringern. Im dritten Beispiel oben ist der vierte Schl�ssel zehn Zeichen
-lang, wodurch ein 60%-ige Verringerung des Platzbedarfs erreicht wird.
-
-@item Max levels
-Wie tief der B-Baum f�r diesen Schl�ssel ist. gro�e Tabellen mit langen
-Schl�sseln haben hohe Werte.
-
-@item Records
-Wie viele Zeilen in der Tabelle enthalten sind.
-
-@item M.recordlength
-Die durchschnittliche Datensatzl�nge. Bei Tabellen mit Datens�tzen fester
-L�nge ist das die exakte Datensatzl�nge.
-
-@item Packed
-MySQL schneidet Leerzeichen am Ende von Zeichenketten ab. Der
-@code{Packed}-Wert zeigt an, welcher Prozentsatz dadurch gespart wurde.
-
-@item Recordspace used
-Welcher Prozentsatz der Daten-Datei benutzt wird.
-
-@item Empty space
-Welcher Prozentsatz der Daten-Datei unbenutzt ist.
-
-@item Blocks/Record
-Durchschnittliche Anzahl der Bl�cke pro Datensatz (das hei�t, aus wie
-vielen Verkn�pfungen (Links) ein fragmentierter Datensatz zusammengesetzt
-ist). Bei Tabellen mit festem Format ist das immer 1. Dieser Wert sollte so
-nah wie m�glich an 1,0 bleiben. Wenn er zu Gro� wird, k�nnen Sie die
-Tabelle @code{myisamchk} reorganisieren.
-@xref{Optimisation}.
-
-@item Recordblocks
-Wie viele Bl�cke (Verkn�pfungen, Links) benutzt werden. Bei festem Format
-ist das die Anzahl der Datens�tze.
-
-@item Deleteblocks
-Wie viele Bl�cke (Verkn�pfungen, Links) gel�scht sind.
-
-@item Recorddata
-Wie viele Bytes in der Daten-Datei benutzt sind.
-
-@item Deleted data
-Wie viele Bytes in der Daten-Datei gel�scht sind (unbenutzt).
-
-@item Lost space
-Wenn ein Datensatz auf eine k�rzere L�nge aktualisiert wird, geht etwas
-Platz verloren. Das ist die Summe aller solcher Verluste in Bytes.
-
-@item Linkdata
-When das dynamische Tabellenformat benutzt wird, werden Datensatzfragmente
-mit Zeigern (Pointer) verkn�pft (jeder mit 4 bis 7 Bytes). @code{Linkdata}
-ist die Summe des Speicherplatzes, der von diesen Zeigern benutzt wird.
-@end table
-
-Wenn eine Tabelle mit @code{myisampack} komprimiert wurde, gibt
-@code{myisamchk -d} zus�tzliche Informationen �ber jede Tabellenspalte aus,
-siehe @ref{myisampack, , @code{myisampack}}, wo sich ein Beispiel solcher
-Informationen und was sie bedeuten befindet.
-
-
-@node Database Administration, Localisation, Disaster Prevention, MySQL Database Administration
-@c German node Datenbankadministration
-@section Datenbankverwaltung Sprachreferenz
-
-
-
-
-@menu
-* OPTIMIZE TABLE::
-* ANALYZE TABLE::
-* FLUSH::
-* KILL::
-* SHOW::
-@end menu
-
-@node OPTIMIZE TABLE, ANALYZE TABLE, Database Administration, Database Administration
-@c German node OPTIMIZE TABLE
-@subsection @code{OPTIMIZE TABLE}-Syntax
-
-@findex OPTIMIZE TABLE
-
-@cindex Tabellen, defragmentieren
-@cindex Tabellen, Fragmentierung
-
-@example
-OPTIMIZE TABLE tabelle[,tabelle]...
-@end example
-
-@code{OPTIMIZE TABLE} sollte benutzt werden, wenn Sie gro�e Teile der
-Tabelle gel�scht haben oder bei Tabellen mit Zeilen variabler L�nge viele
-�nderungen durchgef�hrt haben (Tabellen, die @code{VARCHAR}-, @code{BLOB}-
-oder @code{TEXT}-Spalten enthalten). Gel�schte Datens�tze werden in einer
-verkn�pften Liste vorgehalten, und nachfolgenden @code{INSERT}-Operationen
-benutzen die Positionen alter Datens�tze. Sie k�nnen @code{OPTIMIZE TABLE}
-benutzen, um unbenutzten Platz freizugeben und die Daten-Datei zu
-defragmentieren.
-
-Momentan funktioniert @code{OPTIMIZE TABLE} nur auf @strong{MyISAM}- und
-@code{BDB}-Tabellen. Bei @code{BDB}-Tabellen ist @code{OPTIMIZE TABLE}
-momentan auf @code{ANALYZE TABLE} gemappt. @xref{ANALYZE TABLE}.
-
-Sie k�nnen @code{OPTIMIZE TABLE} auf andere Tabellentypen zum Laufen
-bringen, indem Sie @code{mysqld} mit @code{--skip-new} oder
-@code{--safe-mode} starten, aber in diesem Fall wird @code{OPTIMIZE TABLE}
-lediglich auf @code{ALTER TABLE} gemappt.
-
-@code{OPTIMIZE TABLE} funktioniert wie folgt:
-@itemize @bullet
-@item
-Wenn die Tabelle gel�schte oder aufgeteilte Zeilen hat, wird sie repariert.
-@item
-Wenn die Index-Seiten nicht sortiert sind, werden sie sortiert.
-@item
-Wenn die Statistiken nicht aktuell sind (und eine Reparatur nicht durch das
-Sortieren des Indexes durchgef�hrt werden k�nnte), werden sie aktualisiert.
-@end itemize
-
-@code{OPTIMIZE TABLE} f�r @code{MyISAM}-Tabellen ist �quivalent zum
-Laufenlassen von @code{myisamchk --quick --check-changed-tables
---sort-index --analyze} auf die Tabelle.
-
-Beachten Sie, dass die Tabelle w�hrend der Zeit, in der @code{OPTIMIZE TABLE} l�uft, gesperrt ist!
-
-
-@node ANALYZE TABLE, FLUSH, OPTIMIZE TABLE, Database Administration
-@c German node ANALYZE TABLE
-@subsection @code{ANALYZE TABLE}-Syntax
-
-@findex ANALYZE TABLE
-
-@example
-ANALYZE TABLE tabelle[,tabelle...]
-@end example
-
-Analysiert und speichert die Schl�sselverteilung der Tabelle. W�hrend der
-Analyse ist die Tabelle mit einer Lesesperre gesperrt. Das funktioniert auf
-@code{MyISAM} und @code{BDB}-Tabellen.
-
-Das ist �quivalent zum Laufenlassen von @code{myisamchk -a} auf die
-Tabelle.
-
-MySQL benutzt die gespeicherte Schl�sselverteilung, um zu entscheiden, in
-welcher Reihenfolge Tabellen verkn�pft werden sollen, wenn man eine
-Verkn�pfung (Join) auf irgend etwas anderes als eine Konstante macht.
-
-Der Befehl gibt eine Tabelle mit folgenden Spalten zur�ck:
-
-@multitable @columnfractions .35 .65
-@item @strong{Spalte} @tab @strong{Wert}
-@item Table @tab Tabellenname.
-@item Op @tab Immer ``analyze''.
-@item Msg_type @tab @code{status}, @code{error}, @code{info} oder @code{warning}.
-@item Msg_text @tab Die Meldung.
-@end multitable
-
-Sie k�nnen die gespeicherte Schl�sselverteilung mit dem @code{SHOW
-INDEX}-Befehl �berpr�fen. @xref{SHOW DATABASE INFO}.
-
-Wenn die Tabelle seit dem letzten @code{ANALYZE TABLE}-Befehl nicht
-ge�ndert wurde, wird sie nicht noch einmal analysiert.
-
-
-@node FLUSH, KILL, ANALYZE TABLE, Database Administration
-@c German node FLUSH
-@subsection @code{FLUSH}-Syntax
-
-@findex FLUSH
-
-@cindex @code{mysqladmin}
-@cindex L�schen, Caches
-@cindex Caches, l�schen
-
-@example
-FLUSH flush_option [,flush_option]
-@end example
-
-Wenn Sie einige der internen Caches, die MySQL benutzt, l�schen wollen,
-benutzen Sie den @code{FLUSH}-Befehl. Um @code{FLUSH} ausf�hren zu k�nnen,
-m�ssen Sie die @strong{RELOAD}-Berechtigung haben.
-
-@code{flush_option} kann eine der folgenden sein:
-
-@multitable @columnfractions .15 .85
-@item @code{HOSTS} @tab Leert die Host-Cache-Tabellen. Sie sollten die
-Host-Tabellen flushen, wenn einige Ihrer Hosts die IP-Nummer �ndern oder
-wenn Sie die Fehlermeldung @code{Host ... is blocked} erhalten. Wenn mehr
-als @code{max_connect_errors} Fehler in einer Zeile f�r einen gegebenen
-Host w�hrend der Verbindung zum MySQL-Server vorkommen, nimmt MySQL an,
-dass etwas nicht stimmt und blockiert den Host von weiteren
-Verbindungsversuchen. Wenn die Host-Tabellen geflusht werden, gestattet das
-dem Host, einen erneuten Verbindungsversuch zu machen.
-@c German FIX unwrapped @xref
-@xref{Blocked host}. Sie k�nnen @code{mysqld} mit @code{-O
-max_connection_errors=999999999} starten, um diese Fehlermeldung zu
-vermeiden.
-
-@item @code{LOGS} @tab Schlie�t alle Log-Dateien und �ffnet sie danach
-wieder. Wenn Sie die Update-Log-Datei oder eine bin�re Log-Datei ohne
-Erweiterung angegeben haben, wird die Erweiterungsnummer der Log-Datei um
-eins relativ zur vorherigen Datei hoch gez�hlt. Wenn Sie eine Erweiterung
-im Dateinamen benutzt haben, schlie�t MySQL die Update-Log-Datei und
-�ffnet sie danach wieder. @xref{Update log}. Das ist dasselbe, wie
-dem @code{mysqld}-Server das @code{SIGHUP}-Signal senden.
-
-@item @code{PRIVILEGES} @tab L�dt die Berechtigungen aus den
-Berechtigungstabellen der @code{mysql}-Datenbank neu.
-
-@item @code{TABLES} @tab Schlie�t alle offenen Tabellen und erzwingt, dass
-alle Tabellen in Benutzung geschlossen werden.
-
-@item @code{[TABLE | TABLES] tabelle [,tabelle...]} @tab Flusht nur die
-angegebenen Tabellen.
-
-@item @code{TABLES WITH READ LOCK} @tab Schlie�t alle offenen Tabellen und
-sperrt alle Tabellen aller Datenbanken mit einer Lesesperre, bis man
-@code{UNLOCK TABLES} ausf�hrt. Das ist eine sehr bequeme M�glichkeit,
-Datensicherungen zu erzeugen, wenn Sie ein Dateisystem wie Veritas haben,
-das Schnappsch�sse aufnehmen kann.
-
-@item @code{STATUS} @tab Setzt alle Status-Variablen auf null zur�ck. Das
-sollte man nur benutzen, wenn man eine Anfrage debuggt.
-@end multitable
-
-Jeden der oben genannten Befehle k�nnen Sie auch mit dem
-@code{mysqladmin}-Dienstprogramm ausf�hren, indem Sie @code{flush-hosts},
-@code{flush-logs}, @code{reload} oder @code{flush-tables}-Befehle
-eingeben.
-
-Sehen Sie sich auch den @code{RESET}-Befehl an, der bei der Replikation
-benutzt wird. @xref{Replication SQL}.
-
-
-
-@node KILL, SHOW, FLUSH, Database Administration
-@c German node KILL
-@subsection @code{KILL}-Syntax
-
-@findex KILL
-
-@cindex @code{mysqladmin}
-
-@example
-KILL Thread_id
-@end example
-
-Jede Verbindung zu @code{mysqld} l�uft durch einen separaten Thread. Sie
-k�nnen sehen, welche Threads laufen, indem Sie den @code{SHOW
-PROCESSLIST}-Befehl ausf�hren, und einen Thread killen, indem Sie den
-@code{KILL Thread_id}-Befehl ausf�hren.
-
-Wenn Sie die @strong{process}-Berechtigung haben, k�nnen Sie alle Threads
-sehen und killen. Ansonsten k�nnen Sie nur Ihre eigenen Threads sehen und
-killen.
-
-Sie k�nnen auch die @code{mysqladmin processlist}- und @code{mysqladmin
-kill}-Befehle benutzen, um Threads einzusehen und zu killen.
-
-Wenn Sie ein @code{KILL} ausf�hren, wird ein Thread-spezifischer @code{kill
-flag} f�r den Thread gesetzt.
-
-In den meisten F�llen kann es einige Zeit dauern, bis der Thread stirbt,
-weil der kill-Flag nur in bestimmten Intervallen gepr�ft wird:
-
-@itemize @bullet
-@item
-Bei @code{SELECT}-, @code{ORDER BY}- und @code{GROUP BY}-Schleifen wird der
-Flag gepr�ft, nachdem ein Block von Zeilen gelesen wurde. Wenn der
-kill-Flag gesetzt ist, wird das Statement abgebrochen.
-@item
-Bei @code{ALTER TABLE} wird der kill-Flag gepr�ft, bevor jeder Block von
-Zeilen aus der Original-Tabelle gelesen wird. Wenn der Flag gesetzt ist,
-wird der Befehl abgebrochen und die tempor�re Tabelle wird gel�scht.
-@item
-Bei @code{UPDATE TABLE} und @code{DELETE TABLE} wird der kill-Flag gepr�ft,
-nachdem jeder Block gelesen wurde sowie nach jeder aktualisierten oder
-gel�schten Zeile. Wenn der Flag gesetzt ist, wird das Statement
-abgebrochen. Beachten Sie, dass die �nderungen nicht zur�ck gerollt
-(Rollback) werden, wenn Sie keine Transaktionen benutzen!
-@item
-@code{GET_LOCK()} wird mit @code{NULL} abgebrochen.
-@item
-Ein @code{INSERT DELAYED}-Thread flusht schnell alle Zeilen, die er im
-Speicher hat, und stirbt.
-@item
-Wenn der Thread im Tabellen-Lock-Handler ist (Status: @code{Locked}), wird
-die Tabellen-Sperre schnell abgebrochen.
-@item
-Wenn der Thread bei einem @code{write}-Aufruf auf freien Plattenplatz
-wartet, wird der Schreibvorgang mit einer Meldung, dass die Platte voll
-ist, abgebrochen.
-@end itemize
-
-
-
-
-@node SHOW, , KILL, Database Administration
-@c German node SHOW
-@subsection @code{SHOW}-Syntax
-
-@findex SHOW DATABASE INFO
-@findex SHOW DATABASES
-@findex SHOW TABLES
-@findex SHOW COLUMNS
-@findex SHOW FIELDS
-@findex SHOW INDEX
-@findex SHOW KEYS
-@findex SHOW STATUS
-@findex SHOW VARIABLES
-@findex SHOW PROCESSLIST
-@findex SHOW TABLE STATUS
-@findex SHOW GRANTS
-@findex SHOW CREATE TABLE
-@findex SHOW MASTER STATUS
-@findex SHOW MASTER LOGS
-@findex SHOW SLAVE STATUS
-
-@example
- SHOW DATABASES [LIKE platzhalter]
-oder SHOW [OPEN] TABLES [FROM datenbank] [LIKE platzhalter]
-oder SHOW [FULL] COLUMNS FROM tabelle [FROM datenbank] [LIKE platzhalter]
-oder SHOW INDEX FROM tabelle [FROM datenbank]
-oder SHOW TABLE STATUS [FROM datenbank] [LIKE platzhalter]
-oder SHOW STATUS [LIKE platzhalter]
-oder SHOW VARIABLES [LIKE platzhalter]
-oder SHOW LOGS
-oder SHOW [FULL] PROCESSLIST
-oder SHOW GRANTS FOR benutzer
-oder SHOW CREATE TABLE tabelle
-oder SHOW MASTER STATUS
-oder SHOW MASTER LOGS
-oder SHOW SLAVE STATUS
-@end example
-
-@code{SHOW} stellt Informationen �ber Datenbanken, Tabellen, Spalten oder
-Status-Informationen �ber den Server zur Verf�gung. Wenn der @code{LIKE
-platzhalter}-Teil benutzt wird, kann die @code{platzhalter}-Zeichenkette
-eine Zeichenkette sein, die die SQL-@samp{%}- und @samp{_}-
-Platzhalterzeichen benutzt.
-
-
-
-@menu
-* SHOW DATABASE INFO::
-* SHOW TABLE STATUS::
-* SHOW STATUS::
-* SHOW VARIABLES::
-* SHOW LOGS::
-* SHOW PROCESSLIST::
-* SHOW GRANTS::
-* SHOW CREATE TABLE::
-@end menu
-
-@node SHOW DATABASE INFO, SHOW TABLE STATUS, SHOW, SHOW
-@c German node SHOW DATABASE INFO
-@subsubsection Informationen �ber Datenbank, Tabellen, Spalten und Indexe abrufen
-
-@cindex Anzeigen, Informationen, @code{SHOW}
-
-Sie k�nnen @code{datenbank.tabelle} als Alternative zur @code{tabelle FROM
-datenbank}-Syntax benutzen. Diese beiden Statements sind �quivalent:
-
-@example
-mysql> SHOW INDEX FROM tabelle FROM datenbank;
-mysql> SHOW INDEX FROM datenbank.tabelle;
-@end example
-
-@code{SHOW DATABASES} listet die Datenbanken auf dem MySQL-Server-Host auf.
-Diese Liste erhalten Sie auch mit dem @code{mysqlshow}-Befehl.
-
-@code{SHOW TABLES} listet die Tabellen in einer gegebenen Datenbank auf.
-Sie erhalten diese Liste auch mit dem @code{mysqlshow datenbank}-Befehl.
-
-@strong{HINWEIS:} Wenn ein Benutzer keinerlei Berechtigungen f�r eine
-Tabelle hat, wird die Tabelle in der Ausgabe von @code{SHOW TABLES} oder
-@code{mysqlshow datenbank} nicht aufgef�hrt.
-
-@code{SHOW OPEN TABLES} listet die Tabellen auf, die momentan im
-Tabellen-Cache ge�ffnet sind. @xref{Open tables}. Das @code{Comment}-Feld
-zeigt an, wie oft die Tabelle gecachet (@code{cached}) und in Benutzung
-(@code{in_use}) ist.
-
-@code{SHOW COLUMNS} listet die Spalten in einer gegebenen Tabelle auf. Wenn
-Sie die @code{FULL}-Option angeben, erhalten Sie auch die Berechtigungen,
-die Sie f�r jede Spalte besitzen. Wenn die Spaltentypen von dem abweichen,
-was Sie erwarten, n�mlich, was Sie im @code{CREATE TABLE}-Statement
-angegeben haben, beachten Sie, dass MySQL manchmal Spaltentypen �ndert.
-@xref{Silent column changes}.
-
-Das @code{DESCRIBE}-Statement gibt �hnliche Informationen wie @code{SHOW
-COLUMNS} aus. @xref{DESCRIBE, , @code{DESCRIBE}}.
-
-@code{SHOW FIELDS} ist ein Synonym f�r @code{SHOW COLUMNS}. @code{SHOW
-KEYS} ist ein Synonym f�r @code{SHOW INDEX}. Sie k�nnen die Spalten oder
-Indexe einer Tabelle auch mit @code{mysqlshow Datenbanktabelle} oder
-@code{mysqlshow -k Datenbanktabelle} anzeigen.
-
-@code{SHOW INDEX} gibt die Index-Informationen in einem Format aus, das dem
-@code{SQLStatistics}-Aufruf in ODBC stark �hnelt. Folgende Spalten werden
-zur�ckgegeben:
-
-@multitable @columnfractions .35 .65
-@item @strong{Spalte} @tab @strong{Bedeutung}
-@item @code{Table} @tab Name der Tabelle.
-@item @code{Non_unique} @tab 0, wenn der Index keine Duplikate enthalten darf.
-@item @code{Key_name} @tab Name des Indexes.
-@item @code{Seq_in_index} @tab Spaltensequenznummer im Index, z�hlt ab 1.
-@item @code{Column_name} @tab Spaltenname.
-@item @code{Collation} @tab Wie die Spalte im Index sortiert ist.
- In MySQL k�nnen diese Werte @samp{A} (Ascending - aufsteigend)
- oder @code{NULL} (Not sorted - unsortiert) sein.
-@item @code{Cardinality} @tab Anzahl der eindeutigen Werte im Index.
- Dieser Wert wird durch Laufenlassen von @code{isamchk -a} aktualisiert.
-@item @code{Sub_part} @tab Anzahl der indizierten Zeichen, wenn die Spalte nur teilweise indiziert ist.
- @code{NULL}, wenn der gesamte Schl�ssel indiziert ist.
-@item @code{Comment} @tab Verschiedene Anmerkungen. Momentan teilt es nur mit,
- ob der Index FULLTEXT ist oder nicht.
-@end multitable
-
-Beachten Sie: Weil @code{Cardinality} basierend auf statistischen Werten
-gez�hlt wird, die als Ganzzahlen gespeichert sind, ist es nicht
-notwendigerweise bei kleinen Tabellen korrekt.
-
-
-@node SHOW TABLE STATUS, SHOW STATUS, SHOW DATABASE INFO, SHOW
-@c German node SHOW TABLE STATUS
-@subsubsection @code{SHOW TABLE STATUS}
-
-@cindex anzeigen, Tabellen-Status
-@cindex Tabellen, Status anzeigen
-@cindex Status, Tabellen
-
-@example
-SHOW TABLE STATUS [FROM datenbank] [LIKE platzhalter]
-@end example
-
-@code{SHOW TABLE STATUS} (neu in Version 3.23) funktioniert wie @code{SHOW
-STATUS}, zeigt aber viele weitere Informationen �ber jede Tabelle. Diese
-Liste erhalten Sie auch mit dem @code{mysqlshow --status datenbank}-Befehl.
-Folgende Spalten werden zur�ckgegeben:
-
-@multitable @columnfractions .30 .70
-@item @strong{Spalte} @tab @strong{Bedeutung}
-@item @code{Name} @tab Name der Tabelle.
-@item @code{Type} @tab Typ der Tabelle. @xref{Table types}.
-@item @code{Row_format} @tab Das Zeilenspeicherformat (fest, dynamisch oder komprimiert).
-@item @code{Rows} @tab Anzahl der Zeilen.
-@item @code{Avg_row_length} @tab Durchschnittliche Zeilenl�nge.
-@item @code{Data_length} @tab L�nge der Daten-Datei.
-@item @code{Max_data_length} @tab Maximale L�nge der Daten-Datei.
-@item @code{Index_length} @tab L�nge der Index-Datei.
-@item @code{Data_free} @tab Anzahl der zugewiesenen (allocated), aber nicht benutzten Bytes.
-@item @code{Auto_increment} @tab N�chster autoincrement-Wert.
-@item @code{Create_time} @tab Wann die Tabelle erzeugt wurde.
-@item @code{Update_time} @tab Wann die Daten-Datei das letzte Mal aktualisiert wurde.
-@item @code{Check_time} @tab Wann die Tabelle das letzte Mal gepr�ft wurde.
-@item @code{Create_options} @tab Zus�tzliche Optionen, die beim @code{CREATE TABLE} benutzt wurden.
-@item @code{Comment} @tab Der Kommentar, der beim Erzeugen der Tabelle angegeben wurde (oder einige Informationen, warum MySQL nicht auf die Tabelleninformationen zugreifen konnte).
-@end multitable
-
-Bei @code{InnoDB}-Tabellen wird im Tabellenkommentar der freie Platz im
-Tablespace ausgegeben.
-
-
-@node SHOW STATUS, SHOW VARIABLES, SHOW TABLE STATUS, SHOW
-@c German node SHOW STATUS
-@subsubsection @code{SHOW STATUS}
-
-@cindex @code{mysqladmin}
-@code{SHOW STATUS} zeigt Server-Status-Informationen an (wie
-@code{mysqladmin extended-status}). Die Ausgabe �hnelt der unten stehenden,
-obwohl Format und Anzahl der Zeilen wahrscheinlich abweichen:
-
-@example
-+--------------------------+------------+
-| Variable_name | Value |
-+--------------------------+------------+
-| Aborted_clients | 0 |
-| Aborted_connects | 0 |
-| Bytes_received | 155372598 |
-| Bytes_sent | 1176560426 |
-| Connections | 30023 |
-| Created_tmp_disk_tables | 0 |
-| Created_tmp_tables | 8340 |
-| Created_tmp_files | 60 |
-| Delayed_insert_Threads | 0 |
-| Delayed_writes | 0 |
-| Delayed_errors | 0 |
-| Flush_commands | 1 |
-| Handler_delete | 462604 |
-| Handler_read_first | 105881 |
-| Handler_read_key | 27820558 |
-| Handler_read_next | 390681754 |
-| Handler_read_prev | 6022500 |
-| Handler_read_rnd | 30546748 |
-| Handler_read_rnd_next | 246216530 |
-| Handler_update | 16945404 |
-| Handler_write | 60356676 |
-| Key_blocks_used | 14955 |
-| Key_read_requests | 96854827 |
-| Key_reads | 162040 |
-| Key_write_requests | 7589728 |
-| Key_writes | 3813196 |
-| Max_used_connections | 0 |
-| Not_flushed_key_blocks | 0 |
-| Not_flushed_delayed_rows | 0 |
-| Open_tables | 1 |
-| Open_files | 2 |
-| Open_streams | 0 |
-| Opened_tables | 44600 |
-| Questions | 2026873 |
-| Select_full_join | 0 |
-| Select_full_range_join | 0 |
-| Select_range | 99646 |
-| Select_range_check | 0 |
-| Select_scan | 30802 |
-| Slave_running | OFF |
-| Slave_open_temp_tables | 0 |
-| Slow_launch_threads | 0 |
-| Slow_queries | 0 |
-| Sort_merge_passes | 30 |
-| Sort_range | 500 |
-| Sort_rows | 30296250 |
-| Sort_scan | 4650 |
-| Table_locks_immediate | 1920382 |
-| Table_locks_waited | 0 |
-| Threads_cached | 0 |
-| Threads_created | 30022 |
-| Threads_connected | 1 |
-| Threads_running | 1 |
-| Uptime | 80380 |
-+--------------------------+------------+
-@end example
-
-@cindex variables, status
-The status variables listed h�her have the following Bedeutung:
-
-@multitable @columnfractions .35 .65
-@item @strong{Variable} @tab @strong{Bedeutung}
-@item @code{Aborted_clients} @tab Anzahl der Verbindungen, die abgebrochen
-wurden, weil der Client starb, ohne die Verbindung ordnungsgem�� zu
-schlie�en. @xref{Communication errors}.
-@item @code{Aborted_connects} @tab Anzahl der fehlgeschlagenen Versuche,
-sich mit dem MySQL-Server zu verbinden. @xref{Communication errors}.
-@item @code{Bytes_received} @tab Anzahl der Bytes, die von allen Clients
-empfangen wurden.
-@item @code{Bytes_sent} @tab Anzahl der Bytes, die an alle Clients gesendet
-wurden.
-@item @code{Connections} @tab Anzahl der Verbindungsversuche zum MySQL-Server.
-@item @code{Created_tmp_disk_tables} @tab Anzahl der (implizit) auf der
-Platte erzeugten tempor�ren Tabellen bei der Ausf�hrung von Statements.
-@item @code{Created_tmp_tables} @tab Anzahl der (implizit) im
-Arbeitsspeicher erzeugten tempor�ren Tabellen bei der Ausf�hrung von
-Statements.
-@item @code{Created_tmp_files} @tab Wie viele tempor�re Dateien
-@code{mysqld} erzeugt hat.
-@item @code{Delayed_insert_Threads} @tab Anzahl der verz�gerten
-Insert-Handler-Threads in Benutzung.
-@item @code{Delayed_writes} @tab Anzahl der Zeilen, die mit @code{INSERT
-DELAYED} geschrieben wurden.
-@item @code{Delayed_errors} @tab Anzahl der Zeilen, die mit @code{INSERT
-DELAYED} geschrieben wurden, und bei denen irgend ein Fehler auftrat
-(wahrscheinlich @code{duplicate key}).
-@item @code{Flush_commands} @tab Anzahl der ausgef�hrten @code{FLUSH}-Befehle.
-@item @code{Handler_delete} @tab Wie oft eine Zeile aus einer Tabelle
-gel�scht wurde.
-@item @code{Handler_read_first} @tab Wie oft der erste Eintrag aus einem
-Index gelesen wurde. Wenn dieser Wert hoch ist, legt das nahe, dass der
-Server viele komplette Index-Scans macht (zum Beispiel @code{SELECT spalte1
-FROM foo}, unter der Annahme, dass spalte1 indiziert ist).
-@item @code{Handler_read_key} @tab Anzahl der Anfragen, eine Zeile
-basierend auf einem Schl�ssel zu lesen. Wenn dieser Wert hoch ist, ist das
-ein gutes Indiz daf�r, dass Ihre Anfragen und Tabellen korrekt indiziert
-sind.
-@item @code{Handler_read_next} @tab Anzahl der Anfragen, die n�chste Zeile
-in der Reihenfolge des Schl�ssels zu lesen. Dieser Wert wird herauf
-gez�hlt, wenn Sie eine Index-Spalte mit einer Bereichsbeschr�nkung (Limit)
-abfragen. Er wird ebenfalls herauf gez�hlt, wenn Sie einen Index-Scan
-durchf�hren.
-@item @code{Handler_read_rnd} @tab Anzahl der Anfragen, eine Zeile
-basierend auf einer festen Position zu lesen. Dieser Wert wird hoch sein,
-wenn Sie viele Anfragen ausf�hren, die erfordern, dass das Ergebnis
-sortiert wird.
-@item @code{Handler_read_rnd_next} @tab Anzahl der Anfragen, die n�chste
-Zeile in der Daten-Datei zu lesen. Dieser Wert wird hoch sein, wenn Sie
-viele Tabellen-Scans durchf�hren. Im Allgemeinen weist das darauf hin, dass
-Ihre Tabellen nicht korrekt indiziert sind, oder dass Ihre Anfragen nicht
-so geschrieben sind, dass Sie Vorteile aus den Indexen ziehen, die Sie
-haben.
-@item @code{Handler_update} @tab Anzahl der Anfragen, eine Zeile in einer
-Tabelle zu aktualisieren.
-@item @code{Handler_write} @tab Anzahl der Anfragen, eine Zeile in eine
-Tabelle einzuf�gen.
-@item @code{Key_blocks_used} @tab Die Anzahl der benutzten Blocks im
-Schl�ssel-Cache.
-@item @code{Key_read_requests} @tab Die Anzahl der Anfragen, einen
-Schl�ssel-Block aus dem Cache zu lesen.
-@item @code{Key_reads} @tab Die Anzahl physikalischer Lesezugriffen eines
-Schl�ssel-Blocks von der Platte.
-@item @code{Key_write_requests} @tab Die Anzahl der Anfragen, einen
-Schl�ssel-Block in den Cache zu schreiben.
-@item @code{Key_writes} @tab Die Anzahl physikalischer Schreibvorg�nge
-eines Schl�ssel-Blocks auf Platte.
-@item @code{Max_used_connections} @tab Die h�chste Anzahl von Verbindungen,
-die gleichzeitig in Benutzung sind.
-@item @code{Not_flushed_key_blocks} @tab Schl�ssel-Bl�cke im
-Schl�ssel-Cache, die ver�ndert wurden, aber noch nicht auf die Platte
-zur�ck geschrieben (flush).
-@item @code{Not_flushed_delayed_rows} @tab Anzahl der Zeilen, die in
-@code{INSERT DELAY}-Warteschleifen darauf warten, geschrieben zu werden.
-@item @code{Open_tables} @tab Anzahl der offenen Tabellen.
-@item @code{Open_files} @tab Anzahl der offenen Dateien.
-@item @code{Open_streams} @tab Anzahl der offenen Streams (haupts�chlich
-zum Loggen benutzt).
-@item @code{Opened_tables} @tab Anzahl der Tabellen, die ge�ffnet wurden.
-@item @code{Select_full_join} @tab Anzahl der Joins ohne Schl�ssel (sollte
-0 sein).
-@item @code{Select_full_range_join} @tab Anzahl der Joins, bei denen eine
-Bereichssuche auf die Referenztabelle statt fand.
-@item @code{Select_range} @tab Anzahl der Joins, bei denen Bereiche auf die
-erste Tabelle benutzt wurden. (Es ist normalerweise unkritisch, wenn dieser
-Wert hoch ist.)
-@item @code{Select_scan} @tab Anzahl der Joins, bei denen die erste Tabelle
-gescannt wurde.
-@item @code{Select_range_check} @tab Anzahl der Joins ohne Schl�ssel, bei
-denen nach jeder Zeile auf Schl�sselbenutzung gepr�ft wurde (sollte 0
-sein).
-@item @code{Questions} @tab Anzahl der Anfragen, die zum Server geschickt
-wurden.
-@item @code{Slave_open_temp_tables} @tab Anzahl der tempor�ren Tabellen,
-die momentan vom Slave-Thread ge�ffnet sind.
-@item @code{Slow_launch_threads} @tab Anzahl der Threads, die l�nger als
-@code{slow_launch_time} brauchten, um sich zu verbinden.
-@item @code{Slow_queries} @tab Anzahl der Anfragen, die l�nger als
-@code{long_query_time} ben�tigten. @xref{Slow query log}.
-@item @code{Sort_merge_passes} @tab Anzahl der Verschmelzungen (Merge), die
-von einem Sortiervorgang ben�tigt wurden. Wenn dieser Wert hoch ist,
-sollten Sie in Betracht ziehen, @code{sort_buffer} herauf zu setzen.
-@item @code{Sort_range} @tab Anzahl der Sortiervorg�nge, die mit Bereichen
-durchgef�hrt wurden.
-@item @code{Sort_rows} @tab Anzahl der sortierten Zeilen.
-@item @code{Sort_scan} @tab Anzahl der Sortiervorg�nge, die durchgef�hrt
-wurden, indem die Tabelle gescannt wurde.
-@item @code{Table_locks_immediate} @tab Wie oft eine Tabellensperre sofort
-erlangt wurde. Verf�gbar nach Version 3.23.33.
-@item @code{Table_locks_waited} @tab Wie oft eine Tabellensperre nicht
-sofort erlangt werden konnte und gewartet werden musst. Wenn dieser Wert
-hoch ist und Sie Performance-Probleme haben, sollten Sie zun�chst Ihre
-Anfragen optimieren und dann entweder Ihre Tabelle(n) zerteilen oder
-Replikation benutzen. Verf�gbar nach Version 3.23.33.
-@item @code{Threads_cached} @tab Anzahl der Threads im Thread-Cache.
-@item @code{Threads_connected} @tab Anzahl der momentan offenen
-Verbindungen.
-@item @code{Threads_created} @tab Anzahl der Threads, die zur Handhabung
-von Verbindungen erzeugt wurden.
-@item @code{Threads_running} @tab Anzahl der Threads, die nicht schlafen.
-@item @code{Uptime} @tab Seit wie vielen Sekunden der Server hoch gefahren
-ist.
-@end multitable
-
-Einige Anmerkungen zum oben Aufgef�hrten:
-
-@itemize @bullet
-@item
-Wenn @code{Opened_tables} hoch ist, ist Ihre @code{table_cache}-Variable
-wahrscheinlich zu niedrig.
-@item
-Wenn @code{key_reads} hoch ist, ist Ihr @code{key_cache} wahrscheinlich zu
-klein. Die Cache-Zugriffsrate kann mit @code{key_reads} /
-@code{key_read_requests} berechnet werden.
-@item
-Wenn @code{Handler_read_rnd} hoch ist, haben Sie wahrscheinlich viele
-Anfragen, die MySQL zwingen, ganze Tabellen zu scannen, oder Sie haben
-Joins, die Schl�ssel nicht richtig benutzen.
-@item
-Wenn @code{Threads_created} hoch ist, sollten Sie eventuell die
-@code{Thread_cache_size}-Variable herauf setzen.
-@item
-Wenn @code{Created_tmp_disk_tables} hoch ist, sollten Sie eventuell die
-@code{tmp_table_size}-Variable herauf setzen, damit tempor�re Tabellen im
-Speicher erzeugt werden statt auf der Platte.
-@end itemize
-
-
-@node SHOW VARIABLES, SHOW LOGS, SHOW STATUS, SHOW
-@c German node SHOW VARIABLES
-@subsubsection @code{SHOW VARIABLES}
-
-@example
-SHOW VARIABLES [LIKE platzhalter]
-@end example
-
-@code{SHOW VARIABLES} zeigt die Werte einiger MySQL-Systemvariablen. Sie
-erhalten diese List auch mit dem @code{mysqladmin variables}-Befehl. Wenn
-die Vorgabewerte unpassend sind, k�nnen Sie die meisten dieser Variablen
-mit Kommandozeilenoptionen setzen, wenn Sie @code{mysqld} hoch fahren.
-@xref{Command-line options}.
-
-Die Ausgabe �hnelt der unten stehenden,
-obwohl Format und Anzahl der Zeilen wahrscheinlich abweichen:
-
-@example
-+-------------------------+---------------------------+
-| Variable_name | Value |
-+-------------------------+---------------------------+
-| ansi_mode | OFF |
-| back_log | 50 |
-| basedir | /my/monty/ |
-| bdb_cache_size | 16777216 |
-| bdb_log_buffer_size | 32768 |
-| bdb_home | /my/monty/data/ |
-| bdb_max_lock | 10000 |
-| bdb_logdir | |
-| bdb_shared_data | OFF |
-| bdb_tmpdir | /tmp/ |
-| binlog_cache_size | 32768 |
-| concurrent_insert | ON |
-| connect_timeout | 5 |
-| datadir | /my/monty/data/ |
-| delay_key_write | ON |
-| delayed_insert_limit | 100 |
-| delayed_insert_timeout | 300 |
-| delayed_queue_size | 1000 |
-| flush | OFF |
-| flush_time | 0 |
-| have_bdb | YES |
-| have_innodb | YES |
-| have_raid | YES |
-| have_openssl | NO |
-| init_file | |
-| interactive_timeout | 28800 |
-| join_buffer_size | 131072 |
-| key_buffer_size | 16776192 |
-| language | /my/monty/share/english/ |
-| large_files_support | ON |
-| log | OFF |
-| log_update | OFF |
-| log_bin | OFF |
-| log_slave_updates | OFF |
-| long_query_time | 10 |
-| low_priority_updates | OFF |
-| lower_case_table_names | 0 |
-| max_allowed_packet | 1048576 |
-| max_binlog_cache_size | 4294967295 |
-| max_connections | 100 |
-| max_connect_errors | 10 |
-| max_delayed_threads | 20 |
-| max_heap_table_size | 16777216 |
-| max_join_size | 4294967295 |
-| max_sort_length | 1024 |
-| max_tmp_tables | 32 |
-| max_write_lock_count | 4294967295 |
-| myisam_recover_options | DEFAULT |
-| myisam_sort_buffer_size | 8388608 |
-| net_buffer_length | 16384 |
-| net_read_timeout | 30 |
-| net_retry_count | 10 |
-| net_write_timeout | 60 |
-| open_files_limit | 0 |
-| pid_file | /my/monty/data/donna.pid |
-| port | 3306 |
-| protocol_version | 10 |
-| record_buffer | 131072 |
-| query_buffer_size | 0 |
-| safe_show_database | OFF |
-| server_id | 0 |
-| skip_locking | ON |
-| skip_networking | OFF |
-| skip_show_database | OFF |
-| slow_launch_time | 2 |
-| socket | /tmp/mysql.sock |
-| sort_buffer | 2097116 |
-| table_cache | 64 |
-| table_type | MYISAM |
-| Thread_cache_size | 4 |
-| Thread_stack | 65536 |
-| tmp_table_size | 1048576 |
-| tmpdir | /tmp/ |
-| version | 3.23.29a-gamma-debug |
-| wait_timeout | 28800 |
-+-------------------------+---------------------------+
-@end example
-
-Jede Option ist unten beschrieben. Die Werte f�r Puffergr��en, L�ngen und
-Stack-Gr��en sind in Bytes angegeben. Sie k�nnen Wert mit den Suffixen
-@samp{K} oder @samp{M} angeben, um Kilobytes oder Megabytes zu
-kennzeichnen. @code{16M} zum Beispiel bedeutet 16 Megabytes. Bei den
-Suffixen spielt Gro�-/Kleinschreibung keine Rolle, @code{16M} und
-@code{16m} sind �quivalent:
-
-@cindex Variablen, Werte
-@table @code
-@item @code{ansi_mode}.
-Ist @code{ON}, wenn @code{mysqld} mit @code{--ansi} gestartet wurde.
-@xref{ANSI mode}.
-
-@item @code{back_log}
-Die Anzahl unerledigter Verbindungsanforderung, die MySQL haben kann. Dies
-kommt ins Spiel, wenn der Haupt-Thread von MySQL @strong{SEHR} viele
-Verbindungsanforderungen in sehr kurzer Zeit erh�lt. Dann dauert es etwas
-(wenngleich sehr kurz), damit der Haupt-Thread die Verbindung pr�fen und
-einen neuen Thread starten kann. Der @code{back_log}-Wert zeigt an, wie
-viele Verbindungen w�hrend dieser kurzen Zeit gestapelt (gestackt) werden k�nnen, bevor
-MySQL f�r einen Moment aufh�rt, neue Anforderungen zu beantworten. Sie
-brauchen diesen Wert nur dann herauf setzen, wenn Sie eine gro�e Zahl von
-Verbindungen in kurzer Zeit erwarten.
-
-Mit anderen Worten ist dieser Wert die Gr��e der Listen-Queue
-(Warteschlange) f�r herein kommende TCP/IP-Verbindungen. Ihr Betriebssystem
-hat seine eigene Beschr�nkung hinsichtlich der Gr��e dieser Queue. Die
-Handbuchseiten zum Unix-@code{listen(2)}-System sollten hier weitere
-Details haben. Sehen Sie in der Dokumentation Ihres Betriebssystems nach,
-wie hoch der Wert dieser Variablen maximal sein kann. Wenn Sie versuchen,
-@code{back_log} h�her als die Begrenzung Ihres Betriebssystems zu setzen,
-ist das ineffektiv.
-
-@item @code{basedir}
-Der Wert der @code{--basedir}-Option.
-
-@item @code{bdb_cache_size}
-Der zugewiesene Puffer, um Index und Zeilen bei @code{BDB}-Tabellen zu
-cachen. Wenn Sie keine @code{BDB}-Tabellen benutzen, sollten Sie
-@code{mysqld} mit @code{--skip-bdb} starten, um f�r diesen Cache keinen
-Arbeitsspeicher zu verschwenden.
-
-@item @code{bdb_log_buffer_size}
-Der zugewiesene Puffer, um Index und Zeilen bei @code{BDB}-Tabellen zu
-cachen. Wenn Sie keine @code{BDB}-Tabellen benutzen, sollten Sie diesen
-Wert auf o setzen und @code{mysqld} mit @code{--skip-bdb} starten, um f�r
-diesen Cache keinen Arbeitsspeicher zu verschwenden.
-
-@item @code{bdb_home}
-Der Wert der @code{--bdb-home}-Option.
-
-@item @code{bdb_max_lock}
-Die maximale Anzahl von Sperren (Vorgabewert: 1000), die bei einer
-@code{BDB}-Tabelle aktiv sein k�nnen. Sie sollten diesen Wert herauf
-setzen, wenn Sie Fehler folgender Art bekommen: @code{bdb:
-Lock table is out of available locks} oder @code{Got error 12 from ...},
-wenn Sie lange Transaktionen durchf�hren oder wenn @code{mysqld} viele
-Zeile untersuchen muss, um die Anfrage zu berechnen.
-
-@item @code{bdb_logdir}
-Der Wert der @code{--bdb-logdir}-Option.
-
-@item @code{bdb_shared_data}
-Ist @code{ON}, wenn Sie @code{--bdb-shared-data} benutzen.
-
-@item @code{bdb_tmpdir}
-Der Wert der @code{--bdb-tmpdir}-Option.
-
-@item @code{binlog_cache_size}. Die Gr��e des Caches, in dem
-SQL-Statements f�r das Bin�r-Log w�hrend einer Transaktion vorgehalten
-werden. Wenn Sie oft gro�e, aus vielen Statements bestehende Transaktionen
-durchf�hren, k�nnen Sie diesen Wert herauf setzen, um mehr Performance zu
-erzielen. @xref{COMMIT}.
-
-@item @code{character_set}
-Der vorgabem��ige Zeichensatz.
-
-@item @code{character_sets}
-Die unterst�tzten Zeichens�tze.
-
-@item @code{concurrent_inserts}
-Falls @code{ON} (Vorgabe), l��t MySQL @code{INSERT} auf
-@code{MyISAM}-Tabellen zu, auf die zur gleichen Zeit @code{SELECT}-Anfragen
-laufen. Sie k�nnen diese Option ausschalten, indem Sie @code{mysqld} mit
-@code{--safe} oder @code{--skip-new} starten.
-
-@cindex timeout
-@item @code{connect_timeout}
-Die Anzahl von Sekunden, die der @code{mysqld}-Server auf ein
-Verbindungspaket wartet, bevor er mit @code{Bad handshake} antwortet.
-
-@item @code{datadir}
-Der Wert der @code{--datadir}-Option.
-
-@item @code{delay_key_write}
-Falls angeschaltet (Vorgabe), akzeptiert MySQL die
-@code{delay_key_write}-Option von @code{CREATE TABLE}. Das hei�t, dass der
-Schl�sselpuffer f�r Tabellen bei dieser Option nicht bei jeder
-Index-Aktualisierung auf Platte zur�ckgeschrieben (flush) wird, sondern
-nur, wenn eine Tabelle geschlossen wird. Das beschleunigt Schreibvorg�nge
-auf Schl�ssel ganz erheblich, aber Sie sollten eine automatische Pr�fung
-aller Tabellen mit @code{myisamchk --fast --force} hinzuf�gen, wenn Sie
-diese Option benutzen. Beachten Sie: Wenn Sie @code{mysqld} mit der
-@code{--delay-key-write-for-all-tables}-Option startet, hei�t das, dass
-alle Tabelle so behandelt werden, als wenn sie mit der
-@code{delay_key_write}-Option erzeugt worden w�ren. Sie k�nnen diesen Flag
-l�schen, wenn Sie @code{mysqld} mit @code{--skip-new} oder
-@code{--safe-mode} starten.
-
-@item @code{delayed_insert_limit}
-Nachdem @code{delayed_insert_limit} Zeilen eingef�gt wurden, pr�ft der
-@code{INSERT DELAYED}-Handler, ob noch irgend welche
-@code{SELECT}-Statements anh�ngig sind. Falls ja, wird deren Ausf�hrung
-zugelassen, bevor weiter gemacht wird.
-
-@item @code{delayed_insert_timeout}
-Wie lange ein @code{INSERT DELAYED}-Thread auf @code{INSERT}-Statements
-warten soll, bevor abgebrochen wird.
-
-@item @code{delayed_queue_size}
-Welche Warteschleifen-(Queue)-Speichergr��e (in Zeilen) f�r die Handhabung
-von @code{INSERT DELAYED} zugewiesen werden soll. Wenn die Queue voll ist,
-wartet jeder Client, der @code{INSERT DELAYED} ausf�hrt, bis es wieder
-Platz in der Queue gibt.
-
-@item @code{flush}
-Ist @code{ON}, wenn Sie MySQL mit der @code{--flush}-Option gestartet
-haben.
-
-@item @code{flush_time}
-Wenn diese Variable auf einen Wert ungleich 0 gesetzt wird, dann werden
-alle @code{flush_time} Sekunden alle Tabelle geschlossen (um Ressourcen
-frei zu geben und Dinge auf Platte zur�ck zu schreiben). Diese Option
-empfehlen wir nur auf Windows 95, Windows 98 oder auf Systemen, auf denen
-Sie sehr wenige Ressourcen haben.
-
-@item @code{have_bdb}
-Ist @code{YES}, wenn @code{mysqld} Berkeley-DB-Tabellen unterst�tzt. Ist
-@code{DISABLED}, wenn @code{--skip-bdb} benutzt wird.
-@item @code{have_innodb}
-Ist @code{YES}, wenn @code{mysqld} InnoDB-Tabellen unterst�tzt. Ist
-@code{DISABLED}, wenn @code{--skip-innodb} benutzt wird.
-@item @code{have_raid}
-Ist @code{YES}, wenn @code{mysqld} die @code{RAID}-Option unterst�tzt.
-@item @code{have_openssl}
-Ist @code{YES}, wenn @code{mysqld} SSL (Verschl�sselung) auf dem
-Client-/Server-Protokoll unterst�tzt.
-
-@item @code{init_file}
-Der Name der Datei, die mit der @code{--init-file}-Option angegeben wurde,
-als Sie den Server starteten. Das ist eine Datei mit SQL-Statements, die
-der Server beim Start ausf�hren soll.
-
-@item @code{interactive_timeout}
-Die Anzahl von Sekunden, die der Server bei einer interaktiven Verbindung
-wartet, bis er sie schlie�t. Ein interaktiver Client ist definiert als
-Client, der die @code{CLIENT_INTERACTIVE}-Option f�r
-@code{mysql_real_connect()} benutzt. Siehe auch @code{wait_timeout}.
-
-@item @code{join_buffer_size}
-Die Gr��e des Puffers, der f�r volle Joins benutzt wird (Joins, die keine
-Indexe benutzen). Der Puffer wird einmal pro vollem Join zwischen zwei
-Tabellen zugewiesen. Setzen Sie diesen Wert herauf, um einen schnelleren
-vollen Join zu erhalten, wenn das Addieren von Indexen nicht m�glich ist.
-(Normalerweise ist die beste Art, schnelle Joins zu erhalten, das Addieren
-von Indexen.)
-
-@c Make texi2html Support index @anchor{Index cache size}. Then change
-@c some xrefs to point here
-@cindex Indexe, Blockgr��e
-@item @code{key_buffer_size}
-Index-Bl�cke werden gepuffert und von allen Threads geteilt.
-@code{key_buffer_size} ist die Gr��e des Puffers, der f�r Index-Bl�cke
-benutzt wird.
-
-Setzen Sie diesen Wert herauf, um eine bessere Index-Handhabung zu erzielen
-(f�r alle Lesevorg�nge und f�r mehrfache Schreibvorg�nge), so weit, wie Sie
-es sich leisten k�nnen; 64 MB auf einer 256-MB-Maschine, auf der
-haupts�chlich MySQL l�uft, ist ein gebr�uchlicher Wert. Wenn Sie diesen
-Wert allerdings zu hoch setzen (mehr als 50% Ihres gesamten
-Arbeitsspeichers), kann es sein, dass Ihr System anf�ngt auszulagern
-(Paging), was SEHR langsam werden kann. Denken Sie daran, dass Sie Platzt
-f�r den Dateisystem-Cache des Betriebssystems lassen m�ssen, weil MySQL
-Daten-Lesen nicht cachet.
-
-Sie k�nnen die Performance des Schl�sselpuffers mit @code{show status}
-�berpr�fen und sich die Variablen @code{Key_read_requests},
-@code{Key_reads}, @code{Key_write_requests} und @code{Key_writes} ansehen.
-Das Verh�ltnis @code{Key_reads/Key_read_request} sollte normalerweise <
-0,01 sein. @code{Key_write/Key_write_requests} ist �blicherweise nahe 1,
-wenn Sie haupts�chlich Aktualisieren (Update) und L�schen (Delete)
-ausf�hren, kann aber sehr viel kleiner werden, wenn Sie tendenziell
-Aktualisierungen ausf�hren, die viele Zeilen gleichzeitig betreffen, oder
-wenn Sie @code{delay_key_write} benutzen. @xref{SHOW}.
-
-Um noch mehr Geschwindigkeit beim Schreiben vieler Zeilen auf einmal zu
-erhalten, benutzen Sie @code{LOCK TABLES}. @xref{LOCK TABLES, , @code{LOCK TABLES}}.
-
-@item @code{language}
-Die Sprache, in der Fehlermeldungen ausgegeben werden.
-
-@item @code{large_file_support}
-Ob @code{mysqld} mit Optionen f�r die Unterst�tzung gro�er Dateien
-kompiliert wurde.
-
-@item @code{locked_in_memory}
-Ob @code{mysqld} mit @code{--memlock} in den Speicher gesperrt wurde.
-
-@item @code{log}
-Ob das Loggen aller Anfragen angeschaltet ist.
-
-@item @code{log_update}
-Ob das Update-Log angeschaltet ist.
-
-@item @code{log_bin}
-Ob das Bin�r-Log angeschaltet ist.
-
-@item @code{log_slave_updates}
-Ob Aktualisierungen vom Slave geloggt werden sollen.
-
-@item @code{long_query_time}
-Wenn eine Anfrage l�nger als diesen Wert (in Sekunden) ben�tigt, wird der
-@code{Slow_queries}-Z�hler hoch gez�hlt. Wenn Sie @code{--log-slow-queries}
-benutzen, wird die Anfrage in die Slow-Query-Logdatei geschrieben.
-@xref{Slow query log}.
-
-@item @code{lower_case_table_names}
-Wenn auf 1 gesetzt, werden Tabellennamen in Kleinschreibung auf Platte
-gespeichert. Tabellennamen sind dann unabh�ngig von der verwendeten
-Gro�-/Kleinschreibung.
-@xref{Case sensitivity}.
-
-@item @code{max_allowed_packet}
-Die maximale Gr��e eine Pakets. Der Nachrichtenpuffer wird auf
-@code{net_buffer_length} Bytes L�nge initialisiert, kann aber wenn n�tig
-bis zu @code{max_allowed_packet} Bytes Gro� werden. Der Vorgabewert ist
-klein, um gro�e (m�glicherweise falsche) Pakete abzufangen. Sie m�ssen
-diesen Wert erh�hen, wenn Sie gro�e @code{BLOB}-Spalten verwenden. Er
-sollte so Gro� sein wie die gr��te @code{BLOB}-Spalte, die Sie verwenden
-wollen. Das aktuelle Protokoll begrenzt @code{max_allowed_packet} auf 16 MB.
-
-@item @code{max_binlog_cache_size}
-Wenn eine Transaktion aus mehreren Statements mehr als diese Speichermenge
-ben�tigt, erh�lt man den Fehler "Multi-Statement transaction required more
-than 'max_binlog_cache_size' bytes of storage".
-
-@item @code{max_binlog_size}
-Verf�gbar nach Version 3.23.33. Wenn ein Schreibvorgang ins bin�re
-(Replikations-) Log den angegebenen Wert �bersteigt, werden die Logs
-rotiert. Sie k�nnen den Wert auf weniger als 1024 Bytes setzen oder auf
-mehr als 1 GB. Vorgabe ist 1 GB.
-
-@item @code{max_connections}
-Die Anzahl von Clients, die gleichzeitig verbunden sind. Wenn Sie diesen
-Wert hoch setzen, wird die Anzahl der Datei-Deskriptoren heraufgesetzt, die
-@code{mysqld} ben�tigt. Siehe weiter unten, Bemerkungen zu Beschr�nkungen
-bei Datei-Deskriptoren. @xref{Too many connections}.
-
-@item @code{max_connect_errors}
-Wenn es mehr als diese Anzahl unterbrochener Verbindungen von einem Host
-gibt, wird dieser Host von weiteren Verbindungen abgeschnitten. Sie k�nnen
-diese Sperre mit dem @code{FLUSH HOSTS}-Befehl aufheben.
-
-@item @code{max_delayed_Threads}
-Nicht mehr als diese Anzahl von Threads zulassen, um @code{INSERT
-DELAYED}-Statements abzuarbeiten. Wenn Sie versuchen, Daten in eine neue
-Tabelle einzuf�gen, wenn alle @code{INSERT DELAYED}-Threads in Benutzung
-sind, wird die Zeile eingef�gt, als ob das @code{DELAYED}-Attribut nicht
-angegeben w�re.
-
-@item @code{max_heap_table_size}
-Kein Erzeugen von Heap-Tabellen zulassen, die gr��er als dieser Wert sind.
-
-@item @code{max_join_size}
-Joins, die wahrscheinlich mehr als @code{max_join_size} Datens�tze lesen
-werden, geben einen Fehler zur�ck. Setzen Sie diesen Wert, wenn Ihre
-Benutzer dazu neigen, Joins auszuf�hren, denen eine @code{WHERE}-Klausel
-fehlt und die daher lange Zeit ben�tigen und wom�glich Millionen von Zeilen
-zur�ck geben.
-
-@item @code{max_sort_length}
-Die Anzahl von Bytes, die beim Sortieren von @code{BLOB}- oder
-@code{TEXT}-Werten benutzt werden (nur die ersten @code{max_sort_length}
-Bytes jedes Werts werden benutzt, der Rest wird ignoriert).
-
-@item @code{max_user_connections}
-Die maximale Anzahl aktiver Verbindungen f�r einen einzelnen Benutzer (0 =
-keine Beschr�nkung).
-
-@item @code{max_tmp_tables}
-(Diese Option macht bislang noch nichts.)
-Maximale Anzahl von tempor�ren Tabellen, die ein Client zur selben Zeit
-offen halten darf.
-
-@item @code{max_write_lock_count}
-Nach dieser Anzahl Schreibsperren wird einigen Lesesperren erlaubt,
-zwischendurch zu laufen.
-
-@item @code{myisam_recover_options}
-Der Wert der @code{--myisam-recover}-Option.
-
-@item @code{myisam_sort_buffer_size}
-Der Puffer, der beim Sortieren des Indexes zugewiesen wird, wenn man ein
-@code{REPAIR} oder ausf�hrt oder Indexe mit @code{CREATE INDEX} oder
-@code{ALTER TABLE} erzeugt.
-
-@item @code{myisam_max_extra_sort_file_size}.
-Wenn das Erzeugen der tempor�ren Datei f�r schnelle Index-Erzeugung um
-diesen Wert gr��er sein w�rde als die Benutzung des Schl�ssel-Caches, wird
-die Schl�ssel-Cache-Methode bevorzugt. Wird haupts�chlich benutzt, um lange
-Zeichen-Schl�ssel in gro�en Tabellen zu zwingen, die langsamere
-Schl�ssel-Cache-Methode zu benutzen, um den Index zu erzeugen.
-@strong{HINWEIS:} Dieser Parameter wird in Megabytes angegeben!
-
-@item @code{myisam_max_sort_file_size}
-Die maximale Gr��e der tempor�ren Datei, die MySQL benutzen darf, w�hrend
-es den Index erzeugt (w�hrend @code{REPAIR}, @code{ALTER TABLE} oder
-@code{LOAD DATA INFILE}). Wenn die Datei gr��er als dieser Wert w�rde, wird
-der Index �ber den Schl�ssel-Cache erzeugt (was langsamer ist).
-@strong{HINWEIS:} Dieser Parameter wird in Megabytes angegeben!
-
-@item @code{net_buffer_length}
-Der Kommunikationspuffer wird zwischen Anfragen auf diesen Wert zur�ck
-gesetzt. Normalerweise sollte das nicht ge�ndert werden, aber wenn Sie sehr
-wenig Arbeitsspeicher haben, k�nnen Sie ihn auf die erwartete Gr��e einer
-Anfrage setzen (also die erwartete L�nge von SQL-Statements, die von
-Clients gesendet werden. Wenn Statements diese L�nge �berschreiten, wird
-der Puffer automatisch vergr��ert, bis zu @code{max_allowed_packet} Bytes.)
-
-@item @code{net_read_timeout}
-Anzahl von Sekunden, die auf weitere Daten von einer Verbindung gewartet
-wird, bevor das Lesen abgebrochen wird. Beachten Sie: Wenn keine Daten von
-einer Verbindung erwartet werden, ist der Timeout durch
-@code{write_timeout} definiert. Siehe auch @code{slave_read_timeout}.
-
-@item @code{net_retry_count}
-Wenn ein Lesevorgang auf einem Kommunikations-Port unterbrochen wird, wird
-so oft wie angegeben neu versucht, bevor aufgegeben wird. Dieser Wert
-sollte auf @code{FreeBSD} recht hoch sein, weil interne
-Unterbrechnungsanforderungen (Interrupts) an alle Threads gesendet werden.
-
-@item @code{net_write_timeout}
-Anzahl von Sekunden, die auf das Schreiben eines Blocks zu einer Verbindung
-gewartet wird, bis das Schreiben abgebrochen wird.
-
-@item @code{open_files_limit}
-Wenn dieser Wert ungleich 0 ist, benutzt @code{mysqld} Datei-Deskriptoren,
-die mit @code{setrlimit()} benutzt werden. Wenn dieser Wert gleich 0 ist,
-reserviert @code{mysqld} @code{max_connections * 5} oder
-@code{max_connections + table_cache * 2} (je nachdem, was gr��er ist)
-Anzahl von Dateien. Sie sollten diesen Wert herauf setzen, wenn
-@code{mysqld} Ihnen die Fehlermeldung 'Too many open files' gibt.
-
-@item @code{pid_file}
-Der Wert der @code{--pid-file}-Option.
-
-@item @code{port}
-Der Wert der @code{--port}-Option.
-
-@item @code{protocol_version}
-Die Protokoll-Version, die vom MySQL-Server benutzt wird.
-
-@item @code{record_buffer}
-Jeder Thread, der einen sequentiellen Scan ausf�hrt, alloziert einen Puffer
-dieser Gr��e f�r jede Tabelle, die er scannt. Wenn Sie viele sequentielle
-Scans ausf�hren, sollten Sie diesen Wert herauf setzen.
-
-@item @code{record_rnd_buffer}
-Wenn Zeilen nach einem Sortiervorgang in sortierter Reihenfolge gelesen
-werden, werden die Zeilen aus diesem Puffer gelesen, um Suchvorg�nge auf
-der Platte zu vermeiden. Wenn dieser Wert nicht gesetzt ist, wird er auf
-den Wert von @code{record_buffer} gesetzt.
-
-@item @code{query_buffer_size}
-Die anf�ngliche Zuweisung des Anfragen-Puffers. Wenn die meisten Ihrer
-Anfragen lang sind (zum Beispiel beim Einf�gen von Blobs), sollten Sie
-diesen Wert herauf setzen!
-
-@item @code{safe_show_databases}
-Keine Datenbanken zeigen, wenn der Benutzer keinerlei Datenbank- oder
-Tabellen-Berechtigungen daf�r hat. Das kann die Sicherheit erh�hen, wenn
-Sie sich Sorgen machen, dass Leute in der Lage sind zu sehen, welche
-Datenbanken andere Benutzer haben. Siehe auch
-@code{skip_show_databases}.
-
-@item @code{server_id}
-Der Wert der @code{--server-id}-Option.
-
-@item @code{skip_locking}
-Ist @code{OFF}, wenn @code{mysqld} externes Sperren benutzt.
-
-@item @code{skip_networking}
-Ist @code{ON}, wenn nur lokale (Socket-) Verbindungen zugelassen sind.
-
-@item @code{skip_show_databases}
-H�lt Leute davon ab, @code{SHOW DATABASES} zu benutzen, wenn sie keine
-the @code{PROCESS_PRIV}-Berechtigung haben. Das kann die Sicherheit erh�hen, wenn
-Sie sich Sorgen machen, dass Leute in der Lage sind zu sehen, welche
-Datenbanken andere Benutzer haben. Siehe auch @code{safe_show_databases}.
-
-@item @code{slave_read_timeout}
-Anzahl von Sekunden, die auf weitere Daten von einer
-Master-/Slave-Verbindung gewartet wird, bevor das Lesen abgebrochen wird.
-
-@item @code{slow_launch_time}
-Wenn das Erzeugen des Threads l�nger als dieser Wert (in Sekunden) dauert,
-word der @code{Slow_launch_threads}-Z�hler herauf gez�hlt.
-
-@item @code{socket}
-Der Unix-Socket, der vom Server benutzt wird.
-
-@item @code{sort_buffer}
-Jeder Thread, der einen Sortierdurchgang durchf�hren muss, alloziert einen
-Puffer dieser Gr��e. Setzen Sie diesen Wert herauf, um schnellere
-@code{ORDER BY}- oder @code{GROUP BY}-Operationen zu erhalten.
-@xref{Temporary files}.
-
-@item @code{table_cache}
-Die Anzahl offener Tabellen f�r alle Threads. Wenn dieser Wert herauf
-gesetzt wird, erh�ht sich die Anzahl von Datei-Deskriptoren, die
-@code{mysqld} ben�tigt. Sie k�nnen pr�fen, ob Sie den Tabellen-Cache
-vergr��ern m�ssen, indem Sie die @code{Opened_tables}-Variable pr�fen.
-@xref{SHOW}. Wenn diese Variable sehr Gro� ist und Sie @code{FLUSH TABLES}
-nicht oft brauchen (was lediglich alle Tabellen zwingt, geschlossen und
-wieder ge�ffnet zu werden), sollten Sie den Wert dieser Variablen herauf
-setzen.
-
-Wegen weiterer Informationen zum Tabellen-Cache sehen Sie unter
-@ref{Open tables} nach.
-
-@item @code{table_type}
-Der vorgabem��ige Tabellentyp.
-
-@item @code{thread_cache_size}
-Wie viele Threads in einem Cache f�r weitere Benutzung offen gehalten
-werden sollen. Wenn eine Client die Verbindung schlie�t, werden die
-Threads des Clients in den Cache geschrieben, wenn es nicht mehr als
-@code{Thread_cache_size} Threads als vorher gibt. Alle neuen Threads werden
-zuerst aus dem Cache genommen und nur, wenn der Cache leer ist, wird ein
-neuer Thread erzeugt. Diese Variable kann hoch gesetzt werden, um die
-Performance zu verbessern, wenn Sie sehr viele neue Verbindungen haben.
-(Normalerweise f�hrt das nicht zu namhafter Performance-Steigerung, wenn
-Sie eine gute Thread-Implementierung haben.) Wie effizient der aktuelle
-Thread-Cache f�r Sie ist, k�nnen Sie feststellen, indem Sie den Unterschied
-zwischen @code{Connections} und @code{Threads_created} betrachten.
-
-@item @code{thread_concurrency}
-On Solaris, @code{mysqld} will call @code{thr_setconcurrency()} mit
-this value. @code{thr_setconcurrency()} permits the Applikation to give
-the Threads System a hint f�r the desired Anzahl von Threads that should
-be run at the same time.
-
-@item @code{thread_stack}
-Die Stack-Gr��e jedes Threads. Viele der Beschr�nkungen, die durch den
-@code{crash-me}-Test festgestellt werden, h�ngen von diesem Wert ab. Der
-Vorgabewert ist Gro� genug f�r normale Operationen.
-@xref{MySQL Benchmarks}.
-
-@item @code{timezone}
-Die Zeitzone f�r den Server.
-
-@item @code{tmp_table_size}
-Wenn eine tempor�re Tabelle im Arbeitsspeicher diese Gr��e �berschreitet,
-wandelt MySQL sie automatisch in eine @code{MyISAM}-Tabelle auf der Platte
-um. Setzen Sie den Wert von @code{tmp_table_size} herauf, wenn Sie viele
-fortgeschrittene @code{GROUP BY}-Anfragen und viel Arbeitsspeicher haben.
-
-@item @code{tmpdir}
-Das Verzeichnis, das f�r tempor�re Dateien und tempor�re Tabellen benutzt
-wird.
-
-@item @code{version}
-Die Versionsnummer des Servers.
-
-@item @code{wait_timeout}
-Die Anzahl von Sekunden, die der Server auf Aktivit�t auf einer Verbindung
-wartet, bevor er sie schlie�t. Siehe auch @code{interactive_timeout}.
-@end table
-
-Der Handbuchabschnitt, der das Tunen von MySQL beschreibt, enth�lt einige
-Informationen dar�ber, wie die oben aufgef�hrten Variablen getunt werden.
-@xref{Server parameters}.
-
-
-@node SHOW LOGS, SHOW PROCESSLIST, SHOW VARIABLES, SHOW
-@c German node SHOW LOGS
-@subsubsection @code{SHOW LOGS}
-
-@code{SHOW LOGS} zeigt Ihnen Statusinformationen �ber bestehende
-Log-Dateien. Momentan werden nur Informationen �ber Berkeley-DB-Log-Dateien
-angezeigt.
-
-@itemize @bullet
-@item @code{File} zeigt den vollen Pfad zur Log-Datei.
-@item @code{Type} zeigt den Typ der Log-Datei (@code{BDB} f�r
-Berkeley-DB-Log-Dateien).
-@item @code{Status} zeigt den Status der Log-Datei (@code{FREE}, wenn die
-Datei entfernt werden kann, oder @code{IN USE}, wenn die Datei vom
-Transaktions-Subsystem ben�tigt wird)
-@end itemize
-
-
-@node SHOW PROCESSLIST, SHOW GRANTS, SHOW LOGS, SHOW
-@c German node SHOW PROCESSLIST
-@subsubsection @code{SHOW PROCESSLIST}
-
-@findex Threads
-@findex PROCESSLIST
-
-@cindex Threads, anzeigen
-@cindex Prozesse, anzeigen
-
-@code{SHOW PROCESSLIST} zeigt, welche Threads laufen. Diese Information
-erhalten Sie auch mit dem @code{mysqladmin processlist}-Befehl. Wenn Sie
-die @strong{process}-Berechtigung haben, k�nnen Sie alle Threads sehen.
-Ansonsten sehen Sie nur Ihre eigenen Threads. @xref{KILL, , @code{KILL}}.
-Wenn Sie die @code{FULL}-Option nicht benutzen, werden nur die ersten 100
-Zeichen jeder Anfrage gezeigt.
-
-Dieser Befehl ist sehr n�tzlich, wenn Sie die 'too many
-connections'-Fehlermeldung erhalten und herausfinden wollen, was vor sich
-geht. MySQL reserviert eine zus�tzliche Verbindung f�r einen Client mit der
-@code{Process_priv}-Berechtigung, um sicherzustellen, dass Sie sich
-jederzeit einloggen und das System pr�fen k�nnen (unter der Annahme, dass
-Sie diese Berechtigung nicht allen Ihren Benutzern geben).
-
-
-@node SHOW GRANTS, SHOW CREATE TABLE, SHOW PROCESSLIST, SHOW
-@c German node SHOW GRANTS
-@subsubsection @code{SHOW GRANTS}
-
-@cindex Berechtigungen, anzeigen
-
-@code{SHOW GRANTS FOR benutzer} listet die @code{Grant}-Befehle auf, die
-abgesetzt werden m�ssen, um die Berechtigungen f�r einen Benutzer zu
-duplizieren. Beispiel:
-
-@example
-mysql> SHOW GRANTS FOR root@@localhost;
-+----------------------------------------------------------------------+
-| Grants for root@@localhost |
-+----------------------------------------------------------------------+
-| GRANT ALL PRIVILEGES ON *.* TO 'root'@@'localhost' WITH GRANT OPTION |
-+----------------------------------------------------------------------+
-@end example
-
-
-@node SHOW CREATE TABLE, , SHOW GRANTS, SHOW
-@c German node SHOW CREATE TABLE
-@subsubsection @code{SHOW CREATE TABLE}
-
-Zeigt ein @code{CREATE TABLE}-Statement an, das die angegebene Tabelle
-erzeugt:
-
-@example
-mysql> show create table tabelle\G
-*************************** 1. row ***************************
- Table: tabelle
-Create Table: CREATE TABLE tabelle (
- id int(11) default NULL auto_increment,
- s char(60) default NULL,
- PRIMARY KEY (id)
-) TYPE=MyISAM
-
-@end example
-
-@code{SHOW CREATE TABLE} setzt Tabellen- und Spaltennamen gem�� der
-@code{SQL_QUOTE_SHOW_CREATE}-Option in Anf�hrungszeichen.
-@ref{SET OPTION, , @code{SET OPTION SQL_QUOTE_SHOW_CREATE}}.
-
-
-@node Localisation, Server-Side Scripts, Database Administration, MySQL Database Administration
-@c German node Lokalisierung
-@section MySQL-Lokalisierung und internationaler Gebrauch
-
-
-
-@menu
-* Character sets::
-* Languages::
-* Adding character set::
-* Character arrays::
-* String collating::
-* Multi-byte characters::
-* Problems with character sets::
-@end menu
-
-@node Character sets, Languages, Localisation, Localisation
-@c German node Zeichens�tze
-@subsection Der f�r Daten und Sortieren benutzte Zeichensatz
-
-@cindex Zeichens�tze
-@cindex Daten, Zeichens�tze
-@cindex sortieren, Zeichens�tze
-
-Vorgabem��ig benutzt MySQL den ISO-8859-1-(Latin1)-Zeichensatz, wobei nach
-schwedischer / finnischer Reihenfolge sortiert wird. Dieser Zeichensatz ist
-f�r die USA und Westeuropa geeignet.
-
-Alle standardm��igen MySQL-Bin�rdistributionen werden mit
-@code{--with-extra-charsets=complex} kompiliert. Das f�gt allen
-Standard-Programmen Code hinzu, damit diese @code{latin1} und alle
-Multi-Byte-Zeichens�tze in der Bin�rdatei handhaben k�nnen. Andere
-Zeichens�tze werden bei Bedarf aus einer Zeichensatz-Definitionsdatei
-geladen.
-
-Der Zeichensatz legt fest, welche Zeichen in Namen erlaubt sind und wie
-Dinge durch die @code{ORDER BY}- und @code{GROUP BY}-Klauseln des
-@code{SELECT}-Statements sortiert werden.
-
-Sie k�nnen den Zeichensatz mit der @code{--default-character-set}-Option
-�ndern, wenn Sie den Server starten. Die verf�gbaren Zeichens�tze h�ngen
-von den @code{--with-charset=charset}- und @code{--with-extra-charset=
-list-of-charset | complex | all}-Optionen f�r @code{configure} ab und den
-Zeichensatz-Konfigurationsdateien, die in @file{SHAREDIR/charsets/Index}
-aufgef�hrt sind. @xref{configure options}.
-
-Wenn Sie den Zeichensatz �ndern, wenn Sie MySQL laufen lassen (was
-eventuell auch die Sortierreihenfolge �ndert), m�ssen Sie @code{myisamchk
--r -q} �ber alle Tabellen laufen lassen. Ansonsten sind Ihre Indexe
-eventuell nicht richtig sortiert.
-
-Wenn sich ein Client mit dem MySQL-Server verbindet, schickt der Server den
-vorgabem��igen Zeichensatz, der in Benutzung ist, an den Client. Der
-Client schaltet f�r diese Verbindung auf den Gebrauch dieses Zeichensatzes
-um.
-
-Man sollte bei einer SQL-Anfrage @code{mysql_real_escape_string()}
-benutzen, wenn man Zeichenketten escapet. @code{mysql_real_escape_string()}
-ist identisch mit der alten @code{mysql_escape_string()}-Funktion, ausser
-dass es die MySQL-Connection-Handle als ersten Parameter nimmt.
-
-Wenn der Client mit anderen Pfaden kompiliert wird, als wo der Server
-installiert ist, und der Benutzer, der MySQL konfigurierte, nicht alle
-Zeichens�tze in die MySQL-Bin�rdatei eingeschlossen hat, muss man f�r den
-Client festlegen, wo dieser die zus�tzlichen Zeichens�tze finden kann, die
-er ben�tigt, falls der Server mit einem anderen Zeichensatz l�uft als der
-Client.
-
-Das kann man in einer MySQL-Optionsdatei festlegen:
-
-@example
-[client]
-character-sets-dir=/usr/local/mysql/share/mysql/charsets
-@end example
-
-Wobei der Pfad auf das Verzeichnis zeigt, in dem sich die dynamischen
-MySQL-Zeichens�tze befinden.
-
-Man kann den Client zwingen, einen bestimmten Zeichensatz zu benutzen,
-indem man angibt:
-
-@example
-[client]
-default-character-set=character-set-name
-@end example
-
-Aber normalerweise wird das nie ben�tigt.
-
-
-@menu
-* German character set::
-@end menu
-
-@node German character set, , Character sets, Character sets
-@c German node Deutscher Zeichensatz
-@subsubsection Deutscher Zeichensatz
-
-Um eine deutsche Sortierreihenfolge zu erhalten, startet man @code{mysqld}
-mit @code{--default-character-set=latin_de}. Das ergibt die folgenden
-Kennzeichen:
-
-Beim Sortieren und Vergleichen von Zeichenketten wird das folgende Mapping
-auf die Zeichenketten durchgef�hrt, bevor der Vergleich ausgef�hrt wird:
-
-@example
-� -> ae
-� -> oe
-� -> ue
-� -> ss
-@end example
-
-Alle Akzentzeichen werden in ihr Nicht-Akzent-Pendant in Gro�schreibung
-umgewandelt. Alle Buchstaben werden in Gro�schreibung umgewandelt.
-
-Beim Zeichenkettenvergleich mit @code{LIKE} wird das Mapping von einem auf
-zwei Buchstaben nicht durchgef�hrt. Alle Buchstaben werden in
-Gro�schreibung umgewandelt. Akzente werden aus allen Buchstaben entfernt,
-mit folgenden Ausnahmen: @code{�}, @code{�}, @code{�}, @code{�}, @code{�}
-und @code{�}.
-
-
-@node Languages, Adding character set, Character sets, Localisation
-@c German node Sprachen
-@subsection Nicht englische Fehlermeldungen
-
-@cindex Fehlermeldungen, Sprachen
-@cindex Meldungen, Sprachen
-@cindex Dateien, Fehlermeldungen
-@cindex Sprachunterst�tzung
-
-@code{mysqld} kann Fehlermeldungen in folgenden Sprachen ausgeben:
-tschechisch, d�nisch, niederl�ndisch, englisch (die Vorgabe), estnisch,
-franz�sisch, deutsch, griechisch, ungarisch, italienisch, japanisch,
-koreanisch, norwegisch, norwegisch-ny, polnisch, portugiesisch, rum�nisch,
-russisch, slowakisch, spanisch und schwedisch.
-
-Um @code{mysqld} mit einer bestimmten Sprache zu starten, benutzen Sie die
-@code{--language=sprache} oder @code{-L sprache}-Optionen. Beispiel:
-
-@example
-shell> mysqld --language=german
-@end example
-
-oder:
-
-@example
-shell> mysqld --language=/usr/local/share/german
-@end example
-
-Beachten Sie, dass alle Sprachnamen in Kleinschreibung angegeben werden.
-
-Die Sprachdateien liegen (vorgabem��ig) in
-@file{@var{mysql_base_dir}/share/@var{language}/}.
-
-Um die Fehlermeldungsdatei zu aktualisieren, editieren Sie die
-@file{errmsg.txt}-Datei und f�hren folgenden Befehl aus, um die
-@file{errmsg.sys}-Datei zu erzeugen:
-
-@example
-shell> comp_err errmsg.txt errmsg.sys
-@end example
-
-Wenn Sie auf eine neuere Version von MySQL aktualisieren, denken Sie daran,
-Ihre �nderungen mit der neuen @file{errmsg.txt}-Datei zu wiederholen!
-
-
-@node Adding character set, Character arrays, Languages, Localisation
-@c German node Zeichensatz hinzuf�gen
-@subsection Einen neuen Zeichensatz hinzuf�gen
-
-@cindex Zeichens�tze, hinzuf�gen
-@cindex hinzuf�gen, Zeichens�tze
-
-Um MySQL einen weiteren Zeichensatz hinzuzuf�gen, f�hren Sie folgende
-Prozedur durch:
-
-Entscheiden Sie, ob der Zeichensatz einfach oder komplex ist. Wenn der
-Zeichensatz keine besonderen Zeichenkettenvergleichsroutinen zum Sortieren
-und keine Multi-Byte-Unterst�tzung ben�tigt, ist er einfach. Wenn er eines
-oder beide Features ben�tigt, ist er komplex.
-
-@code{latin1} und @code{d�nisch} zum Beispiel sind einfache Zeichens�tze,
-wohingegen @code{big5} oder @code{tschechisch} komplexe Zeichens�tze sind.
-
-Im folgenden Abschnitt wird angenommen, dass Sie Ihren Zeichensatz
-@code{MEINSET} nennen.
-
-Bei einem einfachen Zeichensatz machen Sie folgendes:
-
-@enumerate
-@item
-F�gen Sie MEINSET am Ende der @file{sql/share/charsets/Index}-Datei hinzu.
-Geben Sie ihm eine eindeutige Nummer.
-
-@item
-Erzeugen Sie die Datei @file{sql/share/charsets/MEINSET.conf}.
-(Sie k�nnen hierf�r als Grundlage @file{sql/share/charsets/latin1.conf}
-benutzen).
-
-Die Syntax f�r die Datei ist sehr einfach:
-
-@itemize @bullet
-@item
-Kommentare fangen mit einem '#'-Zeichen an und gehen bis zum Ende der
-Zeile.
-@item
-W�rter werden durch beliebige Mengen von Leerraum getrennt.
-@item
-Bei der Definition des Zeichensatzes muss jedes Wort eine Zahl im
-hexadezimalen Format sein.
-@item
-Das @code{ctype}-Array nimmt bis zu 257 W�rter auf. Die @code{to_lower}-,
-@code{to_upper}- und @code{sort_order}-Arrays nehmen danach jeweils bis zu
-256 W�rter auf.
-@end itemize
-
-@xref{Character arrays}.
-
-@item
-F�gen Sie den Zeichensatznamen den @code{CHARSETS_AVAILABLE}- und
-@code{COMPILED_CHARSETS}-Listen in @code{configure.in} hinzu.
-
-@item
-Rekonfigurieren, rekompilieren und testen Sie.
-
-@end enumerate
-
-Bei einem komplexen Zeichensatz machen Sie folgendes:
-
-@enumerate
-@item
-Erzeugen Sie die Datei @file{strings/ctype-MEINSET.c} in der
-MySQL-Quelldistribution.
-
-@item
-F�gen Sie MEINSET am Ende der @file{sql/share/charsets/Index}-Datei hinzu.
-Weisen Sie ihm eine eindeutige Nummer zu.
-
-@item
-Sehen Sie sich eine der bestehenden @file{ctype-*.c}-Dateien an, um zu
-sehen, was definiert werden muss, zum Beispiel
-@file{strings/ctype-big5.c}. Beachten Sie, dass die Arrays in Ihrer Datei
-Namen wie @code{ctype_MEINSET}, @code{to_lower_MEINSET} usw. haben m�ssen.
-Das entspricht den Arrays im einfachen Zeichensatz.
-@xref{Character arrays}. Bei einem komplexen Zeichensatz
-
-@item
-f�gen Sie am Anfang der Datei einen speziellen Kommentar wie folgt ein:
-
-@example
-/*
- * Dieser Kommentar wird von configure geparst, um ctype.c zu erzeugen,
- * also �ndern Sie ihn nicht, wenn Sie nicht genau wissen, was Sie tun.
- *
- * .configure. number_MEINSET=MYNUMBER
- * .configure. strxfrm_multiply_MEINSET=N
- * .configure. mbmaxlen_MEINSET=N
- */
-@end example
-
-Das @code{configure}-Programm benutzt diesen Kommentar, um den Zeichensatz
-automatisch in die MySQL-Bibliothek einzuf�gen.
-
-Die Zeilen mit strxfrm_multiply und mbmaxlen werden in den folgenden
-Abschnitten erl�utert. Geben Sie diese nur dann ein, wenn Sie die
-Zeichenketten-Vergleichsfunktionen oder die
-Multi-Byte-Zeichensatzfunktionen ben�tigen.
-
-@item
-Danach sollten Sie einige der folgenden Funktionen erzeugen:
-
-@itemize @bullet
-@item @code{my_strncoll_MEINSET()}
-@item @code{my_strcoll_MEINSET()}
-@item @code{my_strxfrm_MEINSET()}
-@item @code{my_like_range_MEINSET()}
-@end itemize
-
-@xref{String collating}.
-
-@item
-F�gen Sie den Zeichensatznamen den @code{CHARSETS_AVAILABLE}- und
-@code{COMPILED_CHARSETS}-Listen in @code{configure.in} hinzu.
-
-@item
-Rekonfigurieren, rekompilieren und testen Sie.
-@end enumerate
-
-Die Datei @file{sql/share/charsets/README} enth�lt einige weitere
-Anweisungen.
-
-Wenn Sie wollen, dass der Zeichensatz in die MySQL-Distribution aufgenommen
-wird, senden Sie einen Patch an @email{internals@@lists.mysql.com}.
-
-
-@node Character arrays, String collating, Adding character set, Localisation
-@c German node Zeichen-Arrays
-@subsection Die Zeichen-Definitions-Arrays
-
-@code{to_lower[]} und @code{to_upper[]} sind einfache Arrays, die die
-Buchstaben in Klein- und Gro�schreibung enthalten, die jedem Mitglied des
-Zeichensatzes entsprechen. Beispiel:
-
-@example
-to_lower['A'] enth�lt 'a'
-to_upper['a'] enth�lt 'A'
-@end example
-
-@code{sort_order[]} ist eine Map, die anzeigt, wie Buchstaben f�r
-Vergleichs- und Sortierzwecke geordnet werden sollten. Bei vielen
-Zeichens�tzen ist das dasselbe wie @code{to_upper[]} (was bedeutet, dass
-das Sortieren ohne Ber�cksichtigung der Gro�-/Kleinschreibung erfolgt).
-MySQL sortiert Buchstaben auf der Grundlage des Wertes von
-@code{sort_order[character]}. Wegen komplizierterer Sortierregeln sehen Sie
-die Er�rterung zu Zeichenketten-Vergleichen unten an
-@xref{String collating}.
-
-@code{ctype[]} ist ein Array von Bit-Werten, mit einem Element pro Zeichen.
-(Beachten Sie, dass @code{to_lower[]}, @code{to_upper[]} und
-@code{sort_order[]} durch den Buchstabenwert indiziert werden, aber
-@code{ctype[]} durch den Buchstabenwert + 1. Das ist aus Gr�nden der
-Abw�rtskompatibilit�t notwendig, um EOF (Dateiende) handhaben zu k�nnen.)
-
-Sie finden folgenden Bitmasken-Definitionen in @file{m_ctype.h}:
-
-@example
-#define _U 01 /* Gro�schreibung */
-#define _L 02 /* Kleinschreibung */
-#define _N 04 /* Numerisch (Ziffer) */
-#define _S 010 /* Leerzeichen */
-#define _P 020 /* Punkt */
-#define _C 040 /* Steuerungszeichen (Control) */
-#define _B 0100 /* leer */
-#define _X 0200 /* heXadezimale Ziffer */
-@end example
-
-Der @code{ctype[]}-Eintrag f�r jeden Buchstaben sollte die
-Vereinigungsmenge der betreffenden Bitmasken-Werte sein, die den Buchstaben
-beschreiben. @code{'A'} beispielsweise ist Buchstabe in Gro�schreibung
-(@code{_U}) und gleichzeitig eine hexadezimale Ziffer (@code{_X}), daher
-sollte @code{ctype['A'+1]} folgenden Wert erhalten:
-
-@example
-_U + _X = 01 + 0200 = 0201
-@end example
-
-
-@node String collating, Multi-byte characters, Character arrays, Localisation
-@c German node Zeichenketten-Vergleich
-@subsection Unterst�tzung f�r Zeichenketten-Vergleich
-
-@cindex Vergleich, Zeichenketten
-@cindex Zeichenkettenvergleich
-
-Wenn die Sortierregeln Ihrer Sprache zu komplex sind, um durch die einfache
-@code{sort_order[]}-Tabelle gehandhabt zu werden, m�ssen Sie die
-Zeichenketten-Vergleichsfunktionen benutzen.
-
-Zum jetzigen Zeitpunkt ist die beste Dokumentation hier�ber die
-Zeichens�tze, die bereits implementiert sind. Sehen Sie sich als Beispiele
-die Zeichens�tze big5, tschechisch, gbk, sjis und tis160 an.
-
-Sie m�ssen den @code{strxfrm_multiply_MEINSET=N}-Wert mit einem speziellen
-Kommentar am Anfang der Datei festlegen. @code{N} sollte auf das h�chste
-Verh�ltnis gesetzt werden, auf das die Zeichenketten w�hrend
-@code{my_strxfrm_MEINSET} anwachsen k�nnen (es muss eine positive Ganzzahl
-sein).
-
-
-@node Multi-byte characters, Problems with character sets, String collating, Localisation
-@c German node Multi-Byte-Zeichen
-@subsection Unterst�tzung f�r Multi-Byte-Zeichen
-
-@cindex Buchstaben, Multi-Byte
-@cindex Multi-Byte-Zeichen
-
-Wenn Sie Unterst�tzung f�r einen neuen Zeichensatz hinzuf�gen wollen, der
-Multi-Byte-Buchstaben enth�lt, m�ssen Sie die Multi-Byte-Zeichenfunktionen
-benutzen.
-
-Zum jetzigen Zeitpunkt ist die beste Dokumentation hier�ber die
-Zeichens�tze, die bereits implementiert sind. Sehen Sie sich als Beispiele
-die Zeichens�tze euc_kr, gb2312, gbk, sjis und ujis an. Diese sind in den
-@code{ctype-'charset'.c}-Dateien im @file{strings}-Verzeichnis
-implementiert.
-
-Sie m�ssen den @code{mbmaxlen_MEINSET=N}-Wert in einem speziellen Kommentar
-am Anfang der Quelldatei angeben. @code{N} sollte auf die Gr��e in Bytes
-des gr��ten Buchstabens im Zeichensatz gesetzt werden.
-
-@node Problems with character sets, , Multi-byte characters, Localisation
-@c German node Probleme mit Zeichens�tzen
-@subsection Probleme mit Zeichens�tzen
-
-Wenn Sie versuchen, einen Zeichensatz zu benutzen, der nicht in Ihre
-Bin�rdatei kompiliert ist, k�nnen Sie verschiedene Probleme bekommen:
-
-@itemize @bullet
-@item
-Ihr Programm hat einen falschen Pfad zum Speicherort der Zeichens�tze.
-(Vorgabe ist @file{/usr/local/mysql/share/mysql/charsets}). Das kann durch
-die Benutzung der @code{--character-sets-dir}-Option f�r das fragliche
-Programm behoben werden.
-@item
-Der Zeichensatz ist ein Multi-Byte-Zeichensatz, der nicht dynamisch geladen
-werden kann. Wenn das der Fall ist, m�ssen Sie das Programm mit
-Unterst�tzung f�r diesen Zeichensatz neu kompilieren.
-@item
-Der Zeichensatz ist ein dynamischer Zeichensatz, aber Sie haben keine
-configure-Datei daf�r. In diesem Fall m�ssen Sie die configure-Datei f�r
-den Zeichensatz aus einer neuen MySQL-Distribution installieren.
-@item
-Ihre @file{Index}-Datei enth�lt nicht den Namen f�r den Zeichensatz.
-
-@example
-ERROR 1105: File '/usr/local/share/mysql/charsets/?.conf' not found
-(Errcode: 2)
-@end example
-
-In diesem Fall m�ssen Sie sich entweder eine neue @code{Index}-Datei holen
-oder den Namen jedes fehlenden Zeichensatzes von Hand eintragen.
-@end itemize
-
-Bei MyISAM-Tabellen k�nnen Sie den Zeichensatznamen und die Anzahl f�r eine
-Tabelle mit @code{myisamchk -dvv tabelle} pr�fen.
-
-
-@node Server-Side Scripts, Client-Side Scripts, Localisation, MySQL Database Administration
-@c German node Serverseitige Skripte
-@section Serverseitige Skripte und Dienstprogramme f�r MySQL
-
-
-
-@menu
-* Server-Side Overview::
-* safe_mysqld::
-* mysqld_multi::
-* myisampack::
-* mysqld-max::
-@end menu
-
-@node Server-Side Overview, safe_mysqld, Server-Side Scripts, Server-Side Scripts
-@c German node �berblick �ber serverseitige Programme
-@subsection �berblick �ber serverseitige Programme und Dienstprogramme
-
-@cindex Umgebungsvariablen
-@cindex Programme, Auflistung
-
-Alle MySQL-Clients, die mittels der @code{mysqlclient}-Bibliothek mit dem
-Server kommunizieren, benutzen folgenden Umgebungsvariablen:
-
-@tindex @code{MYSQL_UNIX_PORT}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_UNIX_PORT}
-@tindex @code{MYSQL_TCP_PORT}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_TCP_PORT}
-@tindex @code{MYSQL_PWD}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_PWD}
-@tindex @code{MYSQL_DEBUG}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_DEBUG}
-@multitable @columnfractions .25 .75
-@item @strong{Name} @tab @strong{Beschreibung}
-@item @code{MYSQL_UNIX_PORT} @tab Der vorgabem��ige Socket; benutzt f�r Verbindungen zu @code{localhost}
-@item @code{MYSQL_TCP_PORT} @tab Der vorgabem��ige TCP/IP-Port
-@item @code{MYSQL_PWD} @tab Das vorgabem��ige Passwort
-@item @code{MYSQL_DEBUG} @tab Debug-Trace-Optionen beim Debuggen
-@item @code{TMPDIR} @tab Das Verzeichnis, in dem tempor�re Tabellen / Dateien erzeugt werden
-@end multitable
-
-Die Benutzung von @code{MYSQL_PWD} ist unsicher.
-@xref{Connecting}.
-
-@tindex @code{MYSQL_HISTFILE}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_HISTFILE}
-@tindex @code{HOME}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{HOME}
-@cindex History-Datei
-@cindex Kommandozeilen-History
-@tindex .mysql-History-Datei
-Der @file{mysql}-Client benutzt die Datei, die in der
-@code{MYSQL_HISTFILE}-Umgebungsvariablen angegeben ist, um die
-Kommandozeilen-History zu speichern. Der Vorgabewert f�r die History-Datei
-ist @file{$HOME/.mysql_history}, wobei @code{$HOME} der Wert der
-@code{HOME}-Umgebungsvariablen ist. @xref{Environment variables}.
-
-Alle MySQL-Programme nehmen viele unterschiedliche Optionen auf. Jedes
-MySQL-Programm bietet jedoch eine @code{--help}-Option, die Sie benutzen
-k�nnen, um eine vollst�ndige Beschreibung der unterschiedlichen
-Programmoptionen zu erhalten. Probieren Sie zum Beispiel @code{mysql
---help} aus.
-
-Sie k�nnen Vorgabeoptionen f�r alle Standard-Client-Programme mit einer
-Optionsdatei �berschreiben. @ref{Option files}.
-
-Die unten stehende Liste beschreibt kurz die MySQL-Programme:
-
-@table @code
-
-@cindex @code{myisamchk}
-@item myisamchk
-Dienstprogramm zur Beschreibung, Pr�fung, Optimierung und Reparatur von
-MySQL-Tabellen. Weil @code{myisamchk} viele Funktionen hat, ist es in einem
-eigenen Kapitel beschrieben. @xref{MySQL Database Administration}.
-
-@cindex @code{make_binary_distribution}
-@item make_binary_distribution
-Macht ein Bin�r-Release eines kompilierten MySQL. Dieses k�nnte �ber FTP an
-@file{/pub/mysql/Incoming} oder an @code{Support.mysql.com} geschickt
-werden, damit andere MySQL-Benutzer es benutzen k�nnen.
-
-@cindex @code{msql2mysql}
-@item msql2mysql
-Ein Shell-Skript, das @code{mSQL}-Programme zu MySQL konvertiert. Es deckt
-nicht alle F�lle ab, ist aber hilfreich, um mit dem Konvertieren
-anzufangen.
-
-@cindex @code{mysqlaccess}
-@item mysqlaccess
-Ein Skript, das die Zugriffsberechtigungen f�r eine Host-, Benutzer- und
-Datenbank-Kombination pr�ft.
-
-@cindex @code{mysqladmin}
-@item mysqladmin
-Dienstprogramm f�r die Durchf�hrung von Verwaltungsoperationen wie Erzeugen
-und L�schen von Datenbanken, Neuladen der Berechtigungstabellen,
-Zur�ckschreiben von Tabellen auf Platte und Neu�ffnen von Log-Dateien.
-@code{mysqladmin} kann auch benutzt werden, um Versionsnummer sowie Status-
-und Prozess-Informationen vom Server zu erhalten.
-@xref{mysqladmin, , @code{mysqladmin}}.
-
-@cindex @code{mysqlbug}
-@item mysqlbug
-Das MySQL-Bug-Bericht-Skript. Dieses Skript sollte immer benutzt werden,
-wenn Sie einen Bug-Bericht an die MySQL-Liste ausf�llen.
-
-@cindex @code{mysqld}
-@item mysqld
-Der SQL-Daemon. Dieser sollte immer laufen.
-
-@cindex @code{mysqldump}
-@item mysqldump
-Dumpt eine MySQL-Datenbank in eine Datei als SQL-Statements oder als
-Tabulator-separierte Textdateien. Verbesserte Freeware, urspr�nglich von
-Igor Romanenko. @xref{mysqldump, , @code{mysqldump}}.
-
-@cindex @code{mysqlimport}
-@item mysqlimport
-Importiert Textdateien in die jeweiligen Tabellen mittels @code{LOAD DATA
-INFILE}. @xref{mysqlimport, , @code{mysqlimport}}.
-
-@cindex @code{mysqlshow}
-@item mysqlshow
-Zeigt Informationen �ber Datenbanken, Tabellen, Spalten und Indexe an.
-
-@cindex @code{mysql_install_db}
-@item mysql_install_db
-Erzeugt die MySQL-Berechtigungstabellen mit vorgabem��igen Berechtigungen.
-Dieses Skript wird gew�hnlich nur einmal ausgef�hrt, wenn Sie MySQL das
-erste Mal auf einem System installieren.
-
-@cindex @code{replace}
-@item replace
-Ein Dienstprogramm, das von @code{msql2mysql} benutzt wird, aber auch
-dar�ber hinaus benutzt werden kann. @code{replace} �ndert Zeichenketten in
-Dateien oder auf der Standardeingabe. Benutzt eine finite Status-Maschine,
-um zuerst �bereinstimmung mit l�ngeren Zeichenketten zu finden. Kann
-benutzt werden, um Zeichenketten umzudrehen. Der folgende Befehl zum
-Beispiel dreht @code{a} und @code{b} in den angegebenen Dateien um:
-
-@example
-shell> replace a b b a --Datei1 Datei2 ...
-@end example
-@end table
-
-
-@node safe_mysqld, mysqld_multi, Server-Side Overview, Server-Side Scripts
-@c German node safe_mysqld
-@subsection safe_mysqld, der Wrapper um mysqld
-
-@cindex Werkzeuge, safe_mysqld
-@cindex Skripts
-@cindex @code{safe_mysqld}
-
-@code{safe_mysqld} ist die empfohlene Art, einen @code{mysqld}-Daemon unter
-Unix zu starten. @code{safe_mysqld} f�gt einige Sicherheits-Features hinzu
-wie das Neustarten des Servers, wenn ein Fehler auftritt, und das
-Mitschreiben von Laufzeitinformationen in eine Log-Datei.
-
-Wenn Sie nicht @code{--mysqld=#} oder @code{--mysqld-version=#} benutzen,
-benutzt @code{safe_mysqld} eine ausf�hrbare Datei namens @code{mysqld-max},
-wenn es diese gibt. Wenn nicht, startet @code{safe_mysqld} @code{mysqld}.
-Das macht es sehr einfach, @code{mysqld-max} anstelle von @code{mysqld}
-versuchsweise zu benutzen. Kopieren Sie einfach @code{mysqld-max} dorthin,
-wo @code{mysqld} liegt, und es wird benutzt werden.
-
-Normalerweise sollte man das @code{safe_mysqld}-Skript nie editieren,
-sondern statt dessen die Optionen f�r @code{safe_mysqld} in den
-@code{[safe_mysqld]}-Abschnitt der @code{my.cnf}-Datei einf�gen.
-@code{safe_mysqld} liest alle Optionen des @code{[mysqld]}-,
-@code{[server]}- und @code{[safe_mysqld]}-Abschnitts aus den
-Optionsdateien. @xref{Option files}.
-
-Beachten Sie, dass alle Optionen auf der Kommandozeile f�r
-@code{safe_mysqld} an @code{mysqld} durchgereicht werden. Wenn Sie in
-@code{safe_mysqld} irgend welche Optionen benutzen wollen, die
-@code{mysqld} nicht unterst�tzt, m�ssen Sie diese in der Optionsdatei
-angeben.
-
-Die meisten Optionen f�r @code{safe_mysqld} sind dieselben wie die Optionen
-f�r @code{mysqld}. @xref{Command-line options}.
-
-@code{safe_mysqld} unterst�tzt folgende Optionen:
-
-@table @code
-@item --basedir=pfad
-@item --core-file-size=#
-Gr��e der Core-Datei, die @code{mysqld} in der Lage sein sollte zu
-erzeugen. Wird an @code{ulimit -c} durchgereicht.
-@item --datadir=pfad
-@item --defaults-extra-file=pfad
-@item --defaults-file=pfad
-@item --err-log=pfad
-@item --ledir=pfad
-Pfad zu @code{mysqld}
-@item --log=pfad
-@item --mysqld=mysqld-version
-Name der @code{mysqld}-Version im @code{ledir}-Verzeichnis, die Sie starten
-wollen.
-@item --mysqld-version=version
-�hnlich wie @code{--mysqld=}, aber hier f�r nur das Suffix f�r
-@code{mysqld} angegeben. Wenn Sie zum Beispiel @code{--mysqld-version=max}
-benutzen, startet @code{safe_mysqld} die @code{ledir/mysqld-max}-Version.
-Wenn das Argument f�r @code{--mysqld-version} leer ist, wird
-@code{ledir/mysqld} benutzt.
-@item --no-defaults
-@item --open-files-limit=#
-Anzahl der Dateien, die @code{mysqld} in der Lage sein sollte zu �ffnen.
-Wird an @code{ulimit -n} durchgereicht. Beachten Sie, dass Sie
-@code{safe_mysqld} als Root starten m�ssen, damit dies korrekt
-funktioniert!
-@item --pid-file=pfad
-@item --port=#
-@item --socket=pfad
-@item --timezone=#
-Setzt die Zeitzone (die @code{TZ})-Variable auf den Wert dieses Parameters.
-@item --user=#
-@end table
-
-Das @code{safe_mysqld}-Skript ist so geschrieben, dass es normalerweise
-einen Server starten kann, der aus einer Quell- oder einer Bin�rversion von
-MySQL installiert wurde, selbst wenn diese den Server an etwas anderen
-Stellen installieren. @code{safe_mysqld} erwartet, dass eine der folgenden
-Bedingungen zutrifft:
-
-@itemize @bullet
-@item
-Server und Datenbanken liegen relativ zum Verzeichnis, aus dem
-@code{safe_mysqld} aufgerufen wird. @code{safe_mysqld} sucht unterhalb
-seines Arbeitsverzeichnisses nach @file{bin}- und
-@file{data}-Verzeichnissen (bei Bin�rdistributionen) oder nach
-@file{libexec}- und @file{var}-Verzeichnissen (bei Quelldistributionen).
-Diese Bedingung sollte zutreffen, wenn Sie @code{safe_mysqld} aus Ihrem
-MySQL-Installationsverzeichnis ausf�hren (zum Beispiel
-@file{/usr/local/mysql} bei einer Bin�rdistribution).
-
-@item
-Wenn Server und Datenbanken nicht relativ zum Arbeitsverzeichnis liegen,
-versucht @code{safe_mysqld}, sie anhand absoluter Pfadnamen zu finden.
-Typische Speicherort sind @file{/usr/local/libexec} und
-@file{/usr/local/var}. Die tats�chlichen Speicherorte werden festgelegt,
-wenn die Distribution gebaut wird, woher @code{safe_mysqld} kommt. Sie
-sollten korrekt sein, wenn MySQL an einem Standardort installiert wurde.
-@end itemize
-
-Weil @code{safe_mysqld} versucht, Server und Datenbanken relativ zum
-eigenen Arbeitsverzeichnis zu finden, k�nnen Sie eine Bin�rdistribution von
-MySQL irgendwo hin installieren, so lange Sie @code{safe_mysqld} aus dem
-MySQL-Installationsverzeichnis starten:
-
-@example
-shell> cd mysql_installations_verzeichnis
-shell> bin/safe_mysqld &
-@end example
-
-Wenn @code{safe_mysqld} fehlschl�gt, selbst wenn es aus dem
-MySQL-Installationsverzeichnis aufgerufen wurde, k�nnen Sie es so �ndern,
-dass es den Pfad zu @code{mysqld} und die Pfadnamen-Optionen benutzt, die
-auf Ihrem System korrekt sind. Beachten Sie, dass bei zuk�nftigen
-Aktualisierungen von MySQL Ihre ver�nderte Version von @code{safe_mysqld}
-�berschrieben wird. Daher sollten Sie eine Kopie Ihrer editierten Version
-machen, damit Sie diese neu installieren k�nnen.
-
-
-@node mysqld_multi, myisampack, safe_mysqld, Server-Side Scripts
-@c German node mysqld_multi
-@subsection mysqld_multi, Programm zur Verwaltung mehrerer MySQL-Server
-
-@cindex Werkzeuge, mysqld_multi
-@cindex Skripts
-@cindex multi mysqld
-@cindex @code{mysqld_multi}
-
-@code{mysqld_multi} ist f�r die Verwaltung mehrerer @code{mysqld}-Prozesse
-gedacht, die auf unterschiedlichen UNIX-Sockets und TCP/IP-Ports laufen.
-
-Das Programm sucht nach Gruppe(n), die [mysqld#] benannt sind, in my.cnf
-(oder der angegebenen --config-file=...), wobei # jede positive Zahl ab 1
-sein kann. Diese Gruppen sollten dieselben sein wie die �bliche
-@code{[mysqld]}-Gruppe (zum Beispiel Optionen f�r mysqld, siehe
-ausf�hrliche Informationen im Handbuch �ber diese Gruppe), aber mit
-denjenigen Port-, Socket- usw. Optionen, die f�r jeden separaten
-@code{mysqld}-Prozess gew�nscht sind. Die Zahl im Gruppennamen hat eine
-andere Funktion: Sie kann benutzt werden, um bestimmte @code{mysqld}-Server
-zu starten, anzuhalten, oder Berichte �ber sie mit diesem Programm
-auszugeben. Unten stehen weitere Informationen zur Benutzung und zu den
-Optionen.
-
-@example
-Benutzung: mysqld_multi [OPTIONS] @{start|stop|report@} [GNR,GNR,GNR...]
-oder mysqld_multi [OPTIONS] @{start|stop|report@} [GNR-GNR,GNR,GNR-GNR,...]
-@end example
-
-Die GNR oben bedeutet die Gruppennummer. Sie k�nnen jede GNR starten,
-anhalten oder Berichtsinformationen �ber sie ausgeben, oder �ber mehrere
-von ihnen zugleich. (Siehe --example) Die GNRs in der Liste k�nnen mit
-Komma getrennt oder mit Bindestrich kombiniert werden, wobei letzteres
-hei�t, dass alle GNRs zwischen GNR1-GNR2 betroffen sind. Ohne GNR-Argument
-werden alle gefundenen Gruppen entweder gestartet, angehalten, oder es
-werden Berichtsinformationen �ber sie ausgegeben. Beachten Sie, dass Sie in
-der GNR-Liste keinen Leerraum haben d�rfen. Alles nach Leerraum wird
-ignoriert.
-
-@code{mysqld_multi} unterst�tzt folgende Optionen:
-
-@table @code
-@cindex config-file option
-@item --config-file=...
-Alternative config-Datei. HINWEIS: Das betrifft nicht die eigenen Optionen
-des Programms (Gruppe @code{[mysqld_multi]}), sondern nur die Gruppen
-[mysqld#]. Ohne diese Option wird alles aus der normalen my.cnfDatei heraus
-gesucht.
-@cindex Beispiel option
-@item --example
-Zeigt ein Beispiel einer config-Datei.
-@cindex help option
-@item --help
-Hilfetext ausgeben und beenden.
-@cindex log option
-@item --log=...
-Log-Datei. Name und voller Pfad zur Log-Datei. HINWEIS: Wenn es die Datei
-gibt, wird alles angeh�ngt.
-@cindex mysqladmin option
-@item --mysqladmin=...
-@code{mysqladmin}-Bin�rdatei, die zum Herunterfahren des Servers benutzt
-wird.
-@cindex mysqld option
-@item --mysqld=...
-@code{mysqld}-Bin�rdatei, die benutzt wird. Beachten Sie, dass Sie auch
-@code{safe_mysqld} diese Option angeben k�nnen. Die Optionen werden an
-@code{mysqld} durchgereicht. Stellen Sie jedoch sicher, dass Sie
-@code{mysqld} in Ihrer Umgebungsvariablen @code{PATH} haben oder bearbeiten
-Sie @code{safe_mysqld}.
-@cindex no-log option
-@item --no-log
-An stdout ausgeben statt in die Log-Datei. Vorgabem��ig ist die Log-Datei
-angeschaltet.
-@cindex password option
-@item --password=...
-Passwort f�r Benutzer von @code{mysqladmin}.
-@cindex tcp-ip option
-@item --tcp-ip
-Zu MySQL-Server(n) �ber den TCP/IP-Port statt �ber den UNIX-Socket
-verbinden. Das betrifft das Anhalten und Berichten. Wenn eine Socket-Datei
-fehlt, kann der Server trotzdem laufen, aber man kann nur �ber den
-TCP/IP-Port auf ihn zugreifen. Vorgabem��ig wird die Verbindung �ber den
-UNIX-Socket hergestellt.
-@cindex user option
-@item --user=...
-MySQL-Benutzer von @code{mysqladmin}.
-@cindex version option
-@item --version
-Versionsnummer ausgeben und beenden.
-@end table
-
-Einige Anmerkungen zu @code{mysqld_multi}:
-
-@itemize @bullet
-@item
-Stellen Sie sicher, dass der MySQL-Benutzer, der die @code{mysqld}-Dienste
-anh�lt (indem er zum Beispiel @code{mysqladmin} benutzt), dasselbe Passwort
-und denselben Benutzernamen f�r alle Daten-Verzeichnisse benutzt, auf die
-zugegriffen wird (zur 'mysql'-Datenbank). Stellen Sie ausserdem sicher,
-dass der Benutzer die 'Shutdown_priv'-Berechtigung hat! Wenn Sie viele
-Daten-Verzeichnisse und viele verschiedene 'mysql'-Datenbanken mit
-unterschiedlichen Passw�rtern f�r den MySQL-'root'-Benutzer haben, sollten
-Sie einen allgemeinen 'multi_admin'-Benutzer anlegen, der dasselbe Passwort
-benutzt (siehe unten). Hier ein Beispiel daf�r:
-@example
-shell> mysql -u root -S /tmp/mysql.sock -proot_password -e
-"GRANT SHUTDOWN ON *.* TO multi_admin@@localhost IDENTIFIED BY 'multipass'"
-@xref{Privileges}.
-@end example
-Das oben Angegebene m�ssen Sie f�r jeden laufenden @code{mysqld} im
-Daten-Verzeichnis tun, das Sie haben (�ndern Sie einfach den Socket,
--S=...).
-@item
-@code{pid-file} ist sehr wichtig, wenn Sie @code{safe_mysqld} benutzen, um
-@code{mysqld} zu starten (zum Beispiel --mysqld=safe_mysqld). Jeder
-@code{mysqld} sollte seine eigene @code{pid-file} haben. Der Vorteil der
-Benutzung von @code{safe_mysqld} anstelle von @code{mysqld} direkt ist
-hierbei, dass @code{safe_mysqld} jeden @code{mysqld}-Prozess 'bewacht' und
-neu startet, falls ein @code{mysqld}-Prozess wegen eines Signals kill -9
-fehlschl�gt oder �hnliches (wenn beispielsweise Speicherzugriffsfehler
-auftreten, was bei MySQL nat�rlich nie passiert ;-). Beachten Sie bitte,
-dass es f�r das @code{safe_mysqld}-Skript eventuell erforderlich ist, es
-von einer bestimmten Stelle aus zu starten. Das hei�t, dass Sie eventuell
-in ein bestimmtes Verzeichnis wechseln m�ssen, bevor Sie
-@code{mysqld_multi} starten. Wenn Sie beim Starten Probleme haben, sehen
-Sie bitte im @code{safe_mysqld}-Skript nach. �berpr�fen Sie insbesondere
-folgende Zeilen:
-@example
---------------------------------------------------------------------------
-MY_PWD=`pwd` Check if we are starting this relative (for the binary
-release) if test -d /data/mysql -a -f ./share/mysql/englisch/errmsg.sys
--a -x ./bin/mysqld
---------------------------------------------------------------------------
-@xref{safe_mysqld, , @code{safe_mysqld}}.
-@end example
-Der obige Test soll erfolgreich verlaufen, ansonsten k�nnen Sie Probleme
-bekommen.
-@item
-Vermeiden Sie Gefahren, die auftauchen, wenn Sie mehrere @code{mysqlds} im
-selben Daten-Verzeichnis starten. Benutzen Sie unterschiedlichen
-Daten-Verzeichnisse, es sei denn, Sie wissen @strong{GENAU}, was Sie tun!
-@item
-Die Socket-Datei und der TCP/IP-Port m�ssen f�r jeden @code{mysqld}
-verschieden sein.
-@item
-Die erste und die f�nfte @code{mysqld}-Gruppe wurden beim Beispiel
-absichtlich ausgelassen. Sie haben eventuell 'L�cken' in der config-Datei.
-Das gibt Ihnen mehr Flexibilit�t. Die Reihenfolge, in der die
-@code{mysqlds} gestartet oder angehalten werden, h�ngt von der Reihenfolge
-ab, in der sie in der config-Datei erscheinen.
-@item
-Wenn Sie auf eine bestimmte Gruppe verweisen wollen, wenn Sie GNR bei
-diesem Programm benutzen, nehmen Sie einfach die Nummer am Ende des
-Gruppennamens ( [mysqld# <== ).
-@item
-Eventuell sollten Sie die Option '--user' f�r @code{mysqld} benutzen, aber
-um das zu tun, m�ssen Sie root sein, wenn Sie das
-@code{mysqld_multi}-Skript starten. Wenn Sie die Option in der config-Datei
-haben, macht das nichts; Sie erhalten nur eine Warnmeldung, wenn Sie nicht
-der Superuser sind und die @code{mysqlds} unter @strong{IHREM} UNIX-Account
-gestartet werden. @strong{WICHTIG}: Stellen Sie sicher, dass die
-@code{pid-file} und das Daten-Verzeichnis f�r @strong{DENJENIGEN}
-UNIX-Benutzer lesbar und schreibbar sind (und ausf�hrbar im letzteren
-Fall), als der der spezifische @code{mysqld}-Prozess gestartet wird.
-Benutzen Sie hier @strong{NICHT} den UNIX-root-Account, es sei denn, Sie
-wissen @strong{GENAU}, was Sie tun!
-@item
-@strong{SEHR WICHTIG}: Stellen Sie sicher, dass Sie die Bedeutung der
-Optionen verstehen, die an die @code{mysqlds} durchgereicht werden und
-@strong{WARUM} Sie mehrere verschiedene @code{mysqld}-Prozesse haben
-wollen. Mehrere @code{mysqlds} in einem Daten-Verzeichnis starten
-@strong{ergibt keine zus�tzliche Performance} bei einem threaded System!
-@end itemize
-
-@xref{Multiple servers}.
-
-Hier ist ein Beispiel einer config-Datei f�r @code{mysqld_multi}.
-
-@example
-# Diese Datei sollte wahrscheinlich in Ihrem Heimatverzeichnis liegen (~/.my.cnf) oder in /etc/my.cnf
-# Version 2.1 von Jani Tolonen
-
-[mysqld_multi]
-mysqld = /usr/local/bin/safe_mysqld
-mysqladmin = /usr/local/bin/mysqladmin
-user = multi_admin
-password = multipass
-
-[mysqld2]
-socket = /tmp/mysql.sock2
-port = 3307
-pid-file = /usr/local/mysql/var2/hostname.pid2
-datadir = /usr/local/mysql/var2
-language = /usr/local/share/mysql/english
-user = john
-
-[mysqld3]
-socket = /tmp/mysql.sock3
-port = 3308
-pid-file = /usr/local/mysql/var3/hostname.pid3
-datadir = /usr/local/mysql/var3
-language = /usr/local/share/mysql/swedish
-user = monty
-
-[mysqld4]
-socket = /tmp/mysql.sock4
-port = 3309
-pid-file = /usr/local/mysql/var4/hostname.pid4
-datadir = /usr/local/mysql/var4
-language = /usr/local/share/mysql/estonian
-user = tonu
-
-[mysqld6]
-socket = /tmp/mysql.sock6
-port = 3311
-pid-file = /usr/local/mysql/var6/hostname.pid6
-datadir = /usr/local/mysql/var6
-language = /usr/local/share/mysql/japanese
-user = jani
-@end example
-
-@xref{Option files}.
-
-
-@node myisampack, mysqld-max, mysqld_multi, Server-Side Scripts
-@c German node myisampack
-@subsection myisampack, MySQL-Programm zum Erzeugen komprimierter Nur-Lese-Tabellen
-
-@cindex komprimierte Tabellen
-@cindex Tabellen, komprimierte
-@cindex MyISAM, komprimierte Tabellen
-@cindex @code{myisampack}
-@cindex @code{pack_isam}
-
-@code{myisampack} wird benutzt, um MyISAM-Tabellen zu komprimieren.
-@code{pack_isam} wird benutzt, um ISAM-Tabellen zu komprimieren. Weil
-ISAM-Tabellen veraltet sind, wird hier nur @code{myisampack} er�rtert, aber
-alles, was auf @code{myisampack} zutrifft, gilt auch f�r @code{pack_isam}.
-
-@code{myisampack} funktioniert, indem jede Spalte in der Tabelle separat
-komprimiert wird. Die Informationen, die ben�tigt werden, um Spalten zu
-dekomprimieren, werden in den Arbeitsspeicher gelesen, wenn die Tabelle
-ge�ffnet wird. Das ergibt viel bessere Performance beim Zugriff auf
-einzelne Datens�tze, denn man muss nur exakt einen Datensatz
-dekomprimieren, nicht einen viel gr��eren Block, wie das zum Beispiel bei
-der Benutzung von Stacker auf MS-DOS n�tig ist. �blicherweise komprimiert
-@code{myisampack} die Daten-Datei auf 40%-70%.
-
-MySQL benutzt Speicher-Mapping (@code{mmap()}) auf komprimierte Tabellen
-und geht zu normalen Lesen / Schreiben von Dateien zur�ck, wenn
-@code{mmap()} nicht funktioniert.
-
-F�r @code{myisampack} gibt es momentan zwei Einschr�nkungen:
-@itemize @bullet
-@item
-Nach dem Komprimieren ist die Tabelle nur-lesbar.
-@item
-@code{myisampack} kann auch @code{BLOB}- oder @code{TEXT}-Spalten
-komprimieren. Das �ltere @code{pack_isam} konnte das nicht.
-@end itemize
-
-Die Behebung dieser Einschr�nkungen steht mit niedrigen Priorit�t auf
-unserer TODO-Liste.
-
-@code{myisampack} wird wie folgt aufgerufen:
-
-@example
-shell> myisampack [options] Dateiname ...
-@end example
-
-Jeder Dateiname sollte der Name einer Index-(@file{.MYI})-Datei sein. Wenn
-Sie nicht im Datenbank-Verzeichnis sind, m�ssen Sie den Pfadnamen zur Datei
-angeben. Die @file{.MYI} Erweiterung kann weggelassen werden.
-
-@code{myisampack} unterst�tzt folgende Optionen:
-
-@table @code
-@item -b, --backup
-Stellt eine Datensicherung der Tabelle als @code{tabelle.OLD} her.
-
-@item -#, --debug=debug_options
-Debug-Log ausgeben. Die @code{debug_options}-Zeichenkette ist h�ufig
-@code{'d:t:o,filename'}.
-
-@item -f, --force
-Erzwingt die Komprimierung der Tabelle, selbst wenn sie dadurch gr��er
-wird oder die tempor�re Datei existiert. @code{myisampack} erzeugt eine
-tempor�re Datei namens @file{tabelle.TMD}, w�hrend es die Tabelle
-komprimiert. Wenn Sie @code{myisampack} killen, kann es sein, dass die
-@file{.TMD}-Datei nicht gel�scht wird. Normalerweise wird @code{myisampack}
-mit einer Fehlermeldung beendet, wenn es eine existierende
-@file{tabelle.TMD}-Datei findet. Mit @code{--force} packt @code{myisampack}
-die Tabelle trotzdem.
-
-@item -?, --help
-Hilfetext ausgeben und beenden.
-
-@item -j gro�e_tabelle, --join=gro�e_tabelle
-Verbindet alle Tabellen, die auf der Kommandozeile angegeben wurden, in
-eine einzige gro�e Tabelle @code{gro�e_tabelle}. Alle Tabellen, die
-kombiniert werden sollen, M�SSEN identisch sein (dieselben Spaltennamen und
--typen, dieselben Indexe usw.).
-
-@item -p #, --packlength=#
-Legt die Speichergr��e der Datensatzl�nge in Bytes fest. Der Wert sollte
-1, 2 oder 3 sein. (@code{myisampack} speichert alle Zeilen mit
-L�ngenzeigern von 1, 2, oder 3 Bytes. In den meisten F�llen kann
-@code{myisampack} den richtigen L�ngenwert festlegen, bevor es anf�ngt, die
-Datei zu komprimieren. W�hrend des Komprimierungsprozesses stellt es aber
-eventuell fest, dass es eine k�rzere L�nge h�tte nehmen k�nnen. In diesem
-Fall gibt @code{myisampack} einen Hinweis aus, dass Sie beim n�chsten Mal,
-wenn Sie dieselbe Datei packen, eine k�rzere Datensatzl�nge nehmen
-sollten.)
-
-@item -s, --silent
-Schweigsamer Modus. Ausgaben erfolgen nur, wenn Fehler auftreten.
-
-@item -t, --test
-Tabelle nicht tats�chlich komprimieren, sondern nur testweise packen.
-
-@item -T dir_name, --tmp_dir=dir_name
-Das genannte Verzeichnis als Speicherort der tempor�ren Tabelle benutzen.
-
-@item -v, --verbose
-Geschw�tziger Modus. Informationen �ber den Fortschritt und das
-Komprimierungsergebnis ausgeben.
-
-@item -V, --version
-Versionsinformationen ausgeben und beenden.
-
-@item -w, --wait
-Warten und noch einmal versuchen, wenn die Tabelle in Benutzung ist. Wenn
-der @code{mysqld}-Server mit der @code{--skip-locking}-Option aufgerufen
-wurde, ist es keine gute Idee, @code{myisampack} aufzurufen, wenn die
-Tabelle w�hrend des Komprimierungsprozesses m�glicherweise aktualisiert
-wird.
-@end table
-
-@cindex Beispiele, komprimierte Tabellen
-Die unten stehende Befehlssequenz zeigt eine typische
-Tabellen-Komprimierungssitzung:
-
-@example
-shell> ls -l station.*
--rw-rw-r-- 1 monty my 994128 Apr 17 19:00 station.MYD
--rw-rw-r-- 1 monty my 53248 Apr 17 19:00 station.MYI
--rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm
-
-shell> myisamchk -dvv station
-
-MyISAM file: station
-Isam-version: 2
-Creation time: 1996-03-13 10:08:58
-Recover time: 1997-02-02 3:06:43
-Data records: 1192 Deleted blocks: 0
-Datafile: Parts: 1192 Deleted data: 0
-Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2
-Max datafile length: 54657023 Max keyfile length: 33554431
-Recordlength: 834
-Record format: Fixed length
-
-table description:
-Key Start Len Index Type Root Blocksize Rec/key
-1 2 4 unique unsigned long 1024 1024 1
-2 32 30 multip. text 10240 1024 1
-
-Field Start Length Type
-1 1 1
-2 2 4
-3 6 4
-4 10 1
-5 11 20
-6 31 1
-7 32 30
-8 62 35
-9 97 35
-10 132 35
-11 167 4
-12 171 16
-13 187 35
-14 222 4
-15 226 16
-16 242 20
-17 262 20
-18 282 20
-19 302 30
-20 332 4
-21 336 4
-22 340 1
-23 341 8
-24 349 8
-25 357 8
-26 365 2
-27 367 2
-28 369 4
-29 373 4
-30 377 1
-31 378 2
-32 380 8
-33 388 4
-34 392 4
-35 396 4
-36 400 4
-37 404 1
-38 405 4
-39 409 4
-40 413 4
-41 417 4
-42 421 4
-43 425 4
-44 429 20
-45 449 30
-46 479 1
-47 480 1
-48 481 79
-49 560 79
-50 639 79
-51 718 79
-52 797 8
-53 805 1
-54 806 1
-55 807 20
-56 827 4
-57 831 4
-
-shell> myisampack station.MYI
-Compressing station.MYI: (1192 records)
-- Calculating statistics
-
-normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11
-pre-space: 0 end-space: 12 table-lookups: 5 zero: 7
-Original trees: 57 After join: 17
-- Compressing file
-87.14%
-
-shell> ls -l station.*
--rw-rw-r-- 1 monty my 127874 Apr 17 19:00 station.MYD
--rw-rw-r-- 1 monty my 55296 Apr 17 19:04 station.MYI
--rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm
-
-shell> myisamchk -dvv station
-
-MyISAM file: station
-Isam-version: 2
-Creation time: 1996-03-13 10:08:58
-Recover time: 1997-04-17 19:04:26
-Data records: 1192 Deleted blocks: 0
-Datafile: Parts: 1192 Deleted data: 0
-Datafilepointer (bytes): 3 Keyfile pointer (bytes): 1
-Max datafile length: 16777215 Max keyfile length: 131071
-Recordlength: 834
-Record format: Compressed
-
-table description:
-Key Start Len Index Type Root Blocksize Rec/key
-1 2 4 unique unsigned long 10240 1024 1
-2 32 30 multip. text 54272 1024 1
-
-Field Start Length Type Huff tree Bits
-1 1 1 constant 1 0
-2 2 4 zerofill(1) 2 9
-3 6 4 no zeros, zerofill(1) 2 9
-4 10 1 3 9
-5 11 20 table-lookup 4 0
-6 31 1 3 9
-7 32 30 no endspace, not_always 5 9
-8 62 35 no endspace, not_always, no empty 6 9
-9 97 35 no empty 7 9
-10 132 35 no endspace, not_always, no empty 6 9
-11 167 4 zerofill(1) 2 9
-12 171 16 no endspace, not_always, no empty 5 9
-13 187 35 no endspace, not_always, no empty 6 9
-14 222 4 zerofill(1) 2 9
-15 226 16 no endspace, not_always, no empty 5 9
-16 242 20 no endspace, not_always 8 9
-17 262 20 no endspace, no empty 8 9
-18 282 20 no endspace, no empty 5 9
-19 302 30 no endspace, no empty 6 9
-20 332 4 always zero 2 9
-21 336 4 always zero 2 9
-22 340 1 3 9
-23 341 8 table-lookup 9 0
-24 349 8 table-lookup 10 0
-25 357 8 always zero 2 9
-26 365 2 2 9
-27 367 2 no zeros, zerofill(1) 2 9
-28 369 4 no zeros, zerofill(1) 2 9
-29 373 4 table-lookup 11 0
-30 377 1 3 9
-31 378 2 no zeros, zerofill(1) 2 9
-32 380 8 no zeros 2 9
-33 388 4 always zero 2 9
-34 392 4 table-lookup 12 0
-35 396 4 no zeros, zerofill(1) 13 9
-36 400 4 no zeros, zerofill(1) 2 9
-37 404 1 2 9
-38 405 4 no zeros 2 9
-39 409 4 always zero 2 9
-40 413 4 no zeros 2 9
-41 417 4 always zero 2 9
-42 421 4 no zeros 2 9
-43 425 4 always zero 2 9
-44 429 20 no empty 3 9
-45 449 30 no empty 3 9
-46 479 1 14 4
-47 480 1 14 4
-48 481 79 no endspace, no empty 15 9
-49 560 79 no empty 2 9
-50 639 79 no empty 2 9
-51 718 79 no endspace 16 9
-52 797 8 no empty 2 9
-53 805 1 17 1
-54 806 1 3 9
-55 807 20 no empty 3 9
-56 827 4 no zeros, zerofill(2) 2 9
-57 831 4 no zeros, zerofill(1) 2 9
-@end example
-
-Die Informationen, die @code{myisampack} ausgibt, sind unten beschrieben:
-
-@table @code
-@item normal
-Die Anzahl von Spalten, f�r die keine spezielle Komprimierung benutzt wird.
-
-@item empty-space
-Die Anzahl von Spalten, die Werte enthalten, die ausschlie�lich aus
-Leerzeichen bestehen. Diese Werte nehmen 1 Bit in Anspruch.
-
-@item empty-zero
-Die Anzahl von Spalten, die Werte enthalten, die nur aus bin�ren Nullen
-bestehen. Diese Werte nehmen 1 Bit in Anspruch.
-
-@item empty-fill
-Die Anzahl von Ganzzahl-Spalten, die nicht den gesamten Bereich Ihres Typs
-einnehmen. Diese werden auf einen kleineren Typ ge�ndert (eine
-@code{INTEGER}-Spalte kann zum Beispiel auf @code{MEDIUMINT} ge�ndert
-werden).
-
-@item pre-space
-Die Anzahl von Dezimal-Spalten, die mit f�hrenden Leerzeichen gespeichert
-sind. In diesem Fall enth�lt jeder Wert einen Z�hler f�r die Anzahl
-f�hrender Leerzeichen.
-
-@item end-space
-Die Anzahl von Spalten, die viele Leerzeichen am Ende enthalten. In diesem
-Fall enth�lt jeder Wert einen Z�hler f�r die Anzahl von Leerzeichen am
-Ende.
-
-@item table-lookup
-Die Spalte hat nur eine kleine Anzahl verschiedener Werte, die in
-@code{ENUM} umgewandelt werden, bevor die Huffman-Kompression durchgef�hrt
-wird.
-
-@item zero
-Die Anzahl von Spalten, bei denen alle Werte 0 sind.
-
-@item Original trees
-Die anf�ngliche Anzahl von Huffman-B�umen.
-
-@item After join
-Die Anzahl von unterschiedlichen Huffman-B�umen, die �brig sind, nachdem
-B�ume zusammengefasst wurden, um etwas Header-Platz zu sparen.
-@end table
-
-Nachdem eine Tabelle komprimiert wurde, gibt @code{myisamchk -dvv}
-zus�tzliche Informationen �ber jedes Feld aus:
-
-@table @code
-@item Type
-Der Feldtyp kann folgende Deskriptoren enthalten:
-
-@table @code
-@item constant
-Alle Zeilen haben denselben Wert.
-
-@item no endspace
-Kein Leerzeichen am Ende speichern.
-
-@item no endspace, not_always
-Kein Leerzeichen am Ende speichern und bei allen Werten keine Komprimierung
-f�r Leerzeichen am Ende durchf�hren.
-
-@item no endspace, no empty
-Kein Leerzeichen am Ende speichern. Keine leeren Werte speichern.
-
-@item table-lookup
-Die Spalte wurde zu @code{ENUM} umgewandelt.
-
-@item zerofill(n)
-Die wichtigsten @code{n} Bytes im Wert sind immer 0 und wurden nicht
-gespeichert.
-
-@item no zeros
-Keine Nullen speichern.
-
-@item always zero
-0-Werte sind in 1 Bit gespeichert.
-@end table
-
-@item Huff tree
-Der Huffman-Baum, der zu dem Feld geh�rt.
-
-@item Bits
-Die Anzahl von Bits, die im Huffman-Baum benutzt werden.
-@end table
-
-Nachdem Sie @code{pack_isam}/@code{myisampack} laufen gelassen haben,
-m�ssen Sie @code{isamchk} / @code{myisamchk} laufen lassen, um den Index
-neu zu erzeugen. Zugleich k�nnen Sie die Index-Bl�cke sortieren und die
-Statistiken erzeugen, die ben�tigt werden, damit der MySQL-Optimierer
-effizienter l�uft:
-
-@example
-myisamchk -rq --analyze --sort-index tabelle.MYI
-isamchk -rq --analyze --sort-index tabelle.ISM
-@end example
-
-Nachdem Sie die komprimierte Tabelle ins MySQL-Datenbank-Verzeichnis
-gespielt haben, m�ssen Sie @code{mysqladmin flush-tables} ausf�hren, um
-@code{mysqld} anzuweisen, die neue Tabelle zu benutzen.
-
-Wenn Sie eine gepackte Tabelle entpacken wollen, k�nnen Sie das mit der
-@code{--unpack}-Option f�r @code{isamchk} oder @code{myisamchk} tun.
-
-
-@node mysqld-max, , myisampack, Server-Side Scripts
-@c German node mysqld-max
-@subsection mysqld-max, ein erweiterter mysqld-Server
-
-@cindex @code{mysqld-max}
-
-@code{mysqld-max} ist der MySQL-Server (@code{mysqld}), der mit folgenden
-configure-Optionen konfiguriert wurde:
-
-@multitable @columnfractions .3 .7
-@item @strong{Option} @tab @strong{Kommentar}
-@item --with-server-suffix=-max @tab Zur @code{mysqld}-Versionszeichenkette ein Suffix hinzuf�gen.
-@item --with-bdb @tab Unterst�tzung f�r Berkeley-DB-(BDB)-Tabellen
-@item --with-innodb @tab Unterst�tzung f�r InnoDB-Tabellen.
-@item CFLAGS=-DUSE_SYMDIR @tab Symbolische-Links-Unterst�tzung f�r Windows.
-@end multitable
-
-Sie finden die MySQL-max-Bin�rdateien unter
-@uref{http://www.mysql.com/downloads/mysql-max-3.23.html}.
-
-Die Windows-MySQL-3.23-Bin�rdistribution beinhaltet sowohl die
-Standard-@code{mysqld.exe}-Bin�rdatei als auch die
-@code{mysqld-max.exe}-Bin�rdatei.
-@uref{http://www.mysql.com/downloads/mysql-3.23.html}.
-@xref{Windows installation}.
-
-Beachten Sie, dass, weil InnoDB und Berkeley-DB nicht f�r alle Plattformen
-verf�gbar sind, einige der @code{Max}-Bin�rdateien eventuell noch
-Unterst�tzung f�r diese beiden Typen haben. Sie k�nnen �berpr�fen, welche
-Tabellentypen unterst�tzt werden, indem Sie die folgende Anfrage ausf�hren:
-
-@example
-mysql> show variables like "have_%";
-+---------------+-------+
-| Variable_name | Value |
-+---------------+-------+
-| have_bdb | YES |
-| have_innodb | NO |
-| have_isam | YES |
-| have_raid | NO |
-| have_openssl | NO |
-+---------------+-------+
-@end example
-
-Die Bedeutung dieser Werte ist:
-
-@multitable @columnfractions .3 .7
-@item @strong{Wert} @tab @strong{Bedeutung}.
-@item YES @tab Die Option ist aktiviert und benutzbar.
-@item NO @tab MySQL ist nicht mit Unterst�tzung f�r diese Option kompiliert.
-@item DISABLED @tab Die xxxx-Option ist deaktiviert, weil @code{mysqld} mit @code{--skip-xxxx} gestartet wurde oder weil @code{mysqld} nicht mit allen notwendigen Optionen gestartet wurde, um die Option zu aktivieren. In diesem Fall sollte die @code{hostname.err}-Datei den Grund daf�r enthalten, warum die Option deaktiviert wurde.
-@end multitable
-
-@strong{HINWEIS}: Um InnoDB-Tabellen erzeugen zu k�nnen, @strong{M�SSEN}
-Sie Ihre Startoptionen editieren und zumindest die
-@code{innodb_data_file_path}-Option eingeben. @xref{InnoDB start}.
-
-Um bessere Performance f�r BDB-Tabellen zu erzielen, sollten Sie auch f�r
-diese einige Konfigurationsoptionen angeben. @xref{BDB start}.
-
-@code{safe_mysqld} versucht automatisch, eine @code{mysqld}-Bin�rdatei mit
-dem @code{-max}-Pr�fix zu starten. Das macht es sehr einfach, eine andere
-@code{mysqld}-Bin�rdatei in einer bestehenden Installation auszutesten.
-Lassen Sie einfach @code{configure} mit den Optionen, die Sie wollen,
-laufen, und installieren Sie dann die neue @code{mysqld}-Bin�rdatei als
-@code{mysqld-max} im selben Verzeichnis, wo Ihre alte
-@code{mysqld}-Bin�rdatei liegt. @xref{safe_mysqld, , @code{safe_mysqld}}.
-
-Der @code{mysqld-max}-RPM benutzt das oben erw�hnte
-@code{safe_mysqld}-Feature. Er installiert nur die ausf�hrbare Datei
-@code{mysqld-max} und @code{safe_mysqld} benutzt diese automatisch, wenn
-@code{safe_mysqld} neu gestartet wird.
-
-Folgende Tabelle zeigt, welche Tabellentypen unsere
-Standard-@strong{MySQL-Max}-Bin�rdateien beinhalten:
-
-@multitable @columnfractions .4 .3 .3
-@item @strong{System} @tab @strong{BDB} @tab @strong{InnoDB}
-@item AIX 4.3 @tab NEIN @tab JA
-@item HP-UX 11.0 @tab NEIN @tab JA
-@item Linux-Alpha @tab NEIN @tab JA
-@item Linux-Intel @tab JA @tab JA
-@item Linux-Ia64 @tab NEIN @tab JA
-@item Solaris-intel @tab NEIN @tab JA
-@item Solaris-sparc @tab JA @tab JA
-@item Caldera (SCO) OSR5 @tab JA @tab JA
-@item UnixWare @tab JA @tab JA
-@item Windows/NT @tab JA @tab JA
-@end multitable
-
-
-@node Client-Side Scripts, Log Files, Server-Side Scripts, MySQL Database Administration
-@c German node Clientseitige Skripte
-@section Clientseitige Skripte und Hilfsprogramme von MySQL
-
-
-
-@menu
-* Client-Side Overview::
-* mysql::
-* mysqladmin::
-* Using mysqlcheck::
-* mysqldump::
-* mysqlhotcopy::
-* mysqlimport::
-* mysqlshow::
-* perror::
-* Batch Commands::
-@end menu
-
-@node Client-Side Overview, mysql, Client-Side Scripts, Client-Side Scripts
-@c German node �berblick �ber die clientseitigen Skripte
-@subsection �berblick �ber die clientseitigen Skripte und Dienstprogramme
-
-@cindex Umgebungsvariablen
-@cindex Programme, Auflistung
-
-Alle MySQL-Clients, die mittels der @code{mysqlclient}-Bibliothek mit dem
-Server kommunizieren, benutzen folgende Umgebungsvariablen:
-
-@tindex @code{MYSQL_UNIX_PORT}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_UNIX_PORT}
-@tindex @code{MYSQL_TCP_PORT}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_TCP_PORT}
-@tindex @code{MYSQL_PWD}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_PWD}
-@tindex @code{MYSQL_DEBUG}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_DEBUG}
-@multitable @columnfractions .25 .75
-@item @strong{Name} @tab @strong{Beschreibung}
-@item @code{MYSQL_UNIX_PORT} @tab Der vorgabem��ige Socket, benutzt f�r Verbindungen zu @code{localhost}
-@item @code{MYSQL_TCP_PORT} @tab Der vorgabem��ige TCP/IP-Port
-@item @code{MYSQL_PWD} @tab Das vorgabem��ige Passwort
-@item @code{MYSQL_DEBUG} @tab Debug-Trace-Optionen beim Debuggen
-@item @code{TMPDIR} @tab Das Verzeichnis, in dem tempor�re Tabellen / Dateien erzeugt werden
-@end multitable
-
-Die Benutzung von @code{MYSQL_PWD} ist unsicher.
-@xref{Connecting}.
-
-@tindex @code{MYSQL_HISTFILE}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{MYSQL_HISTFILE}
-@tindex @code{HOME}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{HOME}
-@cindex History-Datei
-@cindex Kommandozeilen-History
-@tindex .mysql_History-Datei
-Der @file{mysql}-Client benutzt die Datei in der @code{MYSQL_HISTFILE}-
-Umgebungsvariablen genannte Datei, um die Kommandozeilen-History zu
-speichern. Der Vorgabewert f�r die History-Datei ist
-@file{$HOME/.mysql_history}, wobei @code{$HOME} der Wert der
-@code{HOME}-Umgebungsvariablen ist. @xref{Environment variables}.
-
-Alle MySQL-Programme haben viele verschiedene Optionen. Jedes
-MySQL-Programm stellt jedoch ein @code{--help}-Option zur Verf�gung, die
-Sie benutzen k�nnen, um eine vollst�ndige Beschreibung der verschiedenen
-Optionen des Programms zu erhalten. Probieren Sie zum Beispiel @code{mysql
---help} aus.
-
-Sie k�nnen die vorgabem��igen Optionen f�r alle Standard-Client-Programme
-mit einer Optionsdatei �berschreiben. @ref{Option files}.
-
-Die unten stehende Liste beschreibt kurz die MySQL-Programme:
-
-@table @code
-@cindex @code{myisamchk}
-@item myisamchk
-Dienstprogramm zur Beschreibung, Pr�fung, Optimierung und Reparatur von
-MySQL-Tabellen. Weil @code{myisamchk} viele Funktionen hat, ist es in einem
-eigenen Kapitel beschrieben. @xref{MySQL Database Administration}.
-
-@cindex @code{make_binary_distribution}
-@item make_binary_distribution
-Macht ein Bin�r-Release eines kompilierten MySQL. Dieses k�nnte �ber FTP an
-@file{/pub/mysql/Incoming} oder an @code{Support.mysql.com} geschickt
-werden, damit andere MySQL-Benutzer es benutzen k�nnen.
-
-@cindex @code{msql2mysql}
-@item msql2mysql
-Ein Shell-Skript, das @code{mSQL}-Programme zu MySQL konvertiert. Es deckt
-nicht alle F�lle ab, ist aber hilfreich, um mit dem Konvertieren
-anzufangen.
-
-@cindex @code{mysqlaccess}
-@item mysqlaccess
-Ein Skript, das die Zugriffsberechtigungen f�r eine Host-, Benutzer- und
-Datenbank-Kombination pr�ft.
-
-@cindex @code{mysqladmin}
-@item mysqladmin
-Dienstprogramm f�r die Durchf�hrung von Verwaltungsoperationen wie Erzeugen
-und L�schen von Datenbanken, Neulanden der Berechtigungstabellen,
-Zur�ckschreiben von Tabellen auf Platte und Neu�ffnen von Log-Dateien.
-@code{mysqladmin} kann auch benutzt werden, um Versionsnummer sowie Status-
-und Prozess-Informationen vom Server zu erhalten.
-@xref{mysqladmin, , @code{mysqladmin}}.
-
-@cindex @code{mysqlbug}
-@item mysqlbug
-Das MySQL-Bug-Bericht-Skript. Dieses Skript sollte immer benutzt werden,
-wenn Sie einen Bug-Bericht an die MySQL-Liste ausf�llen.
-
-@cindex @code{mysqld}
-@item mysqld
-Der SQL-Daemon. Dieser sollte immer laufen.
-
-@cindex @code{mysqldump}
-@item mysqldump
-Dumpt eine MySQL-Datenbank in eine Datei als SQL-Statements oder als
-Tabulator-separierte Textdateien. Verbesserte Freeware, urspr�nglich von
-Igor Romanenko. @xref{mysqldump, , @code{mysqldump}}.
-
-@cindex @code{mysqlimport}
-@item mysqlimport
-Importiert Textdateien in die jeweiligen Tabellen mittels @code{LOAD DATA
-INFILE}. @xref{mysqlimport, , @code{mysqlimport}}.
-
-@cindex @code{mysqlshow}
-@item mysqlshow
-Zeigt Informationen �ber Datenbanken, Tabellen, Spalten und Indexe an.
-
-@cindex @code{mysql_install_db}
-@item mysql_install_db
-Erzeugt die MySQL-Berechtigungstabellen mit vorgabem��igen Berechtigungen.
-Dieses Skript wird gew�hnlich nur einmal ausgef�hrt, wenn Sie MySQL das
-erste Mal auf einem System installieren.
-
-@cindex @code{replace}
-@item replace
-Ein Dienstprogramm, das von @code{msql2mysql} benutzt wird, aber auch
-dar�ber hinaus benutzt werden kann. @code{replace} �ndert Zeichenketten in
-Dateien oder auf der Standardeingabe. Benutzt eine finite Status-Maschine,
-um zuerst �bereinstimmung mit l�ngeren Zeichenketten zu finden. Kann
-benutzt werden, um Zeichenketten umzudrehen. Der folgende Befehl zum
-Beispiel dreht @code{a} und @code{b} in den angegebenen Dateien um:
-
-@example
-shell> replace a b b a --Datei1 Datei2 ...
-@end example
-@end table
-
-
-@node mysql, mysqladmin, Client-Side Overview, Client-Side Scripts
-@c German node mysql
-@subsection Das Kommandozeilen-Werkzeug
-
-@cindex Kommandozeilen-Werkzeug
-@cindex Werkzeuge, Kommandozeile
-@cindex Skripte
-@cindex @code{mysql}
-
-@code{mysql} ist eine einfache SQL-Shell (mit GNU
-@code{readline}-F�higkeiten). Sie unterst�tzt interaktiven und nicht
-interaktiven Gebrauch. Wenn sie interaktiv benutzt wird, werden
-Anfrageergebnisse in einem ASCII-Tabellenformat ausgegeben. Wenn sie nicht
-interaktiv benutzt wird (zum Beispiel als Filter), wird das Ergebnis in
-Tabulator-separiertem Format ausgegeben. (Das Ausgabeformat kann mit den
-Kommandozeilenoptionen ge�ndert werden.) Skripte k�nnen Sie einfach wie
-folgt laufen lassen:
-
-@example
-shell> mysql datenbank < skript.sql > ausgabe.tab
-@end example
-
-Wenn Sie Probleme haben, die auf ungen�genden Speicher beim Client
-zur�ckzuf�hren sind, benutzen Sie die @code{--quick}-Option! Diese zwingt
-@code{mysql}, @code{mysql_use_result()} statt @code{mysql_store_result()}
-zu benutzen, um die Ergebnismenge zu holen.
-
-Die Benutzung von @code{mysql} ist sehr einfach. Starten Sie es einfach wie
-folgt:
-@code{mysql datenbank} oder @code{mysql --user=benutzername
---password=ihr_passwort datenbank}. Geben Sie ein SQL-Statement ein,
-beenden Sie es mit @samp{;}, @samp{\g} oder @samp{\G}, und dr�cken Sie die
-Eingabetaste.
-
-@cindex @code{mysql}-Kommandozeilenoptionen
-@cindex Kommandozeilenoptionen, @code{mysql}
-@cindex Optionen, Kommandozeile, @code{mysql}
-@cindex Startparameter, @code{mysql}
-@code{mysql} unterst�tzt folgende Optionen:
-
-@table @code
-@cindex @code{help}, @code{mysql}-Option
-@item -?, --help
-Hilfetext ausgeben und beenden.
-
-@cindex @code{no-auto-rehash}, @code{mysql}-Option
-@item -A, --no-auto-rehash
-Kein automatisches Rehashing. Man muss 'rehash' benutzen, um Tabellen- und
-Feld-Vervollst�ndigung zu erhalten. Durch die Option wird mysql schneller
-gestartet.
-
-@cindex @code{batch}, @code{mysql}-Option
-@item -B, --batch
-Ergebnisse mit einem Tabulator als Trennzeichen ausgeben, jede
-Tabellenzeile auf einer neuen Zeile. Keine History-Datei benutzen.
-
-@cindex @code{character-sets-dir}, @code{mysql}-Option
-@item --character-sets-dir=...
-Verzeichnis, in dem sich die Zeichens�tze befinden.
-
-@cindex @code{compress}, @code{mysql}-Option
-@item -C, --compress
-Im Client-Server-Protokoll Komprimierung benutzen.
-
-@cindex @code{debug}, @code{mysql}-Option
-@item -#, --debug[=...]
-Debug loggen. Vorgabe ist 'd:t:o,/tmp/mysql.trace'.
-
-@cindex @code{database}, @code{mysql}-Option
-@item -D, --database=...
-Datenbank, die benutzt werden soll. Haupts�chlich n�tzlich in der
-@code{my.cnf}-Datei.
-
-@cindex @code{default-character-set}, @code{mysql}-Option
-@item --default-character-set=...
-Den vorgabem��igen Zeichensatz setzen.
-
-@cindex @code{execute}, @code{mysql}-Option
-@item -e, --execute=...
-Befehl ausf�hren und beenden. (Ausgabe wie bei --batch)
-
-@cindex @code{vertical}, @code{mysql}-Option
-@item -E, --vertical
-Ausgabe einer Anfrage (Zeilen) vertikal darstellen. Ohne diese Option
-k�nnen Sie diese Ausgabe auch dadurch erzwingen, dass Sie Ihre Statements
-mit @code{\G} beenden.
-
-@cindex @code{force}, @code{mysql}-Option
-@item -f, --force
-Weitermachen, auch wenn ein SQL-Fehler auftritt.
-
-@cindex @code{no-named-commands}, @code{mysql}-Option
-@item -g, --no-named-commands
-Benannte Befehle werden deaktiviert. Benutzen Sie nur die \*-Form, oder
-benutzen Sie benannte Befehle nur bei Zeilen, die mit einem Semikolon
-enden. Ab Version 10.9 startet der Client vorgabem��ig mit ANGESCHALTETER
-Option! Wenn die -g-Option angeschaltet ist, funktionieren Befehle im
-Langformat jedoch immer noch von der ersten Zeile aus.
-
-@cindex @code{enable-named-commands}, @code{mysql}-Option
-@item -G, --enable-named-commands
-Benannte Befehle sind @strong{angeschaltet}. Befehle im Langformat sind
-ebenso zugelassen wie die abgek�rzten \*-Befehle.
-
-@cindex @code{ignore-space}, @code{mysql}-Option
-@item -i, --ignore-space
-Leerzeichen nach Funktionsnamen ignorieren.
-
-@cindex @code{host}, @code{mysql}-Option
-@item -h, --host=...
-Connect to the given host.
-
-@cindex @code{html}, @code{mysql}-Option
-@item -H, --html
-HTML-Ausgabe produzieren.
-
-@cindex @code{skip-line-numbers}, @code{mysql}-Option
-@item -L, --skip-line-numbers
-Bei Fehlern keine Zeilennummer ausgeben. N�tzlich, wenn man mit
-Ergebnisdateien vergleichen will, die Fehlermeldungen enthalten.
-
-@cindex @code{no-pager}, @code{mysql}-Option
-@item --no-pager
-Pager deaktivieren und nach stdout ausgeben. Siehe auch interaktive Hilfe
-(\h).
-
-@cindex @code{no-tee}, @code{mysql}-Option
-@item --no-tee
-Ausgabedatei (Outfile) deaktivieren. Siehe auch interaktive Hilfe (\h).
-
-@cindex @code{unbuffered}, @code{mysql}-Option
-@item -n, --unbuffered
-Nach jeder Anfrage Buffer zur�ckschreiben (flush).
-
-@cindex @code{skip-column-names}, @code{mysql}-Option
-@item -N, --skip-column-names
-In Ergebnissen keine Spaltennamen ausgeben.
-
-@cindex @code{set-variable}, @code{mysql}-Option
-@item -O, --set-variable var=option
-Einer Variablen einen Wert zuweisen. @code{--help} listet Variablen auf.
-
-@cindex @code{one-database}, @code{mysql}-Option
-@item -o, --one-database
-Nur die vorgabem��ige Datenbank aktualisieren. Das ist n�tzlich, wenn man
-in der Update-Logdatei Aktualisierungen (Updates) auf eine andere Datenbank
-�berspringen will.
-
-@cindex @code{pager}, @code{mysql}-Option
-@item @code{--pager[=...]}
-Ausgabetyp. Vorgabe ist Ihre @code{ENV}-Variable @code{PAGER}. G�ltige
-Pager sind less, more, cat [> Dateiname] usw. Siehe auch interaktive Hilfe
-(\h). Diese Option funktioniert nicht im Stapelmodus. Der Pager
-funktioniert nur unter UNIX.
-
-@cindex @code{password}, @code{mysql}-Option
-@item -p[password], --password[=...]
-Passwort, das f�r die Verbindung zum Server benutzt wird. Wenn das Passwort
-nicht auf der Kommandozeile angegeben wird, wird eine Eingabeaufforderung
-daf�r ausgegeben. Beachten Sie: Wenn Sie die Kurzform @code{-p} benutzen,
-darf zwischen der Option und dem Passwort kein Leerzeichen stehen.
-
-@cindex @code{port}, @code{mysql}-Option
-@item -P --port=...
-TCP/IP-Portnummer, die f�r die Verbindung benutzt wird.
-
-@cindex @code{quick}, @code{mysql}-Option
-@item -q, --quick
-Ergebnisse nicht cachen, Zeile f�r Zeile ausgeben. Das kann den Server
-verlangsamen, wenn die Ausgabe verschoben wird. Keine History-Datei
-benutzen.
-
-@cindex @code{raw}, @code{mysql}-Option
-@item -r, --raw
-Spaltenwerte ohne Escape-Umwandlung schreiben. Benutzt f�r @code{--batch}.
-
-@cindex @code{silent}, @code{mysql}-Option
-@item -s, --silent
-Schweigsamer sein.
-
-@cindex @code{socket}, @code{mysql}-Option
-@item -S --socket=...
-Socket-Datei, die f�r die Verbindung benutzt wird.
-
-@cindex @code{table}, @code{mysql}-Option
-@item -t --table
-Ausgabe im Tabellenformat. Das ist die Vorgabe im Nicht-Stapelmodus.
-
-@cindex @code{debug-info}, @code{mysql}-Option
-@item -T, --debug-info
-Beim Verlassen einige Debug-Informationen ausgeben.
-
-@cindex @code{tee}, @code{mysql}-Option
-@item --tee=...
-Alles an die Ausgabedatei anh�ngen. Siehe auch interaktive Hilfe (\h).
-Funktioniert nicht im Stapelmodus.
-
-@cindex @code{user}, @code{mysql}-Option
-@item -u, --user=#
-Benutzer zum Einloggen, falls nicht der aktuelle UNIX-Benutzer.
-
-@cindex @code{safe-updates}, @code{mysql}-Option
-@item -U, --safe-updates[=#], --i-am-a-dummy[=#]
-L��t nur @code{UPDATE} und @code{DELETE} zu, die Schl�ssel benutzen. Siehe
-unten wegen weiterer Informationen �ber diese Option. Sie k�nnen diese
-Option zur�cksetzen, wenn Sie sie in Ihrer @code{my.cnf}-Datei haben, indem
-Sie @code{--safe-updates=0} benutzen.
-
-@cindex @code{verbose}, @code{mysql}-Option
-@item -v, --verbose
-Geschw�tzigere Ausgabe (-v -v -v ergibt das Tabellen-Ausgabeformat).
-
-@cindex @code{version}, @code{mysql}-Option
-@item -V, --version
-Versionsinformationen ausgeben und beenden.
-
-@cindex @code{wait}, @code{mysql}-Option
-@item -w, --wait
-Wenn die Verbindung geschlossen wurde, warten und noch einmal versuchen,
-statt abzubrechen.
-@end table
-
-Mit @code{-O} oder @code{--set-variable} k�nnen Sie auch die folgenden
-Variablen setzen:
-
-@cindex timeout, @code{connect_timeout}-Variable
-@cindex @code{connect_timeout}-Variable
-@cindex @code{max_allowed_packet}
-@cindex @code{net_buffer_length}
-@cindex @code{select_limit}
-@cindex @code{max_join_size}
-@multitable @columnfractions .3 .2 .5
-@item Variablenname @tab Vorgabe @tab Beschreibung
-@item connect_timeout @tab 0 @tab Anzahl von Sekunden, bevor die Verbindung wegen Zeit�berschreitung abgebrochen wird
-@item max_allowed_packet @tab 16777216 @tab Maximale Paketl�nge, die zum Server gesendet bzw. von diesem empfangen wird
-@item net_buffer_length @tab 16384 @tab Puffer f�r TCP/IP- und Socket-Kommunikation
-@item select_limit @tab 1000 @tab Automatisches Limit f�r SELECT bei Benutzung von --i-am-a-dummy
-@item max_join_size @tab 1000000 @tab Automatisches Limit f�r Zeilen in einem Join bei Benutzung von --i-am-a-dummy.
-@end multitable
-
-Wenn Sie 'help' auf der Kommandozeile eingeben, gibt @code{mysql} die
-Befehle aus, die es unterst�tzt:
-
-@cindex Befehle, Auflistung
-@example
-mysql> help
-
-MySQL-Befehle:
-help (\h) Diesen Text anzeigen.
-? (\h) Synonym f�r `help'.
-clear (\c) L�sch-Befehl.
-connect (\r) Erneut mit dem Server verbinden. Optionale Argumente sind db und host.
-edit (\e) Befehl mit $EDITOR editieren.
-ego (\G) Befehl an den MySQL-Server schicken, Ergebnis vertikal anzeigen.
-exit (\q) mysql beenden. Dasselbe wie quit.
-go (\g) Befehl an den MySQL-Server schicken.
-nopager (\n) Pager deaktivieren, nach stdout ausgeben.
-notee (\t) Nicht in die Ausgabedatei (Outfile) schreiben.
-pager (\P) PAGER [auf_pager] setzen. Anfrageergebnisse �ber PAGER ausgeben.
-print (\p) Aktuellen Befehl ausgeben.
-quit (\q) mysql beenden.
-rehash (\#) Vervollst�ndigungs-Hash neu aufbauen.
-source (\.) Eine SQLsSkriptdatei ausf�hren. Ben�tigt einen Dateinamen als Argument.
-status (\s) Statusinformationen vom Server abrufen.
-tee (\T) Ausgabedatei [auf_outfile] setzen. Alles an die angegebene Ausgabedatei anh�ngen.
-use (\u) Eine andere Datenbankbenutzung. Ben�tigt Datenbanknamen als Argument.
-@end example
-
-Bei diesen Befehlen funktioniert PAGER nur unter UNIX.
-
-@cindex status command
-Der @code{status}-Befehl gibt Ihnen einige Informationen �ber die
-Verbindung und den Server, den Sie benutzen. Wenn der Server im
-@code{--safe-updates}-Modus l�uft, gibt @code{status} auch die Werte der
-@code{mysql}-Variablen aus, die Ihre Anfragen beeinflussen.
-
-@cindex @code{safe-mode}-Befehl
-Eine n�tzliche Startoption f�r Anf�nger (eingef�hrt in MySQL-Version
-3.23.11) ist @code{--safe-updates} (oder @code{--i-am-a-dummy} f�r
-Benutzer, die irgendwann ein @code{DELETE FROM tabelle} eingeben, aber
-vergessen, die @code{WHERE}-Klausel) zu benutzen. Wenn Sie diese Option
-benutzen, schickt @code{mysql} beim �ffnen der Verbindung folgenden Befehl
-an den MySQL-Server:
-
-@example
-SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=#select_limit#,
- SQL_MAX_JOIN_SIZE=#max_join_size#"
-@end example
-
-Wobei @code{#select_limit#} und @code{#max_join_size#} Variablen sind, die
-auf der @code{mysql}-Kommandozeile gesetzt werden k�nnen.
-@c German FIX unsplit @xref
-@xref{SET OPTION}.
-
-Die Auswirkung davon ist folgende:
-
-@itemize @bullet
-@item
-@code{UPDATE}- oder @code{DELETE}-Statements ohne Schl�sselbeschr�nkung im
-@code{WHERE}-Teil sind nicht zugelassen. Man kann jedoch ein
-@code{UPDATE/DELETE} durch die Benutzung von @code{LIMIT} erzwingen:
-@example
-UPDATE tabelle SET not_key_column=# WHERE not_key_column=# LIMIT 1;
-@end example
-@item
-Alle gro�en Ergebnisse werden automatisch auf @code{#select_limit#} Zeilen
-begrenzt.
-@item
-@code{SELECT}'s, die wahrscheinlich mehr als @code{#max_join_size}
-Zeilenkombinationen durchgehen m�ssen, werden abgebrochen.
-@end itemize
-
-Einige n�tzliche Anmerkungen zum @code{mysql}-Client:
-
-Einige Daten sind lesbarer, wenn sie vertikal angezeigt werden statt auf
-die �bliche horizontale kasten�hnliche Art. Langer Text zum Beispiel, der
-Zeilenumbr�che beinhaltet, ist bei vertikaler Ausgabe meist viel einfacher
-zu lesen.
-
-@example
-mysql> select * from mails where length(txt) < 300 limit 300,1\G
-*************************** 1. row ***************************
- msg_nro: 3068
- date: 2000-03-01 23:29:50
-time_zone: +0200
-mail_from: Monty
- reply: monty@@no.spam.com
- mail_to: "Thimble Smith" <tim@@no.spam.com>
- sbj: UTF-8
- txt: >>>>> "Thimble" == Thimble Smith writes:
-
-Thimble> Hi. Meines Erachtens eine gute Idee. Kennt sich jemand mit UTF-8
-Thimble> oder Unicode aus? Ansonsten packe ich das auf meine TODO-Liste
-Thimble> und warte, was passiert.
-
-Ja, mach das bitte!
-
-Regards,
-Monty
- Datei: inbox-jani-1
- hash: 190402944
-1 row in set (0.09 sec)
-@end example
-
-@itemize @bullet
-@item
-Zum Mitloggen benutzen Sie die @code{tee}-Option. @code{tee} wird mit der
-Option @code{--tee=...} oder interaktiv auf der Kommandozeile mi dem Befehl
-@code{tee} gestartet. Alle Daten, die auf dem Bildschirm erscheinen, werden
-auch in die angegebene Datei geschrieben. Das kann auch f�r Debug-Zwecke
-sehr hilfreich sein. @code{tee} kann von der Kommandozeile aus mit dem
-Befehl @code{notee} deaktiviert werden. Wenn @code{tee} noch einmal
-eingegeben wird, wird wiederum mit dem Loggen begonnen. Ohne Parameter wird
-die vorherige Datei wiederum benutzt. Beachten Sie, dass @code{tee} die
-Ergebnisse nach jedem Befehl in die Datei zur�ckschreibt, direkt bevor die
-Kommandozeilenaufforderung f�r den n�chsten Befehl erscheint.
-
-@item
-Das Durchst�bern oder Durchsuchen der Ergebnisse im interaktiven Modus in
-UNIX-less, -more oder einem �hnlichen Programm ist jetzt m�glich mit der
-Option @code{--pager[=...]}. Ohne Argument aufgerufen sieht der
-@code{mysql}-Client in der Umgebungsvariablen PAGER nach und setzt
-@code{pager} auf diesen Wert. @code{pager} kann von der interaktiven
-Kommandozeile mit dem Befehl @code{pager} gestartet und mit @code{nopager}
-deaktiviert werden. Optional nimmt der Befehl ein Argument entgegen und
-setzt @code{pager} darauf. @code{pager} kann ohne Argument aufgerufen
-werden, aber das erfordert, dass die Option @code{--pager} benutzt wurde,
-ansonsten gibt @code{pager} in stdout aus. @code{pager} funktioniert nur
-unter UNIX, denn es benutzt die popen()-Funktion, die es unter Windows
-nicht gibt. Unter Windows kann statt dessen die @code{tee}-Option benutzt
-werden, wenngleich diese in manchen Situationen nicht ganz so handlich ist
-wie @code{pager}.
-
-@item
-Ein paar Tipps zu @code{pager}: Sie k�nnen es benutzen, um in eine Datei zu
-schreiben:
-@example
-mysql> pager cat > /tmp/log.txt
-@end example
-Die Ergebnisse werden nur in eine Datei geschrieben. Sie k�nnen auch
-Optionen an Programme �bergeben, die Sie mit @code{pager} zusammen benutzen
-wollen:
-@example
-mysql> pager less -n -i -S
-@end example
-Beachten Sie hierbei die Option '-S'. Beim Durchst�bern der Ergebnisse
-werden Sie diese wahrscheinlich als sehr n�tzlich erachten. Probieren Sie
-dei Option mit horizontaler Ausgabe (Befehle enden mit '\g', oder ';') und
-mit vertikaler Ausgabe (Befehle enden mit '\G') aus. Manchmal ist ein sehr
-breites Ergebnis schwer am Bildschirm zu lesen. Mit der Option -S f�r less
-k�nnen Sie die Ergebnisse im interaktiven less von links nach rechts
-durchst�bern, wobei verhindert wird, dass Zeilen, die l�nger sind als Ihre
-Bildschirmbreite, in die n�chste Zeile umgebrochen werden. Das kann ein
-Ergebnis sehr viel lesbarer gestalten. Sie k�nnen den Modus im interaktiven
-less an- und abschalten, wenn Sie '-S' benutzen. Siehe 'h' f�r weitere
-Hilfe zu less.
-
-@item
-Zum Schluss (falls Sie das nicht schon aus den oben aufgef�hrten Beispielen
-heraus gefunden haben ;-) k�nnen Sie sehr komplexe Dinge tun, um die
-Ergebnisse zu handhaben. Folgendes w�rde die Ergebnisse beispielsweise an
-zwei verschiedene Dateien in zwei unterschiedlichen Verzeichnissen
-schicken, auf zwei unterschiedlichen Festplatten, die auf /dr1 und /dr2
-gemountet sind, und dennoch die Ergebnisse �ber less am Bildschirm
-anzeigen:
-@example
-mysql> pager cat | tee /dr1/tmp/res.txt | tee /dr2/tmp/res2.txt | less -n -i -S
-@end example
-
-@item
-Sie k�nnen die obigen Funktionen auch kombinieren, indem Sie @code{tee}
-anschalten und @code{pager} auf 'less' setzen. Dann k�nnen Sie die
-Ergebnisse in 'less' durchst�bern und trotzdem wird alles zugleich an eine
-Datei angeh�ngt. Der Unterschied zwischen @code{UNIX tee}, was mit
-@code{pager} benutzt wird, und dem im @code{mysql}-Client eingebauten
-@code{tee} ist, dass das eingebaute @code{tee} sogar dann funktioniert,
-wenn kein @code{UNIX tee} verf�gbar ist. Dar�ber hinaus gibt das eingebaute
-@code{tee} alles, was mitgeloggt wird, auch am Bildschirm aus, wohingegen
-das @code{UNIX tee} in Verbindung mit @code{pager} nicht so viel mitloggt.
-Letztlich l��t sich das interaktive @code{tee} auch handlicher aus- und
-einschalten, wenn Sie teilweise mitloggen wollen, aber in der Lage sein,
-das Feature zwischendurch auszuschalten.
-@end itemize
-
-
-@node mysqladmin, Using mysqlcheck, mysql, Client-Side Scripts
-@c German node mysqladmin
-@subsection mysqladmin, Verwaltung eines MySQL-Servers
-
-@cindex Administration, Server
-@cindex Serververwaltung
-@cindex @code{mysladmn}
-
-Ein Dienstprogramm, um Verwaltungsoperationen durchzuf�hren. Die Syntax ist::
-
-@example
-shell> mysqladmin [OPTIONS] befehl [befehl-option] befehl ...
-@end example
-
-Sie erhalten eine Auflistung der Optionen, die Ihre
-@code{mysqladmin}-Version unterst�tzt, indem Sie @code{mysqladmin --help}
-ausf�hren.
-
-Das aktuelle @code{mysqladmin} unterst�tzt folgende Befehle:
-
-@table @code
-@item create datenbank
-Eine neue Datenbank erzeugen.
-
-@item drop datenbank
-Eine Datenbank und alle ihre Tabellen l�schen.
-
-@item extended-status
-Eine erweiterte Statusmeldung vom Server ausgeben.
-
-@item flush-hosts
-Alle gecacheten Hosts zur�ckschreiben (flush).
-
-@item flush-logs
-Alle Logs zur�ckschreiben (flush).
-
-@item flush-tables
-Alle Tabellen zur�ckschreiben (flush).
-
-@item flush-privileges
-Berechtigungstabellen neu laden (dasselbe wie reload).
-
-@item kill id,id,...
-MySQL-Threads killen.
-
-@item password
-Ein neues Passwort setzen. Altes Passwort zu neuem Passwort �ndern.
-
-@item ping
-�berpr�fen, ob mysqld lebt.
-
-@item processlist
-Auflistung aktiver Threads im Server.
-
-@item reload
-Berechtigungstabellen neu laden.
-
-@item refresh
-Alle Tabellen zur�ckschreiben (flush), Log-Dateien schlie�en und erneut
-�ffnen.
-
-@item shutdown
-Server herunter fahren.
-
-@item slave-start
-Slave-Replikations-Thread starten.
-
-@item slave-stop
-Slave-Replikations-Thread anhalten.
-
-@item status
-Eine kurze Statusmeldung vom Server ausgeben.
-
-@item variables
-Verf�gbare Variablen ausgeben.
-
-@item version
-Versionsinformation vom Server abrufen.
-@end table
-
-Alle Befehle k�nnen auf ihr eindeutiges Pr�fix abgek�rzt werden. Beispiel:
-
-@example
-shell> mysqladmin proc stat
-+----+-------+-----------+----+-------------+------+-------+------+
-| Id | User | Host | db | Command | Time | State | Info |
-+----+-------+-----------+----+-------------+------+-------+------+
-| 6 | monty | localhost | | Processlist | 0 | | |
-+----+-------+-----------+----+-------------+------+-------+------+
-Uptime: 10077 Threads: 1 Questions: 9 Slow queries: 0 Opens: 6 Flush tables: 1 Open tables: 2 Memory in use: 1092K Max memory used: 1116K
-@end example
-
-@cindex Status-Befehl, Ergebnisse
-Das Ergebnis des @code{mysqladmin status}-Befehls hat folgende Spalten:
-
-@cindex uptime
-@multitable @columnfractions .3 .7
-@item Uptime @tab Anzahl von Sekunden, seit der MySQL-Server hoch gefahren ist.
-@cindex Threads
-@item Threads @tab Anzahl aktiver Threads (Clients).
-@cindex questions
-@item Questions @tab Anzahl von Questions von Clients, seit @code{mysqld} gestartet wurde.
-@cindex slow queries
-@item Slow queries @tab Anfragen, die l�nger als @code{long_query_time} Sekunden ben�tigten. @xref{Slow query log}.
-@cindex opens
-@item Opens @tab Wie viele Tabellen @code{mysqld} ge�ffnet hat.
-@cindex flush tables
-@cindex tables, flush
-@item Flush Tables @tab Anzahl von @code{flush ...}-, @code{refresh}- und @code{reload}-Befehlen.
-@cindex open tables
-@item Open Tables @tab Anzahl der Tabellen, die gerade ge�ffnet sind.
-@cindex memory use
-@item Memory in use @tab Arbeitsspeicher, der direkt vom @code{mysqld}-Code beansprucht wird (nur verf�gbar, wenn MySQL mit --with-debug=full kompiliert wurde).
-@cindex max memory used
-@item Max memory used @tab Maximaler Arbeitsspeicher, der direkt vom @code{mysqld}-Code beansprucht wird (nur verf�gbar, wenn MySQL mit --with-debug=full kompiliert wurde).
-@end multitable
-
-Wenn Sie @code{mysqladmin shutdown} auf einem Socket ausf�hren (mit anderen
-Worten, auf dem Computer, wo @code{mysqld} l�uft), wartet
-@code{mysqladmin}, bis MySQL die @code{pid-file} entfernt hat, um
-sicherzustellen, dass der @code{mysqld}-Server korrekt angehalten wurde.
-
-
-@node Using mysqlcheck, mysqldump, mysqladmin, Client-Side Scripts
-@c German node mysqlcheck
-@subsection Benutzung von @code{mysqlcheck} f�r Tabellenwartung und Wiederherstellung nach Abst�rzen
-
-Ab MySQL-Version 3.23.38 k�nnen Sie ein neues Pr�f- und Reparatur-Werkzeug
-f�r @code{MyISAM}-Tabellen einsetzen. Der Unterschied zu @code{myisamchk}
-ist, dass @code{mysqlcheck} benutzt werden kann, wenn der
-@code{mysqld}-Server l�uft, wohingegen @code{myisamchk} nur benutzt werden
-sollte, wenn er nicht l�uft. Der Vorteil ist, dass Sie den Server zum
-Pr�fen oder zur Reparatur Ihrer Tabellen nicht mehr herunter fahren m�ssen.
-
-@code{mysqlcheck} benutzt die MySQL-Server-Befehle @code{CHECK},
-@code{REPAIR}, @code{ANALYZE} und @code{OPTIMIZE} auf eine f�r den Benutzer
-bequeme Weise.
-
-Es gibt drei alternative M�glichkeiten, @code{mysqlcheck} aufzurufen:
-
-@example
-shell> mysqlcheck [OPTIONS] datenbank [tabellen]
-shell> mysqlcheck [OPTIONS] --databases datenbank1 [datenbank2 datenbank3...]
-shell> mysqlcheck [OPTIONS] --all-databases
-@end example
-
-Daher kann es hinsichtlich der Auswahl von Datenbanken und Tabellen �hnlich
-wie @code{mysqldump} benutzt werden.
-
-@code{mysqlcheck} besitzt im Vergleich zu den anderen Clients ein
-besonderes Feature: Das vorgabem��ige Verhalten, Tabellen mit -c zu
-pr�fen, kann ge�ndert werden, indem die Bin�rdatei umbenannt wird. Wenn Sie
-nur ein Werkzeug haben wollen, das vorgabem��ig Tabellen repariert,
-kopieren Sie eine @code{mysqlcheck} mit einem neuen Namen auf Ihre
-Festplatte, n�mlich @code{mysqlrepair}, oder legen alternativ einen
-symbolischen Link auf @code{mysqlrepair} und benennen den Link
-@code{mysqlrepair}. Wenn Sie jetzt @code{mysqlrepair} aufrufen, repariert
-es vorgabem��ig Tabellen.
-
-Folgende Namen k�nnen Sie benutzen, um das vorgabem��ige Verhalten von
-@code{mysqlcheck} zu ver�ndern:
-
-@example
-mysqlrepair: Vorgabe-Option: -r (reparieren)
-mysqlanalyze: Vorgabe-Option: -a (analysieren)
-mysqloptimize: Vorgabe-Option: -o (optimieren)
-@end example
-
-Die verf�gbaren Optionen f�r @code{mysqlcheck} sind hier aufgelistet. Bitte
-pr�fen Sie mit @code{mysqlcheck --help}, welche davon Ihre Version
-unterst�tzt.
-
-@table @code
-@item -A, --all-databases
-Pr�ft alle Datenbanken. Das ist dasselbe wie --databases mit allen
-Datenbanken ausgew�hlt.
-@item -1, --all-in-1
-Statt f�r jede Tabelle eine Anfrage auszuf�hren, alle Anfragen in 1 Anfrage
-pro Datenbank ausf�hren. Tabellennamen stehen in einer durch Kommas
-getrennten Liste.
-@item -a, --analyze
-Analysiert die angegebene Tabelle.
-@item --auto-repair
-Wenn eine gepr�fte Tabelle besch�digt ist, sie automatisch reparieren. Die
-Reparatur wird durchgef�hrt, nachdem alle Tabellen gepr�ft wurden, falls
-besch�digte gefunden wurden.
-@item -#, --debug=...
-Debug-Log-Datei ausgeben. Das ist h�ufig 'd:t:o,filename'.
-@item --character-sets-dir=...
-Verzeichnis, wo Zeichens�tze gespeichert sind.
-@item -c, --check
-Tabelle auf Fehler pr�fen.
-@item -C, --check-only-changed
-Nur die Tabellen pr�fen, die seit der letzten Pr�fung ge�ndert wurden oder
-die nicht ordnungsgem�� geschlossen wurden.
-@item --compress
-Kompression im Client-Server-Protokoll benutzen.
-@item -?, --help
-Diese Nachricht ausgeben und beenden.
-@item -B, --databases
-Mehrere Datenbanken pr�fen. Beachten Sie den Unterschied im Gebrauch: In
-diesem Fall werden keine Tabellen angegeben. Alle Namensargumente werden
-als Datenbanknamen erachtet.
-@item --default-character-set=...
-Setzt den vorgabem��igen Zeichensatz.
-@item -F, --fast
-Nur Tabellen pr�fen, die nicht ordnungsgem�� geschlossen wurden.
-@item -f, --force
-Fortfahren, auch wenn ein SQL-Fehler auftritt.
-@item -e, --extended
-Wenn Sie diese Option beim Pr�fen von Tabellen benutzen, stellt das sicher,
-dass die Tabelle zu 100% konsistent ist, dauert aber sehr lange.
-Wenn Sie diese Option beim Reparieren von Tabellen benutzen, wird eine
-erweiterte Reparatur der Tabelle durchgef�hrt, was nicht nur sehr lange
-dauern kann, sondern auch viele 'M�ll'-Zeilen produzieren kann!
-@item -h, --host=...
-Mit dem angegebenen Host verbinden.
-@item -m, --medium-check
-Schneller als extended-check, findet aber nur 99,99% aller Fehler. Sollte
-in den meisten F�llen gen�gen.
-@item -o, --optimize
-Tabelle optimieren.
-@item -p, --password[=...]
-Passwort, das bei der Verbindung zum Server benutzt werden soll. Wenn das
-Passwort nicht angegeben wird, wird vom Terminal eine Eingabeaufforderung
-pr�sentiert.
-@item -P, --port=...
-Portnummer, die f�r Verbindungen zum Server benutzt werden soll.
-@item -q, --quick
-Wenn Sie diese Option beim Pr�fen von Tabellen benutzen, verhindert das,
-dass die Zeilen nach falschen Verkn�pfungen (Links) durchgesehen werden
-(gescannt). Das ist die schnellste Pr�fmethode.
-Wenn Sie diese Option beim Reparieren von Tabellen benutzen, wird versucht,
-nur den Index-Baum zu reparieren. Das ist die schnellste Reparaturmethode.
-@item -r, --repair
-Kann fast alles reparieren, ausser eindeutige Schl�ssel, die nicht
-eindeutig sind.
-@item -s, --silent
-Nur Fehlermeldungen ausgeben.
-@item -S, --socket=...
-Socket-Datei, die f�r die Verbindung benutzt werden soll.
-@item --tables
-Option --databases (-B) �berschreiben.
-@item -u, --user=#
-Benutzer zum Einloggen, falls nicht der aktuelle Unix-Benutzer.
-@item -v, --verbose
-Informationen �ber die verschiedenen Phasen ausgeben.
-@item -V, --version
-Versionsinformationen ausgeben und beenden.
-@end table
-
-
-@node mysqldump, mysqlhotcopy, Using mysqlcheck, Client-Side Scripts
-@c German node mysqldump
-@subsection mysqldump, Tabellenstrukturen und -daten dumpen
-
-@cindex dumpen, Datenbanken
-@cindex Datenbanken, dumpen
-@cindex Tabellen, dumpen
-@cindex Datensicherung, Datenbanken
-
-@cindex @code{mysqldump}
-Dienstprogramm, um eine Datenbank oder eine Sammlung von Datenbanken zu
-sichern oder um Daten auf einen anderen SQL-Server zu �bertragen (nicht
-notwendigerweise ein MySQL-Server). Der Dump enth�lt SQL-Statements, um
-Datenbanken und Tabellen zu erzeugen und / oder Tabellen mit Daten zu
-f�llen.
-
-Wenn Sie eine Datensicherung auf dem Server machen, sollten Sie in Betracht
-ziehen, statt dessen @code{mysqlhotcopy} zu benutzen. @xref{mysqlhotcopy, ,
-@code{mysqlhotcopy}}.
-
-@example
-shell> mysqldump [OPTIONS] datenbank [tabellen]
-OR mysqldump [OPTIONS] --databases [OPTIONS] datenbank1 [datenbank2 datenbank3...]
-OR mysqldump [OPTIONS] --all-databases [OPTIONS]
-@end example
-
-Wenn Sie keine Tabellen angeben oder @code{--databases} bzw.
-@code{--all-databases} benutzen, wird die gesamte Datenbank (bzw. werden
-alle Datenbanken) gedumpt.
-
-Sie erhalten eine Auflistung der Optionen, die Ihre Version von
-@code{mysqldump} unterst�tzt, indem Sie @code{mysqldump --help} eingeben.
-
-Wenn Sie @code{mysqldump} ohne @code{--quick} oder @code{--opt} ausf�hren,
-beachten Sie, dass @code{mysqldump} die gesamte Ergebnismenge in den
-Arbeitsspeicher l�dt, bevor das Ergebnis gedumpt wird. Das kann zu
-Problemen f�hren, wenn Sie eine gro�e Datenbank dumpen.
-
-Wenn Sie eine neue Version des @code{mysqldump}-Programms benutzen und
-einen Dump erzeugen, der in einen sehr alten MySQL-Server eingelesen werden
-soll, sollten Sie die @code{--opt}- und @code{-e}-Optionen nicht benutzen.
-
-@code{mysqldump} unterst�tzt folgende Optionen:
-
-@table @code
-@item --add-locks
-F�hrt @code{LOCK TABLES} vor und @code{UNLOCK TABLE} nach jedem
-Tabellen-Dump durch (um schnelleres Einf�gen in MySQL zu erreichen).
-@item --add-drop-table
-Ein @code{drop table} vor jedem @code{create}-Statement hinzuf�gen.
-@item -A, --all-databases
-Alle Datenbanken dumpen. Das ist dasselbe wie @code{--databases} mit allen
-Datenbanken ausgew�hlt.
-@item -a, --all
-Alle MySQL-spezifischen Optionen f�r @code{create} benutzen.
-@item --allow-keywords
-Erzeugung von Spaltennamen zulassen, die Schl�sselw�rter sind. Das
-funktioniert, indem jedem Spaltenname der Tabellenname als Pr�fix angef�gt
-wird.
-@item -c, --complete-insert
-Vollst�ndige @code{insert}-Statements benutzen (mit Spaltennamen).
-@item -C, --compress
-Alle Informationen zwischen Client und Server komprimieren, wenn bei
-Kompression unterst�tzen.
-@item -B, --databases
-Mehrere Datenbanken pr�fen. Beachten Sie den Unterschied im Gebrauch: In
-diesem Fall werden keine Tabellen angegeben. Alle Namensargumente werden
-als Datenbanknamen erachtet. Vor jeder Ausgabe einer neuen Datenbank wird
-@code{USE datenbank;} eingef�gt.
-@item --delayed
-Zeilen mit dem @code{INSERT DELAYED}-Befehl einf�gen.
-@item -e, --extended-insert
-Die neue mehrzeilige @code{INSERT}-Syntax benutzen. (Ergibt kompaktere und
-schnellere inserts-Statements.)
-@item -#, --debug[=option_string]
-Programmbenutzung tracen (f�r Debug-Zwecke).
-@item --help
-Hilfetext ausgeben und beenden.
-@item --fields-terminated-by=...
-@itemx --fields-enclosed-by=...
-@itemx --fields-optionally-enclosed-by=...
-@itemx --fields-escaped-by=...
-@itemx --lines-terminated-by=...
-Diese Optionen werden zusammen mit der @code{-T}-Option benutzt und haben
-dieselbe Bedeutung wie die entsprechenden Klauseln f�r @code{LOAD DATA
-INFILE}. @xref{LOAD DATA, , @code{LOAD DATA}}.
-@item -F, --flush-logs
-Log-Datei im MySQL-Server zur�ckschreiben, bevor der Dump durchgef�hrt
-wird.
-@item -f, --force,
-Fortfahren, selbst wenn beim Dump einer Tabelle ein SQL-Fehler auftritt.
-@item -h, --host=..
-Daten auf dem MySQL-Server auf dem genannten Host dumpen. Der
-vorgabem��ige Host ist @code{localhost}.
-@item -l, --lock-tables.
-Alle Tabellen sperren, bevor mit dem Dump begonnen wird. Die Tabellen
-werden mit @code{READ LOCAL} gesperrt, um gleichzeitiges Einf�gen zu
-erlauben (bei @code{MyISAM}-Tabellen).
-@item -n, --no-create-db
-'CREATE DATABASE /*!32312 IF NOT EXISTS*/ datenbank;' wird nicht in die
-Ausgabe gschrieben. Diese Zeile wird ansonsten hinzugef�gt, wenn
---databases oder --all-databases angegeben wurde.
-@item -t, --no-create-info
-Keine Tabellenerzeugungsinformation schreiben (das @code{CREATE
-TABLE}-Statement).
-@item -d, --no-data
-Keine Zeileninformationen f�r die Tabelle schreiben. Das ist sehr
-n�tzlich, wenn Sie lediglich einen Dump der Tabellenstruktur erzeugen
-wollen.
-@item --opt
-Dasselbe wie @code{--quick --add-drop-table --add-locks --extended-insert
---lock-tables}. Das sollte den schnellstm�glichen Dump zum Einlesen in
-einen MySQL-Server ergeben.
-@item -pihr_passwort, --password[=ihr_passwort]
-Das Passwort, das f�r die Verbindung zum Server benutzt werden soll. Wenn
-Sie keinen @samp{=ihr_passwort}-Teil angeben, zeigt @code{mysqldump} eine
-Eingabeaufforderung f�r Ihr Passwort.
-@item -P port_num, --port=port_num
-Die TCP/IP-Portnummer, die f�r die Verbindung zu einem Host benutzt werden
-soll. (Diese wird f�r Verbindungen zu Hosts ausser @code{localhost}
-benutzt, f�r den Unix-Sockets benutzt werden.)
-@item -q, --quick
-Anfrage nicht puffern, sondern direkt zu stdout dumpen. Benutzt f�r die
-Durchf�hrung @code{mysql_use_result()}.
-@item -r, --result-file=...
-Direkte Ausgabe in die angegebene Datei. Diese Ausgabe sollte bei MS-DOS
-benutzt werden, weil sie verhindert, dass das Zeichen f�r neue Zeile '\n'
-in '\n\r' (new line + carriage return) umgewandelt werden.
-@item -S /pfad/zu/socket, --socket=/pfad/zu/socket
-Die Socket-Datei, die f�r die Verbindung zu @code{localhost} benutzt werden
-soll (was der vorgabem��ige Host ist).
-@item --tables
-�berschreibt die Option --databases (-B).
-@item -T, --tab=pfad-zu-einem-verzeichnis
-Erzeugt eine @code{tabelle.sql}-Datei, die die SQL-CREATE-Befehle enth�lt,
-und eine @code{tabelle.txt}-Datei, die die Daten enth�lt, f�r jede
-angegebene Tabelle. @strong{HINWEIS}: Das funktioniert nur, wenn
-@code{mysqldump} auf derselben Maschine l�uft wie der @code{mysqld}-Daemon.
-Das Format der @code{.txt}-Datei h�ngt von den @code{--fields-xxx}- und
-@code{--lines--xxx}-Optionen ab.
-@item -u benutzername, --user=benutzername
-Der MySQL-Benutzername, der f�r die Verbindung zum Server benutzt werden
-soll. Der Vorgabewert ist Ihr Unix-Loginname.
-@item -O var=option, --set-variable var=option
-Den Wert einer Variablen setzen. Die m�glichen Werte sind unten aufgef�hrt.
-@item -v, --verbose
-Geschw�tziger Modus. Gibt mehr Informationen dar�ber aus, was das Programm
-tut.
-@item -V, --version
-Versionsinformationen ausgeben und beenden.
-@item -w, --where='wo-bedingung'
-Nur ausgew�hlte Datens�tze dumpen. Beachten Sie, dass Anf�hrungszeichen
-zwingend erforderlich sind:
-
-@example
-"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
-@end example
-@item -O net_buffer_length=#, where # < 16M
-Beim Erzeugen von mehrzeiligen insert-Statements (wie bei der Option
-@code{--extended-insert} oder @code{--opt}), erzeugt @code{mysqldump}
-Zeilen bis zur L�nge von @code{net_buffer_length}. Wenn Sie diesen Wert
-herauf setzen, m�ssen Sie sicherstellen, dass die
-@code{max_allowed_packet}-Variable im MySQL-Server gr��er als
-@code{net_buffer_length} ist.
-@end table
-
-Der h�ufigste Gebrauch von @code{mysqldump} dient wahrscheinlich der
-Herstellung einer Datensicherung ganzer Datenbanken. @xref{Backup}.
-
-@example
-mysqldump --opt datenbank > datensicherung.sql
-@end example
-
-Diese k�nnen Sie zur�ck in MySQL einlesen mit:
-
-@example
-mysql datenbank < datensicherung.sql
-@end example
-
-oder
-
-@example
-mysql -e "source /pfad-zur-datensicherung/datensicherung.sql" datenbank
-@end example
-
-Ausserdem ist es sehr n�tzlich, um einen anderen MySQL-Server mit
-Informationen aus einer Datenbank zu f�llen:
-
-@example
-mysqldump --opt datenbank | mysql ---host=entfernter-host -C datenbank
-@end example
-
-Es ist m�glich, mehrere Datenbanken mit einem Befehl zu dumpen:
-
-@example
-mysqldump --databases datenbank1 [datenbank2 datenbank3...] > meine_datenbanken.sql
-@end example
-
-Wenn Sie alle Datenbanken dumpen wollen, benutzen Sie:
-
-@example
-mysqldump --all-databases > alle_datenbanken.sql
-@end example
-
-
-@node mysqlhotcopy, mysqlimport, mysqldump, Client-Side Scripts
-@c German node mysqlhotcopy
-@subsection mysqlhotcopy, MySQL-Datenbanken und Tabellen kopieren
-
-@cindex dumpen, Datenbanken
-@cindex Datenbanken, dumpen
-@cindex Tabellen, dumpen
-@cindex Datensicherung, Datenbanken
-
-@code{mysqlhotcopy} ist a perl Skript that uses @code{LOCK TABLES},
-@code{FLUSH TABLES} und @code{cp} oder @code{scp} to quickly make a backup
-of a Datenbank. It's the fastest way to make a backup of the Datenbank,
-of single Tabellen but it can only be run on the same machine where the
-Datenbankverzeichnisse are.
-
-@example
-mysqlhotcopy datenbank [/pfad/zu/new_Verzeichnis]
-
-mysqlhotcopy datenbank_1 ... datenbank_n /pfad/zu/new_Verzeichnis
-
-mysqlhotcopy datenbank./regex/
-@end example
-
-@code{mysqlhotcopy} unterst�tzt folgende Optionen:
-
-@table @code
-@item -?, --help
-Hilfe ausgeben und beenden.
-@item -u, --user=#
-Benutzername zum Einloggen.
-@item -p, --password=#
-Passwort f�r die Verbindung zum Server.
-@item -P, --port=#
-Port zur Verbindung zum lokalen Server.
-@item -S, --socket=#
-Socket zur Verbindung zum lokalen Server.
-@item --allowold
-Nicht abbrechen, wenn das Ziel bereits existiert (sondern in _old umbenennen)
-@item --keepold
-Vorheriges (jetzt umbenanntes) Ziel nach dem Durchf�hren nicht l�schen.
-@item --noindices
-Keine kompletten Index-Dateien in die Kopie einf�gen, um die Datensicherung
-kleiner und schneller zu machen. Die Indexe k�nnen sp�ter mit
-@code{myisamchk -rq.} neu aufgebaut werden.
-@item --method=#
-Kopiermethode (@code{cp} oder @code{scp}).
-@item -q, --quiet
-Keine Meldungen ausgeben, ausser bei Fehlern.
-@item --debug
-Debug anschalten.
-@item -n, --dryrun
-Aktionen berichten, ohne sie auszuf�hren.
-@item --regexp=#
-Alle Datenbanken mit �bereinstimmenden regexp-Namen sichern.
-@item --suffix=#
-Suffix f�r Namen kopierter Datenbanken.
-@item --checkpoint=#
-Checkpoint-Eingang in angegebene datenbank.tabelle einf�gen.
-@item --flushlog
-Log-Dateien zur�ckschreiben, sobald alle Tabellen gesperrt sind.
-@item --tmpdir=#
-Tempor�res Verzeichnis (anstelle von /tmp).
-@end table
-
-Geben Sie @code{perldoc mysqlhotcopy} ein, um eine vollst�ndigere
-Dokumentation von @code{mysqlhotcopy} zu erhalten.
-
-@code{mysqlhotcopy} liest die Gruppen @code{[client]} und
-@code{[mysqlhotcopy]} aus den Optionsdateien.
-
-Damit Sie @code{mysqlhotcopy} ausf�hren k�nnen, ben�tigen Sie Schreibrechte
-im Datensicherungsverzeichnis, @code{SELECT}-Berechtigung auf die Tabellen,
-die Sie kopieren wollen, und die MySQL-@code{Reload}-Berechtigung (damit
-Sie @code{FLUSH TABLES} ausf�hren k�nnen).
-
-
-@node mysqlimport, mysqlshow, mysqlhotcopy, Client-Side Scripts
-@c German node mysqlimport
-@subsection mysqlimport, Daten aus Textdateien importieren
-
-@cindex importieren, Daten
-@cindex Daten, importieren
-@cindex Dateien, Text-
-@cindex Textdateien, importieren
-@cindex @code{mysqlimport}
-
-@code{mysqlimport} stellt eine Kommandozeilen-Schnittstelle f�r das
-@code{LOAD DATA INFILE} SQL-Statement zur Verf�gung. Die meisten Optionen
-f�r @code{mysqlimport} entsprechen denselben Optionen f�r @code{LOAD DATA
-INFILE}. @xref{LOAD DATA, , @code{LOAD DATA}}.
-
-@code{mysqlimport} wird wie folgt aufgerufen:
-
-@example
-shell> mysqlimport [optionen] datenbank textdatei1 [textdatei2....]
-@end example
-
-Bei jeder Textdatei, die auf der Kommandozeile angegeben wird, entfernt
-@code{mysqlimport} jegliche Erweiterungen vom Dateinamen und benutzt das
-Ergebnis, um festzulegen, in welche Tabelle der Dateiinhalt importiert
-werden soll. Dateien namens @file{patient.txt}, @file{patient.text} und
-@file{patient} beispielsweise w�rden alle in eine Tabelle namens
-@code{patient} importiert werden.
-
-@code{mysqlimport} unterst�tzt folgende Optionen:
-
-@table @code
-@item -c, --columns=...
-Diese Option nimmt ein durch Kommas getrennte Auflistung von Feldnamen als
-Argument entgegen. Die Feldliste wird benutzt, um einen korrekten
-@code{LOAD DATA INFILE}-Befehl zu erzeugen, der an MySQL durchgereicht
-wird. @xref{LOAD DATA, , @code{LOAD DATA}}.
-
-@item -C, --compress
-Komprimiert alle Informationen zwischen Client und Server, wenn bei
-Kompression unterst�tzen.
-
-@item -#, --debug[=option_string]
-Programmbenutzung tracen (zum Debuggen).
-
-@item -d, --delete
-Tabelle leeren, bevor die Textdatei importiert wird.
-
-@item --fields-terminated-by=...
-@itemx --fields-enclosed-by=...
-@itemx --fields-optionally-enclosed-by=...
-@itemx --fields-escaped-by=...
-@itemx --lines-terminated-by=...
-Diese Optionen haben dieselbe Bedeutung wie die entsprechenden Klauseln f�r
-@code{LOAD DATA INFILE}. @xref{LOAD DATA, , @code{LOAD DATA}}.
-
-@item -f, --force
-Fehler ignorieren. Wenn beispielsweise eine Tabelle f�r eine Textdatei
-nicht existiert, mit den verbleibenden Dateien weitermachen. Ohne
-@code{--force} wird @code{mysqlimport} beendet, wenn die Tabelle nicht
-existiert.
-
-@item --help
-Hilfetext ausgeben und beenden.
-
-@item -h host_name, --host=host_name
-Daten in den MySQL-Server auf dem genannten Host importieren. Der
-vorgabem��ige Host ist @code{localhost}.
-
-@item -i, --ignore
-Siehe Beschreibung f�r die @code{--replace}-Option.
-
-@item -l, --lock-tables
-@strong{ALLE} Tabellen f�r Schreibvorg�nge sperren, bevor irgend welche
-Textdateien verarbeitet werden. Das stellt sich, dass alle Tabellen auf dem
-Server synchronisiert werden.
-
-@item -L, --local
-Liest Eingabedateien vom Client. Vorgabem��ig wird angenommen, dass
-Textdateien auf dem Server liegen, wenn Sie sich �ber @code{localhost}
-verbinden (was der vorgabem��ige Host ist).
-
-@item -pihr_passwort, --password[=ihr_passwort]
-Das Passwort, das f�r die Verbindung zum Server benutzt werden soll. Wenn
-Sie keinen @samp{=ihr_passwort}-Teil angeben, zeigt @code{mysqlimport}
-eine Eingabeaufforderung f�r Ihr Passwort.
-
-@item -P port_num, --port=port_num
-Die TCP/IP-Portnummer, die f�r die Verbindung zu einem Host benutzt werden
-soll. (Diese wird f�r Verbindungen zu Hosts ausser @code{localhost}
-benutzt, f�r den Unix-Sockets benutzt werden.)
-
-@item -r, --replace
-Die @code{--replace}- und @code{--ignore}-Optionen steuern die Handhabung
-von Eingabe-Datens�tzen, die bestehende Datens�tze auf eindeutigen
-Schl�sseln duplizieren w�rden. Wenn Sie @code{--replace} angeben, werden
-bestehende Zeilen ersetzt, die denselben eindeutigen Schl�sselwert
-besitzen. Wenn Sie @code{--ignore} angeben, werden Zeilen, die eine
-bestehende Zeile duplizieren w�rden, �bersprungen. Wenn Sie keine der
-beiden Optionen angeben, tritt ein Fehler auf, wenn ein doppelter
-Schl�sseleintrag gefunden wird, und der Rest der Textdatei wird ignoriert.
-
-@item -s, --silent
-Schweigsamer Modus. Ausgaben erfolgen nur, wenn Fehler auftreten.
-
-@item -S /pfad/zu/socket, --socket=/pfad/zu/socket
-Die Socket-Datei, die f�r die Verbindung zu @code{localhost} benutzt werden
-soll (der der vorgabem��ige Host ist).
-
-@item -u benutzername, --user=benutzername
-Der MySQL-Benutzername, der f�r die Verbindung zum Server benutzt werden
-soll. Der Vorgabewert ist Ihr Unix-Loginname.
-
-@item -v, --verbose
-Geschw�tziger Modus. Mehr Informationen dar�ber ausgeben, was das Programm
-macht.
-
-@item -V, --version
-Versionsinformationen ausgeben und beenden.
-@end table
-
-Hier ist ein Beispiel f�r die Benutzung von @code{mysqlimport}:
-
-@example
-$ mysql --version
-mysql Ver 9.33 Distrib 3.22.25, for pc-linux-gnu (i686)
-$ uname -a
-Linux xxx.com 2.2.5-15 #1 Mon Apr 19 22:21:09 EDT 1999 i586 unknown
-$ mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
-$ ed
-a
-100 Max Sydow
-101 Graf Dracula
-.
-w imptest.txt
-32
-q
-$ od -c imptest.txt
-0000000 1 0 0 \t M a x S y d o w \n 1 0
-0000020 1 \t G r a f D r a c u l a \n
-0000040
-$ mysqlimport --local test imptest.txt
-test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
-$ mysql -e 'SELECT * FROM imptest' test
-+------+---------------+
-| id | n |
-+------+---------------+
-| 100 | Max Sydow |
-| 101 | Graf Dracula |
-+------+---------------+
-@end example
-
-
-@node mysqlshow, perror, mysqlimport, Client-Side Scripts
-@c German node mysqlshow
-@subsection Datenbanken, Tabellen und Spalten anzeigen
-
-@cindex Datenbanken, anzeigen
-@cindex anzeigen, Datenbankinformationen
-@cindex Tabellen, anzeigen
-@cindex Spalten, anzeigen
-@cindex Anzeigen, Datenbankinformationen
-
-@code{mysqlshow} wird benutzt, um schnell nachzusehen, welche Datenbanken,
-Tabellen und Tabellenspalten es gibt.
-
-Mit dem @code{mysql}-Programm k�nnen Sie dieselben Information mit den
-@code{SHOW}-Befehlen erhalten. @xref{SHOW}.
-
-@code{mysqlshow} wird wie folgt aufgerufen:
-
-@example
-shell> mysqlshow [optionen] [datenbank [tabelle [spalte]]]
-@end example
-
-@itemize @bullet
-@item
-Wenn keine Datenbank angegeben wird, werden alle passenden Datenbanken
-gezeigt.
-@item
-Wenn keine Tabelle angegeben wird, werden alle passenden Tabellen in der
-Datenbank gezeigt.
-@item
-Wenn keine Spalte angegeben wird, werden alle passenden Spalten und
-Spaltentypen in der Tabelle gezeigt.
-@end itemize
-
-Beachten Sie, dass Sie in neueren MySQL-Versionen nur die Datenbanken,
-Tabellen und Spalten sehen k�nnen, f�r die Sie irgend welche Berechtigungen
-haben.
-
-Wenn das letzte Argument einen Shell- oder SQL-Platzhalter enth�lt
-(@code{*}, @code{?}, @code{%} oder @code{_}), wird nur das gezeigt, was dem
-Platzhalter entspricht. Das kann zu Verwirrung f�hren, wenn Sie Spalten
-einer Tabelle anzeigen, die einen Unterstrich (@code{_}) enthalten, weil
-Ihnen @code{mysqlshow} in diesem Fall nur die Tabellennamen zeigt, die dem
-Muster entsprechen. Das kann leicht durch Hinzuf�gen eines zus�tzlichen
-@code{%} am Ende der Kommandozeile (als separates Argument) behoben werden.
-
-
-@node perror, Batch Commands, mysqlshow, Client-Side Scripts
-@c German node perror
-@subsection perror, Erkl�rung der Fehler-Codes
-
-@cindex Fehlermeldungen, anzeigen
-@cindex perror
-
-@code{perror} wird benutzt, um Fehlermeldungen auszugeben. @code{perror}
-wird wie folgt aufgerufen:
-
-@example
-shell> perror [optionen] [ERRORCODE [ERRORCODE...]]
-
-For example:
-
-shell> perror 64 79
-Error code 64: Machine ist not on the network
-Error code 79: Can not access a needed shared library
-@end example
-
-@code{perror} wird benutzt, um eine Beschreibung f�r einen
-Systemfehler-Code anzuzeigen, oder einen Fehler-Code des
-MyISAM/ISAM-Tabellen-Handlers. Die Fehlermeldungen sind haupts�chlich
-abh�ngig vom Betriebssystem.
-
-
-@node Batch Commands, , perror, Client-Side Scripts
-@c German node Stapelbefehle
-@subsection Wie SQL-Befehle aus einer Textdatei laufen gelassen werden
-
-@c FIX add the 'source' befehl
-
-Der @code{mysql}-Client wird typischerweise interaktiv benutzt, wie folgt:
-
-@example
-shell> mysql datenbank
-@end example
-
-Es ist jedoch m�glich, Ihre SQL-Befehle in eine Datei zu schreiben und
-@code{mysql} anzuweisen, ihre Eingaben aus dieser Datei zu lesen. Um das zu
-tun, erzeugen Sie eine Textdatei @file{textdatei}, die die Befehle enth�lt,
-die Sie ausf�hren wollen. Dann rufen Sie @code{mysql} wie gezeigt auf:
-
-@example
-shell> mysql datenbank < textdatei
-@end example
-
-Sie k�nnen Ihre Textdatei auch mit einem @code{USE datenbank}-Statement
-beginnen lassen. In diesem Fall ist es nicht notwendig, den Datenbanknamen
-auf der Kommandozeile anzugeben:
-
-@example
-shell> mysql < textdatei
-@end example
-
-@xref{Client-Side Scripts}.
-
-
-@node Log Files, Replication, Client-Side Scripts, MySQL Database Administration
-@c German node Log-Dateien
-@section Die MySQL-Log-Dateien
-
-@cindex Log-Dateien
-
-MySQL hat mehrere unterschiedliche Log-Dateien, die Ihnen helfen k�nnen
-herauszufinden, was innerhalb @code{mysqld} vor sich geht:
-
-@multitable @columnfractions .3 .7
-@item Die Fehler-Log-Datei @tab Probleme, die beim Start, beim Laufenlassen oder beim Anhalten von @code{mysqld} auftreten.
-@item Die ISAM-Log-Datei @tab Loggt alle �nderungen in ISAM-Tabellen mit. Wird nur benutzt, um den ISAM-Code zu debuggen.
-@item Die Anfragen-Log-Datei @tab Hergestellte Verbindungen und ausgef�hrte Anfragen.
-@item Die Update-Log-Datei @tab Veraltet: Speichert Statements, die Daten ver�ndern.
-@item Die Bin�r-Log-Datei @tab Speichert alle Statements, die etwas �ndern. Wird auch f�r Replikation benutzt.
-@item Die Slow-Log-Datei @tab Speichert alle Anfragen, die l�nger als @code{long_query_time} zur Ausf�hrung ben�tigten oder keine Indexe benutzten.
-@end multitable
-
-Alle Log-Dateien liegen im @code{mysqld} Daten-Verzeichnis. Sie k�nnen
-@code{mysqld} zwingen, die Log-Dateien neu zu �ffnen (oder in manchen
-F�llen auf eine neue Log-Datei umzuschalten), indem Sie @code{FLUSH LOGS}
-ausf�hren. @xref{FLUSH}.
-
-
-
-@menu
-* Error log::
-* Query log::
-* Update log::
-* Binary log::
-* Slow query log::
-* Log file maintenance::
-@end menu
-
-@node Error log, Query log, Log Files, Log Files
-@c German node Fehler-Log-Datei
-@subsection Die Fehler-Log-Datei
-
-@code{mysqld} schreibt alle Fehler nach stderr, die das
-@code{safe_mysqld}-Skript in eine Datei namens @code{'hostname'.err}
-umleitet. (Unter Windows schreibt @code{mysqld} direkt in die Datei
-@file{\mysql\data\mysql.err}.)
-
-Diese enth�lt Informationen, wann @code{mysqld} gestartet und angehalten
-wurde und zus�tzlich jeden kritischen Fehler, der w�hrend der Laufzeit
-passierte. Wenn @code{mysqld} unerwartet stirbt und @code{safe_mysqld} ihn
-neu starten muss, schreibt @code{safe_mysqld} eine @code{restarted
-mysqld}-Zeile in diese Datei. Diese Log-Datei enth�lt auch Warnungen, wenn
-@code{mysqld} eine Tabelle bemerkt, die automatisch gepr�ft oder repariert
-werden muss.
-
-Auf manchen Betriebssystemen enth�lt die Fehler-Log-Datei einen
-Stack-Trace, wo @code{mysqld} starb. Dieser kann benutzt werden, um
-herauszufinden, wo @code{mysqld} starb. @xref{Using stack trace}.
-
-
-@node Query log, Update log, Error log, Log Files
-@c German node Anfragen-Log-Datei
-@subsection Die allgemeine Anfragen-Log-Datei
-
-@cindex Anfragen-Log-Datei
-@cindex Dateien, Anfragen-Log-Datei
-
-Wenn Sie wissen wollen, was innerhalb @code{mysqld} geschieht, sollten Sie
-ihn mit @code{--log[=file]} starten. Diese Option loggt alle Verbindungen
-und Anfragen in die Log-Datei (vorgabem��ig @file{'hostname'.log}
-benannt). Diese Log-Datei kann sehr n�tzlich sein, wenn Sie einen Fehler in
-einem Client vermuten und wissen wollen, was genau @code{mysqld} sich bei
-dem dachte, was es vom Client geschickt bekam.
-
-Vorgabem��ig startet das @code{mysql.server}-Skript den MySQL-Server mit
-der @code{-l}-Option. Wenn Sie bessere Performance brauchen, wenn Sie MySQL
-in einer Produktionsumgebung starten, k�nnen Sie die @code{-l}-Option aus
-@code{mysql.server} entfernen oder sie zu @code{--log-binary} �ndern.
-
-Die Eintr�ge in diese Log-Datei werden geschrieben, wenn @code{mysqld} die
-Anfragen erh�lt. Die Reihenfolge kann vor derjenigen abweichen, in der die
-Statements ausgef�hrt werden. Das steht im Gegensatz zur Update-Log-Datei
-und zur Bin�r-Log-Datei, bei denen geschrieben wird, nachdem die Anfrage
-ausgef�hrt wurde, aber bevor irgend welche Sperren aufgehoben werden.
-
-
-@node Update log, Binary log, Query log, Log Files
-@c German node Update-Log-Datei
-@subsection Die Update-Log-Datei
-
-@cindex Update-Log-Datei
-@cindex Dateien, Update-Log-Datei
-
-@strong{HINWEIS}: Die Update-Log-Datei wird durch die bin�re Log-Datei
-ersetzt. @xref{Binary log}. Mit dieser k�nnen Sie alles machen, was
-Sie mit der Update-Log-Datei machen k�nnen.
-
-Wenn er mit der @code{--log-update[=datei]}-Option gestartet wird, schreibt
-@code{mysqld} eine Log-Datei, die alle SQL-Befehle enth�lt, die Daten
-aktualisieren. Wenn kein Dateiname angegeben wird, ist die Vorgabe der Name
-der Host-Maschine. Wenn ein Dateiname angegeben wird, der aber keine
-Pfadangabe enth�lt, wird die Datei ins Daten-Verzeichnis geschrieben. Wenn
-@file{datei} keine Erweiterung hat, erzeugt @code{mysqld} eine Log-Datei,
-die er wie folgt benennt: @file{datei.###}, wobei @code{###} eine Zahl ist,
-die jedes Mal hochgez�hlt wird, wenn Sie @code{mysqladmin refresh} oder
-@code{mysqladmin flush-logs} oder das @code{FLUSH LOGS}-Statement
-ausf�hren, oder wenn Sie den Server neu starten.
-
-@strong{HINWEIS:} Damit das dargestellte Schema funktioniert, sollten Sie
-NICHT eigene Dateien mit demselben Dateinamen wie die Update-Log-Datei plus
-Erweiterungen, die als die hochgez�hlte Zahl betrachtet werden k�nnten, im
-Verzeichnis anlegen, das von der Update-Log-Datei benutzt wird!
-
-Wenn Sie die @code{--log} oder @code{-l}-Optionen benutzen, schreibt
-@code{mysqld} eine allgemeine Log-Datei mit dem Dateinamen
-@file{hostname.log}. Neustarts und Refresh-Operationen f�hren dann nicht
-dazu, dass eine neue Log-Datei erzeugt wird (obwohl diese geschlossen und
-wieder ge�ffnet wird). In diesem Fall k�nnen Sie sie (unter Unix) wie folgt
-kopieren:
-
-@example
-mv hostname.log hostname-old.log
-mysqladmin flush-logs
-cp hostname-old.log ins-datensicherungs-verzeichnis
-rm hostname-old.log
-@end example
-
-Das Mitloggen mittels der Update-Log-Datei ist clever, weil es nur
-Statements loggt, die tats�chlich Daten aktualisieren. Wenn ein
-@code{UPDATE} oder ein @code{DELETE} mit einem @code{WHERE} keine passenden
-Zeilen findet, wird nichts in die Log-Datei geschrieben. Es werden sogar
-@code{UPDATE}-Statements �bersprungen, die eine Spalte auf einen Wert
-setzen, die sie bereits hat.
-
-Das Schreiben in die Update-Log-Datei wird unmittelbar durchgef�hrt,
-nachdem eine Anfrage fertig ist, aber bevor irgend welche Sperren
-aufgehoben sind oder irgendein Commit durchgef�hrt wurde. Das stellt
-sicher, dass die Log-Datei stets in der Reihenfolge der Ausf�hrung
-mitschreibt.
-
-Wenn Sie eine Datenbank von Update-Log-Datei-Dateien aktualisieren wollen,
-k�nnten Sie folgendes tun (angenommen, Ihre Update-Log-Dateien haben Namen
-der Form @file{datei.###}):
-
-@example
-shell> ls -1 -t -r datei.[0-9]* | xargs cat | mysql
-@end example
-
-@code{ls} wird benutzt, um alle Log-Dateien in der richtigen Reihenfolge zu
-erhalten.
-
-Das ist n�tzlich, wenn Sie Datensicherungsdateien nach einem Absturz
-zur�ckspielen m�ssen und die Aktualisierungen neu ausf�hren wollen, die
-zwischen der Zeit der Datensicherung und dem Absturz lagen.
-
-
-@node Binary log, Slow query log, Update log, Log Files
-@c German node Bin�r-Log-Datei
-@subsection Die bin�re Update-Log-Datei
-
-@cindex Bin�r-Log-Datei
-@cindex Dateien, Bin�r-Log-Datei
-
-In Zukunft wird die Bin�r-Log-Datei die Update-Log-Datei ersetzen, daher
-empfehlen wir, dass Sie so bald wie m�glich zu diesem Log-Format wechseln!
-
-Die Bin�r-Log-Datei enth�lt alle Informationen, die im Update-Log verf�gbar
-sind, in einem effizienteren Format. Sie enth�lt ausserdem Informationen
-dar�ber, wie lange jede Anfrage brauchte, die die Datenbank aktualisierte.
-
-Die Bin�r-Log-Datei wird auch benutzt, wenn Sie einen Slave von einem
-Master replizieren. @xref{Replication}.
-
-Mit der @code{--log-bin[=datei]}-Option gestartet, schreibt @code{mysqld}
-eine Log-Datei, die alle SQL-Befehle enth�lt, die Daten aktualisieren. Wenn
-kein Dateiname angegeben wird, ist die Vorgabe der Name der Host-Machine,
-gefolgt von @code{-bin}. Wenn der Dateiname angegeben wird, aber keine
-Pfadangabe enth�lt, wird die Datei ins Daten-Verzeichnis geschrieben.
-
-Sie k�nnen folgende Optionen f�r @code{mysqld} benutzen, um zu
-beeinflussen, was in die Bin�r-Log-Datei geschrieben wird:
-
-@multitable @columnfractions .4 .6
-@item @code{binlog-do-db=datenbank} @tab
-Weist den Master an, Aktualisierungen f�r die angegebene Datenbank zu
-loggen und alle anderen, nicht explizit erw�hnten, auszuschlie�en.
-(Beispiel: @code{binlog-do-db=eine_datenbank})
-
-@item @code{binlog-ignore-db=datenbank} @tab
-Weist den Master an, Aktualisierungen f�r die angegebene Datenbank nicht in
-die Bin�r-Log-Datei zu loggen (Beispiel:
-@code{binlog-ignore-db=eine_datenbank}).
-@end multitable
-
-@code{mysqld} h�ngt dem Bin�r-Log-Datei-Dateinamen eine Erweiterung an, die
-eine Zahl ist, die jedes Mal heraufgez�hlt wird, wenn Sie @code{mysqladmin
-refresh}, @code{mysqladmin flush-logs} oder ein @code{FLUSH LOGS}-Statement
-ausf�hren oder den Server neu starten.
-
-Damit Sie feststellen k�nnen, welche verschiedenen Bin�r-Log-Datei-Dateien
-benutzt wurden, erzeugt @code{mysqld} auch eine Bin�r-Log-Index-Datei, die
-die Namen aller benutzten Bin�r-Log-Datei-Dateien enth�lt. Vorgabem��ig
-hat diese denselben Namen wie die Bin�r-Log-Datei, mit der Erweiterung
-@code{'.index'}. Sie k�nnen den Namen der Bin�r-Log-Index-Datei mit der
-@code{--log-bin-index=[filename]}-Option �ndern.
-
-Wenn Sie Replikation benutzen, sollten Sie keine alten Bin�r-Log-Dateien
-l�schen, bis Sie sicher sind, dass kein Slave sie jemals wieder ben�tigen
-wird. Eine Art, das zu tun, ist, einmal pro Tag @code{mysqladmin
-flush-logs} auszuf�hren, und danach alle Logs zu entfernen, die �lter als 3
-Tage sind.
-
-Sie k�nnen die Bin�r-Log-Datei mit dem @code{mysqlbinlog}-Befehl
-untersuchen. Beispielsweise k�nnen Sie einen MySQL-Server wie folgt aus der
-Bin�r-Log-Datei aktualisieren:
-
-@example
-mysqlbinlog log-file | mysql -h server_name
-@end example
-
-Sie k�nnen auch das @code{mysqlbinlog}-Programm benutzen, um die
-Bin�r-Log-Datei direkt von einem entfernten MySQL-Server zu lesen!
-
-@code{mysqlbinlog --help} gibt Ihnen weitere Informationen zur Benutzung
-dieses Programms.
-
-Wenn Sie @code{BEGIN [WORK]} oder @code{SET AUTOCOMMIT=0} verwenden, m�ssen
-Sie die MySQL-Bin�r-Log-Datei f�r Datensicherungen anstelle der alten
-Update-Log-Datei benutzen.
-
-Das Loggen in die Bin�r-Log-Datei wird unmittelbar nach jeder Anfrage
-geschrieben, aber bevor irgend welche Sperren aufgehoben wurden oder irgend
-ein Commit durchgef�hrt wurde. Das stellt sicher, dass die Log-Datei in der
-Reihenfolge der Ausf�hrung mitschreibt.
-
-Alle Aktualisierungen (@code{UPDATE}, @code{DELETE} oder @code{INSERT}),
-die eine transaktionale Tabelle (like BDB-Tabellen) �ndern, werden bis zu
-einem @code{COMMIT} gecachet. Jegliche Aktualisierungen auf eine nicht
-transaktionale Tabelle werden sofort in der Bin�r-Log-Datei gespeichert.
-Jedem Thread wird beim Start ein Puffer der Gr��e @code{binlog_cache_size}
-f�r die Pufferung von Anfragen zugewiesen. Wenn eine Anfrage gr��er als
-dieser ist, �ffnet der Thread eine tempor�re Datei, um den gr��eren Cache
-zu handhaben. Die tempor�re Datei wird gel�scht, wenn der Thread beendet
-wird.
-
-@code{max_binlog_cache_size} kann dazu benutzt werden, um die gesamte
-benutzte Gr��e zu begrenzen, und um eine Anfrage aus mehreren
-Transaktionen zu cachen.
-
-Wenn Sie die Update- oder Bin�r-Log-Datei benutzen, funktionieren
-gleichzeitige Einf�geoperationen nicht im Zusammenhang mit @code{CREATE ...
-INSERT} und @code{INSERT ... SELECT}. Damit stellen Sie sicher, dass Sie
-eine exakte Kopie Ihrer Tabellen wieder herstellen k�nnen, indem Sie die
-Log-Datei auf eine Datensicherung anwenden.
-
-
-@node Slow query log, Log file maintenance, Binary log, Log Files
-@c German node Langsame-Anfragen-Log-Datei
-@subsection Die Anfragen-Log-Datei f�r langsame Anfragen
-
-@cindex Langsame-Anfragen-Log-Datei
-@cindex Dateien, Langsame-Anfragen-Log-Datei
-
-Mit der @code{--log-slow-queries[=datei]}-Option gestartet schreibt
-@code{mysqld} eine Log-Datei, die alle SQL-Befehle enth�lt, die l�nger als
-@code{long_query_time} zur Ausf�hrung brauchten. Die Zeit, um die
-anf�nglichen Tabellensperren zu erhalten, wird nicht zur Ausf�hrungszeit
-hinzugez�hlt.
-
-Anfragen-Log-Datei f�r langsame Anfragen wird geschrieben, nachdem jede
-Anfrage ausgef�hrt wurde und nachdem alle Sperren aufgehoben wurden. Das
-kann von der Reihenfolge abweichen, in der die Statements ausgef�hrt
-wurden.
-
-Wenn kein Dateiname angegeben wird, ist die Vorgabe der Name der
-Host-Maschine mit dem Suffix @code{-slow.log}. Wenn ein Dateiname angegeben
-wird, der aber keine Pfadangabe enth�lt, wird die Datei ins Daten-Verzeichnis geschrieben.
-
-Die Anfragen-Log-Datei f�r langsame Anfragen kann benutzt werden, um
-Anfragen zu finden, die f�r die Ausf�hrung lange Zeit ben�tigen und daher
-Kandidaten f�r Optimierungen sind, was bei einer gro�en Log-Datei
-allerdings eine schwierige Aufgabe werden kann. Sie k�nnen die
-Anfragen-Log-Datei f�r langsame Anfragen durch den
-@code{mysqldumpslow}-Befehl durchschleifen (pipen), um eine Zusammenfassung
-der Anfragen zu erhalten, die in der Log-Datei erscheinen.
-
-Wenn Sie @code{--log-long-format} benutzen, erscheinen auch Anfragen, die
-keine Indexe benutzen. @xref{Command-line options}.
-
-
-@node Log file maintenance, , Slow query log, Log Files
-@c German node Log-Datei-Wartung
-@subsection Wartung und Pflege der Log-Dateien
-
-@cindex Dateien, Log-Dateien
-@cindex Wartung, Log-Dateien
-@cindex Log-Dateien, Wartung
-
-MySQL hat viele Log-Dateien, die es leicht machen festzustellen, was vor
-sich geht. @xref{Log Files}. Von Zeit zu Zeit jedoch muss man hinter
-@code{MySQL} saubermachen, damit die Log-Dateien nicht zu viel
-Festplattenplatz in Anspruch nehmen.
-
-Wenn Sie MySQL mit Log-Dateien benutzen, werden Sie von Zeit zu Zeit alte
-Log-Dateien entfernen wollen und MySQL mitteilen, in neue Dateien zu
-loggen. @xref{Backup}.
-
-Bei einer Linux-(@code{RedHat})-Installation k�nnen Sie hierf�r das
-@code{mysql-log-rotate}-Skript benutzen. Wenn Sie MySQL von einer
-RPM-Distribution installiert haben, sollte das Skript automatisch
-installiert worden sein. Beachten Sie, dass Sie damit vorsichtig umgehen
-sollten, wenn Sie die Log-Datei f�r Replikation benutzen!
-
-Auf anderen Systemen m�ssen Sie selbst ein kurzes Skript installieren, dass
-Sie von @code{cron} starten k�nnen, um Log-Dateien zu handhaben.
-
-Sie k�nnen MySQL zwingen, mit neuen Log-Dateien zu starten, indem Sie
-@code{mysqladmin flush-logs} oder den SQL-Befehl @code{FLUSH LOGS}
-benutzen. Wenn Sie MySQL-Version 3.21 benutzen, m�ssen Sie @code{mysqladmin
-refresh} benutzen.
-
-Der obige Befehl macht folgendes:
-
-@itemize @bullet
-@item
-Wenn standardm��iges Loggen (@code{--log}) oder Loggen langsamer Anfragen
-(@code{--log-slow-queries}) benutzt wird, wird die Log-Datei geschlossen
-und wieder ge�ffnet (@file{mysql.log} und @file{`hostname`-slow.log} als
-Vorgabe).
-@item
-Wenn Update-Logging (@code{--log-update}) benutzt wird, wird die
-Update-Log-Datei geschlossen und eine neue Log-Datei mit einer h�heren
-Log-Zahl ge�ffnet.
-@end itemize
-
-Wenn Sie nur eine Update-Log-Datei benutzen, m�ssen Sie die Log-Dateien nur
-auf Platte zur�ckschreiben (flush) und dann die alten
-Update-Log-Datei-Dateien zu einer Datensicherungsdatei verschieben. Wenn
-Sie normales Loggen benutzen, k�nnen Sie etwas wie das Folgende tun:
-
-@example
-shell> cd mysql-data-verzeichnis
-shell> mv mysql.log mysql.old
-shell> mysqladmin flush-logs
-@end example
-
-Und dann eine Datensicherung nehmen und @file{mysql.old} entfernen.
-
-
-@node Replication, , Log Files, MySQL Database Administration
-@c German node Replikation
-@section Replikation bei MySQL
-
-@cindex Replikation
-@cindex erh�hen, Geschwindigkeit
-@cindex Geschwindigkeit, erh�hen
-@cindex Datenbanken, replizieren
-
-
-Dieses Kapitel beschreibt die verschiedenen Replikationsfeatures in MySQL.
-Es dient als Referenz f�r die Optionen, die bei Replikation verf�gbar sind.
-Sie erhalten eine Einf�hrung in die Replikation und lernen, wie Sie sie
-implementieren. Am Ende des Kapitels werden einige h�ufige gestellte Fragen
-und die dazugeh�rigen Antworten aufgelistet sowie Beschreibungen der
-Probleme und wie man sie l�st.
-
-
-@menu
-* Replication Intro::
-* Replication Implementation::
-* Replication HOWTO::
-* Replication Features::
-* Replication Options::
-* Replication SQL::
-* Replication FAQ::
-* Replication Problems::
-@end menu
-
-@node Replication Intro, Replication Implementation, Replication, Replication
-@c German node Einf�hrung in die Replikation
-@subsection Einf�hrung in die Replikation
-
-Einweg-Replikation wird benutzt, um sowohl Stabilit�t als auch
-Geschwindigkeit zu steigern. Was Stabilit�t betrifft, haben Sie zwei
-M�glichkeiten und k�nnen zur M�glichkeit der Datensicherung zur�ckkehren,
-wenn Sie Probleme mit dem Master haben. Die Geschwindigkeitssteigerung wird
-dadurch erreicht, dass ein Teil der Anfragen, die nichts aktualisieren, an
-den Replikationsserver geschickt werden. Das funktioniert naturgem�� nur
-dann, wenn Anfragen, die nichts aktualisieren, �berwiegen, aber das ist der
-Normalfall.
-
-@c German FIX changes @xref to @pxref (because it's in parenthesis).
-Ab Version 3.23.15 unterst�tzt MySQL intern Einweg-Replikation. Ein Server
-agiert als Master, der andere als Slave. Beachten Sie, dass ein Server
-beide Rolle - als Master und als Slave - in einem Paar spielen kann. Der
-Master h�lt eine Bin�r-Log-Datei der Aktualisierungen vor
-(@pxref{Binary log}) sowie eine Index-Datei f�r Bin�r-Log-Dateien, um
-hinsichtlich der Log-Rotation auf dem Laufenden zu bleiben. Der Slave
-informiert den Master beim Verbinden dar�ber, wo er seit der letzten
-erfolgreich durchgef�hrten Aktualisierung aufgeh�rt hat, schlie�t zu den
-Aktualisierungen auf, blockiert danach und wartet darauf, dass ihn der
-Master �ber neue Aktualisierungen informiert.
-
-Beachten Sie, dass alle Aktualisierungen auf eine Datenbank, die repliziert
-wird, durch den Master durchgef�hrt werden sollten!
-
-Ein weiterer Vorteil von Replikation ist, dass man permanente (live)
-Datensicherungen vom System erh�lt, wenn man die Datensicherung auf dem
-Slave durchf�hrt statt auf dem Master. @xref{Backup}.
-
-
-@node Replication Implementation, Replication HOWTO, Replication Intro, Replication
-@c German node Replikationsimplementation
-@subsection Replikationsimplementation
-
-@cindex Master-Slave-Einrichtung
-
-@c German FIX changes @xref to @pxref (because it's in parenthesis).
-MySQL-Replikation basiert darauf, dass der Server alle �nderungen Ihrer
-Datenbank im Bin�r-Log verfolgt (Updates, Deletes usw.)
-(@pxref{Binary log}) und der oder die Slave-Server die gespeicherten
-Anfragen aus der Bin�r-Log-Datei des Masters lesen, so dass der Slave
-dieselben Anfragen auf seine Kopie der Daten ausf�hren kann.
-
-Es ist @strong{sehr wichtig} sich klarzumachen, dass die Bin�r-Log-Datei
-schlicht eine Aufzeichnung ist, die ab einem festen Zeitpunkt an startet
-(ab dem Moment, wo Sie Bin�r-Loggen starten). Alle Slaves, die Sie
-aufsetzen, ben�tigen Kopien aller Daten vom Master, wie Sie zu dem
-Zeitpunkt existierten, als Bin�r-Loggen auf dem Master aktiviert wurde.
-Wenn Sie Ihre Slaves mit Daten starten, die nicht mit dem �bereinstimmen,
-was auf dem Master war, @strong{als die Bin�r-Log-Datei gestartet wurde},
-funktionieren Ihre Slaves wom�glich nicht richtig.
-
-Eine zuk�nftige Version (4.0) von MySQL wird die Notwendigkeit beseitigen,
-(eventuell gro�e) Schnappsch�sse von Daten f�r neue Slaves vorzuhalten,
-die Sie �ber die Live-Datensicherungs-Funktionalit�t aufsetzen wollen,
-wobei kein Sperren (Locking) erforderlich ist. Zu dieser Zeit ist es jedoch
-notwendig, alle Schreibzugriffe entweder mit einer globalen Lese-Sperre
-oder durch das Herunterfahren des Masters zu blockieren, w�hrend man einen
-Schnappschuss anlegt.
-
-Sobald ein Slave korrekt konfiguriert ist und l�uft, verbindet er sich
-einfach mit dem Master und wartet darauf, dass Aktualisierung ausgef�hrt
-werden. Wenn der Master abgeschaltet wird oder der Slave die Verbindung zum
-Master verliert, versucht er alle @code{master-connect-retry} Sekunden,
-sich neu zu verbinden, bis er sich neu verbinden kann, und nimmt dann das
-Warten auf Aktualisierungen wieder auf.
-
-Jeder Slave achtet darauf, wo er aufgeh�rt hat. Der Master-Server wei�
-nicht, wie viele Slaves es gibt oder welche zu einem gegebenen Zeitpunkt
-auf aktuellem Stand sind.
-
-Der n�chste Abschnitt erl�utert den Master-Slave-Einrichtungsprozess
-detaillierter.
-
-
-@node Replication HOWTO, Replication Features, Replication Implementation, Replication
-@c German node Wie man Replikation aufsetzt
-@subsection Wie man Replikation aufsetzt
-
-Unten findet sich eine kurze Beschreibung, wie Sie komplette Replikation
-auf Ihrem aktuellen MySQL-Server einrichten k�nnen. Es wird angenommen,
-dass Sie alle Ihre Datenbanken replizieren wollen und bislang Replikation
-noch nicht konfiguriert haben. Sie m�ssen Ihren Master-Server kurz herunter
-fahren, um die unten stehenden Schritte fertigzustellen.
-
-@enumerate
-@item
-Stellen Sie sicher, dass Sie eine aktuelle Version von MySQL auf dem Master
-und dem Slave oder den Slaves haben.
-
-Benutzen Sie Version 3.23.29 oder h�her. Vorherige Releases benutzten ein
-anderes Bin�r-Log-Format und hatten Bugs, die in neueren Releases behoben
-wurden. Bitte berichten Sie keine Bugs, bevor Sie best�tigen k�nnen, dass
-das Problem im neuesten Release beobachtet werden kann.
-
-@item
-Richten Sie einen speziellen Replikationsbenutzer auf dem Master mit der
-@code{FILE}-Berechtigung und Berechtigungen, sich von allen Slaves aus zu
-verbinden, ein. Wenn der Benutzer ausschlie�lich Replikation durchf�hrt
-(was empfohlen wird), m�ssen Sie ihm keine zus�tzlichen Berechtigungen
-geben.
-
-Erzeugen Sie zum Beispiel einen Benutzer namens @code{repl}, der auf Ihren
-Master von jedem Host aus zugreifen kann, mit folgendem Befehl:
-
-@example
-GRANT FILE ON *.* TO repl@@"%" IDENTIFIED BY 'passwort';
-@end example
-
-@item
-Fahren Sie den MySQL-Master herunter:
-
-@example
-mysqladmin -u root -ppasswort shutdown
-@end example
-
-@item
-Machen Sie einen Schnappschuss aller Daten auf Ihrem Master-Server.
-
-Die einfachste Art, das (unter Unix) zu tun, ist, einfach @strong{tar} zu
-benutzen, um ein Archiv Ihre gesamten Daten-Verzeichnisses zu erzeugen. Der
-genaue Speicherort Ihres Daten-Verzeichnisses h�ngt von Ihrer Installation
-ab.
-
-@example
-tar -cvf /tmp/mysql-snapshot.tar /pfad/zu/data-dir
-@end example
-
-Windows-Benutzer k�nnen WinZip oder �hnliche Software benutzen, um ein
-Archiv des Daten-Verzeichnisses anzulegen.
-
-@item
-In der Datei @code{my.cnf} f�r den Master f�gen Sie @code{log-bin} und
-@code{server-id=eindeutige_nummer} zum @code{[mysqld]}-Abschnitt und hinzu
-und starten Sie den Server neu. Es ist sehr wichtig, dass die ID auf dem
-Slave sich von der ID auf dem Master unterscheidet. Denken Sie sich
-@code{server-id} als etwas, dass einer IP-Adresse �hnlich ist - es
-identifiziert in der Gemeinschaft der Replikationspartner die
-Server-Instanz eindeutig.
-
-@example
-[mysqld]
-log-bin
-server-id=1
-@end example
-
-@item
-Starten Sie den MySQL-Master neu.
-
-@item
-F�gen Sie auf dem Slave oder den Slaves folgendes zur Datei
-@code{my.cnf} hinzu:
-
-@example
-master-host=hostname_des_masters
-master-user=replikations_benutzername
-master-password=replikations_benutzerpasswort
-master-port=TCP/IP-Port_f�r_master>
-server-id=eine_eindeutige_nummer_zwischen_2_und_2^32-1
-@end example
-
-Ersetzen Sie die Beispielwerte durch etwas, was f�r Ihr System stimmig ist.
-
-@code{server-id} muss f�r jeden Partner, der an Replikation teilnimmt,
-unterschiedlich sein. Wenn Sie keine server-id angeben, wird sie auf 1
-gesetzt, falls Sie @code{master-host} nicht definiert haben, ansonsten wird
-sie auf 2 gesetzt. Beachten Sie f�r den Fall, dass sie @code{server-id}
-weglassen, dass der Master Verbindungen von allen Slaves verweigert und die
-Slaves verweigern werden, sich mit dem Master zu verbinden. Daher ist das
-Weglassen der @code{server-id} nur dann eine gute Idee, wenn Sie es nur f�r
-Datensicherungen mit einer Bin�r-Log-Datei verwenden.
-
-
-@item
-Kopieren Sie die Schnappschuss-Daten in Ihr Daten-Verzeichnis auf Ihrem
-Slave oder Ihren Slaves. Stellen Sie sicher, dass die Berechtigungen auf
-die Dateien und Verzeichnisse korrekt sind. Der Benutzer, unter dem MySQL
-l�uft, muss in der Lage sein, sie zu lesen und zu schreiben, genau wie auf
-dem Master.
-
-@item Starten Sie den Slave oder die Slaves neu.
-
-@end enumerate
-
-Nachdem Sie das Obige durchgef�hrt haben, sollten sich die Slaves mit dem
-Master verbinden k�nnen und alle Aktualisierungen mitbekommen, die nach der
-Aufnahme des Schnappschusses passieren.
-
-
-Wenn Sie vergessen haben, die @code{server-id} f�r den Slave zu setzen,
-erhalten Sie folgenden Fehler in der Fehler-Log-Datei:
-
-@example
-Warning: one should set server_id to a non-0 value if master_host ist set.
-The server will not act as a slave.
-@end example
-
-Wenn Sie vergessen haben, selbiges f�r den Master zu machen, sind die
-Slaves nicht in der Lage, sich mit dem Master zu verbinden.
-
-Wenn ein Slave aus irgend welchen Gr�nden nicht in der Lage ist zu
-replizieren, finden Sie Fehlermeldungen in der Fehler-Log-Datei auf dem
-Slave.
-
-Sobald ein Slave repliziert, finden Sie eine Datei namens
-@code{master.info} im selben Verzeichnis, wo auch Ihre Fehler-Log-Datei
-liegt. Die @code{master.info}-Datei wird vom Slave benutzt, um auf dem
-Laufenden zu bleiben, wie viel der Bin�r-Log-Datei des Masters er bereits
-abgearbeitet hat. Sie sollten die Datei @strong{NICHT} entfernen oder
-editieren, es sei denn, Sie wissen genau, was Sie tun. Selbst in diesem
-Fall sollten Sie vorzugsweise den @code{CHANGE MASTER TO}-Befehl benutzen.
-
-
-
-
-@node Replication Features, Replication Options, Replication HOWTO, Replication
-@c German node Replikationsfeatures
-@subsection Replikationsfeatures und bekannte Probleme
-
-@cindex Optionen, Replikation
-@cindex @code{my.cnf}-Datei
-@cindex Dateien,@code{my.cnf}
-
-Unten steht eine Erl�uterung dessen, was unterst�tzt wird und was nicht:
-
-@itemize @bullet
-@item
-Replikation l�uft korrekt mit @code{AUTO_INCREMENT}-,
-@code{LAST_INSERT_ID}- und @code{TIMESTAMP}-Werten.
-@item
-@code{RAND()} bei Updates repliziert nicht korrekt. Benutzen Sie
-@code{RAND(ein_nicht_zufalls_ausdruck)}, wenn Sie Updates mit
-@code{RAND()} replizieren. Sie k�nnen zum Beispiel @code{UNIX_TIMESTAMP()}
-als Argument f�r @code{RAND()} benutzen.
-@item
-Sie m�ssen auf Master und Slave denselben Zeichensatz
-(@code{--default-character-set}) benutzen. Wenn nicht, erhalten Sie
-eventuell Fehler wegen doppelter Schl�sseleintr�ge (duplicate key) auf dem
-Slave, weil ein Schl�ssel, der auf dem Master als eindeutig betrachtet
-wird, das in einem anderen Zeichensatz eventuell nicht ist.
-@item
-@code{LOAD DATA INFILE} wird korrekt gehandhabt, solange die Datei zur Zeit
-der Update-Ausf�hrung noch auf dem Master-Server liegt. @code{LOAD LOCAL
-DATA INFILE} wird �bersprungen.
-@item
-Aktualisierungsanfragen, die Benutzer-Variablen benutzen, sind (noch) nicht
-replikationssicher.
-@item
-@code{FLUSH}-Befehle werden nicht in der Bin�r-Log-Datei gespeichert und
-werden deswegen nicht auf den Slaves repliziert. Das stellt normalerweise
-kein Problem dar, weil @code{FLUSH} nichts �ndert. In Bezug auf die
-@code{MySQL}-Berechtigungstabellen hei�t das jedoch, dass Sie bei direkten
-�nderungen in diesen Tabellen ohne Benutzung des @code{GRANT}-Statements
-und der anschlie�enden Replikation der
-@code{MySQL}-Berechtigungs-Datenbank auf den Slaves @code{FLUSH PRIVILEGES}
-ausf�hren m�ssen, damit die neuen Berechtigungen wirksam werden.
-@item
-Tempor�re Tabellen werden ab Version 3.23.29 korrekt repliziert,
-ausgenommen im Fall, dass Sie den Slave-Server schlie�en (nicht nur den
-Slave-Thread), Sie noch einige tempor�re Tabellen offen haben und diese bei
-nachfolgenden Aktualisierungen benutzt werden. Um mit diesem Problem fertig
-zu werden, schlie�en Sie den Slave mit @code{SLAVE STOP} und pr�fen dann
-die @code{Slave_open_temp_tables}-Variable, um zu sehen, ob Sie 0 ist. Dann
-f�hren Sie @code{mysqladmin shutdown} aus. Wenn die Variable nicht 0 ist,
-starten Sie den Slave-Thread neu mit @code{SLAVE START} und probieren es
-noch einmal. Zuk�nftig (ab Version 4.0) wird es eine sauberere L�sung
-geben.
-In fr�heren Versionen wurden tempor�re Tabellen nicht korrekt repliziert.
-Wir empfehlen, dass Sie entweder auf eine neuere Version aktualisieren oder
-vor allen Anfragen mit tempor�ren Tabellen @code{SET SQL_LOG_BIN=0} auf
-alle Clients ausf�hren.
-@item
-MySQL unterst�tz nur einen Master und viele Slaves. In Version 4.x wird ein
-Abstimmungsalgorithmus eingebaut, der automatisch den Master umschaltet,
-wenn etwas mit dem aktuellen Master schief geht. Ausserdem werden wir
-'Agenten'-Prozesse einf�hren, die bei der Lastverteilung helfen, indem sie
-SELECT-Anfragen an verschiedene Slaves senden.
-@item
-Ab Version 3.23.26 ist es sicher, Server in einer zirkul�ren
-Master-Slave-Beziehung mit angeschaltetem @code{log-slave-updates} zu
-verbinden. Beachten Sie jedoch, dass bei dieser Art von Einrichtung viele
-Anfrage nicht richtig funktionieren, es sei denn, Ihr Client-Code ist so
-geschrieben, dass er sich um m�gliche Probleme k�mmert, die durch
-Aktualisierungen auftreten k�nnen, die in unterschiedlicher Reihenfolge auf
-verschiedenen Servern laufen.
-
-Das bedeutet, dass Sie eine Einrichtung wie die folgende machen k�nnen:
-
-@example
-A -> B -> C -> A
-@end example
-
-Diese Einrichtung funktioniert nur dann, wenn Sie ausschlie�lich
-Aktualisierungen ausf�hren, die nicht zwischen den Tabellen zu Konflikten
-f�hren. Mit anderen Worten, wenn Sie Daten in A und C einf�gen, sollten Sie
-nie eine Zeile in A einf�gen, die zu einem Konflikt mit einem Schl�sselwert
-bei einem Zeilen-Einf�gevorgang in C f�hrt. Ebenfalls sollte Sie nie
-dieselben Zeilen auf zwei Servern einf�gen, wenn die Reihenfolge, in der
-die Aktualisierungen durchgef�hrt werden, eine Rolle spielt.
-
-Beachten Sie, dass sich das Log-Format in Version 3.23.26 ge�ndert hat, so
-das Slaves vor Version 3.23.26 diese nicht lesen k�nnen.
-@item
-Wenn die Anfrage auf dem Slave zu einem Fehler f�hrt, beendet sich der
-Slave-Thread und in der @code{.err}-Datei erscheint eine Meldung. Sie
-sollten sich dann manuell mit dem Slave verbinden, die Ursache des Fehlers
-beheben (zum Beispiel nicht existierende Tabellen) und dann den SQL-Befehl
-@code{SLAVE START} laufen lassen (verf�gbar ab Version 3.23.16). In Version
-3.23.15 m�ssen Sie den Server neu starten.
-@item
-Wenn die Verbindung zum Master verloren geht, versucht der Slave
-unmittelbar, sich neu zu verbinden, und wenn das fehlschl�gt, alle
-@code{master-connect-retry} Sekunden (Vorgabe 60 Sekunden). Deswegen ist es
-sicher, den Master herunter zu fahren und dann nach einer Weile wieder
-hochzufahren. Der Slave ist auch in der Lage, mit
-Netzwerk-Verbindungsausf�llen umzugehen.
-@item
-Den Slave (sauber) herunterzufahren ist ebenfalls sicher, weil er sich
-merkt, wo er aufgeh�rt hat. Unsauberes Herunterfahren kann zu Problemen
-f�hren, insbesondere dann, wenn der Platten-Cache nicht synchronisiert
-wurde, als das System starb. Die Fehlertoleranz Ihres Systems wird stark
-verbessert, wenn Sie ein gutes UPS haben.
-@item
-Wenn der Master auf einem Port auf Anfragen wartet, der nicht Standard ist,
-m�ssen Sie diesen mit dem @code{master-port}-Parameter in @code{my.cnf}
-angeben.
-@item
-In Version 3.23.15 werden alle Tabellen und Datenbanken repliziert. Ab
-Version 3.23.16 k�nnen Sie die Replikation mit der
-@code{replicate-do-db}-Anweisung in @code{my.cnf} auf einen Satz von
-Datenbanken beschr�nken oder einen Satz von Datenbanken mit
-@code{replicate-ignore-db} ausschlie�en. Beachten Sie, dass es bis Version
-3.23.23 einen Bug gab, so dass mit @code{LOAD DATA INFILE} nicht sauber
-umgegangen wurde, wenn Sie diesen Befehl in einer Datenbank ausf�hrten, die
-von der Replikation ausgeschlossen war.
-@item
-Ab Version 3.23.16 schaltet @code{SET SQL_LOG_BIN = 0}
-Replikations-(Bin�r)-Loggen auf dem Master aus und @code{SET SQL_LOG_BIN =
-1} schaltet es wieder an. Sie ben�tigen die process-Berechtigung, um das
-auszuf�hren.
-@item
-Ab Version 3.23.19, you can clean up stale Replikation leftovers when
-something goes wrong und you want a clean start mit @code{FLUSH MASTER}
-und @code{FLUSH SLAVE}-Befehle. In Version 3.23.26 we have renamed them to
-@code{RESET MASTER} und @code{RESET SLAVE} respectively to clarify
-what they do. The old @code{FLUSH} variants still work, though, for
-Kompatibilit�t.
-
-@item
-Ab Version 3.23.21, you can use @code{LOAD TABLE FROM MASTER} for
-network backup und to set up Replikation initially. We have recently
-received a Anzahl von bug reports concerning it that we are investigating, so
-we recommend that you use it only in testing until we make it mehr stable.
-@item
-Ab Version 3.23.23, you can change masters und adjust log position
-mit @code{CHANGE MASTER TO}.
-@item
-Ab Version 3.23.23, you tell the master that updates in certain
-Datenbanken should not be logged to the Bin�r-Log-Datei mit @code{binlog-ignore-db}.
-@item
-Ab Version 3.23.26 k�nnen Sie @code{replicate-rewrite-db} benutzen, um den
-Slave anzuweisen, Aktualisierungen einer Datenbank auf dem Master auf eine
-mit einem anderen Namen auf dem Slave anzuwenden.
-@item
-Ab Version 3.23.28 k�nnen Sie @code{PURGE MASTER LOGS TO 'log-name'}
-benutzen, um alte Log-Dateien loszuwerden, w�hrend der Slave l�uft.
-@end itemize
-
-
-@node Replication Options, Replication SQL, Replication Features, Replication
-@c German node Replikationsoptionen
-@subsection Replikationsoptionen in my.cnf
-
-Wenn Sie Replikation benutzen, empfehlen wir, dass Sie MySQL-Version
-3.23.30 oder h�her benutzen. �ltere Versionen funktionieren, haben aber
-einige Bugs und fehlende Features.
-
-Sowohl auf dem Master als auch auf dem Slave m�ssen Sie die
-@code{server-id}-Option benutzen. Diese setzt eine eindeutige
-Replikations-ID. Sie sollten einen eindeutigen Wert im Bereich zwischen 1
-und 2^32-1 f�r jeden Master und Slave benutzen. Beispiel: @code{server-id=3}
-
-In folgender Tabelle stehen die Optionen, die Sie f�r den @strong{MASTER}
-benutzen k�nnen:
-
-@multitable @columnfractions .3 .7
-
-@item @strong{Option} @tab @strong{Beschreibung}
-@item @code{log-bin=dateiname} @tab
-Schreibt in die bin�re Update-Log-Datei am angegebenen Ort. Beachten Sie,
-dass, wenn Sie ihr einen Parameter mit einer Erweiterung angeben (zum
-Beispiel @code{log-bin=/mysql/logs/replikation.log}), Versionen bis zu
-3.23.24 w�hrend der Replikation nicht richtig funktionieren, wen Sie
-@code{FLUSH LOGS} ausf�hren. Das Problem ist seit Version 3.23.25 behoben.
-Wenn Sie Log-Namen dieser Art benutzen, wird @code{FLUSH LOGS} auf dem
-bin�ren Log ignoriert. Um das Log zu l�schen, f�hren Sie @code{FLUSH
-MASTER} aus. Vergessen Sie dabei nicht, @code{FLUSH SLAVE} auf allen Slaves
-laufen zu lassen.Ab Version 3.23.26 sollten Sie @code{RESET MASTER} und
-@code{RESET SLAVE} benutzen.
-
-@item @code{log-bin-index=dateiname} @tab
-Weil der Benutzer @code{FLUSH LOGS}-Befehle ausf�hren k�nnte, muss man
-wissen, welches Log momentan aktiv ist und welche in welcher Reihenfolge
-durch Log-Rotation herausgenommen wurden. Diese Informationen sind in der
-Bin�r-Log-Index-Datei gespeichert. Der Vorgabewert ist `hostname`.index.
-
-Beispiel: @code{log-bin-index=datenbank.index}.
-
-@item @code{sql-bin-update-same} @tab
-Falls gesetzt, f�hrt das Setzen von @code{SQL_LOG_BIN} auf einen Wert
-automatisch dazu, dass @code{SQL_LOG_UPDATE} auf denselben Wert gesetzt
-wird, und umgekehrt.
-
-@item @code{binlog-do-db=datenbank} @tab
-Weist den Master an, Aktualisierung in die Bin�r-Log-Datei zu loggen, wenn
-die aktuelle Datenbank 'datenbank' ist. Alle anderen Datenbanken werden
-ignoriert. Beachten Sie bei der Benutzung, dass Sie sicherstellen sollten,
-dass Sie Aktualisierungen nur in der aktuellen Datenbank ausf�hren.
-
-Beispiel: @code{binlog-do-db=eine_datenbank}.
-
-@item @code{binlog-ignore-db=datenbank} @tab
-Weist den Master an, das Aktualisierung der aktuellen Datenbank 'datenbank'
-nicht in der Bin�r-Log-Datei gespeichert werden sollen. ignoriert. Beachten
-Sie bei der Benutzung, dass Sie sicherstellen sollten, dass Sie
-Aktualisierungen nur in der aktuellen Datenbank ausf�hren.
-
-Beispiel: @code{binlog-ignore-db=eine_datenbank}
-@end multitable
-
-Folgende Tabelle enth�lt die Optionen, die Sie f�r @strong{SLAVE} benutzen
-k�nnen:
-
-@multitable @columnfractions .3 .7
-
-@item @strong{Option} @tab @strong{Beschreibung}
-@item @code{master-host=host} @tab
-Hostname des Masters oder IP-Adresse f�r Replikation. Falls nicht gesetzt,
-startet der Slave-Thread nicht.
-
-Beispiel: @code{master-host=datenbank-master.meinefirma.de}.
-
-@item @code{master-user=benutzername} @tab
-Der Benutzer, den der Slave-Thread f�r Authentifizierung benutzt, wenn er
-sich mit dem Master verbindet. Der Benutzer muss die
-@code{FILE}-Berechtigung besitzen. Wenn der Master-Benutzer nicht gesetzt
-ist, wird Benutzer @code{test} angenommen.
-
-Beispiel: @code{master-user=steve}.
-
-@item @code{master-password=passwort} @tab
-Das Passwort, das der Slave-Thread f�r Authentifizierung benutzt, wenn er
-sich mit dem Master verbindet. Wenn nicht gesetzt, wird ein leeres Passwort
-angenommen.
-
-Beispiel: @code{master-password=hund}.
-
-@item @code{master-port=portnummer} @tab
-Der Port, auf dem der Master auf Verbindungen wartet. Wenn nicht gesetzt,
-wird die kompilierte Einstellung von @code{MYSQL_PORT} angenommen. Wenn Sie
-nicht an den @code{configure}-Optionen gedreht haben, sollte das 3306 sein.
-
-Beispiel: @code{master-port=3306}.
-
-@item @code{master-connect-retry=sekunden} @tab
-Die Anzahl Sekunden, die der Slave-Thread schl�ft, bevor er wiederum
-versucht, sich mit dem Master zu verbinden, falls der Master herunter fuhr
-oder die Verbindung verloren ging. Vorgabewert ist 60.
-
-Beispiel: @code{master-connect-retry=60}.
-
-@item @code{master-ssl} @tab
-Schaltet SSL an.
-
-Beispiel: @code{master-ssl}.
-
-@item @code{master-ssl-key} @tab
-Der Name der SSL-Schl�sseldatei f�r den Master.
-
-Beispiel: @code{master-ssl-key=SSL/master-key.pem}.
-
-@item @code{master-ssl-cert} @tab
-Der Dateiname des SSL-Zertifikats f�r den Master.
-
-Beispiel: @code{master-ssl-key=SSL/master-cert.pem}.
-
-@item @code{master-info-file=dateiname} @tab
-Der Speicherort der Datei, die sich merkt, bis wohin der Master w�hrend des
-Replikationsprozesses verfolgt wurde. Vorgabewert ist master.info im data-
-Verzeichnis.
-
-Beispiel: @code{master-info-file=master.info}.
-
-@item @code{replicate-do-table=datenbank.tabelle} @tab
-Weist den Slave-Thread an, die Replikation auf die angegebene Tabelle zu
-beschr�nken. Um mehr als eine Tabelle anzugeben, benutzen Sie die Anweisung
-mehrfach, einmal f�r jede Tabelle. Das funktioniert auch bei
-Datenbank-�bergreifenden Aktualisierungen, im Gegensatz zu
-@code{replicate-do-db}.
-
-Beispiel: @code{replicate-do-table=eine_datenbank.eine_tabelle}.
-
-@item @code{replicate-ignore-table=datenbank.tabelle} @tab
-Weist den Slave-Thread an, die angegebene Tabelle nicht zu replizieren. Um
-mehr als eine Tabelle anzugeben, die ignoriert werden soll, geben Sie die
-Anweisung mehrfach ein, einmal f�r jede Tabelle. Das funktioniert auch bei
-Datenbank-�bergreifenden Aktualisierungen, im Gegensatz zu
-@code{replicate-ignore-db}.
-
-Beispiel: @code{replicate-ignore-table=eine_datenbank.eine_tabelle}.
-
-@item @code{replicate-wild-do-table=datenbank.tabelle} @tab
-Weist den Slave-Thread an, die Replikation auf Tabellen zu beschr�nken, die
-dem angegebenen Platzhalter-Muster entsprechen. Um mehr als ein
-Tabellenmuster anzugeben, das ignoriert werden soll, geben Sie die
-Anweisung mehrfach ein, einmal f�r jedes Tabellenmuster. Das funktioniert
-auch bei Datenbank-�bergreifenden Aktualisierungen.
-
-Beispiel: @code{replicate-wild-do-table=foo%.bar%} repliziert nur
-Aktualisierungen auf Tabellen in allen Datenbanken, die mit 'foo' anfangen
-und deren Tabellennamen mit 'bar' beginnen.
-
-@item @code{replicate-wild-ignore-table=datenbank.tabelle} @tab
-Weist den Slave-Thread an, Tabellen nicht zu replizieren, die dem
-angegebenen Platzhalter-Muster entsprechen. Um mehr als ein
-Tabellenmuster anzugeben, das ignoriert werden soll, geben Sie die
-Anweisung mehrfach ein, einmal f�r jedes Tabellenmuster. Das funktioniert
-auch bei Datenbank-�bergreifenden Aktualisierungen.
-
-Beispiel: @code{replicate-wild-ignore-table=foo%.bar%} aktualisiert keine
-Tabellen in Datenbanken, die mit 'foo' anfangen und deren Tabellennamen mit
-'bar' beginnen.
-
-@item @code{replicate-ignore-db=datenbank} @tab
-Weist den Slave-Thread an, die angegebene Datenbank nicht zu replizieren.
-Um mehr als eine Datenbank anzugeben, die ignoriert werden soll, geben Sie
-die Anweisung mehrfach ein, einmal f�r jede Datenbank. Diese Option
-funktioniert nicht f�r Datenbank-�bergreifende Aktualisierungen. Wenn Sie
-Datenbank-�bergreifende Aktualisierungen brauchen, stellen Sie sicher, dass
-Sie Version 3.23.28 oder h�her verwenden und benutzen Sie
-@code{replicate-wild-ignore-table=datenbank.%}
-
-Beispiel: @code{replicate-ignore-db=eine_datenbank}.
-
-@item @code{replicate-do-db=datenbank} @tab
-
-Weist den Slave-Thread an, die Replikation auf die angegebene Datenbank zu
-beschr�nken. Um mehr als eine Datenbank anzugeben, benutzen Sie die
-Anweisung mehrfach, einmal f�r jede Datenbank. Beachten Sie, dass das nicht
-funktioniert, wenn Sie Datenbank-�bergreifende Anfragen wie @code{UPDATE
-eine_datenbank.eine_tabelle SET foo='bar'} ausf�hren, w�hrend Sie eine
-andere oder keine Datenbank ausgew�hlt haben. Wenn Sie
-Datenbank-�bergreifende Aktualisierungen brauchen, stellen Sie sicher, dass
-Sie Version 3.23.28 oder h�her verwenden und benutzen Sie
-@code{replicate-wild-do-table=datenbank.%}.
-
-Beispiel: @code{replicate-do-db=eine_datenbank}.
-
-@item @code{log-slave-updates} @tab
-Weist den Slave an, Aktualisierungen vom Slave-Thread in die bin�re
-Log-Datei zu schreiben. Ist vorgabem��ig ausgeschaltet. Sie m�ssen diese
-Option anschalten, wenn Sie planen, die Slave in eine zirkul�re Kette zu
-h�ngen ('Daisy-Chain').
-
-@item @code{replicate-rewrite-db=von_name->zu_name} @tab
-Aktualisierungen auf eine Datenbank mit einem anderen Namen als dem
-Orginalnamen.
-
-Beispiel: @code{replicate-rewrite-db=master_datenbank->slave_datenbank}.
-
-@item @code{skip-slave-start} @tab
-Weist den Slave-Server an, den Slave nicht beim Hochfahren zu starten. Der
-Benutzer kann ihn sp�ter mit @code{SLAVE START} starten.
-
-@item @code{slave_read_timeout=#} @tab
-Anzahl von Sekunden, die der Slave auf weitere Daten vom Master wartet,
-bevor er abbricht.
-@end multitable
-
-
-@node Replication SQL, Replication FAQ, Replication Options, Replication
-@c German node SQL und Replikation
-@subsection SQL-Befehle in Bezug auf Replikation
-
-@cindex SQL-Befehle, Replikation
-@cindex Befehle, Replikation
-@cindex Replikation, Befehle
-
-Replikation kann �ber die SQL-Schnittstelle gesteuert werden. Hier eine
-Zusammenfassung der Befehle:
-
-@multitable @columnfractions .30 .70
-@item @strong{Befehl} @tab @strong{Beschreibung}
-
-@item @code{SLAVE START}
- @tab Startet den Slave-Thread. (Slave)
-
-@item @code{SLAVE STOP}
- @tab H�lt den Slave-Thread an. (Slave)
-
-@item @code{SET SQL_LOG_BIN=0}
- @tab Schaltet das Loggen in die Update-Log-Datei aus, wenn der Benutzer
-die process-Berechtigung hat. Wird ansonsten ignoriert. (Master)
-
-@item @code{SET SQL_LOG_BIN=1}
- @tab Schaltet das Loggen in die Update-Log-Datei wieder an, wenn der
-Benutzer die process-Berechtigung hat. Wird ansonsten ignoriert. (Master)
-
-@item @code{SET SQL_SLAVE_SKIP_COUNTER=n}
- @tab Die n�chsten @code{n} Ereignisse vom Master ignorieren. Gilt nur,
-wenn der Slave-Thread nicht l�uft, gibt ansonsten einen Fehler aus.
-N�tzlich f�r den Ausgleich von Replikationsabweichungen.
-
-@item @code{RESET MASTER}
- @tab L�scht alle Bin�r-Log-Dateien, die in der Index-Datei aufgef�hrt
-sind, und setzt die Bin�rLog-Index-Datei auf leer zur�ck. In Versionen vor
-3.23.26 versions hei�t dieser Befehl @code{FLUSH MASTER}. (Master)
-
-@item @code{RESET SLAVE}
- @tab F�hrt dazu, dass der Slave seine Replikationsposition in den
-Master-Logs vergisst. In Versionen vor 3.23.26 versions hei�t dieser
-Befehl @code{FLUSH SLAVE}. (Slave)
-
-@item @code{LOAD TABLE tabelle FROM MASTER}
- @tab L�dt eine Kopie der Tabelle vom Master auf den Slave. (Slave)
-
-@item @code{CHANGE MASTER TO master_def_list}
- @tab �ndert die Master-Parameters auf den Wert, der in
-@code{master_def_list} angegeben ist, und startet den Slave-Thread neu.
-@code{master_def_list} ist eine durch Kommas getrennte Liste
-@code{master_def}, wobei @code{master_def} eins der folgenden Elemente ist:
-@code{MASTER_HOST}, @code{MASTER_USER}, @code{MASTER_PASSWORD},
-@code{MASTER_PORT}, @code{MASTER_CONNECT_RETRY}, @code{MASTER_LOG_FILE}
-oder @code{MASTER_LOG_POS}. Beispiel:
-
-@example
-
-CHANGE MASTER TO
- MASTER_HOST='master2.meinefirma.com',
- MASTER_USER='replikation',
- MASTER_PASSWORD='gro33esgeheimnis',
- MASTER_PORT=3306,
- MASTER_LOG_FILE='master2-bin.001',
- MASTER_LOG_POS=4;
-
-@end example
-
-Sie m�ssen nur die Werte angeben, die ge�ndert werden sollen. Die Werte,
-die Sie auslassen, bleiben dieselben, ausser wenn Sie den Host oder den
-Port �ndern. In diesem Fall nimmt der Slave an, dass der Master ein anderer
-ist, weil Sie sich zu einem anderen Host oder �ber einen anderen Port
-verbinden. Daher treffen die alten Werte von Log und Position nicht mehr zu
-und werden automatisch auf eine leere Zeichenkette bzw. auf 0 zur�ck
-gesetzt (dem Startwert). Beachten Sie, dass sich der Slave beim Neustart an
-seinen alten Master erinnert. Falls das nicht w�nschenswert ist, sollten
-Sie die @file{master.info}-Datei l�schen, bevor Sie neu starten. Der Slave
-liest dann seinen Master aus der Datei @code{my.cnf} oder von der
-Kommandozeile. (Slave)
-
-@item @code{SHOW MASTER STATUS}
- @tab Stellt Statusinformationen �ber die Bin�r-Log-Datei des Masters zur
-Verf�gung. (Master)
-
-@item @code{SHOW SLAVE STATUS}
- @tab Stellt Statusinformationen �ber die wichtigsten Parameter des
-Slave-Threads zur Verf�gung. (Slave)
-@item @code{SHOW MASTER LOGS}
- @tab Nur verf�gbar ab Version 3.23.28. Listet die Bin�r-Log-Dateien auf
-dem Master auf. Sie sollten diesen Befehl vor @code{PURGE MASTER LOGS TO}
-benutzen, um herauszufinden, wie weit Sie gehen sollten.
-
-@item @code{PURGE MASTER LOGS TO 'logname'}
- @tab Verf�gbar ab Version 3.23.28. L�scht alle Replikations-Logs, die in
-der Index-Log-Datei aufgef�hrt sind, die vor dem angegebenen Log liegen und
-entfernt Sie aus dem Log-Index, so dass die angegebene Log-Datei nunmehr
-die erste wird. Beispiel:
-
-@example
-PURGE MASTER LOGS TO 'mysql-bin.010'
-@end example
-
-Dieser Befehl macht nichts und schl�gt mit einer Fehlermeldung fehl, wenn
-Sie einen aktiven Slave haben, der momentan eine der Log-Dateien liest, die
-Sie zu l�schen versuchen. Wenn Sie jedoch einen schlafenden Slave haben und
-gerade eine der Log-Dateien l�schen, die dieser Slave lesen will, wird der
-Slave nicht in der Lage sein zu replizieren, sobald er wach wird. Der
-Befehl kann sicher verwendet werden, w�hrend Slaves replizieren - Sie
-brauchen diese also nicht anhalten.
-
-Zuerst m�ssen Sie alle Slaves mit @code{SHOW SLAVE STATUS} �berpr�fen, um
-festzustellen, an welcher Log-Datei sie gerade sind, dann eine Auflistung
-aller Log-Dateien auf dem Master mit @code{SHOW MASTER LOGS} machen, die
-fr�heste davon herausfinden, an der noch ein Slave arbeitet (wenn alle
-Slaves aktuell sind, ist das die letzte Log-Datei auf der Liste), dann alle
-Logs, die Sie l�schen wollen, sichern (optional), und schlie�lich bis zum
-Ziel-Log l�schen.
-
-@end multitable
-
-
-@node Replication FAQ, Replication Problems, Replication SQL, Replication
-@c German node Replikations-FAQ
-@subsection Replikation - H�ufig gestellte Fragen
-
-@cindex @code{Binlog_Dump}
-@strong{Frage}: Warum sehe ich manchmal mehr als eine
-@code{Binlog_Dump}-Thread auf dem Master, nachdem ich den Slave neu
-gestartet habe?
-
-@strong{Antwort}: @code{Binlog_Dump} ist ein kontinuierlicher Prozess, der
-folgenderma�en vom Server gehandhabt wird:
-
-@itemize @bullet
-@item
-Zu den Aktualisierungen aufschlie�en.
-@item
-Sobald keine Aktualisierungen mehr �brig sind, in den Zustand
-@code{pThread_cond_wait()} gehen, durch den er entweder durch eine
-Aktualisierung oder einen Kill erweckt werden kann.
-@item
-Beim Aufwachen den Grund daf�r pr�fen. Wenn er nicht sterben soll,
-mit der @code{Binlog_dump}-Schleife weitermachen.
-@item
-Wenn ein schwerer Fehler auftritt, wenn zum Beispiel ein toter Client
-entdeckt wird, die Schleife beenden.
-@end itemize
-
-Wenn der Slave-Thread also beim Slave anh�lt, bemerkt das der entsprechende
-@code{Binlog_Dump}-Thread auf dem Master solange nicht, bis zumindest eine
-Aktualisierung (oder ein Kill) auf den Master durchgef�hrt wird, was
-ben�tigt wird, um ihn von @code{pThread_cond_wait()} aufzuwecken. In der
-Zwischenzeit k�nnte der Slave bereits eine weitere Verbindung ge�ffnet
-haben, die in einem weiteren @code{Binlog_Dump}-Thread resultiert.
-
-Das beschriebene Problem sollten in Versionen ab 3.23.26 nicht auftreten.
-In Version 3.23.26 kam @code{server-id} f�r jeden Replikationsserver hinzu,
-und nun werden alle alten Zombie-Threads auf dem Master gekillt, wenn ein
-neuer Replikations-Thread sich vom selben Slave aus verbindet.
-
-@strong{Frage}: Wie rotiere ich Replikations-Logs?
-
-@strong{Antwort}: In Version 3.23.28 sollten Sie den @code{PURGE MASTER
-LOGS TO}-Befehl benutzen, nachdem festgestellt wurde, welche Logs gel�scht
-werden k�nnen und nachdem sie optional gesichert wurden. In fr�heren
-Versionen ist der Prozess sehr viel anstrengender und kann nicht sicher
-durchgef�hrt werden, ohne alle Slaves anzuhalten, falls Sie planen,
-Log-Namen wiederholt zu verwenden. Sie m�ssen die Slave-Threads anhalten,
-die Bin�r-Log-Index-Datei editieren, alle alten Logs l�schen, den Master
-neu starten, die Slave-Threads neu starten und dann die alten Log-Dateien
-entfernen.
-
-
-@strong{Frage}: Wie aktualisiere ich bei einer laufenden
-Replikationseinrichtung?
-
-@strong{Antwort}: Wenn Sie vor Version 3.23.26 aktualisieren, sollten Sie
-nur die Master-Tabellen sperren, warten, bis die Slaves auf aktuellem Stand
-sind, und dann @code{FLUSH MASTER} auf dem Master und @code{FLUSH SLAVE}
-auf dem Slave laufen lassen, um die Logs zur�ckzusetzen, und danach neue
-Versionen des Masters und des Slaves neu starten. Beachten Sie, dass der
-Slave f�r einige Zeit heruntergefahren bleiben kann - weil der Master alle
-Aktualisierung loggt, wird der Slave in der Lage sein, auf den aktuellen
-Stand zu kommen, sobald er hoch gefahren ist und sich verbinden kann.
-
-Nach Version 3.23.26 wurde das Replikationsprotokoll f�r �nderungen
-gesperrt, daher k�nnen Sie Masters und Slaves im laufenden Betrieb auf eine
-neuere 3.23-Version aktualisieren, und Sie k�nnen unterschiedliche
-Versionen von MySQL auf Slave und Master laufen haben, solange beide neuer
-als Version 3.23.26 sind.
-
-@cindex Replikation, Zweiweg-
-@strong{Frage}: Welche Dinge sollte ich beachten, wenn ich
-Zweiweg-Replikation aufsetze?
-
-@strong{Antwort}: MySQL-Replikation unterst�tzt derzeit kein
-Sperr-Protokoll zwischen Master und Slave, um die Atomizit�t einer
-verteilten (Cross-Server-) Aktualisierung zu gew�hrleisten. Mit anderen
-Worten ist es f�r einen Client A m�glich, eine Aktualisierung zu Co-Master
-1 zu machen. In der Zwischenzeit, bevor er sich an Co-Master 2 wendet,
-k�nnte Client B eine Aktualisierung auf Co-Master 2 machen, die dazu f�hrt,
-dass die Aktualisierung von Client A anders funktioniert als auf Master 1.
-Wenn daher die Aktualisierung von Client A zu Co-Master 2 durchdringt,
-produziert das Tabellen, die anders sein werden als die auf Co-Master 1,
-selbst nachdem alle Aktualisierungen von Co-Master 2 ebenfalls durchgef�hrt
-wurden. Daher sollten sie keine zwei Server in einer Zweiweg-Replikation
-verketten, es sei denn, Sie k�nnen sicher sein, dass Ihre Aktualisierungen
-immer in bestimmter Reihenfolge ablaufen, oder indem Sie irgendwie in Ihrem
-Client-Code Vorkehrungen gegen Aktualisierung treffen, die nicht in der
-richtigen Reihenfolge sind.
-
-Sie m�ssen sich auch dar�ber im Klaren sein, dass Zweiweg-Replikation Ihre
-Performance nicht wesentlich verbessert, falls �berhaupt, sofern
-Aktualisierungen betroffen sind. Beide Server m�ssen ungef�hr dieselbe
-Menge Aktualisierungen durchf�hren, was auch ein Server h�tte tun k�nnen.
-Der einzige Unterschied liegt darin, dass es sehr viel weniger
-Lock-Contention gibt, weil die Aktualisierungen, die von einem anderen
-Server stammen, in einem Slave-Thread serialisiert werden. Dennoch kann der
-erzielte Vorteil durch Netzwerk-Verz�gerungen konterkariert werden.
-
-@cindex Performance, verbessern
-@cindex erh�hen, Performance
-@strong{Frage}: Wie kann ich Replikation benutzen, um die Performance
-meines Systems zu verbessern?
-
-@strong{Antwort}: Sie sollten einen Server als Master aufsetzen und alle
-Schreibvorg�nge zu ihm lenken, und so viele Slaves wie m�glich einrichten
-und die Lesevorg�nge zwischen Master und Slaves verteilen. Ausserdem k�nnen
-Sie die Slaves mit @code{--skip-bdb}, @code{--low-priority-updates} und
-@code{--delay-key-write-for-all-tables} starten, um f�r die Slaves
-Geschwindigkeitsverbesserungen zu erzielen. In diesem Fall benutzt der
-Slave nicht transaktionale @code{MyISAM}-Tabellen anstelle von
-@code{BDB}-Tabellen, um mehr Geschwindigkeit zu erhalten.
-
-@strong{Frage}: Was muss ich in meinem Client-Code tun, damit dieser
-Performance-verbessernde Replikation nutzt?
-
-@strong{Antwort}:
-Wenn der Teil Ihres Codes, der f�r den Datenbankzugriff zust�ndig ist,
-korrekt abstrahiert / modularisiert ist, sollte die Konvertierung zur
-replizierten Einrichtung sehr glatt und einfach verlaufen: �ndern Sie die
-Implementation Ihres Datenbankzugriffs so, dass von irgend einem Slave oder
-dem Master gelesen und immer zum Master geschrieben wird. Wenn Ihr Code
-nicht diese Abstraktionsebene besitzt, ist die Einrichtung eines
-Replikationssystems ein guter Grund, ihn zu s�ubern. Sie k�nnten damit
-beginnen, eine Wrapper-Bibliothek oder ein Wrapper-Modul mit folgenden
-Funktionen zu benutzen:
-
-@itemize @bullet
-@item
-@code{safe_writer_connect()}
-@item
-@code{safe_reader_connect()}
-@item
-@code{safe_reader_query()}
-@item
-@code{safe_writer_query()}
-@end itemize
-
-@code{safe_} bedeutet, dass die Funktion sich um die Handhabung jeglicher
-Fehlerbedingungen k�mmert.
-
-Danach sollten Sie Ihren Client-Code so umwandeln, dass er die
-Wrapper-Bibliothek benutzt. Dieser Prozess kann anfangs etwas anstrengend
-und aufregend sein, wird sich aber auf lange Sicht lohnen. Alle
-Applikationen, die dem geschilderten Muster folgen, werden ebenfalls Nutzen
-aus der Master-/Slaves-L�sung ziehen. Der Code wird sich viel einfacher
-pflegen lassen und Optionen zur Probleml�sung werden trivial sein. Sie
-brauchen einfach nur ein oder zwei Funktionen zu �ndern, um zum Beispiel zu
-loggen, wie lang jede Anfrage dauerte, oder welche Anfrage unter Ihren
-Tausenden einen Fehler produzierte. Wenn Sie schon eine Menge Code
-geschrieben haben, wollen Sie den Umwandlungsprozess wahrscheinlich
-automatisieren. Hierf�r k�nnen Sie zum Beispiel Monty's
-@code{replace}-Dienstprogramm benutzen, das der Standard-Distribution von
-MySQL beiliegt, oder Ihr eigenes Perl-Skript schreiben. Hoffentlich folgt
-Ihr Code irgend einem erkennbaren Muster - wenn nicht, ist es
-wahrscheinlich ohnehin besser, ihn neu zu schreiben, oder zumindest, ihn
-durchzugehen und manuell in ein Muster zu bringen.
-
-Beachten Sie, dass Sie nat�rlich andere Namen f�r die Funktionen verwenden
-k�nnen. Wichtig ist, eine einheitliche Schnittstelle f�r Verbindungen zum
-Lesen, Verbindungen zum Schreiben, Durchf�hren von Lesevorg�ngen und
-Durchf�hrung von Schreibvorg�ngen zu haben.
-
-
-@strong{Frage}: Wann und in welchem Umfang kann MySQL-Replikation die
-Performance meines Systems verbessern?
-
-@strong{Antwort}: MySQL-Replikation bringt die meisten Vorteile auf einem
-System mit h�ufigen Lesevorg�ngen und nicht so h�ufigen Schreibvorg�ngen.
-Theoretisch k�nnen Sie eine Einrichtung aus einem Master und vielen Slaves
-so skalieren, dass Sie solange Slaves hinzuf�gen, bis Sie entweder keine
-Netzwerk-Bandbreite mehr haben oder bis Ihre Aktualisierungslast so weit
-ansteigt, dass der Master sie nicht mehr handhaben kann.
-
-Im festlegen zu k�nnen, wie viele Slaves sie haben k�nnen, bevor die
-zus�tzlichen Vorteile aufgewogen werden, und um wieviel Sie die Performance
-Ihrer Site steigern k�nnen, m�ssen Sie Ihre Anfragenmuster kennen und
-empirisch (durch Benchmarks) festlegen, wie das Verh�ltnis zwischen dem
-Durchsatz von Lesevorg�ngen (pro Sekunde, oder @code{max_reads}) und
-Schreibvorg�ngen (@code{max_writes}) auf einem typischen Master und einem
-typischen Slave ist. Das unten stehende Beispiel zeigt Ihnen eine eher
-vereinfachte Berechnung, was Sie mit Replikation f�r ein imagin�res System
-erreichen k�nnen.
-
-Nehmen wir an, Ihr Systemlast besteht aus 10% Schreibvorg�ngen und 90%
-Lesevorg�ngen, und Sie haben festgestellt, dass @code{max_reads} = 1200 - 2
-* @code{max_writes} ist. Mit anderen Worten kann Ihr System 1.200
-Lesevorg�nge pro Sekunde ohne Schreibzugriffe ausf�hren, und der
-durchschnittliche Schreibvorgang ist zweimal so langsam wie der
-durchschnittliche Lesevorgang, und das Verh�ltnis ist linear. Nehmen wir
-ferner an, dass Ihr Master und Slave dieselbe Kapazit�t haben, und dass es
-N Slaves und 1 Master gibt. Dann gilt f�r jeden Server (Master oder Slave):
-
-@code{lesen = 1200 - 2 * schreiben} (aus Benchmarks)
-
-@code{lesen = 9 * schreiben / (N + 1) } (lesen aufgeteilt, aber schreiben
-geht an alle Server)
-
-@code{9 * schreiben / (N+1) + 2 * schreiben = 1200}
-
-@code{schreiben = 1200/(2 + 9/(N+1)}
-
-Wenn also N = 0, was bedeutet, dass es keine Replikation gibt, kann Ihr
-System 1200 / 11, also etwa 109 Schreibvorg�nge pro Sekunden handhaben (was
-hei�t, dass Sie neunmal so viele Lesevorg�nge haben, was der Natur Ihrer
-Applikation entspricht).
-
-Wenn N = 1 ist, k�nnen Sie bis zu 184 Schreibvorg�nge pro Sekunde haben.
-
-Wenn N = 8 ist, k�nnen Sie bis zu 400 haben.
-
-Wenn N = 17 ist, k�nnen Sie 480 haben.
-
-Wenn schlie�lich N gegen unendlich geht (und Ihr Budget gegen negativ
-unendlich), k�nnen Sie sehr nahe an 600 Schreibvorg�nge pro Sekunde kommen
-und damit den Systemdurchsatz um etwa den Faktor 5,5 erh�hen. Mit nur 8
-Servern jedoch kommen Sie bereits auf eine Steigerung um fast den Faktor 4.
-
-Beachten Sie, dass diese Berechnungen von unbegrenzter Netzwerk-Bandbreite
-ausgehen und verschiedene andere Faktoren vernachl�ssigen, die auf Ihrem
-System signifikant sein k�nnten. In vielen F�llen werden Sie nicht in der
-Lage sein, pr�zise vorauszusagen, was auf Ihrem System passieren wird, wenn
-Sie N Replikations-Slaves hinzuf�gen. Dennoch kann die Beantwortung
-folgender Fragen Ihnen helfen zu entscheiden, ob und wie viel (wenn
-�berhaupt) Replikation bewirken kann, dass sich Ihre System-Performance
-verbessert:
-
-@itemize @bullet
-@item
-Was ist das Lese-/Schreibverh�ltnis auf Ihrem System?
-@item
-Wieviel zus�tzliche Schreiblast kann ein Server handhaben, wenn Sie die
-Leselast verringern?
-@item
-F�r wie viele Slave haben Sie Bandbreite auf Ihrem Netzwerk?
-@end itemize
-
-@strong{Frage}: Wie kann ich Replikation benutzen, um Redundanz / hohe
-Verf�gbarkeit zur Verf�gung zu stellen?
-
-@strong{Antwort}: Mit den momentan verf�gbaren Features w�rden Sie einen
-Master und einen Slave (nicht mehrere Slaves) aufsetzen und ein Skript
-schreiben, das den Master beobachtet, um zu sehen, ob er hochgefahren ist,
-und Ihre Applikationen und die Slaves anweisen, den Master im Falle von
-Fehlschl�gen zu �ndern. Einige Vorschl�ge:
-set up a master und a slave (or several slaves) und write a Skript
-
-@itemize @bullet
-@item
-Um einem Slave mitzuteilen, den Master zu �ndern, benutzen Sie den
-@code{CHANGE MASTER TO}-Befehl.
-@item
-Eine gute M�glichkeit, Ihre Applikationen dar�ber informiert zu halten, wo
-der Master ist, ist ein dynamischer DNS-Eintrag f�r den Master. Bei
-@strong{bind} k�nnen Sie @code{nsupdate} benutzen, um Ihr DNS dynamisch zu
-aktualisieren.
-@item
-Sie sollten Ihre Slaves mit der @code{log-bin}-Option und ohne
-@code{log-slave-updates} laufen lassen. Auf diese Art wird der Slave bereit
-sein, ein Master zu werden, sobald Sie @code{STOP SLAVE} eingeben,
-@code{RESET MASTER} und @code{CHANGE MASTER TO} auf den anderen Slaves. Das
-wird auch dabei helfen, fehlgelaufene Aktualisierungen zu entdecken, die
-auf Grund von Fehlkonfiguration des Slaves passieren (im Idealfall sollten
-Sie die Zugriffsrechte so konfigurieren, dass kein Client einen Slave
-aktualisieren kann, ausser der Slave-Thread), in Kombination mit den Bugs
-in Ihren Client-Programmen (die den Slave nie direkt aktualisieren
-sollten).
-
-@end itemize
-
-Momentan arbeiten wir an der Integration eines Systems in MySQL, das
-automatisch den Master ausw�hlt, aber bis es fertig ist, m�ssen Sie Ihre
-eigenen Beobachtungswerkzeuge schaffen.
-
-
-@node Replication Problems, , Replication FAQ, Replication
-@c German node Replikationsprobleme
-@subsection Probleml�sung bei Replikation
-
-Wenn Sie den Anweisungen gefolgt sind und Ihre Replikationseinrichtung
-nicht funktioniert, beseitigen Sie zun�chst die M�glichkeit von
-Benutzerfehlern, indem Sie folgendes pr�fen:
-
-@itemize @bullet
-@item
-Loggt der Master in die Bin�r-Log-Datei? Pr�fen Sie das mit @code{SHOW
-MASTER STATUS}. Wenn das der Fall ist, ist die @code{Position} nicht 0.
-Wenn nicht, �berpr�fen Sie, ob Sie dem Master die @code{log-bin}-Option
-angegeben und die @code{server-id} gesetzt haben.
-@item
-L�uft der Slave? �berpr�fen Sie das mit @code{SHOW SLAVE STATUS}. Die
-Antwort steht in der @code{Slave_running}-Spalte. Wenn nicht, �berpr�fen
-Sie die Slave-Optionen und �berpr�fen Sie die Fehler-Log-Datei auf
-Meldungen.
-@item
-Wenn der Slave l�uft, hat er eine Verbindung mit dem Master hergestellt?
-F�hren Sie @code{SHOW PROCESSLIST} aus, finden Sie den Thread mit dem
-@code{System user}-Wert in der @code{User}-Spalte und @code{none} in der
-@code{Host}-Spalte und �berpr�fen Sie die @code{State}-Spalte. Wenn dort
-steht @code{connecting to master}, �berpr�fen Sie die Berechtigungen f�r
-den Replikations-Benutzer auf dem Master, den Master-Hostnamen, Ihre
-DNS-Einrichtung, ob der Master tats�chlich l�uft, ob er durch den Slave
-erreichbar ist, und wenn all das in Ordnung zu sein scheint, lesen Sie die
-Fehler-Log-Dateien.
-@item
-Wenn der Slave lief, aber dann anhielt, schauen Sie in die Ausgabe von SHOW
-SLAVE STATUS und �berpr�fen Sie die Fehler-Log-Dateien. Das passiert
-�blicherweise, wenn eine Anfrage, die auf dem Master funktionierte, auf dem
-Slave fehlschl�gt. Das sollte nie vorkommen, wenn Sie einen korrekten
-Schnappschuss des Masters aufgenommen haben und die Daten nie auf dem Slave
-ausserhalb des Slave-Threads ver�ndern. Wenn das doch auftritt, ist es ein
-Bug und sollte berichtet werden.
-@item
-Wenn eine Anfrage, die auf dem Master funktionierte, nicht auf dem Slave
-l�uft, und eine komplette Datenbank-Synchronisation (das richtige, was man
-tun sollte) nicht ratsam erscheint, versuchen Sie folgendes:
-@itemize @minus
-@item
-�berpr�fen Sie zun�chst, ob irgend ein 'streunender' Datensatz im Weg ist.
-Finden Sie heraus, wie das geschehen konnte, dann l�schen Sie ihn und
-lassen @code{SLAVE START} laufen.
-@item
-Wenn das Obige nicht funktioniert oder nicht zutrifft, versuchen Sie
-herauszufinden, ob es sicher ist, die Aktualisierung manuell durchzuf�hren
-(falls notwendig) und ignorieren Sie dann die n�chste Anfrage vom Master.
-@item
-Wenn Sie sich entschieden haben, dass Sie die n�chste Anfrage �berspringen
-k�nnen, f�hren Sie @code{SET SQL_SLAVE_SKIP_COUNTER=1; SLAVE START;} aus,
-um eine Anfrage zu �berspringen, die kein auto_increment oder
-last_insert_id benutzt, ansonsten @code{SET SQL_SLAVE_SKIP_COUNTER=2; SLAVE
-START;}. Der Grund, warum auto_increment- / last_insert_id-Anfragen anders
-sind, liegt darin, dass f�r Sie zwei Ereignisse in der Bin�r-Log-Datei des
-Masters verzeichnet sind.
-
-@item
-Wenn Sie sicher sind, dass der Slave perfekt mit dem Master synchronisiert
-gestartet ist, und dass niemand die fraglichen Tabellen ausserhalb des
-Slave-Threads aktualisiert hat, berichten Sie den Bug, damit wir die oben
-beschriebenen Tricks nicht noch einmal machen m�ssen.
-@end itemize
-@item
-Stellen Sie sicher, dass es sich nicht um alten Bug handelt, indem
-Sie auf die aktuellste Version aktualisieren.
-@item
-Wenn alles Weitere fehlschl�gt, lesen Sie die Fehler-Log-Dateien. Wenn
-diese Gro� sind, f�hren Sie ein @code{grep -i slave /pfad/zu/your-log.err}
-auf dem Slave durch. Es gibt kein allgemeines Muster, nach dem man auf dem
-Master suchen k�nnte, weil die einzigen Fehler, die dieser mitschreibt,
-allgemeine Systemfehler sind - falls m�glich, wird er Fehler an die Slaves
-senden, wenn etwas schief ging.
-@end itemize
-
-Wenn Sie sicher sind, dass es keine Benutzerfehler gibt und die Replikation
-immer noch nicht funktioniert oder nicht stabil ist, ist es an der Zeit,
-einen Bug-Bericht auszuarbeiten. Um dem Bug auf die Spur zu kommen,
-brauchen wir soviel Informationen von Ihnen wie m�glich. Bitte nehmen Sie
-sich etwas Zeit und schreiben Sie einen guten Bug-Bericht. Im Idealfall
-h�tten wir gerne einen Test-Fall in dem Format, das Sie im
-@code{mysql-test/t/rpl*}-Verzeichnis des Source-Baums finden. Wenn Sie
-einen solchen Test-Fall schicken, k�nnen Sie in den meisten F�llen ein Patch
-innerhalb von ein oder zwei Tagen erwarten. Diese Zeitspanne h�ngt
-allerdings von einer Anzahl weiterer Faktoren ab.
-
-Die zweitbeste Option ist ein einfaches Programm mit leicht
-konfigurierbaren Verbindungsargumenten f�r Master und Slave, das das
-Problem auf Ihrem System veranschaulicht. Sie k�nnen dies in Perl oder C
-schreiben, abh�ngig davon, welche Sprache Sie besser beherrschen.
-
-Wenn Sie den Bug auf eine der beiden oben beschriebenen Weisen
-demonstrieren k�nnen, benutzen Sie @code{mysqlbug}, um einen Bug-Bericht
-vorzubereiten, und schicken Sie ihn an @email{bugs@@lists.mysql.com}. Wenn
-Sie ein 'Phantom' haben - ein Problem, das auftritt, aber nicht einfach
-reproduziert werden kann - tun Sie folgendes:
-
-@itemize @bullet
-@item
-Stellen Sie sicher, dass kein Benutzerfehler im Spiel ist. Beispielsweise
-k�nnte der Slave ausserhalb des Slave-Threads aktualisiert werden - dann
-sind die Daten nicht synchronisiert und Sie haben wom�glich einen Fehler
-wegen doppelter Schl�sseleintr�ge bei Aktualisierungen, wobei der
-Slave-Thread dann anh�lt und darauf wartet, dass Sie die Tabellen manuell
-in Ordnung und in Synchronisation bringen.
-@item
-Lassen Sie den Slave mit @code{log-slave-updates} und @code{log-bin} laufen
-- das beh�lt eine Log-Datei aller Aktualisierungen auf dem Slave bei.
-@item
-Sichern Sie alle Beweise, bevor Sie die Replikation zur�ck setzen. Wenn wir
-keine oder nur schemenhafte Informationen haben, brauchen wir eine Weile,
-um dem Problem auf den Grund zu gehen. Die Beweise, die Sie f�r uns sammeln
-sollten, sind:
-@itemize @minus
-@item
-Alle Bin�r-Log-Dateien auf dem Master.
-@item
-Alle Bin�r-Log-Dateien auf dem Slave.
-@item
-Die Ausgabe von @code{SHOW MASTER STATUS} auf dem Master zu der Zeit, als
-Sie das Problem entdeckten.
-@item
-Die Ausgabe von @code{SHOW SLAVE STATUS} auf dem Master zu der Zeit, als
-Sie das Problem entdeckten.
-@item
-Fehler-Log-Dateien auf Master und Slave.
-@end itemize
-@item
-Benutzen Sie @code{mysqlbinlog}, um die Bin�r-Log-Dateien zu untersuchen.
-Folgendes sollte hilfreich sein, um eine Anfrage zu finden, die Probleme
-verursacht, zum Beispiel:
-@example
-mysqlbinlog -j pos_from_slave_status /pfad/zu/log_from_slave_status | head
-@end example
-@end itemize
-
-Sobald Sie die Beweise des Phantomproblems gesammelt haben, versuchen Sie
-zuerst, es in einen separaten Test-Fall zu isolieren. Berichten Sie dann
-das Problem an @email{bugs@@lists.mysql.com}, wobei Sie soviel
-Informationen wie m�glich mitschicken.
-
-
-
-
-@node MySQL Optimisation, Reference, MySQL Database Administration, Top
-@c German node MySQL-Optimierung
-@chapter MySQL-Optimierung
-
-
-
-Optimierung ist eine komplizierte Aufgabe, weil sie ein umfassendes
-Verst�ndnis des gesamten Systems voraussetzt. Es ist m�glich, einige lokale
-Optimierungen Ihres Systems oder Ihrer Applikation mit geringem Wissen
-durchzuf�hren. Je optimaler Sie allerdings Ihr System gestalten wollen,
-desto mehr m�ssen Sie dar�ber wissen.
-
-Dieses Kapitel erkl�rt und gibt Beispiele f�r verschiedene M�glichkeiten,
-MySQL zu optimieren. Denken Sie allerdings daran, dass es immer noch
-zus�tzliche M�glichkeiten gibt, das System noch schneller zu machen.
-
-
-@menu
-* Optimise Overview::
-* Query Speed::
-* Locking Issues::
-* Optimising Database Structure::
-* Optimising the Server::
-* Disk issues::
-@end menu
-
-@node Optimise Overview, Query Speed, MySQL Optimisation, MySQL Optimisation
-@c German node �berblick �ber Optimierung
-@section �berblick �ber Optimierung
-
-Der wichtigste Teil, um ein System schnell zu machen, ist nat�rlich das
-grundlegende Design. Ausserdem m�ssen Sie wissen, welche Dinge Ihr System
-macht und was die Flaschenh�lse sind.
-
-Die wichtigsten Flaschenh�lse sind:
-@itemize @bullet
-@item Suchvorg�nge auf Festplatte.
-Die Festplatte ben�tigt Zeit, um ein St�ck Daten zu finden. Bei modernen
-Festplatten (Stand: 1999) ist die mittlere Zugriffszeit �blicherweise
-weniger als 10 ms, daher k�nnen theoretisch etwa 1.000 Suchvorg�nge pro
-Sekunde durchgef�hrt werden. Bei neueren Festplatten wird diese Zeit
-allm�hlich besser. F�r einzelne Tabellen ist sie sehr schwer zu optimieren.
-Eine M�glichkeit, das zu optimieren, besteht darin, Daten auf mehr als eine
-Platte zu verteilen.
-
-@item Lesen von / Schreiben auf Festplatte.
-Wenn die Festplatte in der richtigen Position ist, um die Daten zu lesen,
-die wir brauchen, kann sie bei modernen Platten (Stand: 1999) etwas 10 bis
-20 MB pro Sekunde heraus geben. Das ist leichter zu optimieren als
-Suchvorg�nge, weil man von mehrfachen Festplatten parallel lesen kann.
-
-@item CPU-Zyklen.
-Wenn die Daten im Hauptspeicher sind (oder bereits dort waren), m�ssen sie
-verarbeitet werden, um das Ergebnis zu erhalten. Kleine Tabellen im
-Vergleich zum Arbeitsspeicher ist der Faktor, der am meisten begrenzt. Auf
-der anderen Seite ist Geschwindigkeit bei kleinen Tabellen �blicherweise
-nicht das Problem.
-
-@item Speicher-Bandbreite.
-Wenn der Prozessor mehr Daten braucht, als in den CPU-Cache passen, wird
-die Bandbreite des Hauptspeichers zum Flaschenhals. Auf den meisten
-Systemen ist das ein ungew�hnlicher Flaschenhals, aber man sollte sich
-dessen bewusst sein.
-@end itemize
-
-
-
-
-@menu
-* Design Limitations::
-* Portability::
-* Internal use::
-* MySQL Benchmarks::
-* Custom Benchmarks::
-@end menu
-
-@node Design Limitations, Portability, Optimise Overview, Optimise Overview
-@c German node Design-Einschr�nkungen
-@subsection MySQL-Design-Einschr�nkungen
-
-@cindex Design, Einschr�nkungen
-@cindex Einschr�nkungen, Design
-
-Weil MySQL extrem schnelles Tabellensperren beherrscht (mehrfache Leser /
-einzelne Schreiber), ist das gr��te verbleibende Problem eine Mischung aus
-einem laufenden Strom von Einf�gevorg�ngen und langsamen Selects auf
-dieselbe Tabelle.
-
-Wir glauben, dass diese Wahl auf einer sehr gro�en Anzahl von Systemen
-letztlich einen Gewinn darstellt. Auch dieser Fall ist �blicherweise
-dadurch zu l�sen, dass man mehrfache Kopien der Tabelle vorh�lt, aber man
-ben�tigt mehr Anstrengung und Hardware.
-
-Wir arbeiten auch an einigen Erweiterungen, um dieses Problem in Hinsicht
-auf einige h�ufige Applikationsnischen zu l�sen.
-
-
-@node Portability, Internal use, Design Limitations, Optimise Overview
-@c German node Portabilit�t
-@subsection Portabilit�t
-
-@cindex Portabilit�t
-@cindex Crash-me-Programm
-@cindex Programme, Crash-me
-
-Weil alle SQL-Server unterschiedliche Teile von SQL implementieren, ist es
-immer Arbeit, portable SQL-Applikationen zu schreiben. Bei sehr einfachen
-Selects und Inserts ist das sehr einfach, aber je mehr Sie brauchen, desto
-schwieriger wird es. Wenn Sie eine Applikation wollen, die bei vielen
-Datenbanken noch schnell l�uft, wird es sogar noch schwieriger!
-
-Um eine komplexe Applikation portabel zu machen, m�ssen Sie sich f�r eine
-Reihe von SQL-Servern entscheiden, mit denen sie funktionieren soll.
-
-Sie k�nnen das MySQL-Crash-me-Programm bzw. die Webpage
-@uref{http://www.mysql.com/information/crash-me.php} benutzen, um
-Funktionen, Typen und Einschr�nkungen zu finden, die Sie mit einer Auswahl
-von Datenbank-Servern benutzen k�nnen. Crash-me testet bei weitem nicht
-alles, was m�glich ist, aber mit etwa 450 unterschiedlichen Dingen ist es
-recht umfassend.
-
-Sie sollten zum Beispiel keine Spaltennamen benutzen, die l�nger als 10
-Zeichen sind, wenn Sie auch Informix oder DB2 benutzen wollen.
-
-Sowohl die MySQL-Benchmarks als auch die Crash-me-Programme sind sehr
-Datenbank-abh�ngig. Indem Sie einen Blick darauf werfen, wie wir damit
-umgegangen sind, bekommen Sie ein Gef�hl daf�r, was Sie in Ihrer
-Applikation schreiben m�ssen, damit diese Datenbank-unabh�ngig l�uft. Die
-Benchmark-Tests selbst befinden sich im @file{sql-bench}-Verzeichnis der
-MySQL-Quelldistribution. Sie sind in Perl mit der
-DBI-Datenbank-Schnittstelle geschrieben (die den Zugriffsteil des Problems
-l�st).
-
-Siehe @uref{http://www.mysql.com/information/benchmarks.html} wegen der
-Ergebnisse aus diesem Benchmark-Test.
-
-Wie Sie an den Ergebnissen sehen, haben alle Datenbanken einige
-Schwachpunkte, das hei�t, sie haben verschiedene Design-Kompromisse, die
-zu unterschiedlichem Verhalten f�hren.
-
-Wenn Sie nach Datenbank-Unabh�ngigkeit streben, m�ssen Sie ein gutes Gef�hl
-f�r die Flaschenh�lse jedes SQL-Servers bekommen. MySQL ist SEHR schnell
-beim Abrufen und Aktualisieren von Dingen, hat aber Probleme, wenn
-gleichzeitig langsame Leser / Schreiber auf dieselbe Tabelle zugreifen.
-Oracle hat ein gro�es Problem, wenn Sie versuchen, auf Zeilen zuzugreifen,
-der k�rzlich aktualisiert wurden (solange, bis sie auf Platte
-zur�ckgeschrieben wurden). Transaktionale Datenbanken sind allgemein nicht
-sehr gut darin, Zusammenfassungstabellen aus Log-Tabellen zu erzeugen, weil
-in diesem Fall Sperren auf Zeilenebene fast nutzlos ist.
-
-Um Ihre Applikation @emph{wirklich} Datenbank-unabh�ngig zu machen, m�ssen
-Sie eine leicht erweiterbare Schnittstelle definieren, �ber die Sie Ihre
-Daten manipulieren. Weil auf den meisten Systemen C++ verf�gbar ist, ist es
-sinnvoll, C++-Klassen als Schnittstellen zu den Datenbanken zu benutzen.
-
-Wenn Sie irgend ein spezifisches Feature einer Datenbankbenutzung (wie den
-@code{REPLACE}-Befehl in MySQL), sollten Sie eine Methode f�r die anderen
-SQL-Server codieren, um dasselbe Feature (wenngleich langsamer) zu
-implementieren. Bei MySQL k�nnen Sie die @code{/*! */}-Syntax benutzen, um
-MySQL-spezifische Schl�sselw�rter in einer Anfrage zu verwenden. Der Code
-innerhalb von @code{/**/} wird von den meisten anderen SQL-Servern als
-Kommentar behandelt (ignoriert).
-
-Wenn WIRKLICH hohe Performance wichtiger als Exaktheit ist, wie bei einigen
-Web-Applikationen, besteht eine M�glichkeit darin, eine Applikationsebene
-zu erzeugen, die alle Ergebnisse cachet, um Ihnen noch h�here Performance
-zu bringen. Indem Sie alte Ergebnisse nach einer Weile 'auslaufen' lassen,
-k�nnen Sie den Cache in vern�nftiger Weise 'frisch' halten. Das ist in
-F�llen extrem hoher Last recht nett, wobei Sie den Cache dynamisch
-vergr��ern und die Verfallszeit (Expire Timeout) h�her setzen k�nnen, bis
-wieder Normalauslastung eintritt.
-
-In diesem Fall sollte die Tabellenerzeugungsinformation Informationen �ber
-die urspr�ngliche Cache-Gr��e enthalten und dar�ber, wie oft die Tabelle
-normalerweise aktualisiert (refresh) werden sollte.
-
-
-@node Internal use, MySQL Benchmarks, Portability, Optimise Overview
-@c German node Interner Gebrauch
-@subsection Wof�r benutzen wir MySQL?
-
-@cindex Gebrauch, von MySQL
-@cindex Kunden, von MySQL
-
-In der anf�nglichen Phase der Entwicklung von MySQL wurden die Features von
-MySQL f�r unseren gr��ten Kunden gemacht. Dieser macht Data-Warehousing
-f�r eine Reihe der gr��ten Einzelh�ndler in Schweden.
-
-Aus allen Verkaufsstellen erhalten wir w�chentliche Zusammenfassungen aller
-Bonuskarten-Transaktionen, und es wird erwartet, dass daraus n�tzliche
-Informationen f�r die Eigent�mer der Verkaufsstellen zur Verf�gung gestellt
-werden, damit diese herausfinden k�nnen, wie ihre Werbema�nahmen ihre
-Kunden beeinflussen.
-
-Die Datenmenge ist recht riesig (etwa 7 Millionen
-Zusammenfassungs-Transaktionen pro Monat), und wir haben Daten von 4 bis 10
-Jahren, die wir dem Benutzer pr�sentieren m�ssen. Wir bekamen w�chentliche
-Anfragen von Kunden, die 'sofortigen' Zugriff auf neue Berichte aus diesen
-Daten wollten.
-
-Die L�sung bestand darin, alle Informationen monatsweise in komprimierten
-'Transaktions-' Tabellen zu speichern. Wir haben einen Satz einfacher
-Makros (ein Skript), die aus diesen Tabellen Zusammenfassungstabellen
-erzeugen, die nach verschiedenen Kriterien gruppiert sind (Produktgruppe,
-Kunden-ID, Verkaufsstelle usw.). Die Berichte sind Web-Seiten, die
-dynamisch durch ein kleines Perl-Skript erzeugt werden, das eine Web-Seite
-parst, die enthaltenen SQL-Statements ausf�hrt und die Ergebnisse einf�gt.
-Wir h�tten statt dessen PHP oder mod_perl benutzt, aber diese waren damals
-noch nicht verf�gbar.
-
-F�r grafische Darstellungen schrieben wir ein einfaches Werkzeug in
-@code{C}, das GIFs auf der Grundlage der Ergebnisse einer SQL-Anfrage
-erzeugen kann (nach einigem Verarbeiten des Ergebnisses). Dieses wird
-ebenfalls dynamisch durch ein Perl-Skript ausgef�hrt, das die
-@code{HTML}-Dateien parst.
-
-In den meisten F�llen kann ein neuer Bericht einfach durch das Kopieren
-eines bestehenden Skripts und das Ver�ndern der SQL-Anfrage darin erzeugt
-werden. In einigen F�llen m�ssen wir einer bestehenden
-Zusammenfassungstabelle weitere Felder hinzuf�gen oder eine neue
-generieren, aber auch das ist recht einfach, weil wir alle
-Transaktionstabellen auf Platte haben. (Momentan haben wir mindestens 50 GB
-an Transaktionstabellen und 200 GB weiterer Kundendaten.)
-
-Wir lassen unsere Kunden auch direkt mit ODBC auf die Transaktionstabellen
-zugreifen, so dass fortgeschrittene Benutzer selbst mit den Daten
-experimentieren k�nnen.
-
-Wir hatten mit der Handhabung keinerlei Probleme, auf einer recht
-bescheidenen Sun Ultra SPARCstation (2x200 MHz). K�rzlich haben wir einen
-unserer Server auf eine mit 2 Prozessoren best�ckte 400 MHz-UltraSPARC
-erweitert und planen jetzt, Transaktionen auf Produktebene zu handhaben,
-was eine zehnfache Steigerung der Datenmenge bedeuten w�rde. Wir glauben,
-dass wir auch damit Schritt halten k�nnen, indem wir unseren Systemen
-einfach mehr Festplattenplatz hinzuf�gen.
-
-Wir experimentieren auch mit Intel-Linux, um in der Lage zu sein, mehr
-CPU-Power preisg�nstiger zu erhalten. Jetzt, wo wir das bin�re portable
-Datenbankformat haben (neu seit Version 3.23), werden wir dieses f�r einige
-Teile der Applikation benutzen.
-
-Unser anf�ngliches Gef�hl sagt uns, dass Linux viel besser bei geringer bis
-mittlerer Last ist, w�hrend Solaris wegen der extremen
-Festplatten-Eingabe-/Ausgabe-Geschwindigkeit (Disk-IO) bei Hochlast besser
-ist, aber wir k�nnen noch nichts Endg�ltiges dar�ber aussagen. Nach einigen
-Diskussionen mit den Linux-Kernel-Entwicklern ist das eventuell ein
-Seiteneffekt von Linux, das dem Stapel-Job so viel Ressourcen gibt, dass
-die interaktive Performance sehr gering wird. Dadurch scheint die Maschine
-sehr langsam und unempf�nglich f�r Eingaben zu lassen, w�hrend gro�e
-Stapel-Jobs abgearbeitet werden. Wir hoffen, dass dies in zuk�nftigen
-Linux-Kernels besser gehandhabt wird.
-
-
-@node MySQL Benchmarks, Custom Benchmarks, Internal use, Optimise Overview
-@c German node MySQL-Benchmarks
-@subsection Die MySQL-Benchmark-Suite
-
-@cindex Benchmark-Suite
-@cindex Crash-me-Programm
-
-Dieser Abschnitt sollte eine technische Beschreibung der MySQL-
-Benchmark-Suite (und von @code{crash-me}) enthalten, aber diese
-Beschreibung wurde noch nicht geschrieben. Momentan k�nnen Sie eine gute
-Idee �ber den Benchmark bekommen, wenn Sie einen Blick auf den Code und die
-Ergebnisse im @file{sql-bench}-Verzeichnis jeder MySQL-Quelldistribution
-werfen.
-
-Diese Benchmark-Suite ist als Benchmark gedacht, der jedem Benutzer
-mitteilt, welche Dinge in einer gegebenen SQL-Implementation gut performen
-und welche schlecht.
-
-Beachten Sie, dass dieser Benchmark single-threaded ist. Daher misst er die
-minimale Zeit der Operationen. In Zukunft planen wir, auch etliche
-multi-threaded Test hinzuzuf�gen.
-
-Beispiele (die auf derselben NT-4.0-Maschine liefen):
-
-@multitable @columnfractions .6 .2 .2
-@strong{2.000.000 Zeilen vom Index lesen} @tab @strong{Sekunden} @tab @strong{Sekunden}
-@item mysql @tab 367 @tab 249
-@item mysql_odbc @tab 464
-@item db2_odbc @tab 1206
-@item informix_odbc @tab 121126
-@item ms-sql_odbc @tab 1634
-@item oracle_odbc @tab 20800
-@item solid_odbc @tab 877
-@item sybase_odbc @tab 17614
-@end multitable
-
-@multitable @columnfractions .6 .2 .2
-@strong{350.768 Zeilen einf�gen} @tab @strong{Sekunden} @tab @strong{Sekunden}
-@item mysql @tab 381 @tab 206
-@item mysql_odbc @tab 619
-@item db2_odbc @tab 3460
-@item informix_odbc @tab 2692
-@item ms-sql_odbc @tab 4012
-@item oracle_odbc @tab 11291
-@item solid_odbc @tab 1801
-@item sybase_odbc @tab 4802
-@end multitable
-
-Im obigen Test lief MySQL mit einem 8 MB Index-Cache.
-
-Weitere Benchmark-Ergebnisse haben wir unter
-@uref{http://www.mysql.com/information/benchmarks.html} gesammelt.
-
-Beachten Sie, dass Oracle nicht beinhaltet ist, weil sie gebeten haben,
-entfernt zu werden. Alle Oracle-Benchmarks m�ssen von Oracle freigegeben
-werden! Wir glauben, dass das die Aussagef�higkeit von Oracle-Benchmarks
-@strong{SEHR} zweifelhaft erscheinen l��t, weil alle obigen Benchmarks
-daf�r da sind zu zeigen, was eine Standard-Installation bei einem einzelnen
-Client machen kann.
-
-Um eine Benchmark-Suite laufen zu lassen, m�ssen Sie eine
-MySQL-Quelldistribution herunter laden, den Perl-DBI-Treiber und den
-Perl-DBD-Treiber f�r die gew�nschte Datenbank installieren und dann
-folgendes tun:
-
-@example
-cd sql-bench
-perl run-all-tests --server=#
-@end example
-
-Wobei # einer der unterst�tzten Server ist. Sie erhalten eine Auflistung
-aller Optionen und unterst�tzten Server, indem Sie @code{run-all-tests
---help} ausf�hren.
-
-@cindex Crash-me
-@code{Crash-me} versucht herauszufinden, welche Features eine Datenbank
-unterst�tzt und wo ihre F�higkeiten und Einschr�nkungen sind, indem
-tats�chliche Anfragen ausgef�hrt werden. Beispielsweise stellt es fest:
-
-@itemize @bullet
-@item
-Welche Spaltentypen unterst�tzt werden.
-@item
-Wie viele Indexe unterst�tzt werden.
-@item
-Welche Funktionen unterst�tzt werden.
-@item
-Wie Gro� eine Anfrage sein kann.
-@item
-Wie Gro� eine @code{VARCHAR}-Spalte sein kann.
-@end itemize
-
-Sie finden die Ergebnisse von Crash-me f�r viele verschiedene Datenbanken
-unter @uref{http://www.mysql.com/information/crash-me.php}.
-
-
-@node Custom Benchmarks, , MySQL Benchmarks, Optimise Overview
-@c German node Benutzerspezifische Benchmarks
-@subsection Wie Sie Ihre eigenen Benchmarks benutzen
-
-@cindex Benchmarks
-@cindex Performance, Benchmarks
-
-Sie sollten Ihre Applikation und Datenbank auf jeden Fall einem
-Benchmark-Test unterziehen um herauszufinden, wo Flaschenh�lse sind. Indem
-Sie einen Flaschenhals beseitigen (oder ihn durch ein 'Dummy-Modul'
-ersetzen), k�nnen Sie leicht den n�chsten Flaschenhals herausfinden (usw.).
-Selbst wenn die insgesamte Performance f�r Ihre Applikation ausreichend
-ist, sollten Sie zumindest einen Plan f�r jeden Flaschenhals aufstellen und
-entscheiden, auf welche Weise dieser beseitigt werden soll, wenn Sie eines
-Tages die zus�tzliche Performance ben�tigen.
-
-Als Beispiel f�r ein portables Benchmark-Programm schauen Sie sich die
-MySQL-Benchmark-Suite an. @xref{MySQL Benchmarks, , MySQL-Benchmarks}. Sie
-k�nnen jedes Programm dieser Suite nehmen und es Ihren Bed�rfnissen
-entsprechend ab�ndern. Wenn Sie das tun, k�nnen Sie unterschiedliche
-L�sungen f�r Ihr Problem finden und testen, was bei Ihnen wirklich die
-schnellste L�sung ist.
-
-Es ist h�ufig der Fall, dass Probleme nur dann auftreten, wenn das System
-unter schwerer Last l�uft. Viele Kunden nahmen mit uns Kontakt auf, nachdem
-sie ein (getestetes) System in eine Produktionsumgebung stellten und
-Lastprobleme bekamen. Bei jedem dieser F�lle gab es bislang entweder
-Probleme mit dem Grund-Design (Tabellen-Scans laufen NICHT gut unter hoher
-Last) oder im Zusammenhang mit dem Betriebssystem / den Bibliotheken. Das
-meiste davon w�re @strong{SEHR} viel einfacher zu beheben, wenn die Systeme
-nicht bereits in einer Produktionsumgebung liefen.
-
-Um solcherlei Probleme zu vermeiden, sollten Sie einige Anstrengung darauf
-verwenden, Ihre gesamte Applikation unter der schlimmstm�glichen Last zu
-benchmarken! Hierf�r k�nnen Sie Super Smack benutzen, das Sie hier
-erhalten:
-@uref{http://www.mysql.com/downloads/super-smack/super-smack-1.0.tar.gz}.
-Wie der Name nahelegt, kann es Ihr System auf die Knie zwingen, wenn Sie
-das wollen. Achten Sie daher darauf, es nur auf Entwicklungssystemen zu
-verwenden.
-
-
-@node Query Speed, Locking Issues, Optimise Overview, MySQL Optimisation
-@c German node Anfragen-Geschwindigkeit
-@section @code{SELECT}s und andere Anfragen optimieren
-
-@cindex Anfragen, Geschwindigkeit von
-@cindex Berechtigungspr�fungen, Auswirkung auf Geschwindigkeit
-@cindex Geschwindigkeit, von Anfragen
-
-Zun�chst etwas, das alle Anfragen betrifft: Je komplexer das
-Berechtigungssystem, das Sie einrichten, desto mehr Overhead bekommen Sie.
-
-Falls Sie noch keinerlei @code{GRANT}-Statements ausgef�hrt haben,
-optimiert MySQL die Berechtigungspr�fung zum Teil. Wenn Sie also sehr hohe
-Zugriffszahlen haben, kann es einen Zeitvorteil darstellen, Grants zu
-vermeiden. Ansonsten k�nnen mehr Berechtigungspr�fungen in einem gr��eren
-Overhead resultieren.
-
-Wenn Sie Probleme bei einer bestimmten MySQL-Funktion haben, k�nnen Sie den
-Zeitbedarf jederzeit wie folgt mit dem MySQL-Client feststellen:
-
-@example
-mysql> select benchmark(1000000,1+1);
-+------------------------+
-| benchmark(1000000,1+1) |
-+------------------------+
-| 0 |
-+------------------------+
-1 row in set (0.32 sec)
-@end example
-
-Das Ergebnis zeigt, dass MySQL 1.000.000 @code{+}-Operationen in 0,32
-Sekunden auf einer @code{PentiumII-400MHz}-Maschine ausf�hren kann.
-
-Alle MySQL-Funktionen sollten sehr optimiert sein, aber es mag einige
-Ausnahmen geben und @code{benchmark(schleifenzaehler,ausdruck)} ist ein
-gro�artiges Werkzeug, um herauszufinden, ob das das Problem bei Ihrer
-Anfrage darstellt.
-
-
-
-@menu
-* EXPLAIN::
-* Estimating performance::
-* SELECT speed::
-* Where optimisations::
-* DISTINCT optimisation::
-* LEFT JOIN optimisation::
-* LIMIT optimisation::
-* Insert speed::
-* Update speed::
-* Delete speed::
-* Tips::
-@end menu
-
-@node EXPLAIN, Estimating performance, Query Speed, Query Speed
-@c German node EXPLAIN
-@subsection @code{EXPLAIN}-Syntax (Informationen �ber ein @code{SELECT} erhalten)
-
-@findex EXPLAIN
-@findex SELECT, Optimierung
-
-@example
- EXPLAIN tabelle
-oder EXPLAIN SELECT select_optionen
-@end example
-
-@code{EXPLAIN tabelle} ist ein Synonym f�r @code{DESCRIBE tabelle} oder
-@code{SHOW COLUMNS FROM tabelle}.
-
-Wenn Sie einem @code{SELECT}-Statement das Schl�sselwort @code{EXPLAIN}
-voran stellen, erkl�rt MySQL explains, wie er das @code{SELECT} ausf�hren
-w�rde, indem Informationen dar�ber gemacht werden, wie Tabellen verkn�pft
-(Join) werden und in welcher Reihenfolge.
-
-Mit der Hilfe von @code{EXPLAIN} k�nnen Sie erkennen, wo Sie Tabellen
-Indexe hinzuf�gen m�ssen, um ein schnelleres @code{SELECT} zu erhalten, das
-Indexe benutzt, um die Datens�tze zu finden. Ausserdem sehen Sie, ob der
-Optimierer die Tabellen in optimaler Reihenfolge verkn�pft. Um den
-Optimierer zu zwingen, eine spezielle Verkn�pfungsreihenfolge bei einem
-@code{SELECT}-Statement einzuhalten, f�gen Sie eine
-@code{STRAIGHT_JOIN}-Klausel hinzu.
-
-Bei nicht einfachen Verkn�pfungen (Joins) gibt @code{EXPLAIN} f�r jede
-Tabelle, die im @code{SELECT}-Statement benutzt wurde, eine
-Informationszeile zur�ck. Die Tabellen sind in der Reihenfolge aufgelistet,
-in der sie gelesen werden w�rden. MySQL l�st alle Joins mit einer
-Single-Sweep-Multi-Join-Methode auf. Das bedeutet, dass MySQL eine Zeile
-aus der ersten Tabelle liest, dann die passende Zeile in der zweiten
-Tabelle sucht, dann in der dritten Tabelle usw. Wenn alle Tabellen
-verarbeitet wurden, gibt er die ausgew�hlten Spalten aus und geht
-r�ckw�rts durch die Tabellenliste durch, bis eine Tabelle gefunden wird,
-bei der es weitere passende Zeilen gibt. Die n�chste Zeile wird aus dieser
-Tabelle gelesen, und der Prozess f�hrt mit der n�chsten Tabelle fort.
-
-Die Ausgabe von @code{EXPLAIN} enth�lt folgende Spalten:
-
-@table @code
-@item table
-Die Tabelle, auf die sich die Ausgabezeile bezieht.
-
-@item type
-Der Join-Typ. Informationen �ber die verschiedenen Typen finden Sie weiter
-unten.
-
-@item possible_keys
-Die @code{possible_keys}-Spalte gibt an, welche Indexe MySQL verwenden
-konnte, um Zeilen in dieser Tabelle zu finden. Beachten Sie, dass diese
-Spalte v�llig unabh�ngig von der Reihenfolge der Tabellen ist. Das hei�t,
-dass einige der Schl�ssel in possible_keys m�glicherweise bei der
-tats�chlich verwendeten Tabellenreihenfolge nicht verwendbar sind.
-
-Wenn diese Spalte leer ist, gibt es keine relevanten Indexe. In diesem Fall
-k�nnen Sie die Performance Ihrer Anfrage wom�glich verbessern, indem Sie
-die @code{WHERE}-Klausel untersuchen, um festzustellen, ob diese auf eine
-oder mehrere Spalten verweist, die zweckm��igerweise indiziert werden
-sollten. Wenn das der Fall ist, erzeugen Sie einen entsprechenden Index und
-pr�fen Sie die Anfrage noch einmal mit @code{EXPLAIN}. @xref{ALTER TABLE}.
-
-Um zu sehen, welche Indexe eine Tabelle hat, benutzen Sie @code{SHOW INDEX
-FROM tabelle}.
-
-@item key
-@c German FIX changed @xref to @ref
-Die @code{key}-Spalte gibt den Schl�ssel an, den MySQL tats�chlich benutzen
-wird. Der Schl�ssel ist @code{NULL}, wenn kein Index gew�hlt wurde. Wenn
-MySQL den falschen Index w�hlt, k�nnen Sie ihn wahrscheinlich zwingen,
-einen anderen Index zu nehmen, indem Sie @code{myisamchk --analyze} oder
-@ref{myisamchk syntax} ausf�hren oder @code{USE INDEX/IGNORE INDEX}
-benutzen. @xref{JOIN}.
-
-@item key_len
-Die @code{key_len}-Spalte gibt die L�nge des Schl�ssels an, den MySQL
-benutzen wird. Die L�nge ist @code{NULL}, wenn @code{key} @code{NULL} ist.
-Beachten Sie, dass Ihnen das angibt, wie viele Teile eines mehrteiligen
-Schl�ssels MySQL tats�chlich benutzen wird.
-
-@item ref
-Die @code{ref}-Spalte zeigt an, welche Spalten oder Konstanten beim
-@code{key} benutzt werden, um Zeilen aus der Tabelle auszuw�hlen.
-
-@item rows
-die @code{rows}-Spalte gibt die Anzahl von Zeilen an, von denen MySQL
-annimmt, dass es sie untersuchen muss, um die Anfrage auszuf�hren.
-
-@item Extra
-Diese Spalte enth�lt zus�tzliche Informationen dar�ber, wie MySQL die
-Anfrage aufl�sen wird. Folgende unterschiedliche Text-Zeichenketten k�nnen
-in dieser Spalte stehen:
-
-@table @code
-@item Distinct
-MySQL wird die Suche nach weiteren Zeilen f�r die aktuelle
-Zeilenkombination nicht fortsetzen, nachdem er die erste passende Zeile
-gefunden hat.
-
-@item Not exists
-MySQL war in der Lage, eine @code{LEFT JOIN}-Optimierung der Anfrage
-durchzuf�hren, und wird keine weiteren Spalten in dieser Tabelle f�r die
-vorherige Zeilenkombination mehr untersuchen, nachdem er eine Zeile
-gefunden hat, die den @code{LEFT JOIN}-Kriterien entspricht.
-
-Hier ist ein Beispiel daf�r:
-
-@example
-SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;
-@end example
-
-Angenommen, @code{t2.id} ist mit @code{NOT NULL} definiert. In diesem Fall
-scannt MySQL @code{t1} und schl�gt die Zeilen in @code{t2} �ber
-@code{t1.id} nach. Wenn MySQL eine �bereinstimmende Zeile in @code{t2}
-findet, wei� er, dass @code{t2.id} nie @code{NULL} sein kann und scannt
-nicht durch den Rest der Zeilen in @code{t2}, die dieselbe @code{id} haben.
-Mit anderen Worten, f�r jede Zeile in @code{t1} muss MySQL nur ein einziges
-Mal in @code{t2} nachschlagen, unabh�ngig davon, wie viel �bereinstimmende
-Zeilen es in @code{t2} gibt.
-
-@item @code{range checked for each record (index map: #)}
-MySQL hat keinen gut geeigneten Index zum Benutzen gefunden. Statt dessen
-wird er f�r jede Zeilenkombination in der vorherigen Tabelle eine Pr�fung
-vornehmen, welchen Index er benutzen soll (falls �berhaupt) und diesen
-Index benutzen, um Zeilen aus der Tabelle abzurufen. Das ist nicht sehr
-schnell, aber immer noch schneller, als einen Join ohne Index
-durchzuf�hren.
-
-@item Using filesort
-MySQL braucht einen zus�tzlichen Durchgang, um herauszufinden, wie die
-Zeilen in sortierter Reihenfolge abgerufen werden sollen. Die Sortierung
-wird durchgef�hrt, indem in Abh�ngigkeit vom @code{join type} durch alle
-Zeilen durchgegangen wird und der Sortierschl�ssel und Zeiger auf die
-Zeilen f�r alle Zeilen gespeichert wird, die dem @code{WHERE} entsprechen.
-Danach werden die Schl�ssel sortiert. Schlie�lich werden die Zeilen in
-sortierter Reihenfolge abgerufen.
-
-@item Using index
-Die Spalteninformation wird aus der Tabelle abgerufen, indem nur
-Informationen aus dem Index-Baum benutzt werden, ohne dass zum Suchen
-zus�tzlich in den tats�chlichen Zeilen gelesen werden muss. Das kann
-gemacht werden, wenn alle benutzten Spalten der Tabelle Teil desselben
-Indexes sind.
-
-@item Using temporary
-Um die Anfrage aufzul�sen muss MySQL eine tempor�re Tabelle erzeugen, die
-das Ergebnis enth�lt. Das passiert typischerweise, wenn Sie ein @code{ORDER
-BY} auf eine andere Spalte setzen als auf die, die Sie im @code{GROUP BY}
-angegeben haben.
-
-@item Where used
-Eine @code{WHERE}-Klausel wird benutzt, um zu begrenzen, bei welchen Zeilen
-auf �bereinstimmung in der n�chsten Tabelle gesucht wird oder welche Zeilen
-an den Client geschickt werden. Wenn Sie diese Information nicht haben und
-die Tabelle vom Typ @code{ALL} oder @code{index} ast, ist vielleicht in
-Ihrer Anfrage etwas falsch (falls Sie nicht vorhaben, alle Zeilen aus der
-Tabelle zu holen / zu untersuchen).
-@end table
-
-Wenn Sie wollen, dass Ihre Anfragen so schnell wie m�glich laufen, sollten
-Sie auf @code{Using filesort} und @code{Using temporary} achten.
-@end table
-
-Die verschiedenen Join-Typen sind unten aufgef�hrt, sortiert vom besten zum
-schlechtesten Typ:
-
-@cindex Systemtabelle
-@cindex Tabellen, System-
-@table @code
-@item system
-Die Tabelle hat nur eine Zeile (= Systemtabelle). Das ist ein spezieller
-Fall des @code{const}-Join-Typs.
-
-@cindex Konstanten-Tabelle
-@cindex Tabellen, Konstanten-
-@item const
-Die Tabelle hat h�chsten eine �bereinstimmende Zeile, die am Anfang der
-Anfrage gelesen werden wird. Weil es nur eine Zeile gibt, k�nnen
-Spaltenwerte in dieser Zeile vom Optimierer als Konstanten betrachtet
-werden. @code{const}-Tabellen sind sehr schnell, weil sie nur einmal
-gelesen werden!
-
-@item eq_ref
-Aus dieser Tabelle wird f�r jede Zeilenkombination der vorherigen Tabellen
-eine Zeile gelesen. Das ist der bestm�gliche Join-Typ, ausgenommen die
-@code{const}-Typen. Er wird benutzt, wenn alle Teile eines Indexes vom Join
-benutzt werden und der Index @code{UNIQUE} oder ein @code{PRIMARY KEY} ist.
-
-@item ref
-Alle Zeilen mit �bereinstimmenden Index-Werten werden f�r jede
-Zeilenkombination der vorherigen Tabellen gelesen. @code{ref} wird benutzt,
-wenn der Join nur das am weitesten links stehende Pr�fix des Schl�ssels
-benutzt, oder wenn der Schl�ssel nicht @code{UNIQUE} oder ein @code{PRIMARY
-KEY} ist (mit anderen Worten, wenn der Join auf der Grundlage des
-Schl�sselwerts keine einzelne Zeile ausw�hlen kann). Wenn der Schl�ssel,
-der benutzt wird, nur mit einigen wenigen Zeilen �bereinstimmt, ist dieser
-Join-Typ gut.
-
-@item range
-Nur Zeilen, die innerhalb eines angegebenen Bereichs sind, werden abrufen,
-wobei ein Index benutzt wird, um die Zeilen auszuw�hlen. Die
-@code{key}-Spalte gibt an, welcher Index benutzt wird. @code{key_len}
-enth�lt den l�ngsten Schl�sselteil, der benutzt wurde. Die
-@code{ref}-Spalte ist f�r diesen Typ NULL.
-
-@item index
-Das ist dasselbe wie @code{ALL}, ausser dass nur der Index-Baum gescannt
-wird. Das ist �blicherweise schneller als @code{ALL}, weil die Index-Datei
-�blicherweise kleiner ist als die Daten-Datei.
-
-@item ALL
-F�r jede Zeilenkombination der vorherigen Tabellen wird ein kompletter
-Tabellenscan durchgef�hrt. Das ist normalerweise nicht gut, wenn die
-Tabelle die erste Tabelle ist, die nicht als @code{const} gekennzeichnet
-ist, und �blicherweise @strong{sehr} schlecht in allen anderen F�llen. Sie
-k�nnen @code{ALL} normalerweise vermeiden, indem Sie mehr Indexe
-hinzuf�gen, so dass die Zeile auf der Grundlage der Konstanten-Werte oder
-Spaltenwerte von fr�heren Tabellen abgerufen werden kann.
-@end table
-
-Sie erhalten einen guten Anhaltspunkt, wie gut ein Join ist, wenn Sie alle
-Werte in der @code{rows}-Spalte der @code{EXPLAIN}-Ausgabe multiplizieren.
-Das sollte grob aussagen, wie vielen Zeilen MySQL untersuchen muss, um die
-Anfrage auszuf�hren. Diese Anzahl wird auch benutzt, wenn Sie Anfragen mit
-der @code{max_join_size}-Variablen begrenzen.
-@xref{Server parameters}.
-
-Das folgende Beispiel zeigt, wie ein @code{JOIN} progressiv optimiert
-werden kann, indem die Informationen genutzt werden, die @code{EXPLAIN}
-bereit stellt.
-
-Angenommen, Sie haben unten stehendes @code{SELECT}-Statement, das Sie mit
-@code{EXPLAIN} untersuchen:
-
-@example
-EXPLAIN SELECT tt.TicketNumber, tt.TimeIn,
- tt.ProjectReference, tt.EstimatedShipDate,
- tt.ActualShipDate, tt.ClientID,
- tt.ServiceCodes, tt.RepetitiveID,
- tt.CurrentProcess, tt.CurrentDPPerson,
- tt.RecordVolume, tt.DPPrinted, et.COUNTRY,
- et_1.COUNTRY, do.CUSTNAME
- FROM tt, et, et AS et_1, do
- WHERE tt.SubmitTime IS NULL
- AND tt.ActualPC = et.EMPLOYID
- AND tt.AssignedPC = et_1.EMPLOYID
- AND tt.ClientID = do.CUSTNMBR;
-@end example
-
-Nehmen wir bei diesem Beispiel folgendes an:
-
-@itemize @bullet
-@item
-Die Spalten, die verglichen werden, wurden wie folgt deklariert:
-
-@multitable @columnfractions .1 .2 .7
-@item @strong{Tabelle} @tab @strong{Spalte} @tab @strong{Spaltentyp}
-@item @code{tt} @tab @code{ActualPC} @tab @code{CHAR(10)}
-@item @code{tt} @tab @code{AssignedPC} @tab @code{CHAR(10)}
-@item @code{tt} @tab @code{ClientID} @tab @code{CHAR(10)}
-@item @code{et} @tab @code{EMPLOYID} @tab @code{CHAR(15)}
-@item @code{do} @tab @code{CUSTNMBR} @tab @code{CHAR(15)}
-@end multitable
-
-@item
-Die Tabellen haben die unten stehenden Indexe:
-
-@multitable @columnfractions .1 .9
-@item @strong{Tabelle} @tab @strong{Index}
-@item @code{tt} @tab @code{ActualPC}
-@item @code{tt} @tab @code{AssignedPC}
-@item @code{tt} @tab @code{ClientID}
-@item @code{et} @tab @code{EMPLOYID} (primary key)
-@item @code{do} @tab @code{CUSTNMBR} (primary key)
-@end multitable
-
-@item
-Die @code{tt.ActualPC}-Werte sind nicht gleichm��ig verteilt.
-@end itemize
-
-Anfangs, bevor die Optimierung durchgef�hrt wurde, ergab das
-@code{EXPLAIN}-Statement folgende Informationen:
-
-@example
-table type possible_keys key key_len ref rows Extra
-et ALL PRIMARY NULL NULL NULL 74
-do ALL PRIMARY NULL NULL NULL 2135
-et_1 ALL PRIMARY NULL NULL NULL 74
-tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872
- range checked for each record (key map: 35)
-@end example
-
-Weil @code{type} bei jeder Tabelle @code{ALL} ist, zeigt die Ausgabe, dass
-MySQL eine komplette Verkn�pfung (Full Join) aller Tabellen durchf�hrt! Das
-dauert recht lange, weil das Produkt der Zeilenanzahl in jeder Tabelle
-untersucht werden muss! In diesem Fall ist das @code{74 * 2.135 * 74 *
-3.872 = 45.268.558.720} Zeilen. Wenn die Tabellen gr��er w�ren, k�nnen Sie
-sich vorstellen, wie lange das dauern w�rde.
-
-Ein Problem liegt hier darin, dass MySQL (noch) keine Indexe auf Spalten
-effizient benutzen kann, wenn sie unterschiedlich deklariert sind. In
-diesem Zusammenhang sind @code{VARCHAR} und @code{CHAR} dasselbe, es sei
-denn, sie sind mit unterschiedlichen L�ngen deklariert. Weil
-@code{tt.ActualPC} als @code{CHAR(10)} und @code{et.EMPLOYID} als
-@code{CHAR(15)} deklariert ist, gibt eine Unstimmigkeit der L�ngen.
-
-Um diese Ungleichheit der Spaltenl�ngen zu beheben, benutzen Sie
-@code{ALTER TABLE}, um @code{ActualPC} von 10 auf 15 Zeichen zu verl�ngern:
-
-@example
-mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15);
-@end example
-
-Jetzt sind @code{tt.ActualPC} und @code{et.EMPLOYID} beide
-@code{VARCHAR(15)}. Eine erneute Ausf�hrung des @code{EXPLAIN}-Statements
-ergibt dieses Ergebnis:
-
-@example
-table type possible_keys key key_len rew rows Extra
-tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872 where used
-do ALL PRIMARY NULL NULL NULL 2135
- range checked for each record (key map: 1)
-et_1 ALL PRIMARY NULL NULL NULL 74
- range checked for each record (key map: 1)
-et eq_ref PRIMARY PRIMARY 15 tt.ActualPC 1
-@end example
-
-Das ist nicht perfekt, aber viel besser (das Produkt der @code{rows}-Werte
-ist jetzt um einen Faktor 74 niedriger). Diese Version wird innerhalb von
-ein paar Sekunden ausgef�hrt.
-
-Eine zweite �nderung kann durchgef�hrt werden, um die Unstimmigkeit der
-Spaltenl�ngen f�r die @code{tt.AssignedPC = et_1.EMPLOYID}- und
-@code{tt.ClientID = do.CUSTNMBR}-Vergleiche zu beheben:
-
-@example
-mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15),
- MODIFY ClientID VARCHAR(15);
-@end example
-
-Jetzt ergibt @code{EXPLAIN} folgende Ausgabe:
-
-@example
-table type possible_keys key key_len rew rows Extra
-et ALL PRIMARY NULL NULL NULL 74
-tt rew AssignedPC,ClientID,ActualPC ActualPC 15 et.EMPLOYID 52 where used
-et_1 eq_ref PRIMARY PRIMARY 15 tt.AssignedPC 1
-do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1
-@end example
-
-Das ist fast so gut, wie es �berhaupt geht.
-
-Das verbleibende Problem besteht darin, dass MySQL vorgabem��ig annimmt,
-dass die Werte in der @code{tt.ActualPC}-Spalte gleichm��ig verteilt sind,
-was in der @code{tt}-Tabelle nicht der Fall ist. Gl�cklicherweise ist es
-einfach, MySQL dar�ber zu informieren:
-
-@example
-shell> myisamchk --analyze PFAD_ZU_MYSQL_DATENBANK/tt
-shell> mysqladmin refresh
-@end example
-
-Jetzt ist der Join perfekt und @code{EXPLAIN} ergibt dieses Ergebnis:
-
-@example
-table type possible_keys key key_len ref rows Extra
-tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872 where used
-et eq_ref PRIMARY PRIMARY 15 tt.ActualPC 1
-et_1 eq_ref PRIMARY PRIMARY 15 tt.AssignedPC 1
-do eq_ref PRIMARY PRIMARY 15 tt.ClientID 1
-@end example
-
-Beachten Sie, dass die @code{rows}-Spalte in der Ausgabe von @code{EXPLAIN}
-eine gehobene Form von Vermutung des MySQL-Join-Optimierers ist. Um eine
-Anfrage zu optimieren, sollten Sie �berpr�fen, ob diese Zahlen der Wahrheit
-nahe kommen. Wenn nicht, erhalten Sie eventuell bessere Performance, wenn
-Sie @code{STRAIGHT_JOIN} in Ihrem @code{SELECT}-Statement benutzen und
-versuchen, die Tabellen in der @code{FROM}-Klausel in anderer Reihenfolge
-anzugeben.
-
-
-@node Estimating performance, SELECT speed, EXPLAIN, Query Speed
-@c German node Performance absch�tzen
-@subsection Anfragen-Performance absch�tzen
-
-@cindex absch�tzen, Anfragen-Performance
-@cindex Anfragen, Performance absch�tzen
-@cindex Performance, absch�tzen
-
-In den meisten F�llen k�nnen Sie die Performance sch�tzen, indem Sie
-Suchvorg�nge auf Festplatte z�hlen. Bei kleinen Tabellen k�nnen Sie die
-Zeile �blicherweise mit 1 Festplatten-Suchvorgang finden (weil der Index
-wahrscheinlich im Cache ist). Bei gr��eren Tabellen k�nnen Sie sch�tzen,
-dass Sie (bei der Benutzung von B++-Baum-Indexen) brauchen werden:
-@code{log(zeilen_zahl) / log(index_block_laenge / 3 * 2 / (index_laenge +
-daten_zeiger_laenge)) + 1} Suchvorg�nge, um die Zeile zu finden.
-
-In MySQL ist ein Index-Block �blicherweise 1024 Bytes lang und der
-Daten-Zeiger �blicherweise 4 Bytes. Eine 500.000-Zeilen-Tabelle mit einer
-Indexl�nge von 3 (medium integer) ergibt:
-@code{log(500.000)/log(1024/3*2/(3+4)) + 1} = 4 Suchvorg�nge.
-
-Da der obige Index etwa 500.000 * 7 * 3/2 = 5,2 MB ben�tigen w�rde
-(angenommen, dass die Index-Puffer zu 2/3 gef�llt sind, was ein typischer
-Wert sit), haben Sie wahrscheinlich viel vom Index im Arbeitsspeicher und
-werden wahrscheinlich nur 1 bis 2 Betriebssystem-Aufrufe ben�tigen, um
-Daten zu lesen, um die Zeile zu finden.
-
-Bei Schreibvorg�ngen brauchen Sie jedoch 4 Suchanfragen (wie oben), um
-herauszufinden, wo der neue Index platziert wird, und normalerweise 2
-Suchvorg�nge, um den Index zu aktualisieren und die Zeile zu schreiben.
-
-Beachten Sie, dass oben Gesagtes nicht bedeutet, dass Ihre Applikation
-allm�hlich mit N log N verf�llt! Solange alles durch das Betriebssystem
-oder den SQL-Server gecachet wird, werden die Dinge nur marginal langsamer,
-wenn die Tabellen gr��er werden. Wenn die Daten zu Gro� werden, um
-gecachet zu werden, werden die Dinge anfangen, viel langsamer zu laufen,
-bis Ihre Applikation schlie�lich komplett durch Suchvorg�nge auf
-Festplatte ausgebremst wird (die mit N log N zunehmen). Um das zu
-vermeiden, vergr��ern Sie den Index-Cache, wenn die Daten wachsen.
-@xref{Server parameters}.
-
-
-@node SELECT speed, Where optimisations, Estimating performance, Query Speed
-@c German node SELECT-Geschwindigkeit
-@subsection Geschwindigkeit von @code{SELECT}-Anfragen
-
-@findex SELECT-Geschwindigkeit
-
-@cindex Geschwindigkeit, von Anfragen
-
-Wenn Sie ein langsames @code{SELECT ... WHERE} schneller machen wollen, ist
-im Allgemeinen das erste, was zu pr�fen ist, ob Sie einen Index hinzuf�gen
-k�nnen oder nicht. @xref{MySQL indexes, , MySQL-Indexe}. Alle Verweise
-(Reference) zwischen verschiedenen Tabellen sollten �blicherweise mit
-Indexen gemacht werden. Sie k�nnen den @code{EXPLAIN}-Befehl benutzen, um
-herauszufinden, welche Indexe f�r ein @code{SELECT} benutzt werden.
-@xref{EXPLAIN, , @code{EXPLAIN}}.
-
-Einige allgemeine Tipps:
-
-@itemize @bullet
-@item
-Um MySQL zu helfen, Anfragen besser zu optimieren, lassen Sie
-@code{myisamchk --analyze} auf eine Tabelle laufen, nachdem sie mit
-relevanten Daten gef�llt wurde. Das aktualisiert einen Wert f�r jeden
-Index-Teil, der die durchschnittliche Anzahl von Zeilen angibt, die
-denselben Wert haben. (Bei eindeutigen Indexen ist das nat�rlich immer 1).
-MySQL benutzt diesen Wert, um zu entscheiden, welcher Index benutzt werden
-soll, wenn Sie zwei Tabellen mit einem 'nicht konstanten Ausdruck'
-verbinden. Sie k�nnen das Ergebnis nach dem Laufenlassen von @code{analyze}
-mit @code{SHOW INDEX FROM tabelle} �berpr�fen und die
-@code{Cardinality}-Spalte untersuchen.
-
-@item
-Um einen Index und Daten gem�� einem Index zu sortieren, benutzen Sie
-@code{myisamchk --sort-index --sort-records=1} (wenn Sie nach Index 1
-sortieren wollen). Wenn Sie einen eindeutigen Index haben, von dem Sie alle
-Datens�tze gem�� der Reihenfolge dieses Indexes lesen wollen, ist das eine
-gute Art, das schneller zu machen. Beachten Sie jedoch, dieses Sortieren
-nicht optimal geschrieben wird und bei einer gro�en Tabelle lange dauert!
-@end itemize
-
-
-@node Where optimisations, DISTINCT optimisation, SELECT speed, Query Speed
-@c German node WHERE-Optimierung
-@subsection Wie MySQL @code{WHERE}-Klauseln optimiert
-
-@findex WHERE
-
-@cindex Optimierungen
-
-Die @code{WHERE}-Optimierungen wurden hier in den @code{SELECT}-Teil
-aufgenommen, weil sie meist in Verbindung mit @code{SELECT} benutzt werden,
-aber dieselben Optimierungen treffen f�r @code{WHERE} bei @code{DELETE}-
-und @code{UPDATE}-Statements zu.
-
-Beachten Sie auch, dass dieser Abschnitt nicht vollst�ndig ist. MySQL f�hrt
-viele Optimierungen durch und wir hatten noch keine Zeit, alle davon zu
-dokumentieren.
-
-Einige der Optimierungen, die MySQL durchf�hrt, sind unten aufgef�hrt:
-
-@itemize @bullet
-@item
-Entfernung unn�tiger Klammern:
-@example
- ((a AND b) AND c OR (((a AND b) AND (c AND d))))
--> (a AND b AND c) OR (a AND b AND c AND d)
-@end example
-@item
-Konstanten-'Falten' (Folding):
-@example
- (a<b AND b=c) AND a=5
--> b>5 AND b=c AND a=5
-@end example
-@item
-Bedingungsentfernung bei Konstanten (notwendig wegen Konstanten-'Falten'):
-@example
- (B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)
--> B=5 OR B=6
-@end example
-@item
-Konstante Ausdr�cke, die von Indexen benutzt werden, werden nur einmal
-ausgewertet.
-@item
-@code{COUNT(*)} auf eine einzelne Tabelle ohne ein @code{WHERE} wird direkt
-aus der Tabelleninformation abgerufen. Das wird auch bei jeglichen
-@code{NOT NULL}-Ausdr�cken gemacht, wenn diese nur f�r eine Tabelle benutzt
-werden.
-@item
-Fr�herkennung ung�ltiger Konstanten-Ausdr�cke. MySQL stellt schnell fest,
-dass einige @code{SELECT}-Statements unm�glich sind, und gibt keine Zeilen
-zur�ck.
-@item
-@code{HAVING} wird mit @code{WHERE} vereinigt, wenn Sie @code{GROUP BY}
-oder Gruppen-Funktionen (@code{COUNT()}, @code{MIN()} usw.) nicht
-benutzen.
-@item
-F�r jeden Sub-Join wird ein einfacheres @code{WHERE} konstruiert, um eine
-schnelle @code{WHERE}-Evaluierung f�r jeden Sub-Join zu erzielen, und auch,
-um Datens�tze so bald wie m�glich �berspringen zu k�nnen.
-@cindex Konstanten-Tabelle
-@cindex Tabellen, Konstanten-
-@item
-Alle Konstanten-Tabellen werden zuerst gelesen, vor jeder anderen Tabelle
-in der Anfrage. Eine Konstanten-Tabelle ist:
-@itemize @minus
-@item
-Eine leere Tabelle oder eine Tabelle mit 1 Zeile.
-@item
-Eine Tabelle, die bei einer @code{WHERE}-Klausel auf einen
-@code{UNIQUE}-Index oder einen @code{PRIMARY KEY} benutzt wird, wobei alle
-Index-Teile mit konstanten Ausdr�cken benutzt werden und die Index-Teile
-als @code{NOT NULL} definiert sind.
-@end itemize
-Alle folgenden Tabellen werden als Konstanten-Tabellen benutzt:
-@example
-mysql> SELECT * FROM t WHERE primary_key=1;
-mysql> SELECT * FROM t1,t2
- WHERE t1.primary_key=1 AND t2.primary_key=t1.id;
-@end example
-
-@item
-Die beste Join-Kombination, um Tabellen zu verkn�pfen, wird gefunden, wenn
-man alle M�glichkeiten probiert. Wenn alle Spalten in @code{ORDER BY} und
-in @code{GROUP BY} aus derselben Tabelle stammen, wird diese Tabelle
-vorzugsweise vorn hingestellt, wenn verkn�pft wird.
-@item
-Wenn es eine @code{ORDER BY}-Klausel und eine andere @code{GROUP
-BY}-Klausel gibt, oder wenn @code{ORDER BY} oder @code{GROUP BY} Spalten
-aus Tabellen enth�lt, die nicht aus der ersten Tabelle in der Join-Reihe
-stammen, wird eine tempor�re Tabelle erzeugt.
-@item
-Wenn Sie @code{SQL_SMALL_RESULT} benutzen, benutzt MySQL eine tempor�re
-Tabelle im Arbeitsspeicher.
-@item
-Jeder Tabellen-Index wird abgefragt und der beste Index, der weniger als
-30% der Zeilen �berspannt, wird benutzt. Wenn ein solcher Index nicht
-gefunden werden kann, wird ein schneller Tabellenscan benutzt.
-@item
-In einigen F�llen kann MySQL Zeilen vom Index lesen, ohne �berhaupt in der
-Daten-Datei nachzuschlagen. Wenn alle Spalten, die vom Index benutzt
-werden, numerisch sind, wird nur der Index-Baum benutzt, um die Anfrage
-aufzul�sen.
-@item
-Bevor jeder Datensatz herausgegeben wird, werden die, die nicht mit der
-@code{HAVING}-Klausel �bereinstimmen, �bersprungen.
-@end itemize
-
-Einige Beispiele von Anfragen, die sehr schnell sind:
-
-@example
-mysql> SELECT COUNT(*) FROM tabelle;
-mysql> SELECT MIN(schluessel_teil1),MAX(schluessel_teil1) FROM tabelle;
-mysql> SELECT MAX(schluessel_teil2) FROM tabelle
- WHERE schluessel_teil_1=konstante;
-mysql> SELECT ... FROM tabelle
- ORDER BY schluessel_teil1,schluessel_teil2,... LIMIT 10;
-mysql> SELECT ... FROM tabelle
- ORDER BY schluessel_teil1 DESC,schluessel_teil2 DESC,... LIMIT 10;
-@end example
-
-Die folgenden Anfragen werden aufgel�st, indem nur der Index-Baum benutzt
-wird (unter der Annahme, dass die indizierten Spalten numerisch sind):
-
-@example
-mysql> SELECT schluessel_teil1,schluessel_teil2 FROM tabelle WHERE schluessel_teil1=val;
-mysql> SELECT COUNT(*) FROM tabelle
- WHERE schluessel_teil1=val1 AND schluessel_teil2=val2;
-mysql> SELECT schluessel_teil2 FROM tabelle GROUP BY schluessel_teil1;
-@end example
-
-Die folgenden Anfragen benutzen Indexierung, um die Zeilen in sortierter
-Reihenfolge abzufragen, ohne einen separaten Sortierdurchgang:
-
-@example
-mysql> SELECT ... FROM tabelle ORDER BY schluessel_teil1,schluessel_teil2,... ;
-mysql> SELECT ... FROM tabelle ORDER BY schluessel_teil1 DESC,schluessel_teil2 DESC,... ;
-@end example
-
-
-@node DISTINCT optimisation, LEFT JOIN optimisation, Where optimisations, Query Speed
-@c German node DISTINCT-Optimierung
-@subsection Wie MySQL @code{DISTINCT} optimiert
-
-@findex DISTINCT
-
-@cindex Optimierung, DISTINCT
-
-@code{DISTINCT} wird f�r alle Spalten in @code{GROUP BY} umgewandelt,
-@code{DISTINCT} in Kombination mit @code{ORDER BY} ben�tigt in vielen
-F�llen ebenfalls eine tempor�re Tabelle.
-
-Wenn @code{LIMIT #} mit @code{DISTINCT} kombiniert wird, h�lt MySQL an,
-sobald er @code{#} eindeutige Zeilen findet.
-
-Wenn Sie nicht Spalten aus allen benutzten Tabellen verwenden, h�lt MySQL
-mit dem Scannen der nicht benutzten Tabellen an, sobald er die erste
-�bereinstimmung gefunden hat.
-
-@example
-SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
-@end example
-
-Im Beispiel wird angenommen, dass t1 vor t2 benutzt wird (�berpr�fen Sie
-das mit @code{EXPLAIN}). In diesem Fall h�rt MySQL auf, von t2 zu lesen
-(f�r diese bestimmte Zeile in t1), sobald die erste Zeile in t2 gefunden
-wurde.
-
-
-@node LEFT JOIN optimisation, LIMIT optimisation, DISTINCT optimisation, Query Speed
-@c German node LEFT-JOIN-Optimierung
-@subsection Wie MySQL @code{LEFT JOIN} optimiert
-
-@findex LEFT JOIN
-
-@cindex Optimierung, LEFT JOIN
-
-@code{A LEFT JOIN B} ist in MySQL wie folgt implementiert:
-
-@itemize @bullet
-@item
-Die Tabelle @code{B} wird als abh�ngig von Tabelle @code{A} und allen
-Tabellen, von denen @code{A} abh�ngig ist, gesetzt.
-
-@item
-Die Tabelle @code{A} wird als abh�ngig von allen Tabellen (ausser @code{B})
-gesetzt, die in der @code{LEFT JOIN}-Bedingung aufgef�hrt sind.
-
-@item
-Alle @code{LEFT JOIN}-Bedingungen werden zu @code{WHERE}-Klausel
-verschoben.
-
-@item
-Alle Standard-Join-Optimierungen werden durchgef�hrt, mit der Ausnahme,
-dass eine Tabelle immer nach allen Tabellen gelesen wird, von denen sie
-abh�ngig ist. Wenn es eine zirkul�re Abh�ngigkeit gibt, gibt MySQL einen
-Fehler aus.
-
-@item
-Alle Standard-@code{WHERE}-Optimierungen werden durchgef�hrt.
-
-@item
-Wenn es eine Zeile in @code{A} gibt, die mit der @code{WHERE}-Klausel
-�bereinstimmt, aber keine Zeile in @code{B}, die mit der @code{LEFT
-JOIN}-Bedingung �bereinstimmt, wird eine zus�tzliche Zeile f�r @code{B}
-erzeugt, deren Spalten alle auf @code{NULL} gesetzt sind.
-
-@item
-Wenn Sie @code{LEFT JOIN} benutzen, um Zeilen zu finden, die in einer
-Tabelle nicht existieren, und Sie folgendes im @code{WHERE}-Teil angeben:
-@code{spalten_name IS NULL}, wobei spalten_name eine Spalte ist, die als
-@code{NOT NULL} deklariert ist, h�rt MySQL mit der Suche nach weiteren
-Zeilen auf (f�r eine bestimmte Schl�sselkombination), nachdem er eine Zeile
-gefunden hat, die mit der @code{LEFT JOIN}-Bedingung �bereinstimmt.
-@end itemize
-
-@code{RIGHT JOIN} ist analog zu @code{LEFT JOIN} implementiert.
-
-Die Lese-Reihenfolge der Tabellen, die von @code{LEFT JOIN} und
-@code{STRAIGHT JOIN} erzwungen wird, hilft dem Optimierer (der berechnet,
-in welcher Reihenfolge die Tabellen verkn�pft werden sollen), seine Arbeit
-schneller durchzuf�hren, weil weniger Tabellenvertauschungen �berpr�ft
-werden m�ssen.
-
-Beachten Sie, dass das oben Gesagte bedeutet, dass bei einer Anfrage des
-folgenden Typs:
-
-@example
-SELECT * FROM a,b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key) WHERE b.key=d.key
-@end example
-
-MySQL einen kompletten Scan von @code{b} durchf�hren wird, weil der
-@code{LEFT JOIN} erzwingt, dass diese vor @code{d} gelesen wird.
-
-Das l��t sich in diesem Fall beheben, indem die Anfrage wie folgt ge�ndert
-wird:
-
-@example
-SELECT * FROM b,a LEFT JOIN c ON (c.key=a.key) LEFT JOIN d (d.key=a.key) WHERE b.key=d.key
-@end example
-
-
-@node LIMIT optimisation, Insert speed, LEFT JOIN optimisation, Query Speed
-@c German node LIMIT-Optimierung
-@subsection Wie MySQL @code{LIMIT} optimiert
-
-@findex LIMIT
-
-@cindex Optimierung, LIMIT
-
-In einigen F�llen handhabt MySQL die Anfrage unterschiedlich, wenn Sie
-@code{LIMIT #} statt @code{HAVING} benutzen:
-
-@itemize @bullet
-@item
-Wenn Sie nur einige wenige Zeilen mit @code{LIMIT} ausw�hlen, benutzt MySQL
-in einigen F�llen Indexe, wenn er ansonsten vorzugsweise einen
-vollst�ndigen Tabellenscan durchf�hren w�rde.
-@item
-Wenn Sie @code{LIMIT #} mit @code{ORDER BY} benutzen, beendet MySQL das
-Sortieren, sobald er die ersten @code{#} Zeilen gefunden hat, anstatt die
-gesamte Tabelle zu sortieren.
-@item
-Wenn Sie @code{LIMIT #} mit @code{DISTINCT} kombinieren, h�rt MySQL auf,
-sobald er @code{#} eindeutige Zeilen gefunden hat.
-@item
-In einigen F�llen kann @code{GROUP BY} aufgel�st werden, indem der
-Schl�ssel in der Reihenfolge gelesen wird (oder der Schl�ssel sortiert
-wird) und danach Zusammenfassungen berechnet werden, bis sich der
-Schl�sselwert �ndert. In diesem Fall berechnet @code{LIMIT #} keine
-unn�tigen @code{GROUP BY}'s.
-@item
-Sobald MySQL die ersten @code{#} Zeilen an den Client geschickt hat, wird
-die Anfrage abgebrochen.
-@item
-@code{LIMIT 0} gibt immer schnell eine leere Ergebnismenge (empty set)
-zur�ck. Das ist n�tzlich, um die Anfrage zu �berpr�fen und die Spaltentypen
-der Ergebnisspalten zu erhalten.
-@item
-Die Gr��e der tempor�ren Tabellen benutzt @code{LIMIT #}, um zu berechnen,
-wieviel Platz ben�tigt wird, um die Anfrage aufzul�sen.
-@end itemize
-
-
-@node Insert speed, Update speed, LIMIT optimisation, Query Speed
-@c German node INSERT-Geschwindigkeit
-@subsection Geschwindigkeit von @code{INSERT}-Anfragen
-
-@findex INSERT
-
-@cindex Geschwindigkeit, beim Einf�gen
-@cindex Einf�gen, Geschwindigkeit
-
-Die Zeit, einen Datensatz einzuf�gen, besteht ungef�hr aus:
-
-@itemize @bullet
-@item
-Verbindung: (3)
-@item
-Anfrage an den Server schicken: (2)
-@item
-Anfrage parsen: (2)
-@item
-Datensatz einf�gen: (1 x Gr��e des Datensatzes)
-@item
-Indexe einf�gen: (1 x Anzahl der Indexe)
-@item
-Schlie�en: (1)
-@end itemize
-
-Wobei die Zahlen in etwa proportional zur Gesamtzeit sind. Diese Berechnung
-zieht den anf�nglichen Overhead, um Tabellen zu �ffnen, nicht in Betracht
-(was einmal f�r jede gleichzeitig laufende Anfrage gemacht wird).
-
-Die Gr��e der Tabelle verlangsamt das Einf�gen von Indexen um N log N
-(B-B�ume).
-
-Einige M�glichkeiten, die Geschwindigkeit von Einf�geoperationen zu
-steigern:
-
-@itemize @bullet
-@item
-Wenn Sie viele Zeilen vom selben Client aus zur gleichen Zeit einf�gen,
-benutzen Sie mehrfache Werte (Liste) im @code{INSERT}-Statements. Das geht
-viel schneller (in manchen F�lle um Faktoren) als separate
-@code{INSERT}-Statements zu benutzen. Tunen Sie die
-@code{myisam_bulk_insert_tree_size}-Variable, um das sogar noch zu
-beschleunigen. @xref{SHOW VARIABLES}.
-@item
-Wenn Sie viele Zeilen von unterschiedlichen Clients aus einf�gen, k�nnen
-Sie mehr Geschwindigkeit erzielen, wenn Sie das @code{INSERT
-DELAYED}-Statement benutzen. @xref{INSERT, , @code{INSERT}}.
-@item
-Beachten Sie, dass Sie mit @code{MyISAM}-Tabellen Zeilen zur selben Zeit
-einf�gen k�nnen, zu der @code{SELECT}s laufen, wenn es keine gel�schten
-Zeilen in den Tabellen gibt.
-@item
-Wenn Daten in eine Tabelle aus einer Textdatei eingeladen werden, benutzen
-Sie @code{LOAD DATA INFILE}. Das ist �blicherweise 20 mal schneller als
-viele @code{INSERT}-Statements zu benutzen. @xref{LOAD DATA, , @code{LOAD DATA}}.
-@item
-Mit etwas zus�tzlicher M�he ist es m�glich, @code{LOAD DATA INFILE} noch
-schneller laufen zu lassen, wenn die Tabelle viele Indexe hat. Gehen Sie
-wie folgt vor:
-
-@enumerate
-@item
-Optional erzeugen Sie die Tabelle mit @code{CREATE TABLE}, zum Beispiel mit
-@code{mysql} oder �ber die Perl-DBI.
-
-@item
-F�hren Sie ein @code{FLUSH TABLES}-Statement oder den Shell-Befehl
-@code{mysqladmin flush-tables} aus.
-
-@item
-Geben Sie @code{myisamchk --keys-used=0 -rq /pfad/zu/db/tabelle} ein.
-Dadurch entfernen Sie die Benutzung aller Indexe von der Tabelle.
-
-@item
-F�gen Sie Daten in die Tabelle mit @code{LOAD DATA INFILE} ein. Dadurch
-werden keine Indexe aktualisiert, was deswegen sehr schnell l�uft.
-
-@item
-Wenn Sie in Zukunft nur noch aus der Tabelle lesen, benutzen Sie
-@code{myisampack}, um sie kleiner zu machen. @xref{Compressed format}.
-
-@item
-Erzeugen Sie die Indexe mit @code{myisamchk -r -q /pfad/zu/db/tabelle} neu.
-Hierdurch wird der Index-Baum im Speicher erzeugt, bevor er auf die Platte
-geschrieben wird, was viel schneller ist, weil viele Suchvorg�nge auf
-Platte vermieden werden. Der sich ergebende Index-Baum ist ausserdem
-perfekt ausbalanciert.
-
-@item
-F�hren Sie ein @code{FLUSH TABLES}-Statement oder den Shell-Befehl
-@code{mysqladmin flush-tables} aus.
-@end enumerate
-
-Diese Prozedur wird in Zukunft in @code{LOAD DATA INFILE} eingebaut werden.
-
-Ab @strong{MySQL 4.0} k�nnen Sie auch @code{ALTER TABLE tabelle DISABLE
-KEYS} anstelle von @code{myisamchk --keys-used=0 -rq /pfad/zu/db/tabelle}
-und @code{ALTER TABLE tabelle ENABLE KEYS} anstelle von @code{myisamchk -r
--q /pfad/zu/db/tabelle} benutzen. Damit k�nnen Sie auch die @code{FLUSH
-TABLES}-Schritte �berspringen.
-@item
-Sie k�nnen die Einf�gegeschwindigkeit steigern, indem Sie Tabellen sperren:
-
-@example
-mysql> LOCK TABLES a WRITE;
-mysql> INSERT INTO a VALUES (1,23),(2,34),(4,33);
-mysql> INSERT INTO a VALUES (8,26),(6,29);
-mysql> UNLOCK TABLES;
-@end example
-
-Der haupts�chliche Geschwindigkeitsunterschied liegt darin, dass der
-Index-Puffer nur einmal auf Platte zur�ck geschrieben wird, nachdem alle
-@code{INSERT}-Statements fertig sind. Normalerweise w�rden die Index-Puffer
-so oft zur�ck geschrieben wie es @code{INSERT}-Statements gibt. Das Sperren
-wird nicht ben�tigt, wenn Sie alle Zeilen mit einem einzigen Statement
-einf�gen k�nnen.
-
-Durch das Sperren wird auch die Gesamtzeit von Tests auf mehrere
-Verbindungen gesenkt, aber die maximale Wartezeit f�r einige Threads wird
-erh�ht (weil sie auf Sperren warten). Beispiel:
-
-@example
-Thread 1 f�hrt 1000 Einf�gevorg�nge durch.
-Thread 2, 3 und 4 f�gen 1 Einf�gevorgang durch.
-Thread 5 f�hrt 1000 Einf�gevorg�nge durch.
-@end example
-
-Wenn Sie kein Sperren benutzen, sind die Threads 2, 3 und 4 vor 1 und 5
-fertig. Wenn Sie Sperren benutzen, sind 2, 3 und 4 wahrscheinlich nicht vor
-1 oder 5 fertig, aber die Gesamtzeit sollte etwa 40% geringer sein.
-
-Weil @code{INSERT}-, @code{UPDATE}- und @code{DELETE}-Operationen in MySQL
-sehr schnell sind, erhalten Sie bessere Performance �ber alles, wenn Sie um
-alles herum Sperren hinzuf�gen, was mehr als etwa 5 Einf�geoperationen oder
-Aktualisierungen (Updates) in einer Zeile durchf�hrt. Wenn Sie sehr viele
-Einf�geoperationen in einer Zeile durchf�hren, k�nnen Sie ein @code{LOCK
-TABLES} machen, gefolgt von einem gelegentlichen @code{UNLOCK TABLES}
-(etwa alle 1.000 Zeilen), um anderen Threads zu gestatten, auf die Tabelle
-zuzugreifen. Das Ergebnis w�re ebenfalls ein netter Geschwindigkeitsgewinn.
-
-Nat�rlich ist @code{LOAD DATA INFILE} zum Einladen von Daten viel
-schneller.
-@end itemize
-
-Um sowohl f�r @code{LOAD DATA INFILE} als auch f�r @code{INSERT} mehr
-Geschwindigkeit zu erzielen, vergr��ern Sie den Schl�ssel-Puffer.
-@xref{Server parameters}.
-
-
-@node Update speed, Delete speed, Insert speed, Query Speed
-@c German node UPDATE-Geschwindigkeit
-@subsection Geschwindigkeit von @code{UPDATE}-Anfragen
-
-Update-Anfragen werden wie eine @code{SELECT}-Anfrage optimiert, mit dem
-zus�tzlichen Overhead eines Schreibvorgangs. Die Geschwindigkeit des
-Schreibvorgangs h�ngt von der Gr��e der Daten und von der Anzahl der
-Indexe, die aktualisiert werden, ab. Indexe, die nicht ge�ndert werden,
-werden nicht aktualisiert.
-
-Eine weitere M�glichkeit, Aktualisierungen (Updates) schnell zu machen,
-ist, sie zu verz�gern und dann sp�ter viele Aktualisierungen hintereinander
-zu machen. Viele Aktualisierungen hintereinander sind viel schneller als
-nur eine zugleich, wenn Sie die Tabelle sperren.
-
-Beachten Sie, dass die Aktualisierung eines Datensatzes bei dynamischem
-Datensatzformat dazu f�hren kann, dass der Datensatz aufgespalten wird.
-Wenn Sie das oft durchf�hren, ist es daher sehr wichtig, gelegentlich
-@code{OPTIMIZE TABLE} auszuf�hren. @xref{OPTIMIZE TABLE, , @code{OPTIMIZE TABLE}}.
-
-
-@node Delete speed, Tips, Update speed, Query Speed
-@c German node DELETE-Geschwindigkeit
-@subsection Geschwindigkeit von @code{DELETE}-Anfragen
-
-Wenn Sie alle Zeilen in der Tabelle l�schen wollen, sollten Sie
-@code{TRUNCATE TABLE tabelle} benutzen. @xref{TRUNCATE}.
-
-Die Zeit, die f�r das L�schen eines Datensatzes ben�tigt wird, ist exakt
-proportional zur Anzahl der Indexe. Um Datens�tze schneller zu l�schen,
-k�nnen Sie die Gr��e des Index-Caches herauf setzen.
-@xref{Server parameters}.
-
-
-@node Tips, , Delete speed, Query Speed
-@c German node Tipps
-@subsection Weitere Optimierungstipps
-
-@cindex Optimierung, Tipps
-@cindex Tipps, Optimierung
-
-Ungeordnete Liste von Tipps f�r schnellere Systeme:
-
-@itemize @bullet
-@item
-Benutzen Sie persistente Verbindungen zur Datenbank, um
-Verbindungs-Overhead zu vermeiden. Wenn Sie keine persistenten Verbindungen
-benutzen k�nnen und viele neue Verbindungen zur Datenbank aufmachen,
-sollten Sie den Wert der @code{Thread_cache_size}-Variablen �ndern.
-@xref{Server parameters}.
-@item
-�berpr�fen Sie immer, dass alle Ihre Anfragen tats�chlich die Indexe
-benutzen, die Sie in den Tabellen erzeugt haben. In MySQL kann man das mit
-dem @code{EXPLAIN}-Befehl tun. @xref{EXPLAIN, Explain, Explain, Handbuch}.
-@item
-Versuchen Sie, komplexe @code{SELECT}-Anfragen auf Tabellen zu vermeiden,
-die viel aktualisiert werden, um Probleme mit Tabellensperren zu vermeiden.
-@item
-Die neuen @code{MyISAM}-Tabellen k�nnen Zeilen in eine Tabelle ohne
-gel�schte Zeile zur gleichen Zeit einf�gen, wie eine andere Tabelle aus ihr
-liest. Wenn das f�r Sie wichtig ist, sollten Sie Methoden in Betracht
-ziehen, bei denen Sie keine Zeilen l�schen m�ssen, oder @code{OPTIMIZE
-TABLE} laufen lassen, nachdem Sie viele Zeilen gel�scht haben.
-@item
-Benutzen Sie @code{ALTER TABLE ... ORDER BY ausdruck1,ausdruck2,...}, wenn
-Sie Zeilen zumeist in der Reihenfolge ausdruck1,ausdruck2,... abrufen. Wenn
-Sie diese Option nach gro�en �nderungen in der Tabelle nutzen, erzielen
-Sie eventuell h�here Performance.
-@item
-In einigen F�llen kann es sinnvoll sein, eine Spalte einzuf�hren, die auf
-der Grundlage von Informationen aus anderen Spalten 'gehashed' ist. Wenn
-diese Spalte kurz und halbwegs eindeutig ist, kann das schneller sein als
-ein gro�er Index auf mehrere Spalten. In MySQL ist es sehr einfach, eine
-solche zus�tzliche Spalte zu benutzen:
-@code{SELECT * FROM tabelle WHERE hash=MD5(concat(spalte1,spalte2))
-AND spalte_1='constant' AND spalte_2='constant'}
-@item
-Bei Tabellen, die sich viel �ndern, sollten Sie versuchen, alle
-@code{VARCHAR}- oder @code{BLOB}-Spalten zu vermeiden. Sonst erhalten Sie
-dynamische Zeilenl�ngen, sobald Sie eine einzige @code{VARCHAR}- oder
-@code{BLOB}-Spalte verwenden. @xref{Table types}.
-@item
-Normalerweise n�tzt es nichts, eine Tabelle in verschiedene Tabellen
-aufzuteilen, nur weil die Zeile 'viel' werden. Um auf eine Zeile
-zuzugreifen, ist das wichtigste, was die Performance betrifft, der
-Suchvorgang nach dem ersten Byte der Zeile auf der Platte. Nachdem die
-Daten gefunden wurden, k�nnen die meisten neuen Platten die gesamte Zeile
-f�r die meisten Applikationen schnell genug lesen. Der einzige Fall, wo es
-wirklich etwas ausmacht, wenn eine Tabelle aufgeteilt wird, ist, wenn die
-Tabelle dynamische Zeilenl�nge hat (siehe oben), was nicht in eine feste
-Zeilenl�nge umgewandelt werden kann, oder wenn Sie die Tabelle sehr oft
-scannen m�ssen, die meisten der Spalten hierf�r aber nicht ben�tigen.
-@xref{Table types}.
-@item
-Wenn Sie sehr oft etwas auf der Grundlage von Informationen aus sehr vielen
-Zeilen berechnen m�ssen (zum Beispiel Dinge z�hlen), ist es wahrscheinlich
-besser, eine neue Tabelle einzuf�hren und den Z�hler in Echtzeit zu
-aktualisieren. Eine Aktualisierung des Typs @code{UPDATE tabelle set
-zaehler=zaehler+1 where index_spalte=konstante} ist sehr schnell!
-
-Das ist sehr wichtig, wenn Sie Datenbanken wie MySQL benutzen, die nur
-Tabellensperren haben (viele Leser / einzelne Schreiber). Bei den meisten
-sonstigen Datenbanken ergibt das ebenfalls bessere Performance, weil der
-Zeilensperr-Manager weniger zu tun haben wird.
-@item
-Wenn Sie Statistiken aus gro�en Log-Tabellen gewinnen wollen, benutzen Sie
-Zusammenfassungstabellen, statt die gesamte Tabelle zu scannen. Die Wartung
-der Zusammenfassungen sollte wesentlich leichter sein, als die Statistiken
-'live' zu generieren. Es ist viel schneller, neue Zusammenfassungstabellen
-aus den Logs zu erzeugen, wenn sich Dinge �ndern (abh�ngig von
-Gesch�ftsentscheidungen) als eine laufende Applikation �ndern zu m�ssen!
-@item
-Wenn m�glich sollte man Berichte als 'live' oder 'statistisch'
-klassifizieren, wobei die Daten, die f�r statistische Berichte ben�tigt
-werden, nur auf der Grundlage von Zusammenfassungstabellen erzeugt werden,
-die aus den eigentlichen Daten generiert werden.
-@item
-Ziehen Sie Vorteile aus der Tatsache, dass Spalten Vorgabewerte haben.
-F�gen Sie nur dann explizit Werte ein, wenn der einzuf�gende Wert vom
-Vorgabewert abweicht. Das verringert das Parsen, das MySQL durchf�hren
-muss, und erh�ht die Einf�gegeschwindigkeit.
-@item
-In einigen F�llen ist es bequem, Daten zu komprimieren und in einem Blob zu
-speichern. In diesem Fall m�ssen Sie in Ihrer Applikation etwas
-zus�tzlichen Code unterbringen, um die Dinge im Blob zu packen bzw. zu
-entpacken. Das kann aber in manchen Phasen etliches an Zugriffen einsparen.
-Das ist praktisch, wenn Sie Daten haben, die mit einer statischen
-Tabellenstruktur nicht konform sind.
-@item
-Normalerweise sollten Sie versuchen, alle Daten nicht redundant zu halten
-(was sich in der Datenbanktheorie dritte Normalform nennt). Scheuen Sie
-sich aber nicht davor, Dinge zu duplizieren oder Zusammenfassungstabellen
-zu erzeugen, wenn Sie dies brauchen, um mehr Geschwindigkeit zu erzielen.
-@item
-Gespeicherte Prozeduren (Stored Procedures) oder UDF (user defined
-functions, benutzerdefinierte Funktionen) sind eine gute M�glichkeit, mehr
-Performance zu erzielen. Sie sollten jedoch immer eine andere (langsamere)
-M�glichkeit parat haben, wenn Sie eine Datenbank benutzen, die gespeicherte
-Prozeduren nicht unterst�tzt.
-@item
-Man erreicht immer etwas, wenn man Anfragen / Antworten in der Applikation
-cachet und versucht, viele Einf�ge- oder Aktualisierungsvorg�nge zugleich
-durchzuf�hren. Wenn Ihre Datenbank Tabellensperren unterst�tzt (wie MySQL
-und Oracle), sollte das dazu f�hren, dass der Index-Cache nur einmal auf
-Platte zur�ck geschrieben wird, nachdem alles Einf�gen / Aktualisieren
-ausgef�hrt ist.
-@item
-Benutzen Sie @code{INSERT /*! DELAYED */}, wenn Sie nicht wissen brauchen,
-wann Ihre Daten geschrieben werden. Das erh�ht die Geschwindigkeit, weil
-viele Datens�tze mit einem einzige Festplattenschreibzugriff geschrieben
-werden k�nnen.
-@item
-Benutzten Sie @code{INSERT /*! LOW_PRIORITY */}, wenn Sie wollen, dass Ihre
-Selects h�here Priorit�t haben.
-@item
-Benutzen Sie @code{SELECT /*! HIGH_PRIORITY */}, um zu bewirken, dass
-Selects in der Wartereihe nach vorn springen. Das hei�t, der Select wird
-sogar dann durchgef�hrt, wenn jemand darauf wartet, etwas zu schreiben.
-@item
-Benutzen Sie das mehrzeilige @code{INSERT}-Statement, um viele Zeilen mit
-einem SQL-Befehl zu speichern (viele SQL-Server unterst�tzen das).
-@item
-Benutzen Sie @code{LOAD DATA INFILE}, um gr��ere Datenmengen zu laden. Das
-ist schneller als normale Einf�gevorg�nge und wird noch schneller, wenn
-@code{myisamchk} in @code{mysqld} integriert wird.
-@item
-Benutzen Sie @code{AUTO_INCREMENT}-Spalten, um eindeutige Werte zu
-erzeugen.
-@item
-Benutzen Sie gelegentlich @code{OPTIMIZE TABLE}, um Fragmentierungen zu
-vermeiden, wenn Sie das dynamische Tabellenformat verwenden.
-@c German FIX changed @xref from TABLE to OPTIMIZE TABLE (point to proper node)
-@xref{OPTIMIZE TABLE}.
-@item
-Benutzen Sie - wenn m�glich - @code{HEAP}-Tabellen, um mehr Geschwindigkeit
-zu erzielen. @xref{Table types}.
-@item
-Bei einer normalen Webserver-Konfiguration sollten Bilder als separate
-Dateien gespeichert werden. Das hei�t, speichern Sie nur einen Verweis zur
-Datei in der Datenbank. Der Hauptgrund ist, dass normale Webserver viel
-besser darin sind, Dateien zu cachen als Datenbankinhalte. Daher ist es
-viel einfacher, ein schnelles System zu bekommen, wenn Sie Dateien
-benutzen.
-@item
-Benutzen Sie f�r nicht kritische Daten, auf die oft zugegriffen wird,
-Tabellen im Arbeitsspeicher (zum Beispiel Informationen �ber die Banner,
-die Benutzern ohne Cookies zuletzt pr�sentiert wurden).
-@item
-Spalten mit identischen Informationen in unterschiedlichen Tabellen sollten
-identisch deklariert sein und identische Namen haben. Vor Version 3.23
-konnte man ansonsten langsame Joins erhalten.
-
-Versuchen Sie, die Namen einfach zu halten (benutzen Sie @code{name}
-anstelle von @code{kunde_name} in der Kundentabelle). Um Namen f�r andere
-SQL-Server portabel zu halten, sollten Sie sie k�rzer als 18 Zeichen
-halten.
-@item
-Wenn Sie WIRKLICH hohe Geschwindigkeit brauchen, sollten Sie einen Blick
-auf die Low-Level-Schnittstellen zur Datenspeicherung werfen, die die
-unterschiedlichen SQL-Server unterst�tzen! Wenn Sie zum Beispiel auf
-@code{MyISAM} direkt zugreifen, erhalten Sie eine
-Geschwindigkeitssteigerung um den Faktor 2 bis 5, im Vergleich zur
-Benutzung der SQL-Schnittstelle. Um das durchf�hren zu k�nnen, m�ssen die
-Daten auf demselben Server liegen wie die Applikation und �blicherweise
-sollte auf sie nur von einem Prozess zugegriffen werden (weil externes
-Dateisperren reichlich langsam ist). Man k�nnte die oben genannten Probleme
-beseitigen, indem Low-Level-@code{MyISAM}-Befehle in den MySQL-Server
-eingebaut werden (das w�re eine einfache M�glichkeit, bei Bedarf mehr
-Performance zu erlangen). Indem die Datenbankshnittstelle sorgf�ltig
-entworfen wird, sollte es recht einfach sein, diese Arten von Optimierung
-zu unterst�tzen.
-@item
-In vielen F�llen ist es schneller, auf Daten aus einer Datenbank (mit einer
-direkten Verbindung) als �ber eine Textdatei zuzugreifen, schon deshalb,
-weil die Datenbank wahrscheinlich kompakter ist als die Textdatei (wenn Sie
-numerische Daten benutzen) und hierdurch weniger Festplattenzugriffe
-erforderlich sind. Ausserdem wird Code eingespart, weil Sie Ihre
-Textdateien nicht parsen m�ssen, um Zeilen- und Spaltenbegrenzungen zu
-finden.
-@item
-Ausserdem k�nnen Sie Replikation benutzen, um die Geschwindigkeit zu
-steigern. @xref{Replication}.
-@item
-Wenn eine Tabelle mit @code{DELAY_KEY_WRITE=1} deklariert wird, werden
-Aktualisierungen auf Indexe schneller, weil diese nicht auf Platte
-geschrieben werden, bis die Datei geschlossen wird. Der Nachteil ist, dass
-Sie auf diesen Tabellen @code{myisamchk} laufen lassen sollten, bevor Sie
-@code{mysqld} starten, um sicherzustellen, dass diese in Ordnung sind,
-falls irgend etwas @code{mysqld} mittendrin killt. Weil die
-Schl�ssel-Informationen jederzeit aus den Daten erzeugt werden k�nnen,
-sollten Sie durch @code{DELAY_KEY_WRITE} nichts verlieren.
-@end itemize
-
-
-@node Locking Issues, Optimising Database Structure, Query Speed, MySQL Optimisation
-@c German node Sperren (Locks)
-@section Sperren (Locking)
-
-
-
-
-@menu
-* Internal locking::
-* Table locking::
-@end menu
-
-@node Internal locking, Table locking, Locking Issues, Locking Issues
-@c German node Internes Sperren
-@subsection Wie MySQL Tabellen sperrt
-
-@cindex internes Sperren
-@cindex sperren, Tabellen
-@cindex Tabellen, sperren
-
-Im Anhang finden Sie eine Er�rterung zu den unterschiedlichen
-Sperrmethoden. @xref{Locking methods}.
-
-Jedes Sperren in MySQL ist blockierungsfrei. Das wird erreicht, indem alle
-Sperren zugleich am Anfang einer Anfrage angefordert werden, und indem
-Tabellen immer in derselben Reihenfolge gesperrt werden.
-
-The Sperrmethode, die MySQL f�r @code{WRITE}-Sperren benutzt, funktioniert
-wie folgt:
-
-@itemize @bullet
-@item
-Falls es keine Sperren auf die Tabelle gibt, wird eine Schreibsperre
-gemacht.
-@item
-Ansonsten wird die Sperranforderung in die Schreibsperren-Warteschlange
-eingereiht.
-@end itemize
-
-Die Sperrmethode, die MySQL f�r @code{READ}Sperren benutzt, funktioniert
-wie folgt:
-
-@itemize @bullet
-@item
-Falls es keine Schreibsperren auf die Tabelle gibt, wird eine Lesesperre
-gemacht.
-@item
-Ansonsten wird die Sperranforderung in die Lesesperren-Warteschlange
-eingereiht.
-@end itemize
-
-Wenn eine Sperre aufgehoben wird, wird die Sperren den Threads in der
-Schreibsperren-Warteschlange verf�gbar gemacht, danach den Threads in der
-Lesesperren-Warteschlange.
-
-Das bedeutet, wenn Sie viele Aktualisierungen auf eine Tabelle haben,
-warten @code{SELECT}-Statements, bis es keine Aktualisierungen mehr gibt.
-
-Um das f�r den Fall zu umgehen, dass es viele @code{INSERT}-
-und-@code{SELECT}-Operationen auf eine Tabelle gibt, k�nnen Sie Zeilen in
-eine tempor�re Tabelle einf�gen und die echte Tabelle gelegentlich aus den
-Daten der tempor�re Tabelle aktualisieren.
-
-Das machen Sie wie folgt:
-@example
-mysql> LOCK TABLES echte_tabelle WRITE, einfuege_tabelle WRITE;
-mysql> insert into echte_tabelle select * von einfuege_tabelle;
-mysql> TRUNCATE TABLE einfuege_tabelle;
-mysql> UNLOCK TABLES;
-@end example
-
-Sie k�nnen bei @code{INSERT}, @code{UPDATE} oder @code{DELETE} die
-@code{LOW_PRIORITY}-Option oder bei @code{SELECT} die
-@code{HIGH_PRIORITY}-Option benutzen, wenn Sie dem Abruf von Daten in
-bestimmten F�llen Priorit�t einr�umen wollen. Sie k�nnen auch @code{mysqld}
-mit @code{--low-priority-updates} starten, um dasselbe Verhalten zu
-erreichen.
-
-Die Benutzung von @code{SQL_BUFFER_RESULT} kann ebenfalls helfen,
-Tabellensperren k�rzer zu machen. @xref{SELECT}.
-
-Sie k�nnen auch den Sperr-Code in @file{mysys/thr_lock.c} �ndern, um eine
-einzige Warteschlagen zu benutzen. In diesem Fall haben Schreibsperren und
-Lesesperren dieselbe Priorit�t, was bei einigen Applikationen eventuell
-hilfreich ist.
-
-
-@node Table locking, , Internal locking, Locking Issues
-@c German node Tabellensperren
-@subsection Themen, die Tabellensperren betreffen
-
-@cindex Probleme, Tabellensperren
-
-Der Tabellensperren-Code in MySQL ist blockierungsfrei.
-
-MySQL benutzt Tabellensperren (anstelle von Zeilensperren oder
-Spaltensperren) f�r alle Tabellentypen ausser @code{BDB}-Tabellen, um eine
-sehr hohe Sperrgeschwindigkeit zu erzielen. Bei gro�en Tabellen ist
-Tabellensperren bei den meisten Applikationen VIEL besser als
-Zeilensperren, aber es gibt nat�rlich ein paar Fallstricke.
-
-Bei @code{BDB}- und @code{InnoDB}-Tabellen benutzt MySQL Tabellensperren,
-wenn Sie die Tabelle explizit mit @code{LOCK TABLES} sperren oder einen
-Befehl ausf�hren, der jede Zeile in der Tabelle �ndern wird, wie
-@code{ALTER TABLE}. Bei diesen Tabellentypen empfehlen wir, @code{LOCK
-TABLES} �berhaupt nicht zu benutzen.
-
-Ab MySQL-Version 3.23.7 k�nnen Sie Zeilen in @code{MyISAM}-Tabellen zur
-gleichen Zeit einf�gen, w�hrend andere Threads aus der Tabelle lesen.
-Beachten Sie, dass das momentan nur funktioniert, wenn es zu der Zeit, zu
-der das Einf�gen vorgenommen wird, keine durch gel�schte Zeilen verursachte
-L�cher in der Tabelle gibt. Wenn alle L�cher mit neuen Daten gef�llt
-wurden, werden gleichzeitige Einf�gevorg�nge automatisch wieder aktiviert.
-
-Tabellensperren erm�glicht, dass viele Threads gleichzeitig aus einer
-Tabelle lesen, aber bevor ein Thread in die Tabelle schreiben kann, muss er
-zun�chst exklusiven Zugriff erhalten. W�hrend der Aktualisierung m�ssen
-andere Threads, die auf diese Tabelle zugreifen wollen, warten, bis die
-Aktualisierung fertig ist.
-
-Weil Aktualisierung von Tabellen normalerweise als wichtiger erachtet
-werden als @code{SELECT}, erhalten alle Statements, die eine Tabelle
-aktualisieren, eine h�here Priorit�t als Statements, die Informationen aus
-der Tabelle abrufen. Das sollte sicherstellen, dass Aktualisierungen nicht
-'verhungern', wenn viele gro�e Anfragen auf eine bestimmte Tabelle
-durchgef�hrt werden. (Sie k�nnen das �ndern, indem Sie bei dem Statement,
-dass die Aktualisierung durchf�hrt, LOW_PRIORITY verwenden, oder beim
-@code{SELECT}-Statement @code{HIGH_PRIORITY}.)
-
-Ab MySQL-Version 3.23.7 k�nnen Sie die @code{max_write_lock_count}-Variable
-benutzen, um MySQL zu zwingen, tempor�r allen @code{SELECT}-Statements, die
-auf eine Tabelle warten, nach einer bestimmten Anzahl von Einf�gevorg�ngen
-auf eine Tabelle h�here Priorit�t einzur�umen.
-
-Tabellensperren ist jedoch bei folgendem Szenario nicht sehr gut:
-
-@itemize @bullet
-@item
-Ein Client f�hrt ein @code{SELECT} aus, das lange Zeit l�uft.
-@item
-Ein anderer Client f�hrt danach ein @code{UPDATE} auf die benutzte Tabelle
-aus. Dieser Client wartet, bis das @code{SELECT} fertig ist.
-@item
-Ein weiterer Client f�hrt ein weiteres @code{SELECT}-Statement auf dieselbe
-Tabelle aus. Weil @code{UPDATE} h�here Priorit�t als @code{SELECT} hat,
-wartet dieses @code{SELECT}, bis das @code{UPDATE} fertig ist. Es wartet
-auch darauf, dass das erste @code{SELECT} fertig ist!
-@item
-Ein Thread wartet bei etwas wie @code{Platte voll}. In diesem Fall warten
-alle anderen Threads, die auf die problemverursachende Tabelle zugreifen
-wollen, bis mehr Speicher verf�gbar gemacht wurde.
-@end itemize
-
-M�gliche L�sungen dieses Problems sind:
-
-@itemize @bullet
-@item
-Versuchen Sie, @code{SELECT}-Statements schneller ablaufen zu lassen.
-Hierf�r m�ssen Sie eventuell Zusammenfassungstabellen erzeugen.
-
-@item
-Starten Sie @code{mysqld} mit @code{--low-priority-updates}. Das gibt allen
-Statements, die eine Tabelle aktualisieren (�ndern), geringere Priorit�t
-als einem @code{SELECT}-Statement. Im vorstehenden Szenario w�rde das
-@code{SELECT}-Statement vor dem @code{INSERT}-Statement ausgef�hrt werden.
-
-@item
-Sie k�nnen auch einem bestimmten @code{INSERT}-, @code{UPDATE}- oder
-@code{DELETE}-Statement mit dem @code{LOW_PRIORITY}-Attribut geringere
-Priorit�t geben.
-
-@item
-Starten Sie @code{mysqld} mit einem niedrigen Wert f�r
-@strong{max_write_lock_count}, um @code{READ}-Sperren nach einer bestimmten
-Anzahl von @code{WRITE}-Sperren zu erm�glichen.
-
-@item
-Sie k�nnen festlegen, dass alle Aktualisierungen von einem bestimmten
-Thread mit niedriger Priorit�t ausgef�hrt werden, indem Sie den SQL-Befehl
-@code{SET SQL_LOW_PRIORITY_UPDATES=1} benutzen. @xref{SET OPTION, ,
-@code{SET OPTION}}.
-
-@item
-Sie k�nnen mit dem @code{HIGH_PRIORITY}-Attribut festlegen, dass ein
-bestimmtes @code{SELECT} sehr wichtig ist. @xref{SELECT, , @code{SELECT}}.
-
-@item
-Wenn Sie Probleme mit @code{INSERT} in Kombination mit @code{SELECT} haben,
-stellen Sie auf die neuen @code{MyISAM}-Tabellen um, weil diese
-gleichzeitige @code{SELECT}s und @code{INSERT}s unterst�tzen.
-
-@item
-Wenn Sie haupts�chlich @code{INSERT}- und @code{SELECT}-Statements mischen,
-wird das @code{DELAYED}-Attribut f�r @code{INSERT} wahrscheinlich Ihre
-Probleme l�sen. @xref{INSERT, , @code{INSERT}}.
-
-@item
-Wenn Sie Probleme mit @code{SELECT} und @code{DELETE} haben, mag die
-@code{LIMIT}-Option f�r @code{DELETE} helfen. @xref{DELETE, ,
-@code{DELETE}}.
-@end itemize
-
-
-@node Optimising Database Structure, Optimising the Server, Locking Issues, MySQL Optimisation
-@c German node Optimierung der Datenbank-Struktur
-@section Optimierung der Datenbank-Struktur
-
-
-
-
-@menu
-* Design::
-* Data size::
-* MySQL indexes::
-* Indexes::
-* Multiple-column indexes::
-* Open tables::
-* Table cache::
-* Creating many tables::
-@end menu
-
-@node Design, Data size, Optimising Database Structure, Optimising Database Structure
-@c German node Design
-@subsection MySQL-Datenbank-Design-�berlegungen
-
-@cindex Design, �berlegungen zum Datenbank-Design
-@cindex Datenbank-Design
-@cindex Speicherung von Daten
-
-MySQL speichert Zeilendaten und Indexdaten in separaten Dateien. Viele
-(fast alle) anderen Datenbanken vermischen Zeilen- und Indexdaten in
-derselben Datei. Wir glauben, dass die Wahl, die MySQL getroffen hat, f�r
-einen sehr weiten Bereich moderner Systeme besser ist.
-
-Eine weitere M�glichkeit, Zeilendaten zu speichern, besteht darin, die
-Information f�r jede Spalten in einem separaten Bereich zu halten
-(Beispiele sind SDBM und Focus). Das verursacht Performance-Einbussen f�r
-jede Anfrage, die auf mehr als eine Spalte zugreift. Weil das so schnell
-schlechter wird, wenn auf mehr als eine Spalte zugegriffen wird, glauben
-wir, dass dieses Modell f�r Mehrzweck-Datenbanken nicht gut ist.
-
-Der h�ufigere Fall ist, dass Index und Daten zusammen gespeichert sind (wie
-bei Oracle, Sybase usw.). In diesem Fall befindet sich die
-Zeileninformation auf der Leaf-Page des Indexes. Das Gute daran ist, dass
-man sich damit - abh�ngig davon, wie gut der Index gecachet ist - einen
-Festplatten-Lesezugriff spart. Das Schlechte an diesem Layout sind
-folgende Dinge:
-
-@itemize @bullet
-@item
-Tabellenscannen geht viel langsamer, weil man durch alle Indexe lesen muss,
-um an die Daten zu kommen.
-@item
-Man kann nicht nur die Index-Tabelle benutzen, um Daten einer Anfrage
-abzurufen.
-@item
-Man verliert viel Speicherplatz, weil man Indexe von den Nodes duplizieren
-muss (weil man die Zeile nicht in den Nodes speichern kann).
-@item
-L�schvorg�nge werden die Tabelle im Zeitablauf zersetzen (weil Indexe in
-Nodes �blicherweise bei L�schvorg�ngen nicht aktualisiert werden).
-@item
-Ist es schwieriger, NUR die Index-Daten zu cachen.
-@end itemize
-
-
-@node Data size, MySQL indexes, Design, Optimising Database Structure
-@c German node Datengr��e
-@subsection Wie Sie Ihre Daten so klein wie m�glich bekommen
-
-@cindex Daten, Gr��e
-@cindex verringern, Datengr��e
-@cindex Speicherplatz, minimieren
-@cindex Tabellen, Performance verbessern
-@cindex Performance, verbessern
-
-Eine der grundlegendsten Optimierungen besteht darin, Ihre Daten (und
-Indexe) dazu zu bekommen, dass sie m�glichst wenige Platz auf der Platte
-(und im Arbeitsspeicher) benutzen. Das kann zu gewaltigen Verbesserungen
-f�hren, weil Lesezugriffe von der Platte schneller ablaufen und
-normalerweise weniger Hauptspeicher benutzt wird. Das Indexieren nimmt
-dar�ber hinaus weniger Ressourcen in Anspruch, wenn es auf kleinere Spalten
-durchgef�hrt wird.
-
-MySQL unterst�tzt viele verschiedene Tabellentypen und Zeilenformate. Wenn
-Sie das richtige Tabellenformat benutzen, kann Ihnen das gro�e
-Performance-Gewinne bringen.
-@xref{Table types}.
-
-Sie erhalten bessere Performance auf eine Tabelle und minimieren den
-ben�tigten Speicherplatz, wenn Sie die unten aufgef�hrten Techniken
-verwenden:
-
-@itemize @bullet
-@item
-Benutzen Sie die effizientesten (kleinsten) m�glichen Typen. MySQL hat
-viele spezialisierte Typen, die Plattenplatz und Arbeitsspeicher sparen.
-
-@item
-Benutzen Sie - falls m�glich - die kleineren Ganzzahl-Typen, um kleinere
-Tabellen zu erhalten. @code{MEDIUMINT} zum Beispiel ist oft besser als
-@code{INT}.
-
-@item
-Deklarieren Sie Spalten - falls m�glich - als @code{NOT NULL}. Das macht
-alles schneller und Sie sparen ein Bit pro Spalte. Beachten Sie, dass, wenn
-Sie wirklich @code{NULL} in Ihrer Applikation ben�tigen, Sie dieses
-nat�rlich benutzen sollten. Vermeiden Sie nur, einfach alle Spalten
-vorgabem��ig auf @code{NULL} zu haben.
-
-@item
-Wenn Sie keine Spalten variabler L�nge haben (@code{VARCHAR}, @code{TEXT}
-oder @code{BLOB}-Spalten), wird ein Festgr��enformat benutzt. Das ist
-schneller, mag aber leider etwas Speicherplatz verschwenden.
-@xref{MyISAM table formats}.
-
-@item
-Der prim�re Index einer Tabelle sollte so kurz wie m�glich sein. Das macht
-die Identifikation einer Zeile schnell und effizient.
-
-@item
-Bei jeder Tabelle m�ssen Sie entscheiden, welche Speicher- / Index-Methode
-benutzt werden soll. @xref{Table types}.
-
-@item
-Erzeugen Sie nur die Indexe, die Sie tats�chlich brauchen. Indexe sind gut
-f�r das Abfragen von Daten, aber schlecht, wenn Sie Dinge schnell speichern
-m�ssen. Wenn Sie meist auf eine Tabelle zugreifen, indem Sie nach einer
-Kombination von Spalten suchen, legen Sie einen Index auf diese. Der erste
-Index-Teil sollte die meistbenutzte Spalte sein. Wenn Sie IMMER viele
-Spalten benutzen, sollten Sie die Spalte zuerst benutzen, die mehr
-Duplikate hat, um eine bessere Kompression des Indexes zu erzielen.
-
-@item
-Wenn es sehr wahrscheinlich ist, dass eine Spalte ein eindeutiges Pr�fix
-auf der ersten Anzahl von Zeichen hat, ist es besser, nur dieses Pr�fix zu
-indexieren. MySQL unterst�tzt einen Index auf einem Teil einer
-Zeichen-Spalte. K�rzere Indexe sind nicht nur schneller, weil sie weniger
-Plattenplatz brauchen, sondern auch, weil Sie mehr Treffer im Index-Cache
-erhalten und daher weniger Festplattenzugriffe ben�tigen.
-@xref{Server parameters}.
-
-@item
-Unter manchen Umst�nden kann es vorteilhaft sein, eine Tabelle zu teilen,
-die sehr oft gescannt wird. Das gilt insbesondere, wenn diese ein
-dynamisches Tabellenformat hat und es m�glich ist, durch die Zerlegung eine
-kleinere Tabelle mit statischem Format zu erhalten, die benutzt werden
-kann, um die relevanten Zeilen zu finden.
-@end itemize
-
-
-@node MySQL indexes, Indexes, Data size, Optimising Database Structure
-@c German node MySQL-Indexe
-@subsection Wie MySQL Indexe benutzt
-
-@cindex Indexe, Benutzung von
-
-Indexe werden benutzt, um Zeilen mit einem bestimmten Spaltenwert schnell
-zu finden. Ohne Index m�sste MySQL mit dem ersten Datensatz anfangen und
-dann durch die gesamte Tabelle lesen, bis er die relevanten Zeilen findet.
-Je gr��er die Tabelle, desto mehr Zeit kostet das. Wenn die Tabellen f�r
-die infrage kommenden Zeilen einen Index hat, kann MySQL schnell eine
-Position bekommen, um mitten in der Daten-Datei loszusuchen, ohne alle
-Daten zu betrachten. Wenn eine Tabelle 1.000 Zeilen hat, ist das mindestens
-100 mal schneller als sequentielles Lesen. Wenn Sie jedoch auf fast alle
-1.000 Zeilen zugreifen m�ssen, geht sequentielles Lesen schneller, weil man
-mehrfache Festplattenzugriffe einspart.
-
-Alle MySQL-Indexe (@code{PRIMARY}, @code{UNIQUE} und @code{INDEX}) sind in
-B-B�umen gespeichert. Zeichenketten werden automatisch pr�fix-komprimiert,
-ebenfalls werden Leerzeichen am Ende komprimiert.
-@c German FIX unsplit @xref
-@xref{CREATE INDEX, ,@code{CREATE INDEX}}.
-
-Indexe werden benutzt, um:
-@itemize @bullet
-@item
-Schnell die Zeilen zu finden, die mit einer @code{WHERE}-Klausel
-�bereinstimmen.
-
-@item
-Zeilen aus anderen Tabellen abzurufen, wenn Sie Joins durchf�hren.
-
-@item
-Den @code{MAX()}- oder @code{MIN()}-Wert f�r eine spezielle indizierte
-Spalte zu finden. Das wird durch einen Pr�prozessor optimiert, der
-�berpr�ft, ob Sie @code{WHERE} schluessel_teil_# = constant auf allen
-Schl�sselteilen < N verwenden. In diesem Fall f�hrt MySQL ein einzige
-Schl�sselnachschlagen durch und ersetzt den @code{MIN()}-Ausdruck mit einer
-Konstanten. Wenn alle Ausdr�cke durch Konstanten ersetzt sind, gibt die
-Anfrage sofort ein Ergebnis zur�ck:
-
-@example
-SELECT MIN(schluessel_teil2),MAX(schluessel_teil2) FROM tabelle where schluessel_teil1=10
-@end example
-
-@item
-Eine Tabelle zu sortieren oder zu gruppieren, wenn das Sortieren oder
-Gruppieren mit dem am weitesten links stehenden Pr�fix eines benutzbaren
-Schl�ssels durchgef�hrt wird (zum Beispiel @code{ORDER BY
-schluessel_teil_1,schluessel_teil_2}). Der Schl�ssel wird in umgekehrter
-Reihenfolge gelesen, wenn allen Schl�sselteilen @code{DESC} folgt.
-
-Der Index kann auch benutzt werden, selbst wenn @code{ORDER BY} nicht exakt
-mit dem Index �bereinstimmt, solange alle unbenutzten Indexteile und alle
-zus�tzlichen @code{ORDER BY}-Spalten Konstanten in der @code{WHERE}-Klausel
-sind. Folgende Anfragen werden einen Index benutzen, um den @code{ORDER
-BY}-Teil aufzul�sen:
-
-@example
-SELECT * FROM foo ORDER BY schluessel_teil1,schluessel_teil2,schluessel_teil3;
-SELECT * FROM foo WHERE spalte=konstante ORDER BY spalte, schluessel_teil1;
-SELECT * FROM foo WHERE schluessel_teil1=konstante GROUP BY schluessel_teil2;
-@end example
-
-@item
-In einigen F�llen kann eine Anfrage so optimiert werden, dass Sie Werte
-abruft, ohne in der Daten-Datei nachzuschlagen. Wenn alle benutzten Spalten
-einer Tabelle numerisch sind und ein ganz links stehendes Pr�fix f�r einen
-Schl�ssel ergeben, k�nnen die Werte mit gr��erer Geschwindigkeit aus dem
-Index-Baum abgerufen werden:
-
-@example
-SELECT schluessel_teil3 FROM tabelle WHERE schluessel_teil1=1
-@end example
-
-@end itemize
-
-Angenommen, Sie f�hren folgendes @code{SELECT}-Statement aus:
-
-@example
-mysql> SELECT * FROM tabelle WHERE spalte1=val1 AND spalte2=val2;
-@end example
-
-Wenn es einen mehrspaltigen Index auf @code{spalte1} und @code{spalte2}
-gibt, k�nnen die entsprechenden Zeilen direkt geholt werden. Wenn es
-separate einspaltige Indexe auf @code{spalte1} und @code{spalte2} gibt,
-versucht der Optimierer, den restriktivsten Index zu finden, indem er
-entscheidet, welcher Index weniger Zeilen finden wird, und diesen Index
-dann benutzen, um Zeilen abzurufen.
-
-@cindex Indexe, ganz links stehendes Pr�fix von
-@cindex ganz links stehendes Pr�fix von Indexen
-Wenn die Tabelle einen mehrspaltigen Index hat, kann jedes Pr�fix auf der
-linken Seite vom Optimierer verwendet werden, um Zeilen zu finden. Wenn Sie
-zum Beispiel einen dreispaltigen Index auf @code{(spalte1,spalte2,spalte3)}
-haben, haben Sie Suchm�glichkeiten auf @code{(spalte1)},
-@code{(spalte1,spalte2)} und @code{(spalte1,spalte2,spalte3)} indiziert.
-
-MySQL kann keinen teilweisen Index verwenden, wenn die Spalten kein ganz
-linkes Pr�fix des Indexes bilden. Angenommen, Sie haben folgende
-@code{SELECT}-Statements:
-
-@example
-mysql> SELECT * FROM tabelle WHERE spalte1=wert1;
-mysql> SELECT * FROM tabelle WHERE spalte2=wert2;
-mysql> SELECT * FROM tabelle WHERE spalte2=wert2 AND spalte3=wert3;
-@end example
-
-Wenn es einen Index auf @code{(spalte1,spalte2,spalte3)} gibt, benutzt nur die
-erste der drei Anfragen den Index. Die zweite und dritte Anfrage umfassen
-indizierte Spalten, aber @code{(spalte2)} und @code{(spalte2,spalte3)} sind
-nicht die ganz linken Pr�fixe von @code{(spalte1,spalte2,spalte3)}.
-
-@findex LIKE und Indexe
-@findex LIKE und Platzhalter
-@cindex Indexe und @code{LIKE}
-@cindex Platzhalter und @code{LIKE}
-MySQL benutzt Indexe auch f�r @code{LIKE}-Vergleiche, wenn das Argument f�r
-@code{LIKE} eine Zeichenketten-Konstante ist, die nicht mit einem
-Platzhalterzeichen anf�ngt. Die folgenden @code{SELECT}-Statements zum
-Beispiel benutzen Indexe:
-
-@example
-mysql> select * from tabelle where schluessel_spalte LIKE "Patrick%";
-mysql> select * from tabelle where schluessel_spalte LIKE "Pat%_ck%";
-@end example
-
-Im ersten Statement werden nur Zeilen mit @code{"Patrick" <=
-schluessel_spalte < "Patricl"} ber�cksichtigt. Im zweiten Statement werden
-nur Zeilen mit @code{"Pat" <= schluessel_spalte < "Pau"} ber�cksichtigt.
-
-Die folgenden @code{SELECT}-Statements benutzen keine Indexe:
-@example
-mysql> select * from tabelle where schluessel_spalte LIKE "%Patrick%";
-mysql> select * from tabelle where schluessel_spalte LIKE andere_spalte;
-@end example
-
-Im ersten Statement f�ngt der @code{LIKE}-Wert mit einem Platzhalterzeichen
-an. Im zweiten Statement ist der @code{LIKE}-Wert keine Konstante.
-
-@findex @code{IS NULL} und Indexe
-@cindex Indexe und @code{IS NULL}
-Suchen mit @code{spalte IS NULL} benutzt Indexe, wenn spalte ein Index ist.
-
-MySQL benutzt normalerweise den Index, der die geringste Anzahl von Zeilen
-findet. Ein Index wird benutzt f�r Spalten, die Sie mit folgenden
-Operatoren vergleichen: @code{=}, @code{>}, @code{>=}, @code{<}, @code{<=},
-@code{BETWEEN} und einem @code{LIKE} ohne Platzhalter-Pr�fix wie
-@code{'etwas%'}.
-
-Jeder Index, der nicht alle @code{AND}-Ebenen in der @code{WHERE}-Klausel
-umfasst, wird nicht benutzt, um die Anfrage zu optimieren. Mit anderen
-Worte: Um einen Index benutzen zu k�nnen, muss ein Pr�fix des Indexes in
-jeder @code{AND}-Gruppe benutzt werden.
-
-Die folgenden @code{WHERE}-Klauseln benutzen Indexe:
-@example
-... WHERE index_teil1=1 AND index_teil2=2 AND andere_spalte=3
-... WHERE index=1 OR A=10 AND index=2 /* index = 1 OR index = 2 */
-... WHERE index_teil1='hello' AND index_teil_3=5
- /* optimiert "index_teil1='hello'" */
-... WHERE index1=1 AND index2=2 OR index1=3 AND index3=3;
- /* kann den Index auf index1 benutzen, aber nicht auf index2 oder index 3 */
-@end example
-
-Die folgenden @code{WHERE}-Klauseln benutzen @strong{KEINE} Indexe:
-@example
-... WHERE index_teil2=1 AND index_teil3=2 /* index_teil_1 wird nicht benutzt */
-... WHERE index=1 OR A=10 /* Index wird nicht in beiden AND-Teilen benutzt */
-... WHERE index_teil1=1 OR index_teil2=10 /* Kein Index umfasst alle Zeilen */
-@end example
-
-Beachten Sie, dass MySQL in manchen F�llen keinen Index benutzt, selbst
-wenn einer verf�gbar w�re. Einige solcher F�lle sind hier aufgef�hrt:
-
-@itemize @bullet
-@item
-Wenn die Benutzung des Indexes erfordern w�rde, dass MySQL auf mehr als 30%
-der Zeilen in der Tabelle zugreift. (In diesem Fall ist ein Tabellenscan
-wahrscheinlich viel schneller, weil dieser weniger Festplattenzugriffe
-braucht.) Beachten Sie, dass MySQL den Index dennoch benutzt, wenn eine
-Anfrage @code{LIMIT} benutzt, um nur ein paar Zeilen abzufragen, weil er
-dann schneller die wenigen Zeilen im Ergebnis finden kann.
-@end itemize
-
-
-
-
-@node Indexes, Multiple-column indexes, MySQL indexes, Optimising Database Structure
-@c German node Indexe
-@subsection Spalten-Indexe
-
-@cindex Indexe, Spalten
-@cindex Spalten, Indexe
-@cindex Schl�ssel
-
-Alle MySQL-Spaltentypen k�nnen indiziert werden. Die Benutzung von Indexen
-auf den relevanten Spalten ist die beste Art, die Performance von
-@code{SELECT}-Operationen zu verbessern.
-
-Die maximale Anzahl von Schl�sseln und die maximale Index-L�nge ist durch
-den Tabellen-Handler vorgegeben. @xref{Table types}. Bei allen
-Tabellen-Handlern k�nnen Sie zumindest 16 Schl�ssel und eine
-Gesamtindexl�nge von zumindest 256 Bytes haben.
-
-Bei @code{CHAR}- und @code{VARCHAR}-Spalten k�nnen Sie ein Pr�fix einer
-Spalte indexieren. Das ist viel schneller und erfordert weniger
-Plattenspeicher als das Indexieren einer ganzen Spalte. Die Syntax, die im
-@code{CREATE TABLE}-Statement benutzt wird, um ein Spaltenpr�fix zu
-indexieren, sieht wie folgt aus:
-
-@example
-KEY index_name (spalten_name(laenge))
-@end example
-
-Das unten stehende Beispiel erzeugt einen Index auf die ersten 10 Zeichen
-der @code{name}-Spalte:
-
-@example
-mysql> CREATE TABLE test (
- name CHAR(200) NOT NULL,
- KEY index_name (name(10)));
-@end example
-
-Bei @code{BLOB}- und @code{TEXT}-Spalten m�ssen Sie ein Pr�fix der Spalte
-indexieren. Sie k�nnen nicht die gesamte Spalte indexieren.
-
-Ab MySQL-Version 3.23.23 k�nnen Sie auch spezielle @strong{FULLTEXT}-Indexe
-erzeugen. Sie werden f�r die Volltextsuche benutzt. Nur der
-@code{MyISAM}-Tabellentyp unterst�tzt @code{FULLTEXT}-Indexe. Sie k�nnen
-nur auf @code{VARCHAR}- und @code{TEXT}-Spalten erzeugt werden. Die
-Indexierung erfolgt immer �ber die gesamte Spalte; teilweises Indexieren
-wird nicht unterst�tzt. Siehe @ref{Fulltext Search} f�r Details.
-
-@node Multiple-column indexes, Open tables, Indexes, Optimising Database Structure
-@c German node Mehrspaltige Indexe
-@subsection Mehrspaltige Indexe
-
-@cindex mehrspaltige Indexe
-@cindex Indexe, mehrspaltige
-@cindex Schl�ssel, mehrspaltige
-
-MySQL kann Indexe auf mehrfache Spalten erzeugen. Ein Index darf aus bis zu
-15 Spalten bestehen. (Auf @code{CHAR}- und @code{VARCHAR}-Spalten k�nnen
-Sie auch ein Pr�fix der Spalte als Teil eines Indexes benutzen).
+@evenheading @thispage @| @| MySQL Technical Reference for Version @value{mysql_version}
-Ein mehrspaltiger Index kann als sortiertes Array betrachtet werden, das
-Werte enth�lt, die durch die Verkettung der Werte der indizierten Spalten
-erzeugt werden.
-
-MySQL benutzt mehrspaltige Indexe in einer Art, dass Anfragen schnell
-werden, wenn Sie eine bekannte Menge f�r die erste Spalte des Indexes in
-einer @code{WHERE}-Klausel angeben, selbst wenn Sie keine Werte f�r die
-anderen Spalten angeben.
-
-Angenommen, einen Tabelle wurde wie folgt erzeugt:
-
-@example
-mysql> CREATE TABLE test (
- id INT NOT NULL,
- nachname CHAR(30) NOT NULL,
- vorname CHAR(30) NOT NULL,
- PRIMARY KEY (id),
- INDEX name (nachname,vorname));
-@end example
-
-Dann ist der Index @code{name} ein Index �ber @code{nachname} und
-@code{vorname}. Der Index wird f�r Anfragen benutzt, die Werte in einem
-bekannten Bereich f�r @code{nachname} angeben, oder sowohl f�r
-@code{nachname} als auch f�r und @code{vorname}.
-Daher wird der @code{name}-Index in folgenden Anfragen benutzt:
-
-@example
-mysql> SELECT * FROM test WHERE nachname="Widenius";
-
-mysql> SELECT * FROM test WHERE nachname="Widenius"
- AND vorname="Michael";
-
-mysql> SELECT * FROM test WHERE nachname="Widenius"
- AND (vorname="Michael" OR vorname="Monty");
-
-mysql> SELECT * FROM test WHERE nachname="Widenius"
- AND vorname >="M" AND vorname < "N";
-@end example
-
-In folgenden Anfragen wird der @code{name}-Index jedoch NICHT benutzt:
-
-@example
-mysql> SELECT * FROM test WHERE vorname="Michael";
-
-mysql> SELECT * FROM test WHERE nachname="Widenius"
- OR vorname="Michael";
-@end example
-
-Weitere Informationen �ber die Art, wie MySQL Indexe benutzt, um die
-Anfragen-Performance zu verbessern, finden Sie unter @ref{MySQL indexes, ,
-MySQL-Indexe}.
-
-
-@node Open tables, Table cache, Multiple-column indexes, Optimising Database Structure
-@c German node Tabellen-Cache
-@subsection Wie MySQL Tabellen �ffnet und schlie�t
-
-@findex table_cache
-
-@cindex Tabellen, �ffnen
-@cindex Tabellen, schlie�en
-@cindex �ffnen, Tabellen
-@cindex schlie�en, Tabellen
-@cindex Tabellen-Cache
-
-@code{table_cache}, @code{max_connections} und @code{max_tmp_tables}
-beeinflussen die maximale Anzahl von Dateien, die der Server offen halten
-kann. Wenn Sie einen oder mehrere dieser Werte erh�hen, k�nnen Sie an eine
-Begrenzung sto�en, die durch Ihr Betriebssystem in Bezug auf die Anzahl
-offener Datei-Deskriptoren pro Prozess festgelegt wird. Diese Begrenzung
-kann man jedoch auf vielen Systemen erh�hen. Sehen Sie im Handbuch Ihres
-Betriebssystems nach, wie man das macht, weil die Methode, wie die
-Begrenzung ge�ndert wird, sich von System zu System stark unterscheidet.
-
-@code{table_cache} ist verwandt mit @code{max_connections}. F�r 200
-gleichzeitig laufende Verbindungen sollten Sie zum Beispiel einen
-Tabellen-Cache von mindestens @code{200 * n} haben, wobei @code{n} die
-maximale Anzahl von Tabellen in einem Join ist. Zus�tzlich m�ssen Sie
-einige externe Datei-Deskriptoren f�r tempor�re Tabellen und Dateien
-reservieren.
-
-Stellen Sie sicher, dass Ihr Betriebssystem die Anzahl offener
-Datei-Deskriptoren handhaben kann, die durch die
-@code{table_cache}-Einstellung impliziert wird. Wenn
-@code{table_cache} zu hoch gesetzt wird, hat MySQL eventuell keine
-Datei-Deskriptoren mehr und verweigert Verbindungen, f�hrt keine Anfragen
-mehr aus und l�uft sehr unzuverl�ssig. Beachten Sie auch, dass der
-MyISAM-Tabellen-Handler zwei Datei-Deskriptoren f�r jede einzelne offene
-Tabelle ben�tigt. Sie k�nnen die Anzahl von Datei-Deskriptoren, die f�r
-MySQL verf�gbar sind, in der @code{--open-files-limit=#}-Startoption
-angeben. @xref{Not enough file handles}.
-
-Der Cache offener Tabellen kann bis auf @code{table_cache} anwachsen
-(Vorgabewert 64; das kann mit der @code{-O Tabellen-Cache=#}-Option f�r
-@code{mysqld} ge�ndert werden). Eine Tabelle wird nie geschlossen, ausser
-wen der Cache voll ist und ein anderer Thread versucht, eine Tabelle zu
-�ffnen, oder wenn Sie @code{mysqladmin refresh} oder @code{mysqladmin
-flush-tables} benutzen.
-
-Wenn sich der Tabellen-Cache f�llt, benutzt der Server folgenden Prozedur,
-um einen Cache-Eintrag f�r die Benutzung zu finden:
-
-@itemize @bullet
-@item
-Tabellen, die momentan nicht in Benutzung sind, werden freigegeben, in der
-Reihenfolge der k�rzlich am wenigsten benutzten Tabellen.
-
-@item
-Wenn der Cache voll ist und keine Tabellen freigegeben werden k�nnen, aber
-eine neue Tabelle ge�ffnet werden muss, wird der Cache tempor�r wie
-ben�tigt vergr��ert.
-
-@item
-Wenn der Cache gerade im Zustand tempor�rer Erweiterung ist und eine
-Tabelle vom Zustand benutzt in den Zustand nicht benutzt wechselt, wird die
-Tabelle geschlossen und vom Cache freigesetzt.
-@end itemize
-
-Eine Tabelle wird f�r jeden gleichzeitigen Zugriff ge�ffnet. Das bedeutet,
-dass die Tabelle zweimal ge�ffnet werden muss, wenn Sie zwei Threads haben,
-die auf dieselbe Tabelle zugreifen oder einen Thread, der auf die Tabelle
-zweimal in derselben Anfrage zugreift (mit @code{AS}). Das erste �ffnen
-jeder Tabelle ben�tigt nur einen Datei-Deskriptor. Der zus�tzliche
-Deskriptor wird f�r die Index-Datei ben�tigt; dieser Deskriptor wird
-mit allen Threads geteilt (shared).
-
-Wenn Sie eine Tabelle mit dem @code{HANDLER tabelle OPEN}-Statement �ffnen,
-wird dem Thread ein dediziertes Tabellenobjekt zugewiesen. Diese
-Tabellenobjekt wird nicht mit anderen Threads geteilt und wird solange
-nicht geschlossen, bis der Thread @code{HANDLER tabelle CLOSE} aufruft oder
-stirbt.
-@xref{INSERT}.
-
-Sie k�nnen pr�fen, ob Ihr Tabellen-Cache zu klein ist, indem Sie die
-mysqld-Variable @code{opened_tables} ansehen. Wenn diese recht Gro� ist,
-selbst wenn Sie nicht viele @code{FLUSH TABLES} ausgef�hrt haben, sollten
-Sie Ihren Tabellen-Cache vergr��ern. @xref{SHOW STATUS}.
-
-
-@node Table cache, Creating many tables, Open tables, Optimising Database Structure
-@c German node Viele Tabellen erzeugen
-@subsection Nachteile der Erzeugung gro�er Mengen von Tabellen in derselben Datenbank
-
-@cindex Tabellen, zu viele
-
-Wenn Sie viele Dateien in einem Verzeichnis haben, werden open-, close- und
-create-Operationen langsam. Wenn Sie ein @code{SELECT}-Statements auf viele
-unterschiedliche Tabellen ausf�hren, gibt es ein bisschen Overhead, wenn
-der Tabellen-Cache voll ist, weil f�r jede Tabelle, die ge�ffnet wird, eine
-andere geschlossen werden muss. Sie k�nnen diese Overhead verringern, indem
-Sie den Tabellen-Cache gr��er machen.
-
-
-@node Creating many tables, , Table cache, Optimising Database Structure
-@c German node Offene Tabellen
-@subsection Warum gibt es so viele offene Tabellen?
-
-@cindex Tabellen, offene
-@cindex offene Tabellen
-
-Wenn Sie @code{mysqladmin status} ausf�hren, werden Sie etwa folgendes
-sehen:
-
-@example
-Uptime: 426 Running Threads: 1 Questions: 11082 Reloads: 1 Open Tables: 12
-@end example
-
-Das kann etwas verwirrend sein, wenn Sie nur 6 Tabellen haben.
-
-MySQL ist multi-threaded, daher kann er viele Anfragen auf dieselbe Tabelle
-simultan verarbeiten. Um das Problem zu minimieren, dass zwei Threads
-verschiedene Zust�nde in Bezug auf dieselbe Datei haben, wird die Tabelle
-unabh�ngig f�r jeden gleichzeitigen Thread ge�ffnet. Das ben�tigt etwas
-Arbeitsspeicher und einen externen Datei-Deskriptor f�r die Daten-Datei.
-Der Index-Datei-Deskriptor wird mit allen Threads geteilt.
-
-
-@node Optimising the Server, Disk issues, Optimising Database Structure, MySQL Optimisation
-@c German node Optimierung des Servers
-@section Optimierung des MySQL-Servers
-
-
-
-
-@menu
-* System::
-* Server parameters::
-* Compile and link options::
-* Memory use::
-* DNS::
-* SET OPTION::
-@end menu
-
-@node System, Server parameters, Optimising the Server, Optimising the Server
-@c German node System
-@subsection System / Kompilierzeitpunkt und Tuning der Startparameter
-
-@cindex Kompilieren, Optimierung
-@cindex System-Optimierung
-@cindex Startparameter, tunen
-
-Wir fangen mit den Dingen auf Systemebene an, weil einige dieser
-Entscheidungen sehr fr�h getroffen werden m�ssen. In anderen F�llen mag ein
-kurzer Blick auf diesen Teil ausreichen, weil er nicht so wichtig f�r
-gro�e Verbesserungen ist. Es ist jedoch immer nett, ein Gef�hl daf�r zu
-bekommen, wie viel man gewinnen kann, wenn man Dinge auf dieser Ebene
-�ndert.
-
-Es ist wirklich wichtig, dass vorgabem��ige Betriebssystem zu kennen! Um
-das meiste aus Mehrprozessor-Maschinen herauszuholen, sollte man Solaris
-benutzen (weil die Threads wirklich gut funktionieren) oder Linux (weil der
-2.2-Kernel wirklich gute Mehrprozessor-Unterst�tzung bietet). Linux hat auf
-32-Bit-Maschinen vorgabem��ig eine Dateigr��enbeschr�nkung von 2 GB. Das
-wird hoffentlich bald behoben, wenn neue Dateisysteme herausgebracht werden
-(XFS/Reiserfs). Wenn Sie dringen Unterst�tzung f�r gr��ere Datei als 2 GB
-auf Linux-Intel-32-Bit ben�tigen, sollten Sie den LFS-Patch f�r das
-ext2-Dateisystem holen.
-
-Weil wir MySQL noch nicht auf allzu vielen Plattformen in einer
-Produktionsumgebung getestet haben, empfehlen wir, dass Sie Ihre geplante
-Plattform testen, bevor Sie sich daf�r entscheiden.
-
-@cindex Sperren
-Weitere Tipps:
-@itemize @bullet
-@item
-Wenn Sie genug Arbeitsspeicher haben, k�nnten Sie alle Swap-Ger�te
-entfernen. Einige Betriebssysteme benutzen in bestimmten Zusammenh�ngen ein
-Swap-Ger�t, selbst wenn Sie freien Arbeitsspeicher haben.
-@item
-Benutzen Sie die @code{--skip-locking}-MySQL-Option, um externe Sperren zu
-vermeiden. Beachten Sie, dass das die Funktionalit�t von MySQL nicht
-tangiert, solange Sie nur einen Server laufen lassen. Denken Sie lediglich
-daran, den Server herunterzufahren (oder die relevanten Teile zu sperren),
-bevor Sie @code{myisamchk} laufen lassen. Auf manchen Systemen ist diese
-Umschaltung zwingend erforderlich, weil externes Sperren in keinem Fall
-funktioniert.
-
-Die @code{--skip-locking}-Option ist vorgabem��ig angeschaltet, wenn Sie
-mit MIT-pThreads kompilieren, weil @code{flock()} von MIT-pThreads nicht
-vollst�ndig auf allen Plattformen unterst�tzt wird. Auch f�r Linux ist es
-vorgabem��ig angeschaltet, weil Linux-Dateisperren bis jetzt nicht
-zuverl�ssig funktionieren.
-
-Der einzige Fall, wo Sie @code{--skip-locking} nicht benutzen k�nnen, sit,
-wenn Sie mehrfache MySQL-@emph{Server} (nicht Clients) auf denselben Daten
-laufen lassen, oder wenn Sie @code{myisamchk} auf eine Tabelle ausf�hren,
-ohne zuerst die @code{mysqld}-Server-Tabellen auf Platte zur�ckzuschreiben
-und zu sperren.
-
-Sie k�nnen immer noch @code{LOCK TABLES} / @code{UNLOCK TABLES} benutzen,
-selbst wenn Sie @code{--skip-locking} benutzen.
-@end itemize
-
-
-@node Server parameters, Compile and link options, System, Optimising the Server
-@c German node Serverparameter
-@subsection Serverparameter tunen
-
-@cindex Parameter, Server
-@cindex @code{mysqld}-Server, Puffer-Gr��en
-@cindex Puffer-Gr��en, @code{mysqld}-Server
-@cindex Startparameter
-
-Sie erhalten die Puffer-Gr��en, die der @code{mysqld}-Server benutzt, mit
-diesem Befehl:
-
-@example
-shell> mysqld --help
-@end example
-
-@cindex @code{mysqld}-Optionen
-@cindex Variablen, @code{mysqld}
-Dieser Befehl erzeugt eine Auflistung aller @code{mysqld}-Optionen und
-konfigurierbaren Variablen. Die Ausgabe enth�lt die Vorgabewerte und sieht
-etwa wie folgt aus:
-
-@example
-Possible variables for option --set-variable (-O) are:
-back_log current value: 5
-bdb_cache_size current value: 1048540
-binlog_cache_size current_value: 32768
-connect_timeout current value: 5
-delayed_insert_timeout current value: 300
-delayed_insert_limit current value: 100
-delayed_queue_size current value: 1000
-flush_time current value: 0
-interactive_timeout current value: 28800
-join_buffer_size current value: 131072
-key_buffer_size current value: 1048540
-lower_case_tabelles current value: 0
-long_query_time current value: 10
-max_allowed_packet current value: 1048576
-max_binlog_cache_size current_value: 4294967295
-max_connections current value: 100
-max_connect_errors current value: 10
-max_delayed_threads current value: 20
-max_heap_table_size current value: 16777216
-max_join_size current value: 4294967295
-max_sort_length current value: 1024
-max_tmp_tables current value: 32
-max_write_lock_count current value: 4294967295
-myisam_sort_buffer_size current value: 8388608
-net_buffer_length current value: 16384
-net_retry_count current value: 10
-net_read_timeout current value: 30
-net_write_timeout current value: 60
-query_buffer_size current value: 0
-record_buffer current value: 131072
-record_rnd_buffer current value: 131072
-slow_launch_time current value: 2
-sort_buffer current value: 2097116
-table_cache current value: 64
-thread_concurrency current value: 10
-tmp_table_size current value: 1048576
-thread_stack current value: 131072
-wait_timeout current value: 28800
-@end example
-
-Wenn aktuell ein @code{mysqld}-Server l�uft, k�nnen Sie feststellen, welche
-Werte er f�r die Variablen tats�chlich benutzt, wenn Sie diesen Befehl
-ausf�hren:
-
-@example
-shell> mysqladmin variables
-@end example
-
-Sie finden eine komplette Beschreibung aller Variablen im @code{SHOW
-VARIABLES}-Abschnitt dieses Handbuchs. @xref{SHOW VARIABLES}.
-
-Wenn Sie @code{SHOW STATUS} eingeben, k�nnen Sie einige statistische
-Informationen des Servers sehen. @xref{SHOW STATUS}.
-
-MySQL benutzt Algorithmen, die sehr skalierbar sind, daher k�nnen Sie
-�blicherweise mit sehr wenig Arbeitsspeicher fahren. Wenn Sie MySQL jedoch
-mehr Speicher geben, erzielen Sie damit normalerweise auch bessere
-Performance.
-
-Wenn Sie einen MySQL-Server tunen, sind die zwei wichtigsten Variablen
-@code{key_buffer_size} und @code{table_cache}. Sie sollten zun�chst sicher
-sein, dass diese beiden richtig gesetzt sind, bevor Sie versuchen, irgend
-eine der anderen Variablen zu �ndern.
-
-Wenn Sie viel Arbeitsspeicher haben (>= 256 MB) und viele Tabellen und
-maximale Performance bei einer m��igen Anzahl von Clients haben wollen,
-sollten Sie etwas wie das Folgende benutzen:
-
-@example
-shell> safe_mysqld -O key_buffer=64M -O table_cache=256 \
- -O sort_buffer=4M -O record_buffer=1M &
-@end example
-
-Wenn Sie nur 128 MB und nur wenige Tabellen haben, aber viele
-Sortiervorg�nge durchf�hren, k�nnen Sie etwas wie das Folgende benutzen:
-
-@example
-shell> safe_mysqld -O key_buffer=16M -O sort_buffer=1M
-@end example
-
-Wenn Sie wenig Arbeitsspeicher und viele Verbindungen haben, k�nnen Sie
-etwas wie das Folgende benutzen:
-
-@example
-shell> safe_mysqld -O key_buffer=512k -O sort_buffer=100k \
- -O record_buffer=100k &
-@end example
-
-Oder sogar:
-
-@example
-shell> safe_mysqld -O key_buffer=512k -O sort_buffer=16k \
- -O table_cache=32 -O record_buffer=8k -O net_buffer=1K &
-@end example
-
-Wenn Sie @code{GROUP BY} oder @code{ORDER BY} auf Dateien anwenden, die
-gr��er als Ihr verf�gbarer Arbeitsspeicher sind, sollten Sie den Wert von
-@code{record_rnd_buffer} heraufsetzen, um das Lesen von Zeilen nach
-Sortiervorg�ngen zu beschleunigen.
-
-Wenn Sie MySQL installiert haben, enth�lt das
-@file{Support-files}-Verzeichnis einige unterschiedliche
-@code{my.cnf}-Beispiel-Dateien: @file{my-huge.cnf}, @file{my-large.cnf},
-@file{my-medium.cnf} und @file{my-small.cnf}. Diese k�nnen Sie als
-Grundlage nehmen, um Ihr System zu optimieren.
-
-Wenn es sehr viele Verbindungen gibt, k�nnen ``Swapping-Probleme''
-auftauchen, wen Sie @code{mysqld} nicht so konfiguriert haben, dass er f�r
-jede Verbindung sehr wenig Speicher benutzt. @code{mysqld} bringt nat�rlich
-bessere Leistungsdaten, wenn Sie genug Speicher f�r alle Verbindungen
-haben.
-
-Beachten Sie, dass �nderungen einer Option f�r @code{mysqld} sich nur auf
-diese Instanz des Servers auswirken.
-
-Um die Auswirkung einer Parameter�nderung zu sehen, geben Sie folgendes
-ein:
-
-@example
-shell> mysqld -O key_buffer=32m --help
-@end example
-
-Stellen Sie sicher, dass die @code{--help}-Option zuletzt kommt, ansonsten
-wird die Auswirkung jeglicher Optionen, die danach auf der Kommandozeile
-kommen, in der Ausgabe nicht gezeigt.
-output.
-
-
-@node Compile and link options, Memory use, Server parameters, Optimising the Server
-@c German node Kompilier- und Link-Optionen
-@subsection Wie Kompilieren und Linken die Geschwindigkeit von MySQL beeinflusst
-
-@cindex Linken, Geschwindigkeit
-@cindex Kompilieren, Geschwindigkeit
-@cindex Geschwindigkeit, Kompilieren
-@cindex Geschwindigkeit, Linken
-
-Die meisten der folgenden Tests wurden mit den MySQL-Benchmarks unter Linux
-durchgef�hrt, aber sie sollten einen guten Anhaltspunkt f�r andere
-Betriebssysteme und Auslastungen geben.
-
-Sie erhalten die schnellste ausf�hrbare Datei, wenn Sie mit @code{-static}
-linken.
-
-Unter Linux erhalten Sie den schnellsten Code, wenn Sie mit @code{pgcc} und
-@code{-O3} kompilieren. Um @file{sql_yacc.cc} mit diesen Optionen zu
-kompilieren, brauchen Sie etwa 200 MB Arbeitsspeicher, weil @code{gcc/pgcc}
-viel Speicher ben�tigt, um alle Funktionen inline zu machen. Sie sollten
-beim Konfigurieren von MySQL auch @code{CXX=gcc} setzen, um das
-Einschlie�en der @code{libstdc++}-Bibliothek zu vermeiden (die nicht
-ben�tigt wird). Beachten Sie, dass bei einigen Version von @code{pgcc} der
-erzeugte Code nur auf echten Pentium-Prozessoren l�uft, selbst wenn Sie in
-den Compiler-Optionen angeben, dass Sie wollen, dass der Code auf alle
-Prozessoren vom Typ x586 l�uft (wie AMD).
-
-Einfach durch die Benutzung eines besseren Compilers und / oder besserer
-Compiler-Optionen k�nnen Sie eine 10-30%-ige Geschwindigkeitssteigerung in
-Ihrer Applikation erhalten. Das ist besonders wichtig, wenn Sie den
-SQL-Server selbst kompilieren!
-
-Wir haben sowohl Cygnus CodeFusion als auch Fujitsu-Compiler getestet, aber
-es stellte sich heraus, dass keiner von beiden ausreichend Bug-frei war,
-damit MySQL mit angeschalteten Optimierungen kompiliert werden konnte.
-
-Wenn Sie MySQL kompilieren, sollten Sie nur Unterst�tzung f�r die
-Zeichens�tze einschlie�en, die Sie benutzen werden (Option
-@code{--with-charset=xxx}). Die Standard-MySQL-Bin�rdistributionen werden
-mit Unterst�tzung f�r alle Zeichens�tze kompiliert.
-
-Hier ist eine Auflistung einiger Messungen, die wir durchgef�hrt haben:
-@itemize @bullet
-@item
-Wenn Sie @code{pgcc} benutzen und alles mit @code{-O6} kompilieren, ist der
-@code{mysqld}-Server 1% schneller als mit @code{gcc} 2.95.2.
-
-@item
-Wenn Sie dynamisch linken (ohne @code{-static}), ist das Ergebnis unter
-Linux 13% langsamer. Beachten Sie, dass Sie dennoch dynamisch gelinkte
-MySQL-Bibliotheken benutzen k�nnen. Nur beim Server ist das kritisch in
-Bezug auf Performance.
-
-@item
-Wenn Sie Ihre @code{mysqld}-Bin�rdatei mit @code{strip libexec/mysqld}
-strippen, ist die resultierende Bin�rdatei bis zu 4% schneller.
-
-@item
-Wenn Sie sich �ber TCP/IP statt �ber Unix-Sockets verbinden, ist das auf
-demselben Computer 7,5% langsamer. (Wenn Sie sich zu @code{localhost}
-verbinden, benutzt MySQL vorgabem��ig Sockets.)
-
-@item
-Wenn Sie sich �ber TCP/IP von einem anderen Computer �ber ein
-100-MBit-Ethernet verbinden, ist das 8% bis 11% langsamer.
-
-@item
-Wenn Sie mit @code{--with-debug=full} kompilieren, verlangsamen sich die
-meisten Anfragen um 20%, manche Anfragen jedoch werden wesentlich langsamer
-(der MySQL-Benchmarks zeigte 35%). Wenn Sie @code{--with-debug} benutzen,
-betr�gt die Verlangsamung nur 15%. Wenn Sie eine @code{mysqld}-Version, die
-mit @code{--with-debug=full} kompiliert wurde, mit @code{--skip-safemalloc}
-starten, ist die Geschwindigkeit etwa dasselbe, als wenn Sie mit
-@code{--with-debug} konfigurieren.
-
-@item
-Auf einer Sun SPARCstation 20 ist SunPro C++ 4.2 5% schneller als
-@code{gcc} 2.95.2.
-
-@item
-Das Kompilieren mit @code{gcc} 2.95.2 f�r ultrasparc mit der Option
-@code{-mcpu=v8 -Wa,-xarch=v8plusa} ergibt 4% mehr Performance.
-
-@item
-Auf Solaris 2.5.1 sind MIT-pThreads 8% bis 12% langsamer als Solaris-native
-Threads, auf einem Einprozessorsystem. Bei mehr Last / Prozessoren sollte
-der Unterschied gr��er werden.
-
-@item
-Laufenlassen mit @code{--log-bin} macht @strong{MySQL} 1% langsamer.
-
-@item
-Wenn beim Kompilieren unter Linux-x86 mit gcc keine Frame-Pointers
-@code{-fomit-frame-pointer} oder @code{-fomit-frame-pointer -ffixed-ebp}
-verwendet werden, ist @code{mysqld} 1% bis 4% schneller.
-@end itemize
-
-Die MySQL-Linux-Distribution, die von MySQL AB zur Verf�gung gestellt wird,
-wurde fr�her mit @code{pgcc} kompiliert, aber wir mussten zum normalen gcc
-zur�ck gehen, weil es einen Bug in @code{pgcc} gibt, der Code erzeugt, der
-nicht auf AMD l�uft. Wir werden gcc solange benutzen, bis dieser Bug
-behoben ist. Bis dahin k�nnen Sie, falls Sie keine AMD-Maschine haben, eine
-schnellere Bin�rdatei erhalten, wenn Sie mit @code{pgcc} kompilieren. Die
-Standard-MySQL-Linux-Bin�rdatei wird statisch gelinkt, um sie schneller und
-portierbarer zu machen.
-
-
-@node Memory use, DNS, Compile and link options, Optimising the Server
-@c German node Speicherbenutzung
-@subsection Wie MySQL Speicher benutzt
-
-@cindex Speicherbenutzung
-
-Die unten stehende Liste zeigt einige M�glichkeiten, wie der
-@code{mysqld}-Server Speicher benutzt. Wo es zutrifft, wird der Name der
-f�r die Speicherbenutzung relevanten Servervariablen angegeben.
-
-@itemize @bullet
-@item
-Der Schl�ssel-Puffer (Variable @code{key_buffer_size}) wird von allen
-Threads geteilt. Andere Puffer, die vom Server benutzt werden, werden bei
-Bedarf zugewiesen. @xref{Server parameters}.
-
-@item
-Jede Verbindung benutzt etwas Thread-spezifischen Platz: Einen Stack
-(Vorgabe 64 KB, Variable @code{thread_stack}), einen Verbindungspuffer
-(Variable @code{net_buffer_length}) und a Ergebnispuffer (Variable
-@code{net_buffer_length}). Die Verbindungspuffer und Ergebnispuffer werden
-bei Bedarf dynamisch bis zu @code{max_allowed_packet} vergr��ert. Wenn
-eine Anfrage l�uft, wird auch eine Kopie der aktuellen Anfragezeichenkette
-zugewiesen.
-
-@item
-Alle Threads teilen sich denselben grundlegenden Speicher.
-
-@item
-Nur die komprimierten ISAM- / MyISAM-Tabellen werden Speicher-gemappt. Das
-liegt daran, dass der 32-Bit-Adressraum von 4 GB f�r die meisten gro�en
-Tabellen nicht Gro� genug ist. Wenn Systeme mit 64-Bit-Adressraum
-gebr�uchlicher werden, werden wir vielleicht eine allgemeine Unterst�tzung
-f�r Speicher-Mapping hinzuf�gen.
-
-@item
-Jeder Anfrage, die einen sequentiellen Scan �ber eine Tabelle durchf�hrt,
-wird ein Lesepuffer zugewiesen (Variable @code{record_buffer}).
-
-@item
-Wenn Zeilen in 'zuf�lliger' Reihenfolge gelesen werden (zum Beispiel nach
-einem Sortiervorgang), wird ein Zufalls-Lesepuffer zugewiesen, um
-Suchvorg�nge auf Festplatte zu vermeiden. (Variable @code{record_rnd_buffer}).
-
-@item
-Alle Joins werden in einem Durchgang durchgef�hrt und die meisten Joins
-k�nnen sogar ohne Benutzung einer tempor�ren Tabelle durchgef�hrt werden.
-Die meisten tempor�ren Tabellen sind Speicher-basierende (HEAP-) Tabellen.
-Tempor�re Tabellen mit gro�er Datensatzl�nge (berechnet als Summe aller
-Spaltenl�ngen) oder die @code{BLOB}-Spalten enthalten, werden auf
-Festplatte gespeichert.
-
-Ein Problem in MySQL-Versionen vor Version 3.23.2 ist, dass Sie den Fehler
-@code{The table tabelle is full} erhalten, wenn die Gr��e der HEAP-Tabelle
-@code{tmp_table_size} �berschreitet. In neueren Versionen wird dies so
-gehandhabt, dass die Speicher-basierende (HEAP-) Tabelle bei Bedarf
-automatisch in eine Festplatten-basierende Tabelle (MyISAM) umgewandelt
-wird. Um das Problem zu umgehen, k�nnen Sie die Gr��e von tempor�ren
-Tabellen durch Setzen der @code{tmp_table_size}-Option f�r @code{mysqld}
-�ndern, oder durch Setzen der SQL-Option @code{SQL_BIG_TABLES} im
-Client-Programm. @xref{SET OPTION, , @code{SET OPTION}}. In MySQL-Version
-3.20 war die maximale Gr��e der tempor�ren Tabelle
-@code{record_buffer*16}. Wenn Sie also diese Version benutzen, m�ssen Sie
-den Wert von @code{record_buffer} herauf setzen. Sie k�nnen @code{mysqld}
-auch mit der @code{--big-tables}-Option starten, um tempor�re Tabellen
-immer auf Festplatte zu speichern. Das wird jedoch die Geschwindigkeit
-vieler komplizierter Anfragen beeinflussen.
-
-@item
-Den meisten Sortier-Anfragen werden ein Sortierpuffer und 0 bis 2 tempor�re
-Dateien zugewiesen, abh�ngig von der Gr��e der Ergebnismenge.
-@xref{Temporary files}.
-
-@item
-Fast alles Parsen und Berechnen wird in einem lokalen Speicherbereich
-durchgef�hrt. F�r kleine Sachen wird kein Speicher-Overhead ben�tigt, und
-das normale, langsame Zuweisen und Freimachen von Speicher wird vermieden.
-Speicher wird nur f�r unerwartet lange Zeichenketten zugewiesen (das wird
-mit @code{malloc()} und @code{free()} gemacht).
-
-@item
-Jede Index-Datei wird einmal ge�ffnet. Die Daten-Datei wird einmal f�r
-jeden gleichzeitig laufenden Thread ge�ffnet. F�r jeden gleichzeitigen
-Thread wird eine Tabellenstruktur, Spaltenstrukturen f�r jede Spalte und
-ein Puffer der Gr��e @code{3 * n} zugewiesen, wobei @code{n} die maximale
-Zeilenl�nge ist (@code{BLOB}-Spalten werden nicht mitgerechnet). Eine
-@code{BLOB}-Spalte benutzt 5 bis 8 Bytes plus die L�nge der
-@code{BLOB}-Daten. Der @code{ISAM}- / @code{MyISAM}-Tabellen-Handler
-benutzt einen zus�tzlichen Zeilenpuffer f�r internen Gebrauch.
-
-@item
-Bei jeder Tabelle, die @code{BLOB}-Spalten enth�lt, wird ein Puffer
-dynamisch vergr��ert, um gr��ere @code{BLOB}-Werte einzulesen. Wenn Sie
-eine Tabelle scannen, wird ein Puffer so Gro� wie der gr��te
-@code{BLOB}-Wert zugewiesen.
-
-@item
-Tabellen-Handler f�r alle Tabellen in Benutzung werden in einem Cache
-gespeichert und als FIFO verwaltet. Normalerweise hat der Cache 64
-Eintr�ge. Wenn eine Tabelle gleichzeitig von zwei laufenden Threads
-benutzt wurde, enth�lt der Cache zwei Eintr�ge f�r die Tabelle.
-@xref{Open tables}.
-
-@item
-Ein @code{mysqladmin flush-tables}-Befehl schlie�t alle Tabellen, die
-nicht in Benutzung sind, und kennzeichnet alle Tabellen in Benutzung als zu
-schlie�en, sobald der aktuell ausf�hrende Thread fertig ist. Das setzt
-effektiv den meisten benutzten Speicher frei.
-@end itemize
-
-@code{ps} und andere System-Status-Programme berichten vielleicht, dass
-@code{mysqld} viel Arbeitsspeicher benutzt. Das kann durch Thread-Stacks
-auf verschiedenen Speicheradressen verursacht werden. @code{ps} der
-Solaris-Version zum Beispiel z�hlt den unbenutzten Speicher zwischen Stacks
-zum benutzten Speicher hinzu. Das k�nnen Sie best�tigen, wenn Sie den
-verf�gbaren Swap mit @code{swap -s} �berpr�fen. Wir haben @code{mysqld} mit
-kommerziellen Memory-Leak-Detektoren getestet, daher sollte es keine
-Memory-Leaks geben.
-
-
-@node DNS, SET OPTION, Memory use, Optimising the Server
-@c German node DNS
-@subsection Wie MySQL DNS benutzt
-
-@cindex DNS
-@cindex Caching von Hostnamen
-
-Wenn sich ein neuer Thread mit @code{mysqld} verbindet, erzeugt
-@code{mysqld} einen neuen Thread, um die Anfrage zu handhaben. Dieser
-Thread pr�ft zuerst, ob der Hostname im Hostnamen-Cache ist. Falls nicht,
-ruft der Thread @code{gethostbyaddr_r()} und @code{gethostbyname_r()} auf,
-um den Hostname aufzul�sen.
-
-Wenn das Betriebssystem die oben genannten Thread-sicheren Aufrufe nicht
-unterst�tzt, sperrt der Thread ein Mutex und ruft statt dessen
-@code{gethostbyaddr()} und @code{gethostbyname()} auf. Beachten Sie, dass
-in diesem Fall kein anderer Thread andere Hostnamen aufl�sen kann, die
-nicht im Hostnamen-Cache sind, bis der erste Thread fertig ist.
-
-Sie k�nnen das DNS-Nachschlagen von Hostnamen (DNS-Lookup) abschalten,
-indem Sie @code{mysqld} mit @code{--skip-name-resolve} starten. In diesem
-Fall k�nnen Sie jedoch in den MySQL-Berechtigungstabellen nur IP-Nummern
-verwenden.
-
-Wenn Sie ein sehr langsames DNS und viele Hosts haben, k�nnen Sie mehr
-Performance erzielen, wenn Sie entweder das DNS-Nachschlagen von Hostnamen
-(DNS-Lookup) abschalten (mit @code{--skip-name-resolve}) oder
-@code{HOST_CACHE_SIZE} (Vorgabe: 128) erh�hen und @code{mysqld}
-neu kompilieren.
-
-Sie k�nnen den Hostnamen-Cache mit @code{--skip-host-cache} abschalten. Sie
-k�nnen den Hostnamen-Cache mit @code{FLUSH HOSTS} oder @code{mysqladmin
-flush-hosts} l�schen.
-
-Wenn Sie keine Verbindungen �ber @code{TCP/IP} zulassen wollen, starten Sie
-@code{mysqld} mit @code{--skip-networking}.
-
-
-@node SET OPTION, , DNS, Optimising the Server
-@c German node SET OPTION
-@subsection @code{SET}-Syntax
-
-@findex SET OPTION
-
-@example
-SET [OPTION] SQL_VALUE_OPTION= wert, ...
-@end example
-
-@code{SET OPTION} setzt verschiedene Optionen, die die Arbeitsweise des
-Servers oder Ihrer Clients beeinflussen. Jede Option, die Sie setzen,
-bleibt in Kraft, bis die aktuelle Sitzung beendet wird, oder bis Sie die
-Option auf einen anderen Wert setzen.
-
-@table @code
-@item characterset zeichensatz_name | DEFAULT
-Das mappt alle Zeichenketten von und zum Client auf das angegebene Mapping.
-Momentan ist die einzige Option f�r @code{zeichensatz_name}
-@code{cp1251_koi8}, aber Sie k�nnen leicht neue Mappings hinzuf�gen, indem
-Sie die @file{sql/convert.cc}-Datei in der MySQL-Quelldistribution
-editieren. Das vorgabem��ige Mapping kann durch Setzen des
-@code{zeichensatz_name}-Werts auf @code{DEFAULT} wieder hergestellt
-werden.
-
-Beachten Sie, dass sich die Syntax f�r das Setzen der
-@code{characterset}-Option von der Syntax f�r das Setzen anderer Optionen
-unterscheidet.
-
-@item PASSWORD = PASSWORD('ein_passwort')
-@cindex Passw�rter, setzen
-Setzt das Passwort f�r den aktuellen Benutzer. Jeder nicht anonyme Benutzer
-kann sein eigenes Passwort �ndern!
-
-@item PASSWORD FOR benutzer = PASSWORD('ein_passwort')
-Setzt das Passwort f�r einen bestimmten Benutzer auf dem aktuellen
-Server-Host. Das kann nur ein Benutzer mit Zugriff auf die
-@code{mysql}-Datenbank tun. Der Benutzer sollte im
-@code{user@@hostname}-Format eingegeben werden, wobei @code{user} und
-@code{hostname} exakt so sind, wie sie in den @code{User}- und
-@code{Host}-Spalten des @code{mysql.user}-Tabelleneintrags aufgelistet
-sind. Wenn Sie zum Beispiel in den Spalten @code{User} und @code{Host} die
-Eintr�ge @code{'bob'} und @code{'%.loc.gov'} haben wollen, schreiben Sie:
-
-@example
-mysql> SET PASSWORD FOR bob@@"%.loc.gov" = PASSWORD("newpass");
-
-oder
-
-mysql> UPDATE mysql.user SET password=PASSWORD("newpass") where user="bob' und host="%.loc.gov";
-@end example
-
-@item SQL_AUTO_IS_NULL = 0 | 1
-Falls auf @code{1} gesetzt (Vorgabe), wird mit folgendem Konstrukt die
-letzte eingef�gte Zeile einer Tabelle mit einer auto_increment-Zeile
-gefunden:
-@code{WHERE auto_increment_spalte IS NULL}. Das wird von einigen
-ODBC-Programme wie Access benutzt.
-
-@item AUTOCOMMIT= 0 | 1
-Falls auf @code{1} gesetzt, werden alle �nderungen einer Tabelle auf einmal
-durchgef�hrt. Um eine Transaktion aus mehreren Befehlen anzufangen, m�ssen
-Sie das @code{BEGIN}-Statement benutzen. @xref{COMMIT}. Falls auf @code{0}
-gesetzt, m�ssen Sie @code{COMMIT} / @code{ROLLBACK} benutzen, um diese
-Transaktion zu akzeptieren / zu widerrufen. @xref{COMMIT}. Beachten Sie,
-dass MySQL nach dem Umschalten vom @code{AUTOCOMMIT}-Modus zum
-@code{AUTOCOMMIT}-Modus ein automatisches @code{COMMIT} auf alle offenen
-Transaktionen durchf�hrt.
-
-@item SQL_BIG_TABLES = 0 | 1
-@cindex table is full
-Falls auf @code{1} gesetzt, werden alle tempor�ren Tabellen auf Platte
-statt im Arbeitsspeicher gespeichert. Das ist etwas langsamer, aber Sie
-erhalten nicht den Fehler @code{The table tabelle is full}, wenn Sie gro�e
-@code{SELECT}-Operationen ausf�hren, die eine gro�e tempor�re Tabelle
-erfordern. Der Vorgabewert f�r eine neue Verbindung ist @code{0} (das
-hei�t, tempor�re Tabellen im Arbeitsspeicher benutzen).
-
-@item SQL_BIG_SELECTS = 0 | 1
-Falls auf @code{0} gesetzt, bricht MySQL ab, wenn ein @code{SELECT} versucht
-wird, das wahrscheinlich sehr lange dauern wird. Das ist n�tzlich, wenn ein
-unratsames @code{WHERE}-Statement abgesetzt wurde. Ein gro�e Anfrage ist
-definiert als ein @code{SELECT}, das wahrscheinlich mehr als
-@code{max_join_size} Zeilen untersuchen muss. Der Vorgabewert f�r eine neue
-Verbindung ist @code{1} (was alle @code{SELECT}-Statements zul��t).
-
-@item SQL_BUFFER_RESULT = 0 | 1
-@code{SQL_BUFFER_RESULT} erzwingt, dass das Ergebnis von @code{SELECT}'s in
-eine tempor�re Tabelle geschrieben wird. Das hilft MySQL, die
-Tabellensperren fr�hzeitig aufzuheben, und ist hilfreich in F�llen, wo es
-lange dauert, das Ergebnis an den Client zu senden.
-
-@item SQL_LOW_PRIORITY_UPDATES = 0 | 1
-Falls auf @code{1} gesetzt, warten alle @code{INSERT}-, @code{UPDATE}-,
-@code{DELETE}- und @code{LOCK TABLE WRITE}-Statements, bis es kein
-anh�ngiges @code{SELECT} oder @code{LOCK TABLE READ} f�r die betroffene
-Tabelle gibt.
-
-@item SQL_MAX_JOIN_SIZE = wert | DEFAULT
-Nicht zulassen, dass @code{SELECT}s, die wahrscheinlich mehr als
-@code{value} Zeilenkombinationen untersuchen m�ssen, ausgef�hrt werden.
-Wenn Sie diesen Wert setzen, k�nnen Sie @code{SELECT}s abfangen, bei denen
-Schl�ssel nicht korrekt verwendet werden und die wahrscheinlich sehr lange
-dauern. Wenn dieser Wert auf etwas anderes als @code{DEFAULT} gesetzt wird,
-wird der @code{SQL_BIG_SELECTS}-Flag zur�ckgesetzt. Wenn Sie den
-@code{SQL_BIG_SELECTS}-Flag wieder setzen, wird die
-@code{SQL_MAX_JOIN_SIZE}-Variable ignoriert. Sie k�nnen f�r diese Variable
-einen Vorgabewert setzen, wenn Sie @code{mysqld} mit @code{-O
-max_join_size=#} starten.
-
-@item SQL_SAFE_UPDATES = 0 | 1
-Falls auf @code{1} gesetzt, bricht MySQL ab, wenn ein @code{UPDATE} oder
-@code{DELETE} versucht wird, das keinen Schl�ssel oder kein @code{LIMIT} in
-der @code{WHERE}-Klausel benutzt. Das erm�glicht das Abfangen falscher
-Aktualisierungen, wenn SQL-Befehle von Hand eingegeben werden.
-
-@item SQL_SELECT_LIMIT = wert | DEFAULT
-Die maximale Anzahl von Datens�tzen, die von @code{SELECT}-Statements
-zur�ckgegeben werden. Wenn ein @code{SELECT} eine @code{LIMIT}-Klausel hat,
-hat das @code{LIMIT} Vorrang vor dem Wert von @code{SQL_SELECT_LIMIT}. Der
-Vorgabewert f�r eine neue Verbindung ist ``unbegrenzt.'' Wenn Sie diese
-Begrenzung ge�ndert haben, kann der Vorgabewert wieder hergestellt werden,
-indem Sie einen @code{SQL_SELECT_LIMIT}-Wert von @code{DEFAULT} verwenden.
-
-@item SQL_LOG_OFF = 0 | 1
-Falls auf @code{1} gesetzt, wird f�r diesen Client kein Loggen ins
-Standard-Log durchgef�hrt, wenn der Client die
-@strong{process}-Berechtigung hat. Das betrifft nicht die
-Update-Log-Datei!
-
-@item SQL_LOG_UPDATE = 0 | 1
-Falls auf @code{0} gesetzt, wird f�r diesen Client kein Loggen in die
-Update-Log-Datei durchgef�hrt, wenn der Client die
-@strong{process}-Berechtigung hat. Das betrifft nicht das Standard-Log!
-
-@item SQL_QUOTE_SHOW_CREATE = 0 | 1
-Falls auf @code{1} gesetzt, setzt @code{SHOW CREATE TABLE} Tabellen- und
-Spaltennamen in Anf�hrungszeichen. Das ist vorgabem��ig
-@strong{angeschaltet}, damit Replikation von Tabellen mit merkw�rdigen
-Spaltennamen funktioniert. @ref{SHOW CREATE TABLE, , @code{SHOW CREATE TABLE}}.
-
-@item TIMESTAMP = zeitstempel_wert | DEFAULT
-Setzt die Zeit f�r diesen Client. Das wird benutzt, um den
-Original-Zeitstempel zu erhalten, wenn sie die Update-Log-Datei benutzen,
-um Zeilen wiederherzustellen. @code{zeitstempel_wert} sollte ein
-UNIX-Epoche-Zeitstempel sein, kein MySQL-Zeitstempel.
-
-@item LAST_INSERT_ID = #
-Setzt den Wert, der von @code{LAST_INSERT_ID()} zur�ckgegeben wird. Dieser
-wird in der Update-Log-Datei gespeichert, wenn Sie @code{LAST_INSERT_ID()}
-in einem Befehl benutzen, der eine Tabelle aktualisiert.
-
-@item INSERT_ID = #
-Setzt den Wert, der von einem folgenden @code{INSERT}- oder @code{ALTER
-TABLE}-Befehl benutzt wird, wenn ein @code{AUTO_INCREMENT}-Wert eingef�gt
-wird. Das wird haupts�chlich zusammen mit der Update-Log-Datei benutzt.
-@end table
-
-
-
-
-
-
-@node Disk issues, , Optimising the Server, MySQL Optimisation
-@c German node Festplatte
-@section Festplatte, Anmerkungen
-
-@cindex Festplatten, Anmerkungen
-@cindex Performance, Anmerkungen zur Festplatte
-
-@itemize @bullet
-@item
-Wie bereits erw�hnt sind Suchvorg�nge auf der Festplatte ein gro�er
-Performance-Flaschenhals. Die Probleme werden mehr und mehr deutlich, wenn
-die Datenmenge w�chst, so dass effizientes Caching unm�glich wird. Bei
-gro�en Datenbanken, in denen Sie auf Daten mehr oder weniger zuf�llig
-zugreifen, k�nnen Sie sicher davon ausgehen, dass Sie zumindest eine
-Plattenzugriff brauchen, um zu lesen, und eine Reihe weiterer
-Plattenzugriffe, um Dinge zu schreiben. Um dieses Problem zu minimieren,
-benutzen Sie Platten mit geringen Zugriffszeiten!
-
-@item
-Erh�hen Sie die Anzahl verf�gbarer Festplattenscheiben (und verringern Sie
-dadurch den Such-Overhead), indem Sie entweder Dateien auf andere Platten
-symbolisch verkn�pfen (SymLink) oder die Platten 'stripen'.
-
-@table @strong
-@item Using Symbolische Links
-Das bedeutet, dass Sie die Index- und / oder Daten-Datei(en) aus dem
-normalen Daten-Verzeichnis auf eine andere Festplatte verkn�pfen (die auch
-'gestriped' sein kann). Das macht sowohl den Suchvorgang als auch die
-Lesezeiten besser (wenn die Platten nicht f�r andere Dinge benutzt werden).
-@xref{Symbolic links}.
-
-@cindex Stripen, Definition
-@item Stripen
-'Stripen' hei�t, dass Sie viele Festplatten haben und den ersten Block
-auf die erste Platte legen, den zweiten Block auf die zweite Platte und den
-n-ten Block auf die n-te Platte usw. Das bedeutet, wenn Ihre normale
-Datengr��e weniger als die Stripe-Gr��e ist (oder perfekt passt), dass
-Sie wesentlich bessere Performance erhalten. Beachten Sie, dass Stripen
-sehr stark vom Betriebssystem und von der Stripe-Gr��e abh�ngig ist.
-Machen Sie Benchmark-Tests Ihrer Applikation mit unterschiedlichen
-Stripe-Gr��en. @xref{Custom Benchmarks}.
-
-Beachten Sie, dass der Geschwindigkeitsunterschied f�r das Stripen
-@strong{sehr} stark vom Parameter abh�ngig ist. Abh�ngig davon, wie Sie den
-Stripe-Parameter setzen und von der Anzahl von Festplatten erhalten Sie
-Unterschiede in der Gr��enordnung von Faktoren. Beachten Sie, dass Sie
-entscheiden m�ssen, ob Sie f�r zuf�llige oder sequentielle Zugriffe
-optimieren.
-@end table
-
-@item
-Aus Gr�nden der Zuverl�ssigkeit sollten sie vielleicht RAID 0 + 1 nehmen
-(Stripen + Spiegeln), doch in diesem Fall brauchen Sie 2 * n Laufwerke, um
-n Datenlaufwerke zu haben. Das ist wahrscheinlich die beste Option, wenn
-Sie genug Geld daf�r haben! Sie m�ssen jedoch eventuell zus�tzlich in
-Software f�r die Verwaltung von Volumes investieren, um das effizient zu
-handhaben.
-
-@item
-Eine gute Option ist es, nicht ganz so wichtige Daten (die wieder
-hergestellt werden k�nnen) auf RAID-0-Platten zu halten, w�hrend wirklich
-wichtige Daten (wie Host-Informationen und Log-Dateien) auf einer RAID-0+1-
-oder RAID-N-Platte gehalten werden. RAID-N kann ein Problem darstellen,
-wenn Sie viele Schreibzugriffe haben, weil Zeit ben�tigt wird, die
-Parit�tsbits zu aktualisieren.
-
-@item
-Sie k�nnen auch den Parameter f�r das Dateisystem setzen, das die Datenbank
-benutzt. Eine einfache �nderung ist, das Dateisystem mit der noatime-Option
-zu mounten. Das bringt es dazu, das Aktualisieren der letzten Zugriffszeit
-in der Inode zu �berspringen und vermeidet dadurch einige
-Platten-Suchzugriffe.
-
-@item
-Unter Linux k�nnen Sie viel mehr Performance erhalten (bis zu 100% unter
-Last ist nicht ungew�hnlich), wenn Sie hdpram benutzen, um die
-Schnittstelle Ihrer Festplatte zu konfigurieren! Das folgende Beispiel
-sollte recht gute hdparm-Optionen f�r MySQL (und wahrscheinlich viele
-andere Applikationen) darstellen:
-
-@example
-hdparm -m 16 -d 1
-@end example
-
-Beachten Sie, dass Performance und Zuverl�ssigkeit beim oben Genannten von
-Ihrer Hardware abh�ngen, daher empfehlen wir sehr, dass Sie Ihr System
-gr�ndlich testen, nachdem Sie @code{hdparm} benutzt haben! Sehen Sie in der
-Handbuchseite (ManPage) von @code{hdparm} nach weiteren Informationen! Wenn
-@code{hdparm} nicht vern�nftig benutzt wird, kann das Ergebnis eine
-Besch�digung des Dateisystems sein. Machen Sie eine Datensicherung von
-allem, bevor Sie experimentieren!
-
-@item
-Auf vielen Betriebssystemen k�nnen Sie die Platten mit dem 'async'-Flag
-mounten, um das Dateisystem auf asynchrone Aktualisierung zu setzen. Wenn
-Ihr Computer ausreichend stabil ist, sollte Ihnen das mehr Performance
-geben, ohne zu viel Zuverl�ssigkeit zu opfern. (Dieser Flag ist unter Linux
-vorgabem��ig angeschaltet.)
-
-@item
-Wenn Sie nicht wissen m�ssen, wann auf eine Datei zuletzt zugegriffen
-wurden (was auf einem Datenbank-Server nicht wirklich n�tig ist), k�nnen
-Sie Ihr Dateisystem mit dem noatime-Flag mounten.
-@end itemize
-
-
-
-@menu
-* Symbolic links::
-@end menu
-
-@node Symbolic links, , Disk issues, Disk issues
-@c German node Symbolische Links
-@subsection Symbolische Links benutzen
-
-@cindex Symbolische Links
-@cindex Links, symbolische
-
-Sie k�nnen Tabellen und Datenbanken vom Datenbank-Verzeichnis an andere
-Stellen verschieben und sie mit symbolischen Links auf neue Speicherorte
-ersetzen. Das k�nnten Sie zum Beispiel tun, um eine Datenbank auf ein
-Dateisystem mit mehr freiem Speicherplatz zu verlagern oder um die
-Geschwindigkeit Ihres System durch Verteilen Ihrer Tabellen auf
-unterschiedliche Platten zu steigern.
-
-Die empfohlene Art, das zu tun, ist, nur Datenbanken auf unterschiedliche
-Platten per SymLink zu verkn�pfen, und das bei Tabellen nur im Notfall zu
-tun.
-
-@cindex Datenbanken, Symbolische Links
-
-
-@menu
-* Symbolic links to databases::
-* Symbolic links to tables::
-@end menu
-
-@node Symbolic links to databases, Symbolic links to tables, Symbolic links, Symbolic links
-@c German node Symbolische Links auf Datenbanken
-@subsubsection Benutzung symbolischer Links f�r Datenbanken
-
-Um eine Datenbank per SymLink zu verkn�pfen, legt man zuerst ein
-Verzeichnis auf einer Platte mit freiem Speicherplatz an und erzeugt dann
-einen SymLink vom MySQL-Datenbank-Verzeichnis aus darauf:
-
-@example
-shell> mkdir /dr1/datenbanken/test
-shell> ln -s /dr1/datenbanken/test mysqld-datadir
-@end example
-
-MySQL unterst�tzt nicht das Verkn�pfen eines Verzeichnisses zu mehrfachen
-Datenbanken. Wenn Sie ein Datenbank-Verzeichnis mit einem symbolischen Link
-ersetzen, funktioniert das solange gut, wie Sie keinen symbolischen Link
-zwischen Datenbanken machen. Angenommen, Sie haben eine Datenbank
-@code{datenbank1} unter dem MySQL-Daten-Verzeichnis und machen dann einen
-Symlink @code{datenbank2}, der auf @code{datenbank1} zeigt:
-
-@example
-shell> cd /pfad/zu/datadir
-shell> ln -s datenbank1 datenbank2
-@end example
-
-Jetzt erscheint f�r jede Tabelle @code{tabelle_a} in @code{datenbank1} auch
-eine Tabelle @code{tabelle_a} in @code{datenbank2}. Wenn ein Thread
-@code{datenbank1.tabelle_a} aktualisiert und ein anderer Thread
-@code{datenbank2.tabelle_a} aktualisiert, gibt es Probleme.
-
-Wenn Sie das wirklich brauchen, m�ssen Sie folgenden Code in
-@file{mysys/mf_format.c} �ndern:
-
-@example
-if (flag & 32 || (!lstat(to,&stat_buff) && S_ISLNK(stat_buff.st_mode)))
-@end example
-
-zu:
-
-@example
-if (1)
-@end example
-
-Unter Windows k�nnen Sie interne symbolische Links auf Verzeichnisse
-benutzen, indem Sie MySQL mit @code{-DUSE_SYMDIR} kompilieren. Das erlaubt
-Ihnen, verschiedene Datenbanken auf verschiedene Platte zu legen.
-@xref{Windows symbolic links}.
-
-
-@node Symbolic links to tables, , Symbolic links to databases, Symbolic links
-@c German node Symbolische Links auf Tabellen
-@subsubsection Benutzung symbolischer Links f�r Tabellen
-
-@cindex Datenbanken, Symbolische Links
-
-Vor MySQL 4.0 konnten Sie Tabellen nicht per SymLink verkn�pfen, wenn Sie
-nicht sehr sorgf�ltig dabei vorgingen. Das Problem liegt darin, dass bei
-@code{ALTER TABLE}, @code{REPAIR TABLE} oder @code{OPTIMIZE TABLE} auf eine
-per Symlink verkn�pfte Datei die SymLinks entfernt und durch die
-Original-Dateien verkn�pft werden. Das geschieht, weil beim obigen Befehl
-eine tempor�re Datei im Datenbank-Verzeichnis erzeugt wird, und wenn der
-Befehl ausgef�hrt ist, die Original-Datei durch die tempor�re Datei
-ersetzt wird.
-
-Sie sollten Tabellen auf Systemen, die keinen vollst�ndig funktionierenden
-@code{realpath()}-Aufruf haben, nicht per SymLink verkn�pfen. (Zumindest
-Linux und Solaris unterst�tzen @code{realpath()}.)
-
-In MySQL 4.0 werden Symlinks nur f�r @code{MyISAM}-Tabellen vollst�ndig
-unterst�tzt. Bei anderen Tabellentypen erhalten Sie wahrscheinlich
-merkw�rdige Probleme, wenn Sie einen der obigen Befehle ausf�hren.
-
-Die Handhabung symbolischer Links in MySQL 4.0 funktioniert auf folgende
-Art (das gilt meist nur f�r @code{MyISAM}-Tabellen):
-
-@itemize @bullet
-@item
-Im Daten-Verzeichnis liegen immer die Tabellendefinitionsdatei und die
-Daten-/Index-Dateien.
-
-@item
-Sie k�nnen die Index-Datei und die Daten-Datei unabh�ngig voneinander auf
-unterschiedliche Verzeichnisse per SymLink verkn�pfen.
-
-@item
-Das Erzeugen der SymLinks kann durch das Betriebssystem (wenn @code{mysqld}
-nicht l�uft) oder mit dem @code{INDEX/DATA
-directory="pfad-zum-verzeichnis"}-Befehl in @code{CREATE TABLE}
-durchgef�hrt werden. @xref{CREATE TABLE}.
-
-@item
-@code{myisamchk} ersetzt keinen Symlink mit der Index-/Datendatei, sondern
-arbeitet direkt mit den Dateien, auf die die SymLinks verweisen. Jegliche
-tempor�re Dateien werden im selben Verzeichnis erzeugt, wo die
-Daten-/Index-Datei ist.
-
-@item
-Wenn Sie eine Tabelle l�schen, die Symlinks benutzt, werden sowohl der
-Symlink als auch die Datei, auf die der SymLink zeigt, gel�scht. Das ist
-ein guter Grund daf�r, @code{mysqld} NICHT als Root laufen zu lassen und
-niemandem zu erlauben, Schreibzugriff auf die MySQL-Datenbankverzeichnisse
-zu haben.
-
-@item
-Wenn Sie eine Tabelle mit @code{ALTER TABLE RENAME} umbenennen und nicht
-die Datenbank �ndern, wird der Symlink im Datenbank-Verzeichnis auf den
-neuen Namen umbenannt und die Daten-/Index-Datei wird entsprechend
-umbenannt.
-
-@item
-Wenn Sie @code{ALTER TABLE RENAME} benutzen, um eine Tabelle in eine andere
-Datenbank zu verschieben, wird die Tabelle in das andere
-Datenbank-Verzeichnis verschoben und die alten SymLinks und die Dateien,
-auf die sie zeigen, werden gel�scht.
-
-@item
-Wenn Sie keine Symlinks benutzen, sollten Sie die
-@code{--skip-symlink}-Option f�r @code{mysqld} benutzen, damit niemand eine
-Datei ausserhalb des @code{mysqld} Daten-Verzeichnisses l�schen oder
-umbenennen kann.
-@end itemize
-
-Dinge, die noch nicht unterst�tzt werden:
-
-@cindex TODO, SymLinks
-@itemize @bullet
-@item
-@code{ALTER TABLE} ignoriert alle @code{INDEX/DATA directory="pfad"}-Optionen.
-@item
-@code{CREATE TABLE} berichtet nicht, wenn eine Tabelle symbolische Links hat.
-@item
-@code{mysqldump} gibt die Information �ber symbolische Links nicht in der Ausgabe aus.
-@item
-@code{BACKUP TABLE} und @code{RESTORE TABLE} respektieren keine symbolischen Links.
-@end itemize
-
-
-@node Reference, Table types, MySQL Optimisation, Top
-@c German node Referenz
-@chapter MySQL-Sprachreferenz
-
-
-MySQL hat eine sehr komplexe, aber intuitive und leicht zu erlernende
-SQL-Schnittstelle. Dieses Kapitel beschreibt die verschiedenen Befehle,
-Typen und Funktionen, die Sie kennen m�ssen, um MySQL effizient und
-effektiv zu benutzen. Dieses Kapitel dient auch als Referenz f�r die
-gesamte in MySQL beinhaltete Funktionalit�t. Um dieses Kapitel effektiv zu
-nutzen, sollten Sie unter den verschiedenen Stichworten nachschlagen.
-
-
-@menu
-* Language Structure::
-* Column types::
-* Functions::
-* Data Manipulation::
-* Data Definition::
-* Basic User Commands::
-* Transactional Commands::
-* Fulltext Search::
-* Query Cache::
-@end menu
-
-@node Language Structure, Column types, Reference, Reference
-@c German node Sprachstruktur
-@section Sprachstruktur
-
-
-
-@menu
-* Literals::
-* Legal names::
-* Name case sensitivity::
-* Variables::
-* Comments::
-* Reserved words::
-@end menu
-
-@node Literals, Legal names, Language Structure, Language Structure
-@c German node Literale
-@subsection Literale: Wie Zeichenketten und Zahlen geschrieben werden
-
-@cindex Zeichenketten, Definition
-@cindex Zeichenketten, Fluchtzeichen (Escape-Zeichen)
-@cindex Literale
-@cindex Fluchtzeichen (Escape-Zeichen)
-@cindex Backslash, Fluchtzeichen (Escape-Zeichen)
-
-
-
-Dieser Abschnitt beschreibt die verschiedenen Arten, in MySQL Zeichenketten
-und Zahlen zu schreiben. Ebenfalls enthalten sind die verschiedenen Nuancen
-und Fallstricke, in denen man sich bei den grundlegenden Datentypen von
-MySQL verfangen kann.
-
-
-@menu
-* String syntax::
-* Number syntax::
-* Hexadecimal values::
-* NULL values::
-@end menu
-
-@node String syntax, Number syntax, Literals, Literals
-@c German node Zeichenketten-Syntax
-@subsubsection Zeichenketten
-
-Eine Zeichenkette ist eine Folge von Zeichen, die entweder von Apostrophs
-(einfachen Anf�hrungszeichen, @samp{'}) oder (doppelten) Anf�hrungszeichen
-(@samp{"}) umgeben ist (nur einfache Anf�hrungszeichen, wenn Sie MySQL im
-ANSI-Modus laufen lassen). Beispiele:
-
-@example
-'eine Zeichenkette'
-"eine weitere Zeichenkette"
-@end example
-
-Innerhalb einer Zeichenkette haben bestimmte Folgen eine spezielle
-Bedeutung. Jede dieser Folgen f�ngt mit einem Backslash (@samp{\}) an,
-bekannt als @emph{Fluchtzeichen (Escape-Zeichen)}. MySQL erkennt folgende
-Flucht-Folgen (Escape-Folgen):
-
-@c these aren't really Funktionen, aber that's wahrscheinlich the most reasonable index
-@table @code
-@findex \0 (ASCII 0)
-@findex NUL
-@item \0
-Ein ASCII-0- (@code{NUL}) Zeichen.
-
-@findex \' (Apostroph)
-@findex single quote (\')
-@item \'
-Ein Apostroph- (@samp{'}) Zeichen.
-
-@findex \" (Anf�hrungszeichen)
-@findex Anf�hrungszeichen (\")
-@item \"
-Ein Anf�hrungszeichen (@samp{"}).
-
-@findex \b (R�ckschritt, Backspace)
-@findex backspace (\b)
-@item \b
-Ein R�ckschritt- (Backspace-) Zeichen.
-
-@findex \n (neue Zeile)
-@findex newline (\n)
-@item \n
-Ein Neue-Zeile- (Newline-) Zeichen.
-
-@findex \r (Wagenr�cklauf (carriage return))
-@findex return (\r)
-@findex Wagenr�cklauf (carriage return) (\r)
-@item \r
-Ein Wagenr�cklauf- (carriage return) Zeichen.
-
-@findex \t (Tabulator)
-@findex tab (\t)
-@item \t
-Ein Tabulator-Zeichen.
-
-@findex \z (Steuerung-Z) ASCII(26)
-@findex (Steuerung-Z) \z
-@item \z
-ASCII(26) (Steuerung-Z). Dieses Zeichen kann kodiert werden, um das Problem
-zu umgehen, dass ASCII(26) unter Windows f�r Dateiende (END-OF-FILE) steht.
-(ASCII(26) verursacht Probleme, wenn Sie @code{mysql Datenbank < Dateiname}
-benutzen.)
-
-@findex \\ (Fluchtzeichen, Escape-Zeichen)
-@findex escape (\\)
-@item \\
-Ein Backslash- (@samp{\}) Zeichen.
-
-@c German FIX added space before %
-@findex % (Platzhalterzeichen)
-@findex Wild card character (%)
-@item \%
-Ein @samp{%}-Zeichen. Dieses wird benutzt, um nach literalen Instanzen von
-@samp{%} in Zusammenh�ngen zu suchen, wo @samp{%} ansonsten als
-Platzhalterzeichen interpretiert werden w�rde.
-@xref{String comparison functions}.
-
-@findex _ (Platzhalterzeichen)
-@findex Wild card character (_)
-@item \_
-Ein @samp{_}-Zeichen. Dieses wird benutzt, um nach literalen Instanzen von
-@samp{_} in Zusammenh�ngen zu suchen, wo @samp{_} ansonsten als
-Platzhalterzeichen interpretiert werden w�rde.
-@xref{String comparison functions}.
-@end table
-
-Beachten Sie, dass bei der Benutzung von @samp{\%} oder @samp{\_} in
-einigen Zeichenketten-Zusammenh�ngen diese die Zeichenketten @samp{\%} und
-@samp{\_} und nicht @samp{%} und @samp{_} zur�ckgeben.
-
-@cindex Anf�hrungszeichen, in Zeichenketten
-@noindent
-Es gibt verschiedene M�glichkeiten, Anf�hrungszeichen innerhalb einer
-Zeichenkette zu schreiben:
-
-@itemize @bullet
-@item
-Ein @samp{'} innerhalb einer Zeichenkette, die mit @samp{'} begrenzt wird,
-kann als @samp{''} geschrieben werden.
-
-@item
-Ein @samp{"} innerhalb einer Zeichenkette, die @samp{"} begrenzt wird, kann
-als @samp{""} geschrieben werden.
-
-@item
-Sie k�nnen dem Anf�hrungszeichen ein Fluchtzeichen (Escape-Zeichen)
-(@samp{\}) voranstellen.
-
-@item
-Ein @samp{'} innerhalb einer Zeichenkette, die mit @samp{"} begrenzt wird,
-braucht keine spezielle Behandlung und muss nicht verdoppelt oder escapet
-werden. In gleicher Weise ben�tigt @samp{"} innerhalb einer Zeichenkette,
-die mit @samp{'} begrenzt wird, keine spezielle Behandlung.
-@end itemize
-
-Die unten stehenden @code{SELECT}-Statements zeigen, wie Quoten und Escapen
-funktionieren:
-
-@example
-mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
-+-------+---------+-----------+--------+--------+
-| hello | "hello" | ""hello"" | hel'lo | 'hello |
-+-------+---------+-----------+--------+--------+
-
-mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
-+-------+---------+-----------+--------+--------+
-| hello | 'hello' | ''hello'' | hel"lo | "hello |
-+-------+---------+-----------+--------+--------+
-
-mysql> SELECT "Das\nsind\nvier\nZeilen";
-+--------------------+
-| Das
-sind
-vier
-Zeilen |
-+--------------------+
-@end example
-
-@cindex Bin�rdaten quoten
-
-Wenn Sie Bin�rdaten in eine @code{BLOB}-Spalte einf�gen, m�ssen folgende
-Zeichen durch Flucht-Folgen repr�sentiert werden:
-@table @code
-@item NUL
-ASCII 0. Dieses geben Sie als @samp{\0} ein (ein Backslash und ein
-ASCII-@samp{0}-Zeichen).
-@item \
-ASCII 92, Backslash. Das geben Sie als @samp{\\} ein.
-@item '
-ASCII 39, Apostroph. Das geben Sie als @samp{\'} ein.
-@item "
-ASCII 34, Anf�hrungszeichen. Das geben Sie als @samp{\"} ein.
-@end table
-
-@cindex Quoten
-@cindex @code{BLOB}, Bin�rdaten einf�gen
-@findex mysql_escape_string()
-@findex DBI->quote
-Wenn Sie C-Code schreiben, k�nnen Sie die C-API-Funktion
-@code{mysql_escape_string()} f�r Fluchtzeichen (Escape-Zeichen) f�r das
-@code{INSERT}-Statement benutzen. @xref{C API function overview}. In Perl
-k�nnen Sie die @code{quote}-Methode des @code{DBI}-Pakets benutzen, um
-Sonderzeichen in die korrekten Flucht-Folgen umzuwandeln.
-@xref{Perl DBI Class, , Perl-@code{DBI}-Klasse}.
-
-Sie sollten auf jede Zeichenkette, die eins der oben erw�hnten
-Sonderzeichen enthalten k�nnte, eine der Flucht-Funktionen anwenden!
-
-
-@node Number syntax, Hexadecimal values, String syntax, Literals
-@c German node Zahlen-Syntax
-@subsubsection Zahlen
-
-@cindex Zahlen
-@cindex g�ltige Zahlen, Beispiele
-@cindex Ganzzahlen
-@cindex Flie�kommazahlen
-@cindex negative Werte
-
-Ganzzahlen werden als Folge von Ziffern repr�sentiert. Flie�kommazahlen
-benutzen @samp{.} als Dezimalseparator. Jedem Zahlentyp kann @samp{-}
-vorangestellt werden, um einen negativen Wert anzuzeigen.
-
-Beispiele g�ltiger Ganzzahlen:
-
-@example
-1221
-0
--32
-@end example
-
-Beispiele g�ltiger Flie�kommazahlen:
-
-@example
-294.42
--32032.6809e+10
-148.00
-@end example
-
-Eine Ganzzahl kann in einem Flie�komma-Zusammenhang benutzt werden, sie
-wird dann als die �quivalente Flie�kommazahl interpretiert.
-
-
-@node Hexadecimal values, NULL values, Number syntax, Literals
-@c German node Hexadezimale Werte
-@subsubsection Hexadezimale Werte
-
-@tindex hexadezimale Werte
-
-MySQL unterst�tzt hexadezimale Werte. In Zahlen-Zusammenh�ngen
-funktionieren diese wie eine Ganzzahl (64-Bit-Genauigkeit). Im
-Zeichenketten-Zusammenhang funktionieren sie wie eine bin�re Zeichenkette,
-wobei jedes Paar hexadezimaler Ziffern in ein Zeichen umgewandelt wird:
-
-@example
-mysql> SELECT x'FF'
- -> 255
-mysql> SELECT 0xa+0;
- -> 10
-mysql> select 0x5061756c;
- -> Paul
-@end example
-
-Die x'hexadezimale_zeichenkette'-Syntax (neu in Version 4.0) basiert auf
-ANSI-SQL. Die 0x-Syntax basiert auf ODBC. Hexadezimale Zeichenketten werden
-oft von ODBC benutzt, um Werte f�r BLOB-Spalten anzugeben.
-
-
-@node NULL values, , Hexadecimal values, Literals
-@c German node NULL-Werte
-@subsubsection @code{NULL}-Werte
-
-@tindex NULL-Wert
-
-Der @code{NULL}-Wert bedeutet ``keine Daten'' und unterscheidet sich von
-Werten wie @code{0} bei numerischen Typen oder der leeren Zeichenkette bei
-Zeichenkettentypen. @xref{Problems with NULL, , Probleme mit @code{NULL}}.
-
-@code{NULL} kann durch @code{\N} repr�sentiert werden, wenn Sie die
-Textdatei-Import- oder Exportformate (@code{LOAD DATA INFILE}, @code{SELECT
-... INTO OUTFILE}) benutzen. @xref{LOAD DATA, , @code{LOAD DATA}}.
-
-
-@node Legal names, Name case sensitivity, Literals, Language Structure
-@c German node Erlaubte Namen
-@subsection Datenbank-, Tabellen-, Index-, Spalten- und Alias-Namen
-
-@cindex Namen
-@cindex erlaubte Namen
-@cindex Datenbanken, Namen
-@cindex Tabellen, Namen
-@cindex Indexe, Namen
-@cindex Spalten, Namen
-@cindex Aliase, Namen
-
-
-
-Datenbank-, Tabellen-, Index-, Spalten- und Alias-Namen folgen in MySQL
-alle denselben Regeln.
-
-@tindex Bezeichner, quoten
-@tindex Quoten von Bezeichnern
-@tindex `
-@tindex "
-Beachten Sie, dass sich die Regeln ab MySQL-Version 3.23.6 ge�ndert haben,
-als das Quoten von Bezeichnern (f�r Datenbank-, Tabellen- und Spaltennamen)
-eingef�hrt wurde, mit @samp{`}. @samp{"} funktioniert ebenfalls, um
-Bezeichner zu quoten, wenn Sie im ANSI-Modus fahren. @xref{ANSI mode}.
-
-@multitable @columnfractions .15 .15 .70
-@item @strong{Bezeichner} @tab @strong{Maximale L�nge} @tab @strong{Erlaubte Zeichen}
-@item Datenbank @tab 64 @tab Jedes Zeichen, dass f�r ein Verzeichnis erlaubt ist, ausser @samp{/} oder @samp{.}.
-@item Tabelle @tab 64 @tab Jedes Zeichen, dass f�r einen Dateinamen erlaubt ist, ausser @samp{/} oder @samp{.}.
-@item Spalte @tab 64 @tab Alle Zeichen.
-@item Alias @tab 255 @tab Alle Zeichen.
-@end multitable
-
-Hinzuzuf�gen ist, dass Sie ASCII(0), ASCII(255) oder das Quote-Zeichen in
-einem Bezeichner nicht verwenden d�rfen.
-
-Beachten Sie, dass, falls der Bezeichner ein reserviertes Wort ist oder
-Sonderzeichen enth�lt, er bei der Benutzung immer in @code{`} angegeben
-sein muss:
-
-@example
-SELECT * from `select` where `select`.id > 100;
-@end example
-
-In vorherigen Versionen von MySQL sind die Namensregeln wie folgt:
-
-@itemize @bullet
-@item
-Ein Name muss aus alphanumerischen Zeichen des aktuellen Zeichensatzes
-bestehen und darf dar�ber hinaus @samp{_} und @samp{$} enthalten. Der
-vorgabem��ige Zeichensatz ist ISO-8859-1 Latin1; dass kann durch die
-@code{--default-character-set}-Option f�r @code{mysqld} ge�ndert werden.
-@xref{Character sets}.
-
-@item
-Ein Name kann mit jedem Zeichen anfangen, das in einem Namen erlaubt ist.
-Insbesondere kann ein Name auch mit einer Zahl anfangen (das ist in vielen
-anderen Datenbanksystemen anders!). Jedoch kann ein Namen nicht @emph{nur}
-aus Zahlen bestehen.
-
-@item
-Sie k�nnen das @samp{.}-Zeichen in Namen nicht benutzen, weil es benutzt
-wird, um das Format zu erweitern, mit dem man auf Spalten verweisen kann
-(siehe unten).
-@end itemize
-
-Es wird empfohlen, dass Sie keine Namen wie @code{1e} verwenden, weil ein
-Ausdruck wie @code{1e+1} mehrdeutig ist. Er kann als der Ausdruck @code{1e
-+ 1} oder als die Zahl @code{1e+1} interpretiert werden.
-
-In MySQL k�nnen Sie in folgender Form auf Spalten verweisen:
-
-@multitable @columnfractions .35 .65
-@item @strong{Spaltenverweis} @tab @strong{Bedeutung}
-@item @code{spalten_name} @tab Spalte des Namens @code{spalten_name} einer
-beliebigen, in der Anfrage verwendeten Tabelle.
-@item @code{tabelle.spalten_name} @tab Spalte des Namens
-@code{spalten_name} der Tabelle @code{tabelle} der aktuellen Datenbank.
-@item @code{datenbank.tabelle.spalten_name} @tab Spalte des Namens
-@code{spalten_name} der Tabelle @code{tabelle} der Datenbank
-@code{datenbank}. Diese Form ist ab MySQL-Version 3.22 verf�gbar.
-@item
-@code{`spalte`} @tab Eine Spalte, die ein reserviertes Wort ist oder
-Sonderzeichen enth�lt.
-@end multitable
-
-Das @code{tabelle}- oder @code{datenbank.tabelle}-Pr�fix m�ssen Sie bei
-einem Spaltenverweis in einem Statement nicht angeben, es sei denn, der
-Verweis w�re ansonsten doppeldeutig. Nehmen Sie zum Beispiel an, die
-Tabellen @code{t1} und @code{t2} enthielten beide jeweils eine Spalte
-@code{c} und Sie verweisen auf @code{c} in einem @code{SELECT}-Statement,
-das sowohl @code{t1} als auch @code{t2} benutzt. In diesem Fall ist
-@code{c} mehrdeutig, weil es innerhalb der im Statement benutzten Tabellen
-nicht eindeutig ist. Daher m�ssen Sie angeben, welche Tabelle Sie meinen,
-indem Sie @code{t1.c} oder @code{t2.c} schreiben. �hnliches gilt, wenn Sie
-aus einer Tabelle @code{t} in Datenbank @code{datenbank1} und von eine
-Tabelle @code{t} in Datenbank @code{datenbank2} abrufen. Dann m�ssen Sie
-auf Spalten in diesen Tabellen als @code{datenbank1.t.spalten_name} und
-@code{datenbank2.t.spalten_name} verweisen.
-
-@cindex ODBC Kompatibilit�t
-@cindex Kompatibilit�t, mit ODBC
-Die Syntax @code{.tabelle} bedeutet die Tabelle @code{tabelle} in der
-aktuellen Datenbank. Diese Syntax wird aus Gr�nden der ODBC-Kompatibilit�t
-akzeptiert, weil einige ODBC-Programme Tabellenname ein @samp{.}-Zeichen
-voranstellen.
-
-
-@node Name case sensitivity, Variables, Legal names, Language Structure
-@c German node Gro�-/Kleinschreibung in Namen
-@subsection Gro�-/Kleinschreibung in Namen
-
-@cindex Namen, Gro�-/Kleinschreibung
-@cindex Gro�-/Kleinschreibung, in Namen
-@cindex Datenbanknamen, Gro�-/Kleinschreibung
-@cindex Tabellennamen, Gro�-/Kleinschreibung
-@cindex Spaltennamen, Gro�-/Kleinschreibung
-@cindex Aliasnamen, Gro�-/Kleinschreibung
-
-In MySQL entsprechen Datenbanken und Tabellen Verzeichnissen und Dateien
-innerhalb dieser Verzeichnisse. Folglich h�ngt die Gro�-/Kleinschreibung
-davon ab, wie das zugrunde liegende Betriebssystem die
-Gro�-/Kleinschreibung von Datenbank- und Tabellennamen festlegt. Das
-bedeutet, dass Datenbank- und Tabellennamen unter Unix von der
-Gro�-/Kleinschreibung abh�ngen und unter Windows nicht.
-@xref{Extensions to ANSI}.
-
-@strong{HINWEIS:} Obwohl die Gro�-/Kleinschreibung f�r Datenbank- und
-Tabellennamen unter Windows keine Rolle spielt, sollten Sie nicht auf eine
-angegebene Datenbank oder Tabelle innerhalb derselben Anfrage mit
-unterschiedlicher Schreibweise verweisen. Folgende Anfrage w�rde nicht
-funktionieren, weil sie auf eine Tabelle sowohl mit @code{meine_tabelle}
-als auch mit @code{MEINE_TABELLE} verweist:
-
-@example
-mysql> SELECT * FROM meine_tabelle WHERE MEINE_TABELLE.spalte=1;
-@end example
-
-Spaltennamen h�ngen in keinem Fall von der verwendeten
-Gro�-/Kleinschreibung ab.
-
-Aliase auf Tabellen h�ngen von der Gro�-/Kleinschreibung ab. Folgende
-Anfrage w�rde nicht funktionieren, weil sie auf den Alias sowohl mit
-@code{a} als auch mit @code{A} verweist:
-
-@example
-mysql> SELECT spalten_name FROM tabelle AS a
- WHERE a.spalten_name = 1 OR A.spalten_name = 2;
-@end example
-
-Aliase auf Spalten h�ngen nicht von der verwendeten Gro�-/Kleinschreibung
-ab.
-
-Wenn Sie Probleme damit haben, sich an die Schreibweise von Tabellennamen zu
-erinnern, halten Sie sich an eine durchgehende Konvention. Benutzen Sie zum
-Beispiel bei der Erzeugung von Datenbanken und Tabellen Kleinschreibung in
-Namen.
-
-Eine M�glichkeit, dieses Problem zu vermeiden, ist, @code{mysqld} mit
-@code{-O lower_case_tabelles=1} zu starten. Vorgabem��ig ist diese Option
-1 unter Windows und 0 unter Unix.
-
-Wenn @code{lower_case_tabelles} 1 ist, wandelt MySQL alle Tabellennamen in
-Kleinschreibung um, sowohl beim Speichern als auch beim Nachschlagen. Wenn
-Sie diese Option �ndern, beachten Sie, dass Sie zuerst Ihre alten
-Tabellennamen in Kleinschreibung umwandeln m�ssen, bevor Sie @code{mysqld}
-starten.
-
-
-@node Variables, Comments, Name case sensitivity, Language Structure
-@c German node Variablen
-@subsection Benutzer-Variablen
-
-@cindex Variablen, Benutzer-
-@cindex Benutzer-Variablen
-@cindex Namen, Variablen
-
-MySQL unterst�tzt Thread-spezifische Variablen mit der
-@code{@@variablename}-Syntax. Eine Variable kann aus alphanumerischen
-Zeichen des aktuellen Zeichensatzes sowie aus @samp{_}, @samp{$} und
-@samp{.} bestehen. Der vorgabem��ige Zeichensatz ist ISO-8859-1 Latin1;
-das kann mit der @code{--default-character-set}-Option f�r @code{mysqld}
-ge�ndert werden. @xref{Character sets}.
-
-Variablen m�ssen nicht initialisiert werden. Sie enthalten vorgabem��ig
-@code{NULL} und k�nnen Ganzzahl-, Real- oder Zeichenketten-Werte speichern.
-Alle Variablen f�r einen Thread werden automatisch freigegeben, wenn der
-Thread beendet wird.
-
-Sie k�nnen eine Variable mit der @code{SET}-Syntax setzen:
-
-@example
-SET @@variable= @{ ganzzahl_ausdruck | realzahl_ausdruck | zeichenketten_ausdruck @} [,@@variable= ...].
-@end example
-
-Sie k�nnen eine Variable in einem Ausdruck auch mit der
-@code{@@variable:=expr}-Syntax setzen:
-
-@example
-select @@t1:=(@@t2:=1)+@@t3:=4,@@t1,@@t2,@@t3;
-+----------------------+------+------+------+
-| @@t1:=(@@t2:=1)+@@t3:=4 | @@t1 | @@t2 | @@t3 |
-+----------------------+------+------+------+
-| 5 | 5 | 1 | 4 |
-+----------------------+------+------+------+
-@end example
-
-(Wir mussten hier die @code{:=}-Syntax benutzen, weil @code{=} f�r
-Vergleiche reserviert ist.)
-
-Benutzer-Variablen k�nnen benutzt werden, wo Ausdr�cke erlaubt sind.
-Beachten Sie, dass das momentan keine Zusammenh�nge einschlie�t, in denen
-explizit Zahlen erforderlich sind, wie in der @code{LIMIT}-Klausel eines
-@code{SELECT}-Statements oder der @code{IGNORE Anzahl LINES}-Klausel eines
-@code{LOAD DATA}-Statements.
-
-@strong{HINWEIS:} In einem @code{SELECT}-Statement wird jeder Ausdruck
-erst dann ausgewertet, wenn er an den Client geschickt wird. Das hei�t,
-dass Sie in der @code{HAVING}-, @code{GROUP BY}- oder @code{ORDER
-BY}-Klausel nicht auf einen Ausdruck verweisen k�nnen, der Variablen
-beinhaltet, die nicht im @code{SELECT}-Teil gesetzt wurden. Folgendes
-Statement zum Beispiel funktioniert erwartungsgem�� NICHT:
-
-@example
-SELECT (@@aa:=id) AS a, (@@aa+3) AS b FROM tabelle HAVING b=5;
-@end example
-
-Der Grund ist, dass @code{@@aa} nicht den Wert der aktuellen Zeile enth�lt,
-sondern den Wert von @code{id} der vorher akzeptierten Zeile.
-
-
-
-@node Comments, Reserved words, Variables, Language Structure
-@c German node Kommentare
-@subsection Kommentar-Syntax
-
-@findex Kommentar-Syntax
-
-@cindex Kommentare, hinzuf�gen
-
-Der MySQL-Server die Kommentar-Stile @code{# bis Zeilenende}, @code{-- bis
-Zeilenende} und @code{/* mittendrin oder mehrzeilig */}:
-
-@example
-mysql> select 1+1; # Dieser Kommentar geht bis zum Zeilenende
-mysql> select 1+1; -- Dieser Kommentar geht bis zum Zeilenende
-mysql> select 1 /* Das ist ein Kommentar mittendrin */ + 1;
-mysql> select 1+
-/*
-Das ist ein
-mehrzeiliger
-Kommentar
-*/
-1;
-@end example
-
-Beachten Sie, dass Sie beim Kommentarstil @code{--} mindestens ein
-Leerzeichen hinter @code{--} setzen m�ssen!
-
-Obwohl der Server die Kommentar-Syntax wie beschrieben versteht, gibt es
-einige Einschr�nkungen in der Art, wie der @code{mysql}-Client @code{/* ...
-*/}-Kommentare parst:
-
-@itemize @bullet
-@item
-Einfache und doppelte Anf�hrungszeichen werden genommen, um den Anfang
-einer Zeichenkette zu bestimmen, selbst innerhalb eines Kommentars. Wenn
-die Zeichenkette nicht durch ein zweites Anf�hrungszeichen innerhalb des
-Kommentars abgeschlossen wird, bemerkt der Parser nicht, dass der Kommentar
-zuende ist. Wenn Sie @code{mysql} interaktiv ausf�hren, sehen Sie, dass
-@code{mysql} verwirrt ist, weil sich die Eingabeaufforderung von
-@code{mysql>} zu to @code{'>} oder @code{">} �ndert.
-
-@item
-Ein Semikolon wird genommen, um das Ende des aktuellen SQL-Statements
-kenntlich zu machen. Alles Folgende wird als Anfang des n�chsten Statements
-aufgefasst.
-@end itemize
-
-Diese Einschr�nkungen gelten sowohl, wenn Sie @code{mysql} interaktiv
-ausf�hren und wenn Sie Befehle in eine Datei schreiben und @code{mysql} mit
-@code{mysql < some-file} anweisen, seine Eingaben aus dieser Datei zu
-lesen.
-
-MySQL unterst�tzt nicht den ANSI-SQL-Kommentarstil @samp{--} ohne
-nachfolgendes Leerzeichen. @xref{ANSI diff comments}.
-
-
-@node Reserved words, , Comments, Language Structure
-@c German node Reservierte W�rter
-@subsection Ist MySQL pingelig hinsichtlich reservierter W�rter?
-
-@cindex Schl�sselw�rter
-@cindex reservierte W�rter, Ausnahmen
-
-Ein h�ufiges Problem r�hrt daher, dass versucht wird, eine Tabelle mit
-Spaltennamen zu erzeugen, den die Namen von Datentypen oder in MySQL
-eingebauten Funktionen entsprechen, wie @code{TIMESTAMP} oder @code{GROUP}.
-Sie d�rfen das tun (beispielsweise ist @code{ABS} ein zul�ssiger
-Spaltenname), aber es sind dann keine Leerzeichen zwischen einem
-Funktionsname und der @samp{(} erlaubt, wenn Sie Funktionen benutzen, deren
-Namen auch Spaltennamen sind.
-
-Folgende W�rter sind in MySQL explizit reserviert. Die meisten davon sind
-in ANSI-SQL92 als Spalten- und / oder Tabellennamen verboten (zum Beispiel
-@code{group}). Einige wenige sind reserviert, weil MySQL sie ben�tigt und
-(momentan) einen @code{yacc}-Parser benutzt:
-
-@c This ist fixed von including the symbols Tabelle von lex.h here und then running
-@c fix-mysql-reserved-words in emacs (or let David do it):
-@c (defun fix-mysql-reserved-words ()
-@c (interactive)
-@c (let ((cnt 0))
-@c (insert "\n@item ")
-@c (while (looking-at "[ \t]*{ +\"\\([^\"]+\\)\"[ \t]*,.*\n")
-@c (replace-match "@code{\\1}")
-@c (incf cnt)
-@c (if (> cnt 3)
-@c (progn
-@c (setf cnt 0)
-@c (insert "\n@item "))
-@c (insert " @tab ")))))
-@c But remove the non alphanumeric Eintr�ge von Hand first.
-@c Updated after 3.23.4 990928 von David
-
-@multitable @columnfractions .25 .25 .25 .25
-@item @code{action} @tab @code{add} @tab @code{aggregate} @tab @code{all}
-@item @code{alter} @tab @code{after} @tab @code{and} @tab @code{as}
-@item @code{asc} @tab @code{avg} @tab @code{avg_row_length} @tab @code{auto_increment}
-@item @code{between} @tab @code{bigint} @tab @code{bit} @tab @code{binary}
-@item @code{blob} @tab @code{bool} @tab @code{both} @tab @code{by}
-@item @code{cascade} @tab @code{case} @tab @code{char} @tab @code{character}
-@item @code{change} @tab @code{check} @tab @code{checksum} @tab @code{column}
-@item @code{columns} @tab @code{comment} @tab @code{constraint} @tab @code{create}
-@item @code{cross} @tab @code{current_date} @tab @code{current_time} @tab @code{current_timestamp}
-@item @code{data} @tab @code{database} @tab @code{databases} @tab @code{date}
-@item @code{datetime} @tab @code{day} @tab @code{day_hour} @tab @code{day_minute}
-@item @code{day_second} @tab @code{dayofmonth} @tab @code{dayofweek} @tab @code{dayofyear}
-@item @code{dec} @tab @code{decimal} @tab @code{default} @tab @code{delayed}
-@item @code{delay_key_write} @tab @code{delete} @tab @code{desc} @tab @code{describe}
-@item @code{distinct} @tab @code{distinctrow} @tab @code{double} @tab @code{drop}
-@item @code{end} @tab @code{else} @tab @code{escape} @tab @code{escaped}
-@item @code{enclosed} @tab @code{enum} @tab @code{explain} @tab @code{exists}
-@item @code{fields} @tab @code{file} @tab @code{first} @tab @code{float}
-@item @code{float4} @tab @code{float8} @tab @code{flush} @tab @code{foreign}
-@item @code{from} @tab @code{for} @tab @code{full} @tab @code{Funktion}
-@item @code{global} @tab @code{grant} @tab @code{grants} @tab @code{group}
-@item @code{having} @tab @code{heap} @tab @code{high_priority} @tab @code{hour}
-@item @code{hour_minute} @tab @code{hour_second} @tab @code{hosts} @tab @code{identified}
-@item @code{ignore} @tab @code{in} @tab @code{index} @tab @code{infile}
-@item @code{inner} @tab @code{insert} @tab @code{insert_id} @tab @code{int}
-@item @code{integer} @tab @code{interval} @tab @code{int1} @tab @code{int2}
-@item @code{int3} @tab @code{int4} @tab @code{int8} @tab @code{into}
-@item @code{if} @tab @code{is} @tab @code{isam} @tab @code{join}
-@item @code{key} @tab @code{keys} @tab @code{kill} @tab @code{last_insert_id}
-@item @code{leading} @tab @code{left} @tab @code{length} @tab @code{like}
-@item @code{lines} @tab @code{limit} @tab @code{load} @tab @code{local}
-@item @code{lock} @tab @code{logs} @tab @code{long} @tab @code{longblob}
-@item @code{longtext} @tab @code{low_priority} @tab @code{max} @tab @code{max_rows}
-@item @code{match} @tab @code{mediumblob} @tab @code{mediumtext} @tab @code{mediumint}
-@item @code{middleint} @tab @code{min_rows} @tab @code{minute} @tab @code{minute_second}
-@item @code{modify} @tab @code{month} @tab @code{monthname} @tab @code{myisam}
-@item @code{natural} @tab @code{numeric} @tab @code{no} @tab @code{not}
-@item @code{null} @tab @code{on} @tab @code{optimize} @tab @code{option}
-@item @code{optionally} @tab @code{or} @tab @code{order} @tab @code{outer}
-@item @code{outfile} @tab @code{pack_keys} @tab @code{partial} @tab @code{password}
-@item @code{precision} @tab @code{primary} @tab @code{procedure} @tab @code{process}
-@item @code{processlist} @tab @code{privileges} @tab @code{read} @tab @code{real}
-@item @code{references} @tab @code{reload} @tab @code{regexp} @tab @code{rename}
-@item @code{replace} @tab @code{restrict} @tab @code{returns} @tab @code{revoke}
-@item @code{rlike} @tab @code{row} @tab @code{rows} @tab @code{second}
-@item @code{select} @tab @code{set} @tab @code{show} @tab @code{shutdown}
-@item @code{smallint} @tab @code{soname} @tab @code{sql_big_tables} @tab @code{sql_big_selects}
-@item @code{sql_low_priority_updates} @tab @code{sql_log_off} @tab @code{sql_log_update} @tab @code{sql_select_limit}
-@item @code{sql_small_result} @tab @code{sql_big_result} @tab @code{sql_warnings} @tab @code{straight_join}
-@item @code{starting} @tab @code{status} @tab @code{string} @tab @code{table}
-@item @code{tables} @tab @code{temporary} @tab @code{terminated} @tab @code{text}
-@item @code{then} @tab @code{time} @tab @code{timestamp} @tab @code{tinyblob}
-@item @code{tinytext} @tab @code{tinyint} @tab @code{trailing} @tab @code{to}
-@item @code{type} @tab @code{use} @tab @code{using} @tab @code{unique}
-@item @code{unlock} @tab @code{unsigned} @tab @code{update} @tab @code{usage}
-@item @code{values} @tab @code{varchar} @tab @code{variables} @tab @code{varying}
-@item @code{varbinary} @tab @code{mit} @tab @code{write} @tab @code{when}
-@item @code{where} @tab @code{year} @tab @code{year_month} @tab @code{zerofill}
-@end multitable
-
-Folgende Symbole (aus der obigen Tabelle) sind von ANSI-SQL verboten, aber
-von MySQL als Spalten- und Tabellennamen zugelassen. Der Grund ist, dass
-einige davon sehr nat�rliche Namen sind und viele Leute diese bereits in
-Benutzung haben.
-
-@itemize @bullet
-@item @code{ACTION}
-@item @code{BIT}
-@item @code{DATE}
-@item @code{ENUM}
-@item @code{NO}
-@item @code{TEXT}
-@item @code{TIME}
-@item @code{TIMESTAMP}
-@end itemize
-
-
-@node Column types, Functions, Language Structure, Reference
-@c German node Spaltentypen
-@section Spaltentypen
-
-@cindex Spalten, Typen
-@cindex Typen, Spalten
-
-MySQL unterst�tzt eine Reihe von Spaltentypen, die in drei Kategorien
-eingeteilt werden k�nnen: numerische Typen, Datums- und Zeit-Typen und
-Zeichenketten-Typen. Dieser Abschnitt gibt zuerst einen �berblick �ber die
-verf�gbaren Typen und fasst den Speicherbedarf jedes Spaltentyps zusammen.
-Danach folgt eine detaillierter Beschreibung der Eigenschaften der Typen
-jeder Kategorie. Die detailliertere Beschreibung sollte wegen zus�tzlicher
-Informationen �ber bestimmte Spaltentypen herangezogen werden, wie zu den
-erlaubten Formaten, in denen Sie Werte festlegen k�nnen.
-
-Die von MySQL unterst�tzten Spaltentypen sind unten aufgef�hrt. Folgende
-Code-Buchstaben werden in der Beschreibung benutzt:
-
-@cindex Anzeigebreite
-@cindex Gr��e, Anzeigebreite
-@cindex Ziffern
-@cindex Dezimalpunkt
-@cindex Klammern, eckige
-@cindex eckige Klammern
-@table @code
-@item M
-Gibt die maximale Anzeigebreite an. Die gr��te erlaubte Anzeigebreite ist
-255.
-
-@item D
-Trifft auf Flie�komma-Typen zu und bezeichnet die Anzahl von Ziffern nach
-dem Dezimalpunkt. Der gr��te m�gliche Wert ist 30, aber er sollte nicht
-gr��er sein als @code{M}-2.
-@end table
-
-Eckige Klammern (@samp{[} und @samp{]}) geben Teile der Typ-Festlegung an,
-die optional sind.
-
-@tindex Typen
-
-@c The @w{-Anzahl} stuff keeps a linebreak von occurring between
-@c the - und Anzahl.
-
-Wenn Sie @code{ZEROFILL} f�r eine Spalte angeben, beachten Sie, dass MySQL
-der Spalte automatisch ein @code{UNSIGNED}-Attribut hinzuf�gt.
-
-@table @code
-@tindex TINYINT
-@item TINYINT[(M)] [UNSIGNED] [ZEROFILL]
-
-Eine sehr kleine Ganzzahl. Der vorzeichenbehaftete Bereich ist @code{-128}
-bis @code{127}. Der vorzeichenlose Bereich ist @code{0} to @code{255}.
-
-@tindex SMALLINT
-@item SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
-
-Eine kleine Ganzzahl. Der vorzeichenbehaftete Bereich ist @code{-32768} bis
-@code{32767}. Der vorzeichenlose Bereich ist @code{0} bis @code{65535}.
-
-@tindex MEDIUMINT
-@item MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
-
-A Ganzzahl mittlerer Gr��e. Der vorzeichenbehaftete Bereich ist
-@code{-8388608} bis @code{8388607}. Der vorzeichenlose Bereich ist @code{0}
-bis @code{16777215}.
-
-@tindex INT
-@item INT[(M)] [UNSIGNED] [ZEROFILL]
-
-Eine Ganzzahl normaler Gr��e. Der vorzeichenbehaftete Bereich ist
-@code{-2147483648} bis @code{2147483647}. Der vorzeichenlose Bereich ist
-@code{0} bis @code{4294967295}.
-
-@tindex INTEGER
-@item INTEGER[(M)] [UNSIGNED] [ZEROFILL]
-
-Ein Synonym f�r @code{INT}.
-
-@tindex BIGINT
-@item BIGINT[(M)] [UNSIGNED] [ZEROFILL]
-
-Eine gro�e Ganzzahl. Der vorzeichenbehaftete Bereich ist
-@code{-9223372036854775808} bis @code{9223372036854775807}. Der
-vorzeichenlose Bereich ist @code{0} bis @code{18446744073709551615}.
-
-Einiger Dinge sollten Sie sich bei @code{BIGINT}-Spalten bewusst sein:
-
-@itemize @bullet
-@item
-@cindex Rundungsfehler
-Weil alle arithmetischen Berechnungen mit vorzeichenbehafteten
-@code{BIGINT}- oder @code{DOUBLE}-Werten durchgef�hrt werden, sollten Sie
-keine vorzeichenlosen Ganzzahlen gr��er als @code{9223372036854775807} (63
-Bits) benutzen, ausser bei Bit-Funktionen! Wenn Sie das doch tun, k�nnen
-einige der letzten Ziffern im Ergebnis falsch sein, weil Rundungsfehler
-beim Umwandeln von @code{BIGINT} in @code{DOUBLE} auftreten.
-
-MySQL 4.0 kann @code{BIGINT} in folgenden F�llen handhaben:
-@itemize @bullet
-@item
-Benutzen Sie Ganzzahlen, um gro�e vorzeichenlose Wert in einer
-@code{BIGINT}-Spalte zu speichern.
-@item
-Bei @code{MIN(gro�e_ganzzahl_spalte)} und
-@code{MAX(gro�e_ganzzahl_spalte)}.
-@item
-Bei der Benutzung der Operatoren (@code{+}, @code{-}, @code{*} usw.), wenn
-beide Operanden Ganzzahlen sind.
-@end itemize
-
-@item
-Sie k�nnen immer einen genauen Ganzzahlwert in einer @code{BIGINT}-Spalte
-speichern, wenn Sie sie als Zeichenkette speichern, denn in diesem Fall
-wird diese nicht zwischendurch als Double dargestellt.
-@item
-@samp{-}, @samp{+} und @samp{*} benutzen arithmetische
-@code{BIGINT}-Berechnungen, wenn beide Argumente @code{INTEGER}-Werte sind!
-Das hei�t, wenn Sie zwei Ganzzahlen multiplizieren (oder Ergebnisse von
-Funktionen, die Ganzzahlen zur�ckgeben), erhalten Sie vielleicht
-unerwartete Ergebnisse, wenn das Ergebnis gr��er als
-@code{9223372036854775807} ist.
-@end itemize
-
-@cindex Flie�kommazahl
-@tindex FLOAT
-@tindex FLOAT(genauigkeit)
-@item FLOAT(genauigkeit) [ZEROFILL]
-
-Eine Flie�kommazahl. Kann nicht vorzeichenlos sein. @code{genauigkeit} ist
-@code{<=24} bei einer Flie�kommazahl einfacher Genauigkeit und zwischen 25
-und 53 bei einer Flie�kommazahl doppelter Genauigkeit. Diese Typen sind
-wie die unten beschriebenen @code{FLOAT} und @code{DOUBLE}-Typen.
-@code{FLOAT(X)} hat denselben Wertebereich wie die entsprechenden
-@code{FLOAT}- und @code{DOUBLE}-Typen, jedoch ist die Anzeigebreite und die
-Anzahl der Dezimalstellen undefiniert.
-
-In MySQL-Version 3.23 ist das ein echter Flie�kommawert. In fr�heren
-MySQL-Versionen hat @code{FLOAT(genauigkeit)} immer 2 Dezimalstellen.
-
-Beachten Sie, dass bei der Benutzung von @code{FLOAT} unerwartete Probleme
-auftreten k�nnen, weil alle Berechnungen in MySQL mit doppelter Genauigkeit
-durchgef�hrt werden. @xref{No matching rows}.
-
-@cindex ODBC-Kompatibilit�t
-@cindex Kompatibilit�t, mit ODBC
-Diese Syntax steht wegen der ODBC-Kompatibilit�t zur Verf�gung.
-
-@tindex FLOAT
-@tindex FLOAT(M,D)
-@item FLOAT[(M,D)] [ZEROFILL]
-
-Eine kleine Flie�kommazahl (einfacher Genauigkeit). Kann nicht
-vorzeichenlos sein. Der Wertebereich umfasst @code{@w{-3.402823466E+38}}
-bis @code{@w{-1.175494351E-38}}, @code{0} und @code{@w{1.175494351E-38}}
-bis @code{3.402823466E+38}. M ist die Anzeigebreite und D ist die Anzahl
-von Dezimalstellen. @code{FLOAT} ohne Argument oder mit einem Argument <=
-24 steht f�r eine Flie�kommazahl einfacher Genauigkeit.
-
-@tindex DOUBLE
-@tindex FLOAT(genauigkeit)
-@item DOUBLE[(M,D)] [ZEROFILL]
-
-Eine normal gro�e Flie�kommazahl (doppelter Genauigkeit). Kann nicht
-vorzeichenlos sein. Der Wertebereich umfasst
-@code{@w{-1.7976931348623157E+308}} bis
-@code{@w{-2.2250738585072014E-308}}, @code{0} und
-@code{2.2250738585072014E-308} bis @code{1.7976931348623157E+308}. M ist
-die Anzeigebreite und D ist die Anzahl von Dezimalstellen. @code{DOUBLE}
-ohne Argument oder @code{FLOAT(X)} mit 25 <= X <= 53 steht f�r eine
-Flie�kommazahl doppelter Genauigkeit.
-
-@tindex DOUBLE PRECISION
-@tindex REAL
-@item DOUBLE PRECISION[(M,D)] [ZEROFILL]
-@itemx REAL[(M,D)] [ZEROFILL]
-
-Synonyme f�r @code{DOUBLE}.
-
-@tindex DECIMAL
-@item DECIMAL[(M[,D])] [ZEROFILL]
-
-Eine unkomprimierte Flie�kommazahl. Kann nicht vorzeichenlos sein. Verh�lt
-sich wie eine @code{CHAR}-Spalte: ``Unkomprimiert'' bedeutet, dass die Zahl
-als Zeichenkette gespeichert wird, wobei ein Zeichen f�r jede Ziffer des
-Wertes steht. Der Dezimalpunkt und, bei negativen Zahlen, das
-@samp{-}-Zeichen, werden in M nicht mitgez�hlt (aber hierf�r wird Platz
-reserviert). Wenn @code{D} 0 ist, haben Werte keinen Dezimalpunkt oder
-Bruchteil. Der maximale Wertebereich von @code{DECIMAL}-Werte ist derselbe
-wie f�r @code{DOUBLE}, aber der tats�chliche Wertebereich einer gegebenen
-@code{DECIMAL}-Spalte kann durch die Auswahl von @code{M} und @code{D}
-eingeschr�nkt sein.
-
-Wenn @code{D} weggelassen wird, wird es auf 0 gesetzt. Wenn @code{M}
-ausgelassen wird, wird es auf 10 gesetzt.
-
-Beachten Sie, dass in MySQL-Version 3.22 das @code{M}-Argument den Platz
-f�r das Vorzeichen und den Dezimalpunkt beinhaltete!
-
-@tindex NUMERIC
-@item NUMERIC(M,D) [ZEROFILL]
-
-Synonym f�r @code{DECIMAL}.
-
-@tindex DATE
-@item DATE
-
-Ein Datum. Der unterst�tzte Wertebereich ist @code{'1000-01-01'} bis
-@code{'9999-12-31'}. MySQL zeigt @code{DATE}-Werte im
-@code{'YYYY-MM-DD'}-Format an, gestattet jedoch, @code{DATE}-Spalten Werte
-entweder als Zeichenketten oder als Zahlen zuzuweisen. @xref{DATETIME}.
-
-@tindex DATETIME
-@item DATETIME
-
-Eine Datums-/Zeit-Kombination. Der unterst�tzte Wertebereich ist
-@code{'1000-01-01 00:00:00'} bis @code{'9999-12-31 23:59:59'}. MySQL zeigt
-@code{DATETIME}-Werte im @code{'YYYY-MM-DD HH:MM:SS'}-Format an, gestattet
-jedoch, @code{DATETIME}-Spalten Werte entweder als Zeichenketten oder als
-Zahlen zuzuweisen.
-@xref{DATETIME}.
-
-@tindex TIMESTAMP
-@item TIMESTAMP[(M)]
-
-Ein Zeitstempel. Der Wertebereich ist @code{'1970-01-01 00:00:00'} bis
-irgendwann im Jahr @code{2037}. MySQL zeigt @code{TIMESTAMP}-Werte im
-@code{YYYYMMDDHHMMSS}-, @code{YYMMDDHHMMSS}-, @code{YYYYMMDD}- oder
-@code{YYMMDD}-Format an, abh�ngig davon, ob @code{M} @code{14} (oder
-fehlend), @code{12}, @code{8} oder @code{6} ist, gestattet aber, dass Sie
-@code{TIMESTAMP}-Spalten Werte entweder als Zeichenketten oder als Zahlen
-zuweisen. Eine @code{TIMESTAMP}-Spalte ist n�tzlich, um Datum und Zeit
-einer @code{INSERT}- oder @code{UPDATE}-Operation zu speichern, weil sie
-automatisch auf das Datum und die Zeit der j�ngsten Operation gesetzt wird,
-wenn Sie nicht selbst einen Wert zuweisen. Sie k�nnen sie auch auf das
-aktuelle Datum und die aktuelle Zeit setzen, indem Sie einen
-@code{NULL}-Wert zuweisen. @xref{Date and time types}.
-
-Ein @code{TIMESTAMP} wird immer mit 4 Bytes gespeichert. Das
-@code{M}-Argument betrifft nur die Anzeige der @code{TIMESTAMP}-Spalte.
-
-Beachten Sie, dass @code{TIMESTAMP(X)}-Spalten, bei denen X 8 oder 14 ist,
-als Zahlen interpretiert werden, w�hrend andere @code{TIMESTAMP(X)}-Spalten
-als Zeichenketten interpretiert werden. Das soll lediglich sicherstellen,
-dass Sie Tabellen mit diesen Typen verl�sslich dumpen und wiederherstellen
-k�nnen! @xref{DATETIME}.
-
-@tindex TIME
-@item TIME
-
-Ein Zeit-Typ. Der Wertebereich ist @code{'-838:59:59'} bis
-@code{'838:59:59'}. MySQL zeigt @code{TIME}-Werte im
-@code{'HH:MM:SS'}-Format an, gestattet aber, @code{TIME}-Spalten Werte
-entweder als Zeichenketten oder als Zahlen zuweisen. @xref{TIME}.
-
-@tindex YEAR
-@item YEAR[(2|4)]
-
-Ein Jahr in 2- oder 4-Ziffernformat (Vorgabe ist 4-Ziffern). Die zul�ssigen
-Werte reichen von @code{1901} bis @code{2155} sowie @code{0000} im
-4-Ziffern-Jahresformat, und von 1970 bis 2069 beim 2-Ziffernformat (70 bis
-69). MySQL zeigt @code{YEAR}-Werte im @code{YYYY}-Format an, gestattet
-aber, @code{YEAR}-Spalten Werte entweder als Zeichenketten oder als Zahlen
-zuweisen. (Der @code{YEAR}-Typ ist neu seit MySQL-Version 3.22.).
-@xref{YEAR}.
-
-@tindex NATIONAL CHAR
-@tindex NCHAR
-@tindex CHAR
-@tindex CHARACTER
-@item [NATIONAL] CHAR(M) [BINARY]
-
-Eine Zeichenkette fester L�nge, die beim Speichern rechts stets mit
-Leerzeichen bis zur angegebenen L�nge aufgef�llt wird. Der Wertebereich von
-@code{M} ist 1 bis 255 Zeichen. Leerzeichen am Ende werden beim Abruf des
-Wertes entfernt. @code{CHAR}-Werte werden nach dem vorgabem��igen
-Zeichensatz ohne Ber�cksichtigung der Gro�-/Kleinschreibung sortiert und
-verglichen, es sei denn, dass Schl�sselwort @code{BINARY} wird angegeben.
-
-@code{NATIONAL CHAR} (Kurzform @code{NCHAR}) ist die Art, wie ANSI-SQL bei
-einer CHAR-Spalte festlegt, dass der vorgabem��ige Zeichensatz verwendet
-werden soll. Das ist der Vorgabewert in MySQL.
-
-@code{CHAR} ist eine Abk�rzung f�r @code{CHARACTER}.
-
-MySQL erlaubt das Anlegen einer Spalte des Typs @code{CHAR(0)}. Das ist
-haupts�chlich n�tzlich, wenn Sie mit alten Applikationen kompatibel sein
-m�ssen, die auf die Existenz einer Spalte vertrauen, den Wert aber nicht
-tats�chlich benutzen. Es ist ebenfalls nett, um eine Spalte anzulegen, die
-nur 2 Werte annehmen kann: Eine @code{CHAR(0)}, die nicht als @code{NOT
-NULL} definiert ist, belegt nur 1 Bit und kann 2 Werte annehmen:
-@code{NULL} oder @code{""}. @xref{CHAR}.
-
-@tindex CHARACTER VARYING
-@tindex CHAR VARYING
-@tindex VARCHAR
-@item [NATIONAL] VARCHAR(M) [BINARY]
-
-Eine Zeichenkette variabler L�nge. @strong{HINWEIS:} Leerzeichen am Ende
-werden bei der Speicherung des Wertes entfernt (das unterscheidet den Typ
-von der ANSI-SQL-Spezifikation). Der Wertebereich von @code{M} ist 1 bis
-255 Zeichen. @code{VARCHAR}-Werte werden nach dem vorgabem��igen
-Zeichensatz ohne Ber�cksichtigung der Gro�-/Kleinschreibung sortiert und
-verglichen, es sei denn, dass Schl�sselwort @code{BINARY} wird angegeben.
-@xref{Silent column changes}.
-
-@code{VARCHAR} ist eine Abk�rzung f�r @code{CHARACTER VARYING}.
-@xref{CHAR}.
-
-@tindex TINYBLOB
-@tindex TINYTEXT
-@item TINYBLOB
-@itemx TINYTEXT
-
-Eine @code{BLOB}- oder @code{TEXT}-Spalte mit einer maximalen L�nge von 255
-(2^8 - 1) Zeichen. @xref{Silent column changes}. @xref{BLOB}.
-
-@tindex BLOB
-@tindex TEXT
-@item BLOB
-@itemx TEXT
-
-Eine @code{BLOB}- oder @code{TEXT}-Spalte mit einer maximalen L�nge von
-65535 (2^16 - 1) Zeichen. @xref{Silent column changes}. @xref{BLOB}.
-
-@tindex MEDIUMBLOB
-@tindex MEDIUMTEXT
-@item MEDIUMBLOB
-@itemx MEDIUMTEXT
-
-Eine @code{BLOB}- oder @code{TEXT}-Spalte mit einer maximalen L�nge von
-16777215 (2^24 - 1) Zeichen. @xref{Silent column changes}.
-@xref{BLOB}.
-
-@tindex LONGBLOB
-@tindex LONGTEXT
-@item LONGBLOB
-@itemx LONGTEXT
-
-Eine @code{BLOB}- oder @code{TEXT}-Spalte mit einer maximalen L�nge von
-4294967295 (2^32 - 1) Zeichen. @xref{Silent column changes}.
-Beachten Sie, dass Sie nicht den gesamten Wertebereich dieses Typs benutzen
-k�nnen, weil das Client-Server-Protokoll und MyISAM-Tabellen momentan eine
-Beschr�nkungen auf 16 MB pro Kommunikationspaket / Tabellenzeile haben.
-@xref{BLOB}.
-
-@tindex ENUM
-@item ENUM('wert1','wert2',...)
-
-An Aufz�hlung. Ein Zeichenkettenobjekt, das nur einen Wert haben kann, der
-aus den Auflistungswerten @code{'wert1'}, @code{'wert2'}, @code{...},
-@code{NULL} oder dem speziellen @code{""}-Fehlerwert ausgew�hlt wird. Eine
-@code{ENUM} kann maximal 65535 unterschiedliche Werte haben. @xref{ENUM}.
-
-@tindex SET
-@item SET('wert1','wert2',...)
-
-Eine Reihe. Ein Zeichenkettenobjekt, das 0 oder mehr Werte haben kann, von
-denen jeder aus den Auflistungswerten @code{'wert1'}, @code{'wert2'},
-@code{...} ausgew�hlt werden muss. Eine @code{SET} kann maximal 64 Elemente
-haben. @xref{SET}.
-@end table
-
-
-
-@menu
-* Numeric types::
-* Date and time types::
-* String types::
-* Choosing types::
-* Other-vendor column types::
-* Storage requirements::
-@end menu
-
-@node Numeric types, Date and time types, Column types, Column types
-@c German node Numerische Typen
-@subsection Numerische Typen
-
-MySQL unterst�tzt alle numerischen Typen von ANSI/ISO-SQL92. Diese Typen
-beinhalten die exakten numerischen Datentypen (@code{NUMERIC},
-@code{DECIMAL}, @code{INTEGER} und @code{SMALLINT}) sowie die
-n�herungsweisen numerischen Datentypen (@code{FLOAT}, @code{REAL} und
-@code{DOUBLE PRECISION}). Das Schl�sselwort @code{INT} ist ein Synonym f�r
-@code{INTEGER} und das Schl�sselwort @code{DEC} ist ein Synonym f�r
-@code{DECIMAL}.
-
-Die @code{NUMERIC}- und @code{DECIMAL}-Typen sind in MySQL als derselbe Typ
-implementiert, wie es vom SQL92-Standard zugelassen ist. Sie werden f�r
-Werte benutzt, bei denen es wichtig ist, die exakte Genauigkeit zu
-bewahren, zum Beispiel bei monet�ren Daten. Wenn Sie eine Spalte mit einem
-dieser Typen deklarieren, k�nnen Genauigkeit und Bereich festgelegt werden
-(und werden das �blicherweise auch). Beispiel:
-
-@example
- gehalt DECIMAL(9,2)
-@end example
-
-In diesem Beispiel repr�sentiert @code{9} (@code{genauigkeit}) die Anzahl
-signifikanter Dezimalziffern, die f�r Werte gespeichert werden, und
-@code{2} (@code{bereich}) repr�sentiert die Anzahl von Ziffern, die nach
-dem Dezimalpunkt gespeichert werden. In diesem Fall liegt der Wertebereich,
-der in der @code{gehalt}-Spalte gespeichert werden kann, deswegen zwischen
-@code{-9999999.99} und @code{9999999.99}.
-(MySQL kann tats�chlich Zahlen bis zu @code{9999999.99} in dieser Spalte
-speichern, weil er nicht das Vorzeichen f�r positive Zahlen speichern
-muss).
-
-In ANSI/ISO-SQL92 ist die Syntax @code{DECIMAL(p)} �quivalent zu
-@code{DECIMAL(p,0)}. Gleicherma�en ist die Syntax @code{DECIMAL}
-�quivalent zu @code{DECIMAL(p,0)}, wobei es der Implementation �berlassen
-bleibt, den Wert von @code{p} festzulegen. MySQL unterst�tzt momentan keine
-dieser abweichenden Formen der @code{DECIMAL}- / @code{NUMERIC}-Datentypen.
-Das ist im Allgemeinen kein ernstes Problem, weil der haupts�chliche Nutzen
-dieser Typen darin liegt, sowohl Genauigkeit als auch Bereich explizit
-steuern zu k�nnen.
-
-@code{DECIMAL}- und @code{NUMERIC}-Werte sind als Zeichenketten gespeichert
-statt als Flie�kommazahlen, um die dezimale Genauigkeit dieser Werte zu
-bewahren. Ein Zeichen wird benutzt f�r jede Ziffer des Werts, den
-Dezimalpunkt (wenn @code{bereich} > 0) und das @samp{-}-Zeichen (f�r
-negative Zahlen). Wenn @code{bereich} 0 ist, enthalten @code{DECIMAL}- und
-@code{NUMERIC}-Werte weder Dezimalpunkt noch Bruchteil.
-
-Der maximale Wertebereich von @code{DECIMAL}- und @code{NUMERIC}-Werten ist
-derselbe wie f�r @code{DOUBLE}, aber der tats�chliche Wertebereich einer
-gegebenen @code{DECIMAL}- oder @code{NUMERIC}-Spalte kann durch
-@code{genauigkeit} oder @code{bereich} f�r eine gegebene Spalte beschr�nkt
-werden. Wenn einer solchen Spalte ein Wert mit mehr Ziffern nach dem
-Dezimalpunkt zugewiesen wird, als durch @code{bereich} zugelassen, wird der
-Wert auf diesen @code{bereich} gerundet. Wenn einer @code{DECIMAL}- oder
-@code{NUMERIC}-Spalte ein Wert zugewiesen wird, dessen Gr��e den
-Wertebereich �berschreitet, der von der festgelegten (oder vorgabem��igen)
-@code{genauigkeit} und @code{bereich} festgelegt wird, speichert MySQL den
-Wert des entsprechenden Endpunkts des Wertebereichs.
-
-Als Erweiterung zum ANSI/ISO-SQL92-Standard unterst�tzt MySQL auch die
-Ganzzahltypen @code{TINYINT}, @code{MEDIUMINT} und @code{BIGINT}, wie oben
-aufgelistet. Ein andere Erweiterung wird von MySQL unterst�tzt, um optional
-die Anzeigebreite eines Ganzzahlwerts in Klammern festzulegen, die auf das
-Basis-Schl�sselwort des Typs folgen (zum Beispiel @code{INT(4)}). Die
-optionale Breitenspezifizierung wird benutzt, um die Anzeige von Werten,
-deren Breite geringer ist als f�r die Spalte festgelegt, linksseitig mit
-Leerzeichen aufzuf�llen. Das begrenzt allerdings nicht den Wertebereich,
-der in der Spalte gespeichert werden kann, noch die Anzahl von Ziffern, die
-bei Werten angezeigt werden, die die angegebene Breite f�r die Spalte
-�berschreiten. In Verbindung mit dem optionalen Erweiterungsattribut
-@code{ZEROFILL} wird - statt vorgabem��ig mit Leerzeichen - mit Nullen
-aufgef�llt. Bei einer Spalte zum Beispiel, die als @code{INT(5) ZEROFILL}
-deklariert wurde, wird @code{4} als @code{00004} dargestellt. Beachten Sie,
-dass Werte in einer Ganzzahlspalte, die gr��er sind als die Anzeigebreite,
-Probleme bei der Erzeugung tempor�rer Tabellen f�r einige komplizierte
-Joins durch MySQL auftreten k�nnen, weil MySQL in diesen F�llen darauf
-vertraut, dass die Daten in die Original-Spaltenbreite passten.
-
-Alle Ganzzahl-Typen k�nnen ein optionales (Nicht-Standard-) Attribut
-@code{UNSIGNED} haben. Vorzeichenlose Werte k�nnen daf�r benutzt werden,
-nur positive Zahlen in einer Spalte zuzulassen, wenn Sie eine Wertebereich
-brauchen, der etwas gr��er ausf�llt.
-
-Der @code{FLOAT}-Typ wird benutzt, um n�herungsweise numerische Datentypen
-zu repr�sentieren. Der ANSI/ISO-SQL92-Standard erlaubt eine optionale
-Festlegung der Genauigkeit (aber nicht den Wertebereich des Exponenten) in
-Bits, gefolgt vom Schl�sselwort @code{FLOAT} in Klammern. Die
-MySQL-Implementation unterst�tzt ebenfalls diese optionale
-Genauigkeitsfestlegung. Wenn das Schl�sselwort @code{FLOAT} f�r einen
-Spaltentyp ohne Genauigkeitsfestlegung benutzt wird, benutzt MySQL 4 Bytes,
-um die Werte zu speichern. Eine abweichende Syntax wird ebenfalls
-unterst�tzt, wobei zwei Zahlen in Klammern dem @code{FLOAT}-Schl�sselwort
-folgen. Mit dieser Option legt die erste Zahl wie gehabt den Speicherbedarf
-f�r den Wert in Bytes fest, und die zweite Zahl legt die Anzahl von Ziffern
-fest, die nach dem Dezimalpunkt gespeichert und angezeigt werden sollen
-(wie bei @code{DECIMAL} und @code{NUMERIC}). Wenn MySQL in einer solchen
-Spalte einen Wert mit mehr Dezimalziffern nach dem Dezimalpunkt speichern
-soll als f�r die Spalte festgelegt, wird der Wert beim Speichern gerundet,
-um die zus�tzlichen Ziffern zu entfernen.
-
-Die @code{REAL}- und @code{DOUBLE PRECISION}-Typen akzeptieren keine
-Genauigkeitsfestlegungen. Als Erweiterung zum ANSI/ISO-SQL92-Standard
-erkennt MySQL @code{DOUBLE} als ein Synonym f�r den @code{DOUBLE
-PRECISION}-Typ. Im Gegensatz zur Anforderung des Standard, dass die
-Genauigkeit f�r @code{REAL} kleiner sein muss als die f�r @code{DOUBLE
-PRECISION}, implementiert MySQL beide als 8-Byte-Flie�kommawerte doppelter
-Genauigkeit (wenn er nicht im ``ANSI-Modus'' l�uft). F�r maximale
-Portabilit�t sollte Code, der die Speicherung n�herungsweiser numerischer
-Daten erfordert, @code{FLOAT} oder @code{DOUBLE PRECISION} ohne Festlegung
-der Genauigkeit oder Anzahl von Dezimalstellen benutzen.
-
-Wenn ein Wert in einer numerischen Spalte gespeichert werden soll, der
-ausserhalb des erlaubten Wertebereichs des Spaltentyps ist, schneidet MySQL
-den Wert auf den entsprechenden Endpunkt des Wertebereichs ab und speichert
-statt dessen diesen Wert.
-
-Der Wertebereich einer @code{INT}-Spalte ist zum Beispiel
-@code{-2147483648} bis @code{2147483647}. Wenn Sie versuchen,
-@code{-9999999999} in eine @code{INT}-Spalte einzuf�gen, wird der Wert auf
-den unteren Endpunkt des Bereichs abgeschnitten, und es wird
-@code{-2147483648} gespeichert. Gleicherma�en wird beim Einf�gen in eine
-solche Spalte nicht @code{9999999999}, sondern @code{2147483647}
-gespeichert.
-
-Wenn die @code{INT}-Spalte @code{UNSIGNED} ist, ist die Gr��e des
-Wertebereichs dieselbe, aber ihre Endpunkte verschieben sich zu @code{0}
-und @code{4294967295}. Wenn Sie versuchen, @code{-9999999999} bzw.
-@code{9999999999} zu speichern, werden die in der Spalte gespeicherten
-Werte statt dessen zu @code{0} bzw. @code{4294967296}.
-
-Umwandlungen, die aufgrund von Abschneiden geschehen, werden als
-``Warnungen'' bei @code{ALTER TABLE}, @code{LOAD DATA INFILE},
-@code{UPDATE} und in mehrzeiligen @code{INSERT}-Statements berichtet.
-
-
-@node Date and time types, String types, Numeric types, Column types
-@c German node Datums- und Zeit-Typen
-@subsection Datums- und Zeit-Typen
-
-@cindex Typen, Datum und Zeit
-@cindex Datums- und Zeit-Typen
-
-
-
-Die Datums- und Zeit-Typen sind @code{DATETIME}, @code{DATE},
-@code{TIMESTAMP}, @code{TIME} und @code{YEAR}. Jeder dieser Typen hat einen
-zul�ssigen Wertebereich sowie einen ``0''-Wert, der benutzt wird, wenn Sie
-einen wirklich unzul�ssigen Wert speichern. Beachten Sie, dass MySQL es
-zul��t, dass Sie bestimmte 'nicht ganz' zul�ssige Datumswerte speichern,
-zum Beispiel @code{1999-11-31}. Der Grund hierf�r ist, dass wir meinen,
-dass es in der Verantwortung der Applikation liegt, Datums�berpr�fungen
-vorzunehmen, und nicht beim SQL-Server. Um Datumspr�fungen 'schnell' zu
-machen, �berpr�ft MySQL nur, dass der Monat im Bereich 0 bis 12 liegt und
-der Tag im Bereich 0 bis 31. Diese Bereiche sind deshalb so definiert, weil
-es MySQL zul��t, dass Sie in einer @code{DATE}- oder
-@code{DATETIME}-Spalte Datumsangaben speichern, bei denen der Tag oder
-Monat-Tag 0 sind. Das ist extrem n�tzlich f�r Applikationen, die einen
-Geburtstag speichern m�ssen, dessen exaktes Datum unbekannt ist. In diesem
-Fall k�nnen Sie einfach Datumsangaben wie @code{1999-00-00} oder
-@code{1999-01-00} speichern. (Sie k�nnen nicht erwarten, von Funktionen wie
-@code{DATE_SUB()} oder @code{DATE_ADD} f�r solche Datumsangaben korrekte
-Werte zu erhalten.)
-
-Einige allgemeine �berlegungen, die man im Kopf behalten sollte, wenn man
-mit Datums- und Zeit-Typen arbeitet:
-
-@itemize @bullet
-@item
-MySQL ruft Werte f�r einen gegebenen Datums- oder Zeit-Typ in einem
-Standard-Format ab, versucht aber, eine Vielzahl von Formaten zu
-interpretieren, die Sie bereit stellen (wenn Sie zum Beispiel einen Wert
-angeben, der zugewiesen oder mit einem Datums- oder Zeit-Typ verglichen
-werden soll). Dennoch werden nur die in den folgenden Abschnitten
-beschriebenen Formate unterst�tzt. Es wird davon ausgegangen, dass Sie
-zul�ssige Werte bereitstellen; und es k�nnen unvorhersehbare Ergebnisse
-zustande kommen, wenn Sie Werte in anderen Formaten angeben.
-
-@item
-Obwohl MySQL versucht, Werte in verschiedenen Formaten zu interpretieren,
-erwartet er immer, dass der Jahresanteil von Datumswerten ganz links steht.
-Datumsangaben m�ssen in der Reihenfolge Jahr - Monat - Tag gemacht werden
-(zum Beispiel @code{'98-09-04'}) statt in der Reihenfolge Monat - Tag -
-Jahr oder Tag - Monat - Jahr, die anderswo h�ufig gebraucht werden (zum
-Beispiel @code{'09-04-98'}, @code{'04-09-98'}).
-
-@item
-MySQL wandelt einen Datums- oder Zeitwert automatisch in eine Zahl um, wenn
-der Wert in einem numerischen Zusammenhang benutzt wird, und umgekehrt.
-
-@item
-Wenn MySQL auf einen Datums- oder Zeitwert trifft, der ausserhalb des
-Wertebereichs oder in sonstiger Weise f�r den Typ nicht zul�ssig ist (siehe
-Anfang dieses Abschnitts), wird der Wert zum ``0''-Wert dieses Typs
-umgewandelt. (Die Ausnahme ist, dass @code{TIME}-Werte ausserhalb des
-Wertebereichs auf den entsprechenden Endpunkt des @code{TIME}-Wertebereichs
-abgeschnitten werden.) Die unten stehende Tabelle zeigt das Format des
-``0''-Werts f�r jeden Typ:
-
-@multitable @columnfractions .3 .7
-@item @strong{Spaltentyp} @tab @strong{``0''-Wert}
-@item @code{DATETIME} @tab @code{'0000-00-00 00:00:00'}
-@item @code{DATE} @tab @code{'0000-00-00'}
-@item @code{TIMESTAMP} @tab @code{00000000000000} (L�nge abh�ngig von der Anzeigebreite)
-@item @code{TIME} @tab @code{'00:00:00'}
-@item @code{YEAR} @tab @code{0000}
-@end multitable
-
-@item
-Die ``0''-Werte sind speziell, aber Sie k�nnen diese explizit speichern
-oder auf sie verweisen, indem Sie die in der Tabelle dargestellten Werte
-benutzen. Sie k�nnen das auch mit den Werten @code{'0'} oder @code{0}
-machen, die leichter zu schreiben sind.
-
-@item
-``0''-Datums- oder -Zeitwerte, die �ber @strong{MyODBC} benutzt werden,
-werden in @strong{MyODBC}-Version 2.50.12 und h�her automatisch in
-@code{NULL} umgewandelt, weil ODBC solche Werte nicht handhaben kann.
-@end itemize
-
-
-@menu
-* Y2K issues::
-* DATETIME::
-* TIME::
-* YEAR::
-@end menu
-
-@node Y2K issues, DATETIME, Date and time types, Date and time types
-@c German node Jahr 2000
-@subsubsection Jahr-2000-Probleme und Datumstypen
-
-@cindex Jahr-2000-Probleme
-@cindex Datumstypen, Jahr-2000-Probleme
-
-MySQL selbst ist Jahr-2000-konform (Jahr-2000-sicher,
-@pxref{Year 2000 compliance}), aber Eingabewerte, die an MySQL
-�bergeben werden, sind das m�glicherweise nicht. Jede Eingabe von
-Jahreswerten mit 2 Ziffern ist mehrdeutig, weil das Jahrhundert unbekannt
-ist. Solche Werte m�ssen in 4-stellige Form umgedeutet werden, weil MySQL
-Jahre intern mit 4 Ziffern speichert.
-
-Bei @code{DATETIME}-, @code{DATE}-, @code{TIMESTAMP}- und @code{YEAR}-Typen
-interpretiert MySQL Datumsangaben mit mehrdeutigen Jahreswerten nach
-folgenden Regeln:
-
-@itemize @bullet
-@item
-Jahreswerte im Bereich @code{00 bis 69} werden in @code{2000 bis 2069}
-umgewandelt.
-
-@item
-Jahreswerte im Bereich @code{70 bis 99} werden in @code{1970 bis 1999}
-umgewandelt.
-@end itemize
-
-Denken Sie daran, dass diese Regeln nur eine vern�nftige Sch�tzung dessen
-bedeuten, was die Daten tats�chlich darstellen sollen. Wenn die von MySQL
-benutzten Heuristiken keine korrekten Werte ergeben, m�ssen Sie eindeutige
-Eingaben in Form 4-stelliger Jahreswerte bereit stellen.
-
-@code{ORDER BY} sortiert 2-stellige @code{YEAR/DATE/DATETIME}-Typen
-korrekt.
-
-Beachten Sie, dass einige Funktionen wie @code{MIN()} und @code{MAX()} ein
-@code{TIMESTAMP / DATE} in eine Zahl umwandeln. Das hei�t, dass ein
-Zeitstempel mit einer 2-stelligen Jahresangabe bei diesen Funktionen nicht
-korrekt funktioniert. Das kann in diesem Fall dadurch behoben werden, dass
-der @code{TIMESTAMP / DATE} in ein 4-stelliges Jahresformat umgewandelt
-wird, oder etwas wie @code{MIN(DATE_ADD(zeitstempel,INTERVAL 0 DAYS))}
-benutzt wird.
-
-
-@node DATETIME, TIME, Y2K issues, Date and time types
-@c German node DATETIME
-@subsubsection Die @code{DATETIME}-, @code{DATE}- und @code{TIMESTAMP}-Typen
-
-@tindex DATETIME
-@tindex DATE
-@tindex TIMESTAMP
-
-Die @code{DATETIME}-, @code{DATE}- und @code{TIMESTAMP}-Typen sind
-verwandt. Dieser Abschnitt beschreibt ihre Charakteristiken, wo sie sich
-�hnlich sind und wo sie sich unterscheiden.
-
-Der @code{DATETIME}-Typ wird benutzt, wenn Sie Werte brauchen, die sowohl
-Datums- als auch Zeitinformationen beinhalten. MySQL ruft
-@code{DATETIME}-Werte ab und zeigt sie an im @code{'YYYY-MM-DD
-HH:MM:SS'}-Format. Der unterst�tzte Wertebereich ist @code{'1000-01-01
-00:00:00'} bis @code{'9999-12-31 23:59:59'}. (``Unterst�tzt'' hei�t, dass
-fr�here Werte zwar funktionieren k�nnen, dass es aber keine Garantie daf�r
-gibt.)
-
-Der @code{DATE}-Typ wird benutzt, wenn Sie nur einen Datumswert brauchen,
-ohne Zeitanteil. MySQL ruft @code{DATE}-Werte ab und zeigt sie an im
-@code{'YYYY-MM-DD'}-Format. Der unterst�tzte Wertebereich ist
-@code{'1000-01-01'} bis @code{'9999-12-31'}.
-
-Der @code{TIMESTAMP}-Typ ist ein Typ, den Sie daf�r benutzen k�nnen, um
-@code{INSERT}- oder @code{UPDATE}-Operationen mit dem aktuellen Datum und
-der aktuellen Zeit zu stempeln. Wenn Sie mehrfache @code{TIMESTAMP}-Spalten
-haben, wird nur die erste automatisch aktualisiert.
-
-Die automatische Aktualisierung der @code{TIMESTAMP}-Spalte geschieht unter
-einer der folgenden Bedingungen:
-
-@itemize @bullet
-@item
-Die Spalte wird in einem @code{INSERT}- oder @code{LOAD DATA
-INFILE}-Statement nicht explizit angegeben.
-@item
-Die Spalte wird in einem @code{UPDATE}-Statement nicht explizit angegeben,
-aber ein anderer Spaltenwert �ndert sich. (Beachten Sie, dass ein
-@code{UPDATE}, das eine Spalte auf einen Wert setzt, den diese bereits hat,
-nicht dazu f�hrt, dass die @code{TIMESTAMP}-Spalte aktualisiert wird, weil
-MySQL das Aktualisieren in einem solchen Fall auf Effizienzgr�nden
-ignoriert.)
-@item
-Wenn Sie die @code{TIMESTAMP}-Spalte explizit auf @code{NULL} setzen.
-@end itemize
-
-@code{TIMESTAMP}-Spalten abgesehen von der ersten k�nnen ebenfalls auf das
-aktuelle Datum und die aktuelle Zeit gesetzt werden. Setzen Sie die Spalte
-einfach auf @code{NULL} oder auf @code{NOW()}.
-
-Sie k�nnen jede @code{TIMESTAMP}-Spalte auf einen Wert setzen, der vom
-aktuellen Datum und der aktuellen Zeit abweicht, indem Sie sie explizit auf
-den gew�nschten Wert setzen. Das gilt sogar f�r die erste
-@code{TIMESTAMP}-Spalte. Sie k�nnen diese Eigenschaft benutzen, wenn Sie
-einen @code{TIMESTAMP} auf das aktuelle Datum und die aktuelle Zeit setzen
-wollen, wenn Sie eine Zeile erzeugen, nicht aber, wenn die Zeile sp�ter
-aktualisiert wird:
-
-@itemize @bullet
-@item
-Lassen Sie MySQL die Spalte setzen, wenn die Zeile erzeugt wird. Das
-initialisiert sie auf das aktuelle Datum und die aktuelle Zeit.
-
-@item
-Wenn Sie nachfolgende Aktualisierungen anderer Spalten in der Zeile
-durchf�hren, setzen Sie die @code{TIMESTAMP}-Spalte explizit auf ihren
-aktuellen Wert.
-@end itemize
-
-Auf der anderen Seite finden Sie vielleicht mindestens so einfach, eine
-@code{DATETIME}-Spalte zu benutzen, die Sie auf @code{NOW()}
-initialisieren, wenn die Zeile erzeugt wird, und die Sie bei nachfolgenden
-Aktualisierungen nicht anfassen.
-
-@code{TIMESTAMP}-Werte haben einen Wertebereich von 1970 bis irgendwann im
-Jahr 2037, bei einer Aufl�sung von einer Sekunde. Werte werden als Zahlen
-angezeigt.
-
-Das Format, in dem MySQL @code{TIMESTAMP}-Werte abruft und anzeigt, h�ngt
-von der Anzeigebreite ab, wie in der obigen Tabelle dargestellt. Das
-`volle' @code{TIMESTAMP}-Format ist 14 Ziffern, aber
-@code{TIMESTAMP}-Spalten k�nnen mit k�rzeren Anzeigebreiten angelegt
-werden:
-
-@multitable @columnfractions .3 .7
-@item @strong{Spaltentyp} @tab @strong{Anzeigeformat}
-@item @code{TIMESTAMP(14)} @tab @code{YYYYMMDDHHMMSS}
-@item @code{TIMESTAMP(12)} @tab @code{YYMMDDHHMMSS}
-@item @code{TIMESTAMP(10)} @tab @code{YYMMDDHHMM}
-@item @code{TIMESTAMP(8)} @tab @code{YYYYMMDD}
-@item @code{TIMESTAMP(6)} @tab @code{YYMMDD}
-@item @code{TIMESTAMP(4)} @tab @code{YYMM}
-@item @code{TIMESTAMP(2)} @tab @code{YY}
-@end multitable
-
-Alle @code{TIMESTAMP}-Spalten haben dieselbe Speichergr��e, unabh�ngig von
-der Anzeigebreite. Die gebr�uchlichsten Anzeigebreiten sind 6, 8, 12 und
-14. Sie k�nnen zur Zeit der Tabellenerzeugung beliebige Anzeigebreiten
-festlegen, aber Werte von 0 oder gr��er als 14 werden auf 14 gesetzt.
-Ungerade Werte im Bereich von 1 bis 13 werden auf die n�chst h�here gerade
-Zahl gesetzt.
-
-Sie k�nnen @code{DATETIME}-, @code{DATE}- und @code{TIMESTAMP}-Werte mit
-folgenden Formaten festlegen:
-
-@itemize @bullet
-@item
-Als eine Zeichenkette im @code{'YYYY-MM-DD HH:MM:SS'}- oder @code{'YY-MM-DD
-HH:MM:SS'}-Format. Eine ``entspannte'' Syntax ist zugelassen - jedes
-Satzzeichen kann als Begrenzer zwischen Datumsanteilen oder Zeitanteilen
-verwendet werden. Beispielsweise sind @code{'98-12-31 11:30:45'},
-@code{'98.12.31 11+30+45'}, @code{'98/12/31 11*30*45'} und
-@code{'98@@12@@31 11^30^45'} �quivalent.
-
-@item
-Als eine Zeichenkette im @code{'YYYY-MM-DD'}- oder
-@code{'YY-MM-DD'}-Format. Auch hier ist eine ``entspannte'' Syntax
-zugelassen. Beispielsweise sind @code{'98-12-31'}, @code{'98.12.31'},
-@code{'98/12/31'} und @code{'98@@12@@31'} �quivalent.
-
-@item
-Als eine Zeichenkette ohne Begrenzer im @code{'YYYYMMDDHHMMSS'}- oder
-@code{'YYMMDDHHMMSS'}-Format, vorausgesetzt, die Zeichenkette ergibt als
-Datum einen Sinn. @code{'19970523091528'} und @code{'970523091528'}
-beispielsweise werden als @code{'1997-05-23 09:15:28'} interpretiert, aber
-@code{'971122129015'} ist unzul�ssig (es hat einen Minutenanteil, der
-keinen Sinn ergibt) und wird in @code{'0000-00-00 00:00:00'} umgewandelt.
-
-@item
-Als eine Zeichenkette ohne Begrenzer im @code{'YYYYMMDD'}- oder
-@code{'YYMMDD'}-Format, vorausgesetzt, die Zeichenkette ergibt als Datum
-einen Sinn. @code{'19970523'} und @code{'970523'} werden als
-@code{'1997-05-23'} interpretiert, aber @code{'971332'} ist unzul�ssig (es
-hat einen Monatsanteil und einen Tagesanteil, der keinen Sinn ergibt) und
-wird in @code{'0000-00-00'} umgewandelt.
-
-@item
-Als eine Zahl im @code{YYYYMMDDHHMMSS}- oder @code{YYMMDDHHMMSS}-Format,
-vorausgesetzt, die Zahl ergibt als Datum einen Sinn. @code{19830905132800}
-und @code{830905132800} zum Beispiel werden als @code{'1983-09-05
-13:28:00'} interpretiert.
-
-@item
-Als eine Zahl im @code{YYYYMMDD}- oder @code{YYMMDD}-Format, vorausgesetzt,
-die Zahl ergibt als Datum einen Sinn. @code{19830905} und @code{830905} zum
-Beispiel werden als @code{'1983-09-05'} interpretiert.
-
-@item
-Als Ergebnis einer Funktion, die einen Wert zur�ckgibt, der in einem
-@code{DATETIME}-, @code{DATE}- oder @code{TIMESTAMP}-Zusammenhang einen
-Sinn ergibt, wie @code{NOW()} oder @code{CURRENT_DATE}.
-@end itemize
-
-Unzul�ssige @code{DATETIME}-, @code{DATE}- oder @code{TIMESTAMP}-Werte
-werden in den ``0''-Wert des jeweiligen Typs umgewandelt (@code{'0000-00-00
-00:00:00'}, @code{'0000-00-00'} oder @code{00000000000000}).
-
-Bei Werten, die als Zeichenketten angegeben werden, die Begrenzer f�r
-Datumsanteile enthalten, ist es nicht notwendig, zwei Ziffern f�r Monats-
-oder Tageswerte anzugeben, die weniger als @code{10} sind.
-@code{'1979-6-9'} ist dasselbe wie @code{'1979-06-09'}. Gleicherma�en ist
-es bei Zeichenketten, die Begrenzer f�r Zeitanteile enthalten, nicht
-notwendig, zwei Ziffern f�r Stunden-, Monats- oder Sekundenwerte anzugeben,
-die weniger als @code{10} sind. @code{'1979-10-30 1:2:3'} ist dasselbe wie
-@code{'1979-10-30 01:02:03'}.
-
-Werte, die als Zahlen angegeben sind, sollten 6, 8, 12 oder 14 Ziffern lang
-sein. Wenn die Zahl 8 oder 14 Ziffern lang ist, wird angenommen, dass sie
-im @code{YYYYMMDD}- oder @code{YYYYMMDDHHMMSS}-Format ist und dass das Jahr
-durch die ersten 4 Ziffern angegeben wird. Wenn die Zahl 6 oder 12 Ziffern
-lang ist, wird angenommen, dass sie im @code{YYMMDD}- oder
-@code{YYMMDDHHMMSS}-Format ist und dass das Jahr durch die ersten 2 Ziffern
-angegeben wird. Zahlen, die nicht diesen L�ngen entsprechen, werden
-interpretiert, als ob sie mit f�hrenden Nullen auf die n�chst m�gliche
-L�nge gebracht worden w�ren.
-
-@cindex nicht begrenzte Zeichenketten
-@cindex Zeichenketten, non-delimited
-Werte, die als nicht begrenzte Zeichenketten angegeben werden, werden
-interpretiert, indem ihre L�nge als gegeben angenommen wird. Wenn die
-Zeichenkette 8 oder 14 Zeichen lang ist, wird angenommen, dass das Jahr
-durch die ersten 4 Zeichen angegeben wird. Ansonsten wird angenommen, dass
-das Jahr durch die ersten 2 Zeichen angegeben wird. Die Zeichenkette wird
-von links nach rechts interpretiert, um die Jahres-, Monats-, Tages-,
-Stunden- und Sekundenwerte zu finden, f�r so viele Anteile, wie in der
-Zeichenkette vorkommen. Das bedeutet, dass Sie keine Zeichenketten benutzen
-sollten, die weniger als 6 Zeichen haben. Wenn Sie zum Beispiel
-@code{'9903'} angeben, in der Annahme, dass das M�rz 1999 darstellt, werden
-Sie feststellen, dass MySQL einen ``0''-Datumswert in Ihre Tabelle einf�gt.
-Das liegt daran, dass die Jahres- und Monatswerte @code{99} und @code{03}
-sind, aber der Tagesanteil fehlt (0), so dass der Wert kein zul�ssiges
-Datum darstellt.
-
-@code{TIMESTAMP}-Spalten speichern zul�ssige Werte mit der vollen
-Genauigkeit, mit der der Wert angegeben wurde, unabh�ngig von der
-Anzeigebreite. Das hat mehrere Auswirkungen:
-
-@itemize @bullet
-@item
-Geben Sie immer Jahr, Monat und Tag an, selbst wenn Ihre Spaltentypen
-@code{TIMESTAMP(4)} oder @code{TIMESTAMP(2)} sind. Ansonsten w�re der Wert
-kein zul�ssiges Datum und @code{0} w�rde gespeichert werden.
-
-@item
-Wenn Sie @code{ALTER TABLE} benutzen, um eine enge @code{TIMESTAMP}-Spalte
-breiter zu machen, werden Informationen angezeigt, die vorher ``versteckt''
-waren.
-
-@item
-Gleicherma�en f�hrt das Verengen einer @code{TIMESTAMP}-Spalte nicht dazu,
-dass Informationen verloren gehen, ausser in dem Sinn, dass weniger
-Informationen dargestellt werden, wenn die Werte angezeigt werden.
-
-@item
-Obwohl @code{TIMESTAMP}-Werte mit voller Genauigkeit gespeichert werden,
-ist die einzige Funktion, die direkt mit dem zugrunde liegenden
-gespeicherten Wert arbeitet, @code{UNIX_TIMESTAMP()}. Alle anderen
-Funktionen arbeiten mit dem formatierten, abgerufenen Wert. Das bedeutet,
-Sie k�nnen keine Funktionen wie @code{HOUR()} oder @code{SECOND()}
-benutzen, wenn nicht auch der relevante Teil des @code{TIMESTAMP}-Werts im
-formatierten Werte enthalten ist. Wenn zum Beispiel der @code{HH}-Teil
-einer @code{TIMESTAMP}-Spalte nicht angezeigt wird, wenn die Anzeigebreite
-nicht mindestens 10 betr�gt, wird der Versuch, @code{HOUR()} auf k�rzere
-@code{TIMESTAMP}-Werte anzuwenden, unsinnige Ergebnisse erzeugen.
-@end itemize
-
-Bis zu einem gewissen Grad k�nnen Sie einem Objekt eines Datumstyp Werte
-eines anderen Datumstyps zuweisen. Jedoch kann eine �nderung des Wertes
-oder ein Informationsverlust eintreten:
-
-@itemize @bullet
-@item
-Wenn Sie einem @code{DATETIME}- oder @code{TIMESTAMP}-Objekt einen
-@code{DATE}-Wert zuweisen, wird der Zeitanteil im Ergebniswert auf
-@code{'00:00:00'} gesetzt, weil der @code{DATE}-Wert keine
-Zeitinformationen enth�lt.
-
-@item
-Wenn Sie einem @code{DATE}-Objekt einen @code{DATETIME}- oder
-@code{TIMESTAMP}-Wert zuweisen, wird der Zeitanteil des Ergebniswerts
-gel�scht, weil der @code{DATE}-Typ keine Zeitinformationen speichert.
-
-@item
-Denken Sie daran, dass @code{DATETIME}-, @code{DATE}- und
-@code{TIMESTAMP}-Werte zwar in denselben Formaten angegeben werden k�nnen,
-dass die Typen jedoch nicht alle denselben Wertebereich haben.
-@code{TIMESTAMP}-Werte zum Beispiel k�nnen nicht fr�her als @code{1970}
-oder sp�ter als @code{2037} sein. Das bedeutet, dass ein Datum wie
-@code{'1968-01-01'}, was als @code{DATETIME} oder @code{DATE}-Wert zul�ssig
-w�re, kein g�ltiger @code{TIMESTAMP}-Wert ist und in @code{0} umgewandelt
-wird, wenn er einem solchen Objekt zugewiesen wird.
-@end itemize
-
-@cindex Probleme, Datumswerte
-@cindex Datumswerte, Probleme
-Seien Sie auf der Hut vor Fallstricken, wenn Sie Datumswerte angeben:
-
-@itemize @bullet
-@item
-Das entspannte Format l��t Werte als Zeichenketten zu, die t�uschen
-k�nnen. Ein Wert wie @code{'10:11:12'} zum Beispiel sieht wegen des
-@samp{:}-Begrenzers wie ein Zeitwert aus, wird er aber in einem
-Datums-Zusammenhang benutzt, wird er als das Datum @code{'2010-11-12'}
-interpretiert. Der Wert @code{'10:45:15'} wird in @code{'0000-00-00'}
-umgewandelt, weil @code{'45'} kein zul�ssiger Monat ist.
-
-@item
-Jahreswerte, die als zwei Ziffern angegeben werden, sind mehrdeutig, weil
-das Jahrhundert unbekannt ist.
-unknown. MySQL interpretiert 2-stellige Jahreswerte nach folgenden Regeln:
-
-@itemize @minus
-@item
-Jahreswerte im Bereich @code{00 bis 69} werden in @code{2000 bis 2069}
-umgewandelt.
-
-@item
-Jahreswerte im Bereich @code{70 bis 99} werden in @code{1970 bis 1999}
-umgewandelt.
-@end itemize
-@end itemize
-
-
-@node TIME, YEAR, DATETIME, Date and time types
-@c German node TIME
-@subsubsection Der @code{TIME}-Typ
-
-@tindex TIME
-
-MySQL ruft @code{TIME}-Werte ab und zeigt sie an im
-@code{'HH:MM:SS'}-Format (oder @code{'HHH:MM:SS'}-Format f�r gro�e
-Stundenwerte). @code{TIME}-Werte rangieren von @code{'-838:59:59'} bis
-@code{'838:59:59'}. Der Grund daf�r, dass der Stundenanteil so Gro� sein
-kann, liegt darin, dass der @code{TIME}-Typ nicht nur benutzt werden kann,
-um die Tageszeit zu repr�sentieren (wobei die Stunden weniger als 24 sein
-m�ssen), sondern auch abgelaufene Zeit oder ein Zeitintervall zwischen zwei
-Ereignissen (was viel gr��er als 24 Stunden oder sogar negativ sein kann).
-
-Sie k�nnen @code{TIME}-Werte in einer Vielzahl von Formaten angeben:
-
-@itemize @bullet
-@item
-Als eine Zeichenkette im @code{'D HH:MM:SS.bruchteil'}-Format. (Beachten
-Sie, dass MySQL bislang nicht den Bruchteil f�r die TIME-Spalte speichert.)
-Man kann auch folgende ``entspannte'' Syntax benutzen:
-
-@code{HH:MM:SS.bruchteil}, @code{HH:MM:SS}, @code{HH:MM}, @code{D HH:MM:SS},
-@code{D HH:MM}, @code{D HH} oder @code{SS}. Hierbei ist @code{D} Tage
-zwischen 0 und 33.
-
-@item
-Als eine Zeichenkette ohne Begrenzer im @code{'HHMMSS'}-Format,
-vorausgesetzt, dass diese als Zeitangabe einen Sinn ergibt. @code{'101112'}
-zum Beispiel wird als @code{'10:11:12'} interpretiert, aber @code{'109712'}
-ist unzul�ssig (es hat einen Minutenanteil, der keinen Sinn ergibt) und
-wird in @code{'00:00:00'} umgewandelt.
-
-@item
-Als eine Zahl im @code{HHMMSS}-Format, vorausgesetzt, dass diese als
-Zeitangabe einen Sinn ergibt. @code{101112} zum Beispiel wird als
-@code{'10:11:12'} interpretiert. Folgende alternativen Formate werden
-ebenfalls verstanden: @code{SS}, @code{MMSS}, @code{HHMMSS},
-@code{HHMMSS.bruchteil}. Beachten Sie, dass MySQL bislang noch nicht den
-Bruchteil speichert.
-
-@item
-Als Ergebnis einer Funktion, die einen Wert zur�ck gibt, der in einem
-@code{TIME}-Zusammenhang akzeptabel ist, wie @code{CURRENT_TIME}.
-@end itemize
-
-Bei @code{TIME}-Werten, die als Zeichenketten angegeben sind, die einen
-Begrenzer f�r den Zeitanteil beinhalten, ist es nicht notwendig, zwei
-Ziffern f�r Stunden-, Minuten- oder Sekunden-Werte anzugeben, die weniger
-als @code{10} sind. @code{'8:3:2'} ist dasselbe wie @code{'08:03:02'}.
-
-Seien Sie vorsichtig damit, einer @code{TIME}-Spalte ``kurze''
-@code{TIME}-Werte zuzuweisen. Ohne Semikolon interpretiert MySQL Werte
-unter der Annahme, dass die am weitesten rechts stehenden Ziffern Sekunden
-repr�sentieren. (MySQL interpretiert @code{TIME}-Werte als vergangene Zeit
-statt als Tageszeit.) Sie k�nnten zum Beispiel denken, dass @code{'1112'}
-und @code{1112} @code{'11:12:00'} bedeuten (12 Minuten nach 11 Uhr), aber
-MySQL interpretiert sie als @code{'00:11:12'} (11 Minuten, 12 Sekunden).
-Gleicherma�en wird @code{'12'} und @code{12} als @code{'00:00:12'}
-interpretiert. @code{TIME}-Werte mit Semikolon werden statt dessen immer
-als Tageszeit interpretiert. Das hei�t, @code{'11:12'} bedeutet
-@code{'11:12:00'}, nicht @code{'00:11:12'}.
-
-Werte, die ausserhalb des @code{TIME}-Wertebereichs liegen, ansonsten aber
-zul�ssig sind, werden auf den entsprechenden Endpunkt des Wertebereichs
-abgeschnitten. @code{'-850:00:00'} bzw. @code{'850:00:00'} werden in
-@code{'-838:59:59'} bzw. @code{'838:59:59'} umgewandelt.
-
-Unzul�ssige @code{TIME}-Werte werden in @code{'00:00:00'} umgewandelt.
-Beachten Sie, dass es keine M�glichkeit gibt zu unterscheiden, wenn ein
-Wert von @code{'00:00:00'} in einer Tabelle gespeichert ist, ob dieser
-origin�r als @code{'00:00:00'} eingegeben wurde oder ob es ein unzul�ssiger
-Wert war, weil @code{'00:00:00'} selbst ein zul�ssiger @code{TIME}-Wert
-ist.
-
-
-@node YEAR, , TIME, Date and time types
-@c German node YEAR
-@subsubsection Der @code{YEAR}-Typ
-
-@tindex YEAR
-
-Der @code{YEAR}-Typ ist ein 1-Byte-Typ, der f�r die Darstellung von Jahren
-benutzt wird.
-
-MySQL ruft @code{YEAR}-Werte ab und speichert sie im @code{YYYY}-Format.
-Der Wertebereich ist @code{1901} bis @code{2155}.
-
-Sie k�nnen @code{YEAR}-Werte in einer Vielzahl von Formaten angeben:
-
-@itemize @bullet
-@item
-Als vierstellige Zeichenkette im Wertebereich von @code{'1901'} bis
-@code{'2155'}.
-
-@item
-Als vierstellige Zahl im Wertebereich von @code{1901} bis @code{2155}.
-
-@item
-Als zweistellige Zeichenkette im Wertebereich von @code{'00'} bis
-@code{'99'}. Werte in den Bereichen von @code{'00'} bis @code{'69'} und
-@code{'70'} bis @code{'99'} werden in @code{YEAR}-Werte in den Bereichen
-von @code{2000} bis @code{2069} und @code{1970} bis @code{1999}
-umgewandelt.
-
-@item
-Als zweistellige Zahl im Wertebereich von @code{1} bis @code{99}. Werte in
-den Bereichen von @code{1} bis @code{69} und @code{70} bis @code{99} werden
-in @code{YEAR}-Werte in den Bereichen von @code{2001} bis @code{2069} und
-@code{1970} bis @code{1999} umgewandelt. Beachten Sie, dass der
-Wertebereich f�r zweistellige Zahlen sich geringf�gig vom Wertebereich f�r
-zweistellige Zeichenketten unterscheidet, weil Sie 0 nicht direkt als Zahl
-eingeben k�nnen und sie dann als @code{2000} interpretiert wird. Sie
-@emph{m�ssen} sie als Zeichenkette @code{'0'} oder @code{'00'} angeben,
-oder sie wird als @code{0000} interpretiert.
-
-@item
-Als Ergebnis einer Funktion, die einen Wert zur�ck gibt, der in einem
-@code{YEAR}-Zusammenhang akzeptabel ist, wie @code{NOW()}.
-@end itemize
-
-Unzul�ssige @code{YEAR}-Werte werden in @code{0000} umgewandelt.
-
-
-@node String types, Choosing types, Date and time types, Column types
-@c German node Zeichenketten-Typen
-@subsection Zeichenketten-Typen
-
-@cindex Typen, Zeichenketten
-@cindex Zeichenketten-Typen
-
-@tindex CHAR
-@tindex VARCHAR
-
-
-
-Die Zeichenketten-Typen sind @code{CHAR}, @code{VARCHAR}, @code{BLOB},
-@code{TEXT}, @code{ENUM} und @code{SET}. Dieser Abschnitt beschreibt, wie
-diese Typen funktionieren, ihren Speicherbedarf und wie sie in Anfragen
-benutzt werden.
-
-
-@menu
-* CHAR::
-* BLOB::
-* ENUM::
-* SET::
-@end menu
-
-@node CHAR, BLOB, String types, String types
-@c German node CHAR
-@subsubsection Die @code{CHAR}- und @code{VARCHAR}-Typen
-
-Die @code{CHAR}- und @code{VARCHAR}-Typen sind �hnlich, unterscheiden sich
-aber in der Art, wie sie gespeichert und abgerufen werden.
-
-Die L�nge einer @code{CHAR}-Spalte wird auf die L�nge festgelegt, die Sie
-bei der Erzeugung der Tabelle angeben. Die L�nge kann zwischen 1 und 255
-variieren. (Ab MySQL-Version 3.23 kann die L�nge zwischen 0 und 255
-liegen.) Wenn @code{CHAR}-Werte gespeichert werden, werden sie am rechten
-Ende bis zur festgelegten L�nge mit Leerzeichen aufgef�llt. Wenn
-@code{CHAR}-Werte abgerufen werden, werden die Leerzeichen am Ende
-entfernt.
-
-Werte in @code{VARCHAR}-Spalten sind Zeichenketten variabler L�nge. Sie
-k�nnen eine @code{VARCHAR}-Spalte mit jeder L�nge zwischen 1 und 255
-deklarieren, genau wie f�r @code{CHAR}-Spalten. Im Gegensatz zu @code{CHAR}
-werden @code{VARCHAR}-Werte jedoch nur mit so vielen Zeichen wie n�tig
-gespeichert, plus 1 Byte, um die L�nge zu speichern. Die Werte werden nicht
-aufgef�llt; statt dessen werden Leerzeichen am Ende beim Speichern
-entfernt. (Diese Entfernung von Leerzeichen weicht von der
-ANSI-SQL-Spezifikation ab.)
-
-Wenn Sie einer @code{CHAR}- oder @code{VARCHAR}-Spalte einen Wert zuweisen,
-der die maximale Spaltenl�nge �berschreitet, wird der Wert so zurecht
-geschnitten, das er passt.
-
-Die unten stehende Tabelle stellt die Unterschiede zwischen den beiden
-Spaltentypen dar, indem das Ergebnis der Speicherung unterschiedlicher
-Zeichenkettenwerte in @code{CHAR(4)}- und @code{VARCHAR(4)}-Spalten gezeigt
-wird:
-
-@c Need to use @(space) to make sure second Spaltenwerte retain spacing
-@c in output f�r Tabelle below.
-
-@multitable @columnfractions .2 .15 .2 .2 .25
-@item @strong{Wert} @tab @code{CHAR(4)} @tab @strong{Speicherbedarf} @tab @code{VARCHAR(4)} @tab @strong{Speicherbedarf}
-@item @code{''} @tab @code{'@ @ @ @ '} @tab 4 Bytes @tab @code{''} @tab 1 Byte
-@item @code{'ab'} @tab @code{'ab@ @ '} @tab 4 Bytes @tab @code{'ab'} @tab 3 Bytes
-@item @code{'abcd'} @tab @code{'abcd'} @tab 4 Bytes @tab @code{'abcd'} @tab 5 Bytes
-@item @code{'abcdefgh'} @tab @code{'abcd'} @tab 4 Bytes @tab @code{'abcd'} @tab 5 Bytes
-@end multitable
-
-Die Werte, die aus den @code{CHAR(4)}- und @code{VARCHAR(4)}-Spalten
-abgerufen werden, sind in jedem Fall gleich, weil Leerzeichen am Ende von
-@code{CHAR}-Spalten beim Abruf entfernt werden.
-
-Werte in @code{CHAR}- und @code{VARCHAR}-Spalten werden unabh�ngig von der
-Gro�-/Kleinschreibung sortiert und verglichen, es sei denn, beim Erzeugen
-der Tabelle wurde das @code{BINARY}-Attribut festgelegt. Das
-@code{BINARY}-Attribut bedeutet, dass Spaltenwerte abh�ngig von der
-Gro�-/Kleinschreibung in �bereinstimmung mit der ASCII-Reihenfolge der
-Maschine sortiert und verglichen werden, auf der der MySQL-Server l�uft.
-@code{BINARY} beeinflusst nicht, wie die Spalte gespeichert oder abgerufen
-wird.
-
-Das @code{BINARY}-Attribut ist 'klebrig', das hei�t, dass der gesamte
-Ausdruck als ein @code{BINARY}-Wert verglichen wird, sobald eine
-@code{BINARY}-Spalte im Ausdruck benutzt wird.
-
-MySQL �ndert eventuell 'still' den Typ von @code{CHAR}- oder
-@code{VARCHAR}-Spalten bei der Tabellenerzeugung.
-@c German FIX unwrapped @xref
-@xref{Silent column changes}.
-
-
-@node BLOB, ENUM, CHAR, String types
-@c German node BLOB
-@subsubsection Die @code{BLOB}- und @code{TEXT}-Typen
-
-@tindex BLOB
-@tindex TEXT
-
-Ein @code{BLOB} ist gro�es Bin�robjekt (Binary Large OBject), das eine
-variable Menge von Daten enthalten kann. Die vier @code{BLOB}-Typen
-@code{TINYBLOB}, @code{BLOB}, @code{MEDIUMBLOB} und @code{LONGBLOB}
-unterscheiden sich nur hinsichtlich der maximalen L�nge der Werte, die sie
-aufnehmen k�nnen.
-@xref{Storage requirements}.
-
-Die vier @code{TEXT}-Typen @code{TINYTEXT}, @code{TEXT},
-@code{MEDIUMTEXT} und @code{LONGTEXT} entsprechen den vier
-@code{BLOB}-Typen und haben dieselben maximalen L�ngen und denselben
-Speicherbedarf. Der einzige Unterschied zwischen @code{BLOB}- und
-@code{TEXT}-Typen ist, dass beim Sortieren und Vergleichen bei
-@code{BLOB}-Werten Gro�-/Kleinschreibung ber�cksichtigt wird, bei
-@code{TEXT}-Werten dagegen nicht. Mit anderen Worten ist ein @code{TEXT}
-ein @code{BLOB} ohne Ber�cksichtigung der Gro�-/Kleinschreibung.
-
-Wenn Sie einer @code{BLOB}- oder @code{TEXT}-Spalte einen Wert zuweisen,
-der die maximale L�nge des Spaltentyps �berschreitet, wird der Wert so
-zurecht geschnitten, dass er passt.
-
-In fast jeder Hinsicht k�nnen Sie eine @code{TEXT}-Spalte als eine
-@code{VARCHAR}-Spalte betrachten, die so Gro� sein kann, wie Sie wollen.
-Gleicherma�en k�nnen Sie eine @code{BLOB}-Spalte als eine @code{VARCHAR
-BINARY}-Spalte betrachten. Die Unterschiede sind:
-
-@itemize @bullet
-@item
-Seit MySQL-Version 3.23.2 k�nnen Sie Indexe auf @code{BLOB}- und
-@code{TEXT}-Spalten anlegen. �ltere Versionen von MySQL unterst�tzten das
-nicht.
-
-@item
-Leerzeichen am Ende werden beim Speichern von @code{BLOB}- und
-@code{TEXT}-Spalten nicht wie bei @code{VARCHAR}-Spalten entfernt.
-
-@item
-@cindex Vorgabewerte, @code{BLOB}- und @code{TEXT}-Spalten
-@cindex @code{BLOB}-Spalten, Vorgabewerte
-@cindex @code{TEXT}-Spalten, Vorgabewerte
-@code{BLOB}- und @code{TEXT}-Spalten k�nnen keine @code{DEFAULT}-Werte
-haben.
-@end itemize
-
-@strong{MyODBC} definiert @code{BLOB}-Werte als @code{LONGVARBINARY} und
-@code{TEXT}-Werte als @code{LONGVARCHAR}.
-
-Weil @code{BLOB}- und @code{TEXT}-Werte extrem lang sein k�nnen, treffen
-Sie bei der Benutzung eventuell auf Beschr�nkungen:
-
-@itemize @bullet
-@item
-Wenn Sie @code{GROUP BY} oder @code{ORDER BY} f�r @code{BLOB}- oder
-@code{TEXT}-Spalten benutzen wollen, m�ssen Sie den Spaltenwert in ein
-Objekt fester L�nge umwandeln. Standardm��ig wird das mit der
-@code{SUBSTRING}-Funktion gemacht. Beispiel:
-
-@example
-mysql> select kommentar from tabelle,substring(kommentar,20) as substr
- ORDER BY substr;
-@end example
-
-Wenn Sie das nicht tun, werden nur die ersten @code{max_sort_length} Bytes
-der Spalte beim Sortieren benutzt. Der Vorgabewert von
-@code{max_sort_length} ist 1024; dieser Wert kann mit der @code{-O}-Option
-ge�ndert werden, wenn der @code{mysqld}-Server gestartet wird. Sie k�nnen
-auf einen Ausdruck, der @code{BLOB}- oder @code{TEXT}-Werte enth�lt,
-gruppieren, indem Sie die Spaltenposition angeben oder ein Alias benutzen:
-
-@example
-mysql> select id,substring(blob_spalte,1,100) from tabelle
- GROUP BY 2;
-mysql> select id,substring(blob_spalte,1,100) as b from tabelle
- GROUP BY b;
-@end example
-
-@item
-Die maximale Gr��e eines @code{BLOB}- oder @code{TEXT}-Objekts wird durch
-seinen Typ festgelegt, aber der gr��te Wert, den Sie tats�chlich zwischen
-Client und Server �bertragen k�nnen, wird von der Menge verf�gbaren
-Arbeitsspeichers und der Gr��e des Kommunikationspuffers festgelegt. Sie
-k�nnen die Nachrichtenpuffergr��e �ndern, m�ssen das aber auf beiden
-Seiten, also beim Client und beim Server, tun. @xref{Server parameters}.
-@end itemize
-
-Beachten Sie, dass intern jeder @code{BLOB}- oder @code{TEXT}-Wert durch
-ein separat zugewiesenes Objekt dargestellt wird. Das steht im Gegensatz zu
-allen anderen Spaltentypen, f�r die Speicherplatz einmal pro Spalte
-zugewiesen wird, wenn die Tabelle ge�ffnet wird.
-
-
-@node ENUM, SET, BLOB, String types
-@c German node ENUM
-@subsubsection Der @code{ENUM}-Typ
-
-@tindex ENUM
-
-Ein @code{ENUM} ist ein Zeichenketten-Objekt, dessen Wert normalerweise aus
-einer Liste zul�ssiger Werte ausgesucht wird, die explizit bei der
-Spaltenspezifizierung bei der Tabellenerzeugung aufgez�hlt werden.
-
-Der Wert kann unter bestimmten Umst�nden auch die leere Zeichenkette
-(@code{""}) oder @code{NULL} sein:
-
-@itemize @bullet
-@item
-Wenn Sie in eine @code{ENUM} einen ung�ltigen Wert einf�gen (das ist eine
-Zeichenkette, die es in der Auflistung zugelassener Werte nicht gibt), wird
-statt dessen die leere Zeichenkette als spezieller Fehlerwert eingef�gt.
-Diese Zeichenkette kann von einer 'normalen' leeren Zeichenkette dadurch
-unterschieden werden, dass diese Zeichenkette den numerischen Wert 0 hat.
-Mehr dazu sp�ter.
-
-@item
-Wenn ein @code{ENUM} als @code{NULL} deklariert ist, ist @code{NULL}
-ebenfalls ein zul�ssiger Wert f�r die Spalte und der Vorgabewert ist
-@code{NULL}. Wenn ein @code{ENUM} als @code{NOT NULL} deklariert ist, ist
-der Vorgabewert das erste Element der Auflistung erlaubter Werte.
-@end itemize
-
-Jeder Aufz�hlungswert hat einen Index:
-
-@itemize @bullet
-@item
-Werte der Auflistung zul�ssiger Elemente in der Spaltenspezifikation fangen
-mit 1 an.
-
-@item
-Der Indexwert des Fehlerwerts leere Zeichenkette ist 0. Folglich k�nnen Sie
-folgendes @code{SELECT}-Statement benutzen, um Zeilen zu finden, denen
-unzul�ssige @code{ENUM}-Werte zugewiesen wurden:
-
-@example
-mysql> SELECT * FROM tabelle WHERE enum_spalte=0;
-@end example
-
-@item
-Der Index des @code{NULL}-Werts ist @code{NULL}.
-@end itemize
-
-Wenn beispielsweise eine Spalte als @code{ENUM("eins", "zwei", "drei")}
-festgelegt wurde, kann sie einen der unten dargestellen Werte besitzen. Der
-Index jedes Werts wird auch dargestellt:
-
-@multitable @columnfractions .2 .8
-@item @strong{Wert} @tab @strong{Index}
-@item @code{NULL} @tab @code{NULL}
-@item @code{""} @tab 0
-@item @code{"eins"} @tab 1
-@item @code{"zwei"} @tab 2
-@item @code{"drei"} @tab 3
-@end multitable
-
-Eine Aufz�hlung kann maximal 65535 Elemente enthalten.
-
-Gro�-/Kleinschreibung ist irrelevant, wenn Sie einer @code{ENUM}-Spalte
-Werte zuweisen. Jedoch haben Werte, die sp�ter aus der Spalte abgerufen
-werden, dieselbe Gro�-/Kleinschreibung wie die Werte, die f�r die
-Festlegung zul�ssiger Werte bei der Tabellenerzeugung verwendet wurden.
-
-Wenn Sie eine @code{ENUM} in einem numerischen Zusammenhang benutzen, wird
-der Index des Spaltenwerts zur�ckgegeben. Sie k�nnen beispielsweise
-numerische Werte aus einer @code{ENUM}-Spalte wie folgt abrufen:
-
-@example
-mysql> SELECT enum_spalte+0 FROM tabelle;
-@end example
-
-Wenn Sie eine Zahl in eine @code{ENUM} speichern, wird die Zahl als Index
-behandelt und der gespeicherte Wert ist das Aufz�hlungselement mit diesem
-Index. (Das funktioniert jedoch nicht bei @code{LOAD DATA}, was alle
-Eingaben als Zeichenketten behandelt.)
-
-@code{ENUM}-Werte werden in der Reihenfolge sortiert, wie die
-Aufz�hlungselemente bei der Spaltenspezifizierung eingegeben wurden. (Mit
-anderen Worten werden @code{ENUM}-Werte nach ihren Indexzahlen sortiert.)
-So wird beispielsweise @code{"a"} vor @code{"b"} einsortiert bei
-@code{ENUM("a", "b")}, aber @code{"b"} wird vor @code{"a"} einsortiert bei
-@code{ENUM("b", "a")}. Die leere Zeichenkette wird vor nicht leeren
-Zeichenketten und @code{NULL}-Werte vor allen anderen Aufz�hlungswerten
-einsortiert.
-
-Wenn Sie alle m�glichen Werte einer @code{ENUM}-Spalte erhalten wollen,
-benutzen Sie: @code{SHOW COLUMNS FROM tabelle LIKE enum_spalte} und gehen
-die @code{ENUM}-Definition in der zweiten Spalte durch.
-
-
-@node SET, , ENUM, String types
-@c German node SET
-@subsubsection Der @code{SET}-Typ
-
-@tindex SET
-
-Ein @code{SET} ist ein Zeichenketten-Objekt, das 0 oder mehr Werte haben
-kann, wovon jedes aus einer Auflistung zul�ssiger Werte stammen muss, die
-bei der Tabellenerzeugung festgelegt wurden. @code{SET}-Spaltenwerte, die
-aus mehrfachen SET-Elementen bestehen, werden angegeben, indem die Elemente
-durch Kommas (@samp{,}) getrennt werden. Daraus ergibt sich, dass
-@code{SET}-Elemente selbst keine Kommas enthalten d�rfen.
-
-Eine Spalte beispielsweise, die als @code{SET("eins", "zwei") NOT NULL}
-festgelegt wurde, kann folgende Werte haben:
-
-@example
-""
-"eins"
-"zwei"
-"eins,zwei"
-@end example
-
-
-Eine @code{SET} kann maximal 64 unterschiedliche Elemente besitzen.
-
-MySQL speichert @code{SET}-Werte numerisch, wobei das niedrigste Bit in der
-Reihenfolge der gespeicherten Werte dem ersten SET-Element entspricht. Wenn
-Sie einen @code{SET}-Wert in einem numerischen Zusammenhang abrufen, hat
-der abgerufene Werte Bits gesetzt, die den SET-Elementen, aus denen sich
-der Spaltenwert zusammensetzt, entspricht. Beispielsweise k�nnen Sie
-numerische Werte aus einer @code{SET}-Spalte wie folgt abrufen:
-
-@example
-mysql> SELECT set_spalte+0 FROM tabelle;
-@end example
-
-Wenn in einer @code{SET}-Spalte eine Zahl gespeichert wird, legen die Bits,
-die in der bin�ren Darstellung der Zahl gesetzt sind, die SET-Elemente im
-Spaltenwert fest. Angenommen, eine Spalte ist als
-@code{SET("a","b","c","d")} festgelegt, dann haben die Elemente folgende
-Bitwerte:
-
-@multitable @columnfractions .2 .2 .6
-@item @code{SET} @strong{Element} @tab @strong{Dezimalwert} @tab @strong{Bin�rwert}
-@item @code{a} @tab @code{1} @tab @code{0001}
-@item @code{b} @tab @code{2} @tab @code{0010}
-@item @code{c} @tab @code{4} @tab @code{0100}
-@item @code{d} @tab @code{8} @tab @code{1000}
-@end multitable
-
-Wenn Sie dieser Spalte einen Wert von @code{9} zuweisen, ist das bin�r
-@code{1001}. Daher werden der erste und der vierte @code{SET}-Wert, die
-Elemente @code{"a"} und @code{"d"}, ausgew�hlt, und der Ergebniswert ist
-@code{"a,d"}.
-
-Bei einem Wert, der mehr als ein @code{SET}-Element enth�lt, spielt es
-keine Rolle, in welcher Reihenfolge die Elemente aufgelistet sind, wenn Sie
-den Wert einf�gen. Es spielt ebenfalls keine Rolle, wie oft ein gegebenes
-Element im Wert aufgelistet ist. Wenn der Wert sp�ter abgerufen wird,
-erscheint jedes Element im Wert einmal, wobei die Elemente in der
-Reihenfolge erscheinen, in der sie bei der Tabellenerzeugung festgelegt
-wurden. Wenn eine Spalte beispielsweise als @code{SET("a","b","c","d")}
-festgelegt ist, erscheinen @code{"a,d"}, @code{"d,a"} und
-@code{"d,a,a,d,d"} als @code{"a,d"}, wenn sie abgerufen werden.
-
-@code{SET}-Werte werden numerisch sortiert. @code{NULL}-Werte werden vor
-Nicht-@code{NULL}-@code{SET}-Werten einsortiert.
-
-Normalerweise f�hrt man @code{SELECT} auf eine @code{SET}-Spalte mit dem
-@code{LIKE}-Operator oder der @code{FIND_IN_SET()}-Funktion aus:
-
-@example
-mysql> SELECT * FROM tabelle WHERE set_spalte LIKE '%wert%';
-mysql> SELECT * FROM tabelle WHERE FIND_IN_SET('wert',set_spalte)>0;
-@end example
-
-Aber auch folgendes funktioniert:
-
-@example
-mysql> SELECT * FROM tabelle WHERE set_spalte = 'wert1,wert2';
-mysql> SELECT * FROM tabelle WHERE set_spalte & 1;
-@end example
-
-Das erste dieser Statements sucht nach einer exakten �bereinstimmung, das
-zweite sucht Werte, die das erste SET-Element enthalten.
-
-Wenn Sie alle m�glichen Werte einer @code{SET}-Spalte erhalten wollen,
-benutzen Sie: @code{SHOW COLUMNS FROM tabelle LIKE set_spalte} und gehen
-die @code{SET}-Definition in der zweiten Spalte durch.
-
-
-@node Choosing types, Other-vendor column types, String types, Column types
-@c German node Typen ausw�hlen
-@subsection Den richtigen Typ f�r eine Spalte ausw�hlen
-
-@cindex Typen, Spalten
-@cindex Typen ausw�hlen
-
-Um m�glichst effizient zu speichern, benutzen Sie in jedem Fall den
-pr�zisesten Typ. Wenn zum Beispiel eine Ganzzahl-Spalte f�r Werte im
-Bereich zwischen @code{1} und @code{99999} benutzt wird, ist
-@code{MEDIUMINT UNSIGNED} der beste Typ.
-
-Akkurate Darstellung monet�rer Werte ist ein h�ufiges Problem. In MySQL
-sollten Sie den @code{DECIMAL}-Typ benutzen. Dieser wird als Zeichenkette
-gepeichert, weshalb kein Genauigkeitsverlust auftreten sollte. Wenn
-Genauigkeit nicht allzu wichtig ist, sollte auch der @code{DOUBLE}-Typ
-ausreichen.
-
-Um hohe Pr�zision zu erzielen, k�nnen Sie immer auch in einen Festkommawert
-umwandeln, der in einer @code{BIGINT} gespeichert wird. Das erlaubt Ihnen,
-alle Berechnungen mit Ganzzahlen durchzuf�hren und die Ergebnisse nur wenn
-notwendig in Flie�kommawerte zur�ckzuwandeln.
-
-
-@node Other-vendor column types, Storage requirements, Choosing types, Column types
-@c German node Spaltentypen anderer Hersteller
-@subsection Spaltentypen anderer Datenbanken benutzen
-
-@cindex Typen, Portabilit�t
-@cindex Portabilit�t, Typen
-@cindex Spalten, andere Typen
-
-Um es einfacher zu machen, Code zu verwenden, der f�r SQL-Implementationen
-anderer Hersteller geschrieben wurde, ordnet (mappt) MySQL Spaltentypen zu
-wie in unten stehender Tabelle dargestellt. Diese Mappings machen es
-leichter, Tabellendefinitionen anderer Datenbanken nach MySQL zu
-verschieben:
-
-@multitable @columnfractions .4 .6
-@item @strong{Typ anderer Hersteller} @tab @strong{MySQL-Typ}
-@item @code{BINARY(NUM)} @tab @code{CHAR(NUM) BINARY}
-@item @code{CHAR VARYING(NUM)} @tab @code{VARCHAR(NUM)}
-@item @code{FLOAT4} @tab @code{FLOAT}
-@item @code{FLOAT8} @tab @code{DOUBLE}
-@item @code{INT1} @tab @code{TINYINT}
-@item @code{INT2} @tab @code{SMALLINT}
-@item @code{INT3} @tab @code{MEDIUMINT}
-@item @code{INT4} @tab @code{INT}
-@item @code{INT8} @tab @code{BIGINT}
-@item @code{LONG VARBINARY} @tab @code{MEDIUMBLOB}
-@item @code{LONG VARCHAR} @tab @code{MEDIUMTEXT}
-@item @code{MIDDLEINT} @tab @code{MEDIUMINT}
-@item @code{VARBINARY(NUM)} @tab @code{VARCHAR(NUM) BINARY}
-@end multitable
-
-Dass Zuordnen (Mapping) von Spaltentypen geschieht bei der Erzeugung der
-Tabelle. Wenn Sie eine Tabelle mit Typen erzeugen, die von anderen
-Herstellern benutzt werden, und dann ein @code{DESCRIBE tabelle}-Statement
-absetzen, zeigt MySQL die Tabellenstruktur mit den �quivalenten MySQL-Typen
-an.
-
-
-@node Storage requirements, , Other-vendor column types, Column types
-@c German node Speicherbedarf
-@subsection Speicherbedarf von Spaltentypen
-
-@cindex Speicherbedarf, Spaltentyp
-@cindex Spalten, Speicherbedarf
-
-Der Speicherbedarf jedes Spaltentyps, der von MySQL unterst�tzt wird, ist
-unten nach Kategorie sortiert aufgelistet:
-
-@cindex numerische Typen
-@cindex Typen, numerische
-
-@subsubheading Speicherbedarf f�r numerische Typen
-
-@multitable @columnfractions .5 .5
-@item @strong{Spaltentyp} @tab @strong{Speicherbedarf}
-@item @code{TINYINT} @tab 1 Byte
-@item @code{SMALLINT} @tab 2 Bytes
-@item @code{MEDIUMINT} @tab 3 Bytes
-@item @code{INT} @tab 4 Bytes
-@item @code{INTEGER} @tab 4 Bytes
-@item @code{BIGINT} @tab 8 Bytes
-@item @code{FLOAT(X)} @tab 4, wenn X <= 24, oder 8, wenn 25 <= X <= 53
-@item @code{FLOAT} @tab 4 Bytes
-@item @code{DOUBLE} @tab 8 Bytes
-@item @code{DOUBLE PRECISION} @tab 8 Bytes
-@item @code{REAL} @tab 8 Bytes
-@item @code{DECIMAL(M,D)} @tab @code{M+2} Bytes, wenn D > 0, @code{M+1} Bytes, wenn D = 0 (@code{D}+2, wenn @code{M < D})
-@item @code{NUMERIC(M,D)} @tab @code{M+2} Bytes, wenn D > 0, @code{M+1} Bytes, wenn D = 0 (@code{D}+2, wenn @code{M < D})
-@end multitable
-
-@cindex Datumstypen
-@cindex Zeittypen
-@cindex Typen, Datum
-@cindex Typen, Zeit
-
-@subsubheading Speicherbedarf f�r Datums- und Zeit-Typen
-
-@multitable @columnfractions .5 .5
-@item @strong{Spaltentyp} @tab @strong{Speicherbedarf}
-@item @code{DATE} @tab 3 Bytes
-@item @code{DATETIME} @tab 8 Bytes
-@item @code{TIMESTAMP} @tab 4 Bytes
-@item @code{TIME} @tab 3 Bytes
-@item @code{YEAR} @tab 1 Byte
-@end multitable
-
-@subsubheading Speicherbedarf f�r Zeichenketten-Typen
-
-@multitable @columnfractions .5 .5
-@item @strong{Spaltentyp} @tab @strong{Speicherbedarf}
-@item @code{CHAR(M)} @tab @code{M} Bytes, @code{1 <= M <= 255}
-@item @code{VARCHAR(M)} @tab @code{L}+1 Bytes, wobei @code{L <= M} und
-@code{1 <= M <= 255}
-@item @code{TINYBLOB}, @code{TINYTEXT} @tab @code{L}+1 Bytes,
-wobei @code{L} < 2^8
-@item @code{BLOB}, @code{TEXT} @tab @code{L}+2 Bytes,
-wobei @code{L} < 2^16
-@item @code{MEDIUMBLOB}, @code{MEDIUMTEXT} @tab @code{L}+3 Bytes,
-wobei @code{L} < 2^24
-@item @code{LONGBLOB}, @code{LONGTEXT} @tab @code{L}+4 Bytes,
-wobei @code{L} < 2^32
-@item @code{ENUM('wert1','wert2',...)} @tab 1 oder 2 Bytes, abh�ngig von
-der Anzahl der Aufz�hlungswerte (65535 Werte maximal)
-@item @code{SET('wert1','wert2',...)} @tab 1, 2, 3, 4 oder 8 Bytes,
-abh�ngig von der Anzahl von SET-Elementen (64 Elemente maximal)
-@end multitable
-
-@cindex @code{BLOB}, Gr��e
-@cindex @code{TEXT}, Gr��e
-@cindex @code{VARCHAR}, Gr��e
-@code{VARCHAR} und die @code{BLOB}- und @code{TEXT}-Typen sind Typen
-variabler L�nge, bei denen der Speicherbedarf von der tats�chlichen L�nge
-der Spaltenwerte abh�ngt (in der vorstehenden Tabelle dargestellt durch
-@code{L}) statt von der maximal m�glichen Gr��e des Typs.
-@code{VARCHAR(10)} zum Beispiel kann eine Zeichenkette mit einer maximalen
-L�nge von 10 Zeichen enthalten. Der tats�chliche Speicherbedarf ist die
-L�nge der Zeichenkette (@code{L}) plus 1 Byte, um die L�nge zu speichern.
-Bei der Zeichenkette @code{'abcd'} ist @code{L} 4 und der Speicherbedarf 5
-Bytes.
-
-Die @code{BLOB}- und @code{TEXT}-Typen ben�tigen 1, 2, 3 oder 4 Bytes, um
-die L�nge des Spaltenwerts zu speichern, abh�ngig von der maximal m�glichen
-L�nge des Typs. @xref{BLOB}.
-
-Wenn eine Tabelle irgend welche Spaltentypen variabler L�nge enth�lt, ist
-das Datensatzformat ebenfalls von variabler L�nge. Beachten Sie, dass MySQL
-bei der Erzeugung einer Tabelle unter bestimmten Umst�nden eine Spalte
-eines Typs variabler L�nge in einen Typ fester L�nge umwandelt, und
-umgekehrt. @xref{Silent column changes}.
-
-@cindex ENUM, Gr��e
-Die Gr��e eines @code{ENUM}-Objekts h�ngt von der Anzahl unterschiedlicher
-Aufz�hlungswerte ab. Bei Aufz�hlungen mit bis zu 255 m�glichen Werten wird
-1 Byte benutzt, bei Aufz�hlungen mit bis zu 65535 Werten 2 Bytes.
-@xref{ENUM}.
-
-@cindex SET, Gr��e
-Die Gr��e eines @code{SET}-Objekts h�ngt von der Anzahl unterschiedlicher
-SET-Elemente ab. Wenn die SET-Gr��e @code{N} ist, belegt das Objekt
-@code{(N+7)/8} Bytes, gerundet auf 1, 2, 3, 4 oder 8 Bytes. Ein @code{SET}
-kann maximal 64 Elemente besitzen. @xref{SET}.
-
-
-@node Functions, Data Manipulation, Column types, Reference
-@c German node Funktionen
-@section Funktionen f�r die Benutzung in @code{SELECT}- und @code{WHERE}-Klauseln
-
-@cindex Funktionen f�r @code{SELECT} und @code{WHERE}-Klauseln
-
-Ein @code{select_ausdruck} oder eine @code{where_definition} in einem
-SQL-Statement kann aus jedem beliebigen Ausdruck bestehen, der die unten
-beschriebenen Funktionen benutzt.
-
-Ein Ausdruck, der @code{NULL} enth�lt, erzeugt immer einen
-@code{NULL}-Wert, wenn es in der Dokumentation f�r die Operatoren und
-Funktionen, die im Ausdruck vorkommen, nicht anders beschrieben ist.
-
-@strong{HINWEIS:} Zwischen Funktionsname und der folgenden Klammer darf
-kein Leerraum stehen. Das hilft dem MySQL-Parser, zwischen
-Funktionsaufrufen und Tabellen- oder Spaltenverweisen zu unterscheiden, die
-denselben Namen haben wie eine Funktion. Leerzeichen um Argumente herum
-sind dagegen zul�ssig.
-
-Sie k�nnen MySQL zwingen, Leerzeichen nach dem Funktionsnamen zu
-akzeptieren, indem Sie @code{mysqld} mit @code{--ansi} starten oder
-@code{CLIENT_IGNORE_SPACE} bei @code{mysql_connect()}, benutzen, aber in
-diesem Fall werden alle Funktionsnamen zu reservierten W�rtern.
-@xref{ANSI mode}.
-
-@need 2000
-
-Der K�rze zuliebe sind die Ausgaben des @code{mysql}-Programms in gek�rzter
-Form dargestellt. Daher wird
-
-@example
-mysql> select MOD(29,9);
-+-----------+
-| mod(29,9) |
-+-----------+
-| 2 |
-+-----------+
-1 rows in set (0.00 sec)
-@end example
-
-wie folgt dargestellt:
-
-@example
-mysql> select MOD(29,9);
- -> 2
-@end example
-
-
-
-@menu
-* Non-typed Operators::
-* String functions::
-* Numeric Functions::
-* Date and time functions::
-* Other Functions::
-* Group by functions::
-@end menu
-
-@node Non-typed Operators, String functions, Functions, Functions
-@c German node Nicht typenspezifische Operatoren
-@subsection Nicht typenspezifische Operatoren und Funktionen
-
-
-
-@menu
-* Parentheses::
-* Comparison Operators::
-* Logical Operators::
-* Control flow functions::
-@end menu
-
-@node Parentheses, Comparison Operators, Non-typed Operators, Non-typed Operators
-@c German node Klammer
-@subsubsection Klammer
-
-@findex () (Klammern)
-@findex Klammern ( und )
-
-@cindex Funktionen, Gruppierungs-
-@cindex Gruppierung, Ausdr�cke
-
-@example
-( ... )
-@end example
-
-Benutzen Sie Klammern, um die Reihenfolge der Auswertung in einem Ausdruck
-zu erzwingen. Beispiel:
-
-@example
-mysql> select 1+2*3;
- -> 7
-mysql> select (1+2)*3;
- -> 9
-@end example
-
-
-
-@node Comparison Operators, Logical Operators, Parentheses, Non-typed Operators
-@c German node Vergleichsoperatoren
-@subsubsection Vergleichsoperatoren
-
-@findex Vergleichsoperatoren
-
-@cindex Casts
-@cindex Typumwandlungen
-
-Vergleichsoperationen ergeben einen Wert von @code{1} (TRUE), @code{0}
-(FALSE) oder @code{NULL}. Diese Funktionen funktionieren sowohl bei Zahlen
-als auch bei Zeichenketten. Zeichenketten werden bei Bedarf automatisch in
-Zahlen und Zahlen in Zeichenketten umgewandelt (wie in Perl oder PHP).
-
-MySQL f�hrt Vergleiche nach folgenden Regeln durch:
-
-@itemize @bullet
-@item
-Wenn ein oder beide Argumente @code{NULL} sind, ist das Ergebnis des
-Vergleichs @code{NULL}, ausser beim @code{<=>} Operator.
-
-@item
-Wenn beide Argumente in einer Vergleichsoperation Zeichenketten sind,
-werden sie als Zeichenketten verglichen.
-
-@item
-Wenn beide Argumente Ganzzahlen sind, werden sie als Ganzzahlen verglichen.
-
-@item
-Hexadezimale Werte werden als bin�re Zeichenketten behandelt, wenn sie
-nicht mit einer Zahl verglichen werden.
-
-@item
-@cindex ODBC-Kompatibilit�t
-@cindex Kompatibilit�t, mit ODBC
-Wenn eins der Argumente eine @code{TIMESTAMP}- oder @code{DATETIME}-Spalte
-ist und das andere Argument eine Konstante, wird die Konstante in einen
-Zeitstempel umgewandelt, bevor der Vergleich durchgef�hrt wird. Das wird
-gemacht, um ODBC-freundlicher zu sein.
-
-@item
-In allen anderen F�llen werden die Argumente als Flie�kommazahlen
-verglichen.
-@end itemize
-
-Vorgabem��ig werden Zeichenketten-Vergleiche unabh�ngig von der verwendeten
-Gro�-/Kleinschreibung durchgef�hrt, indem der aktuelle Zeichensatz benutzt
-wird (vorgabem��ig ISO-8859-1 Latin1, der auch f�r englisch exzellent
-funktioniert).
-
-Die unten stehenden Beispiele erl�utern die Umwandlung von Zeichenketten in
-Zahlen f�r Vergleichsoperationen:
-
-@example
-mysql> SELECT 1 > '6x';
- -> 0
-mysql> SELECT 7 > '6x';
- -> 1
-mysql> SELECT 0 > 'x6';
- -> 0
-mysql> SELECT 0 = 'x6';
- -> 1
-@end example
-
-@table @code
-@findex = (gleich)
-@findex gleich (=)
-@item =
-Gleich:
-@example
-mysql> select 1 = 0;
- -> 0
-mysql> select '0' = 0;
- -> 1
-mysql> select '0.0' = 0;
- -> 1
-mysql> select '0.01' = 0;
- -> 0
-mysql> select '.01' = 0.01;
- -> 1
-@end example
-
-@findex <> (ungleich)
-@findex ungleich (<>)
-@findex != (ungleich)
-@findex ungleich (!=)
-@item <>
-@itemx !=
-Ungleich:
-@example
-mysql> select '.01' <> '0.01';
- -> 1
-mysql> select .01 <> '0.01';
- -> 0
-mysql> select 'zapp' <> 'zappp';
- -> 1
-@end example
-
-@findex <= (kleiner oder gleich)
-@findex kleiner oder gleich (<=)
-@item <=
-Kleiner oder gleich:
-@example
-mysql> select 0.1 <= 2;
- -> 1
-@end example
-
-@findex < (kleiner als)
-@findex kleiner als (<)
-@item <
-Kleiner als:
-@example
-mysql> select 2 < 2;
- -> 0
-@end example
-
-@findex >= (gr��er oder gleich)
-@findex gr��er oder gleich (>=)
-@item >=
-Gr��er oder gleich:
-@example
-mysql> select 2 >= 2;
- -> 1
-@end example
-
-@findex > (gr��er als)
-@findex gr��er als (>)
-@item >
-Gr��er als:
-@example
-mysql> select 2 > 2;
- -> 0
-@end example
-
-@cindex @code{NULL}, testen auf Null
-@findex <=> (Gleich)
-@item <=>
-Null-sicheres gleich:
-@example
-mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
- -> 1 1 0
-@end example
-
-@cindex @code{NULL}, testen auf Null
-@findex IS NULL
-@findex IS NOT NULL
-@item IS NULL
-@itemx IS NOT NULL
-Testet, ob eine Wert @code{NULL} ist oder nicht:
-@example
-mysql> select 1 IS NULL, 0 IS NULL, NULL IS NULL;
- -> 0 0 1
-mysql> select 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
- -> 1 1 0
-@end example
-
-@findex BETWEEN ... AND
-@item ausdruck BETWEEN min AND max
-Wenn @code{ausdruck} gr��er oder gleich @code{min} ist und @code{ausdruck}
-kleiner oder gleich @code{max} ist, gibt @code{BETWEEN} @code{1} zur�ck,
-andernfalls @code{0}. Das ist �quivalent zum Ausdruck @code{(min <=
-ausdruck AND ausdruck <= max)}, wenn alle Argumente vom selben Typ sind.
-Das erste Argument (@code{ausdruck}) legt fest, wie der Vergleich
-durchgef�hrt wird:
-
-@itemize @bullet
-@item
-Wenn @code{ausdruck} eine @code{TIMESTAMP}-, @code{DATE}- oder
-@code{DATETIME}-Spalte ist, werden @code{MIN()} und @code{MAX()} im selben
-Format formatiert als w�ren sie Konstanten.
-@item
-Wenn @code{ausdruck} ein Zeichenketten-Ausdruck ohne Ber�cksichtigung der
-Gro�-/Kleinschreibung ist, wird ein Zeichenkettenvergleich ohne
-Ber�cksichtigung der Gro�-/Kleinschreibung durchgef�hrt.
-@item
-Wenn @code{ausdruck} ein Zeichenketten-Ausdruck mit Ber�cksichtigung der
-Gro�-/Kleinschreibung ist, wird ein Zeichenkettenvergleich mit
-Ber�cksichtigung der Gro�-/Kleinschreibung durchgef�hrt.
-@item
-Wenn @code{ausdruck} ist ein Ganzzahl-Ausdruck ist, wird ein
-Ganzzahlvergleich durchgef�hrt.
-@item
-Ansonsten wird ein Flie�kommazahlenvergleich durchgef�hrt.
-@end itemize
-
-@example
-mysql> select 1 BETWEEN 2 AND 3;
- -> 0
-mysql> select 'b' BETWEEN 'a' AND 'c';
- -> 1
-mysql> select 2 BETWEEN 2 AND '3';
- -> 1
-mysql> select 2 BETWEEN 2 AND 'x-3';
- -> 0
-@end example
-
-@findex IN
-@item ausdruck IN (wert,...)
-Gibt @code{1} zur�ck, wenn @code{ausdruck} einen Wert hat, der in der
-@code{IN}-Liste enthalten ist, ansonsten @code{0}. Wenn alle Werte
-Konstanten sind, werden alle Werte gem�� dem Typ von @code{ausdruck}
-ausgewertet und sortiert. Danach wird ein Element mittels bin�rer Suche
-gesucht. Das hei�t, dass @code{IN} sehr schnell ist, wenn die
-@code{IN}-Werteliste ausschlie�lich aus Konstanten besteht. Wenn
-@code{ausdruck} ein Zeichenketten-Ausdruck mit Ber�cksichtigung der
-Gro�-/Kleinschreibung ist, wird der Zeichenkettenvergleich unter
-Ber�cksichtigung der Gro�-/Kleinschreibung durchgef�hrt:
-
-@example
-mysql> select 2 IN (0,3,5,'wefwf');
- -> 0
-mysql> select 'wefwf' IN (0,3,5,'wefwf');
- -> 1
-@end example
-
-@findex NOT IN
-@item ausdruck NOT IN (wert,...)
-Dasselbe wie @code{NOT (ausdruck IN (wert,...))}.
-
-@findex ISNULL()
-@item ISNULL(ausdruck)
-Wenn @code{ausdruck} @code{NULL} ist, gibt @code{ISNULL()} @code{1} zur�ck,
-ansonsten @code{0}:
-@example
-mysql> select ISNULL(1+1);
- -> 0
-mysql> select ISNULL(1/0);
- -> 1
-@end example
-
-Beachten Sie, dass ein Vergleich von @code{NULL}-Werten mit @code{=} immer
-UNWAHR ergibt!
-
-@cindex @code{NULL}, testen auf Null
-@findex COALESCE()
-@item COALESCE(liste)
-Gibt das erste Nicht-@code{NULL}-Element in der Liste zur�ck:
-
-@example
-mysql> select COALESCE(NULL,1);
- -> 1
-mysql> select COALESCE(NULL,NULL,NULL);
- -> NULL
-@end example
-
-@findex INTERVAL()
-@item INTERVAL(N,N1,N2,N3,...)
-Gibt @code{0} zur�ck, wenn @code{N} < @code{N1}, @code{1}, wenn @code{N} <
-@code{N2} usw. Alle Argumente werden als Ganzzahlen behandelt. Es ist
-erforderlich, dass @code{N1} < @code{N2} < @code{N3} < @code{...} <
-@code{Nn} ist, damit diese Funktion korrekt funktioniert. Das liegt daran,
-dass eine (sehr schnelle) bin�re Suche benutzt wird:
-
-@example
-mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);
- -> 3
-mysql> select INTERVAL(10, 1, 10, 100, 1000);
- -> 2
-mysql> select INTERVAL(22, 23, 30, 44, 200);
- -> 0
-@end example
-@end table
-
-Wenn Sie eine Zeichenkette, die Gro�-/Kleinschreibung nicht
-ber�cksichtigt, mit einem der Standard-Operatoren vergleichen (@code{=},
-@code{<>}..., aber nicht @code{LIKE}), werden Leerzeichen am Ende
-ignoriert:
-
-@example
-mysql> select "a" ="A ";
- -> 1
-@end example
-
-
-@node Logical Operators, Control flow functions, Comparison Operators, Non-typed Operators
-@c German node Logische Operatoren
-@subsubsection Logische Operatoren
-
-@findex Logische Funktionen
-@findex Funktionen, logische
-
-Alle logischen Funktionen geben @code{1} (TRUE), @code{0} (FALSE) oder
-@code{NULL} (unbekannt, was in den meisten F�llen dasselbe wie FALSE ist)
-zur�ck:
-
-@table @code
-@findex NOT, logisch
-@findex ! (logisch NOT)
-@item NOT
-@itemx !
-Logisch NOT. Gibt @code{1} zur�ck, wenn das Argument @code{0} ist,
-ansonsten @code{0}.
-Ausnahme: @code{NOT NULL} gibt @code{NULL} zur�ck:
-@example
-mysql> select NOT 1;
- -> 0
-mysql> select NOT NULL;
- -> NULL
-mysql> select ! (1+1);
- -> 0
-mysql> select ! 1+1;
- -> 1
-@end example
-Das letzte Beispiel gibt @code{1} zur�ck, weil der Ausdruck auf dieselbe
-Art ausgewertet wird wie @code{(!1)+1}.
-
-@findex OR, logisch
-@findex || (logisch OR)
-@item OR
-@itemx ||
-Logisch OR. Gibt @code{1} zur�ck, wenn eins der Argumente nicht @code{0}
-und nicht @code{NULL} ist:
-@example
-mysql> select 1 || 0;
- -> 1
-mysql> select 0 || 0;
- -> 0
-mysql> select 1 || NULL;
- -> 1
-
-@end example
-
-@findex AND, logisch
-@findex && (logisch AND)
-@item AND
-@itemx &&
-Logisch AND. Gibt @code{0} zur�ck, wenn eins der Argumente @code{0} oder
-@code{NULL} ist, ansonsten @code{1}:
-@example
-mysql> select 1 && NULL;
- -> 0
-mysql> select 1 && 0;
- -> 0
-@end example
-@end table
-
-
-@node Control flow functions, , Logical Operators, Non-typed Operators
-@c German node Ablaufsteuerungsfunktionen
-@subsubsection Ablaufsteuerungsfunktionen
-
-@findex Ablaufsteuerungsfunktionen
-@findex Funktionen, Ablaufsteuerung
-
-@table @code
-@cindex @code{NULL}, testen auf Null
-@findex IFNULL()
-@item IFNULL(ausdruck1,ausdruck2)
-Wenn @code{ausdruck1} nicht @code{NULL} ist, gibt @code{IFNULL()}
-@code{ausdruck1} zur�ck, ansonsten @code{ausdruck2}. @code{IFNULL()} gibt
-einen numerischen oder einen Zeichenketten-Wert zur�ck, je nachdem, in
-welchem Zusammenhang es benutzt wird:
-@example
-mysql> select IFNULL(1,0);
- -> 1
-mysql> select IFNULL(NULL,10);
- -> 10
-mysql> select IFNULL(1/0,10);
- -> 10
-mysql> select IFNULL(1/0,'ja');
- -> 'ja'
-@end example
-
-@findex NULLIF()
-@item NULLIF(ausdruck1,ausdruck2)
-Wenn @code{ausdruck1 = ausdruck2} wahr ist, gibt die Funktion @code{NULL}
-zur�ck, ansonsten @code{ausdruck1}. Das ist dasselbe wie @code{CASE WHEN x
-= y THEN NULL ELSE x END}:
-@example
-mysql> select NULLIF(1,1);
- -> NULL
-mysql> select NULLIF(1,2);
- -> 1
-@end example
-
-Beachten Sie, dass @code{ausdruck1} in MySQL zweimal ausgewertet wird, wenn
-die Argumente gleich sind.
-
-@findex IF()
-@item IF(ausdruck1,ausdruck2,ausdruck3)
-Wenn @code{ausdruck1} TRUE ist (@code{ausdruck1 <> 0} und @code{ausdruck1
-<> NULL}), gibt @code{IF()} @code{ausdruck2} zur�ck, ansonsten
-@code{ausdruck3}. @code{IF()} gibt einen numerischen oder einen
-Zeichenketten-Wert zur�ck, je nachdem, in welchem Zusammenhang es benutzt
-wird:
-
-@example
-mysql> select IF(1>2,2,3);
- -> 3
-mysql> select IF(1<2,'ja','nein');
- -> 'ja'
-mysql> select IF(strcmp('test','test1'),'nein','ja');
- -> 'nein'
-@end example
-
-@code{ausdruck1} wird als Ganzzahlwert ausgewertet, woraus folgt, dass Sie
-das Testen auf Flie�komma- oder Zeichenketten-Werte mit einer
-Vergleichsoperation durchf�hren sollten:
-
-@example
-mysql> select IF(0.1,1,0);
- -> 0
-mysql> select IF(0.1<>0,1,0);
- -> 1
-@end example
-
-Im ersten Fall gibt @code{IF(0.1)} @code{0} zur�ck, weil @code{0.1} in
-einen Ganzzahlwert umgewandelt wird, wodurch es auf @code{IF(0)} getestet
-wird. Das ist vielleicht nicht das, was Sie erwarten. Im zweiten Fall
-testet der Vergleich den Original-Flie�kommawert, um zu sehen, ob er nicht
-0 ist. Das Ergebnis des Vergleichs wird als Ganzzahl benutzt.
-
-Der vorgabem��ige R�ckgabewert von @code{IF()} (der eine Rolle spielen
-kann, wenn er in einer tempor�ren Tabelle gespeichert wird), wird in
-MySQL-Version 3.23 wie folgt berechnet:
-
-@multitable @columnfractions .55 .45
-@item @strong{Ausdruck} @tab @strong{R�ckgabewert}
-@item ausdruck2 oder ausdruck3 gibt Zeichenkette zur�ck @tab Zeichenkette
-@item ausdruck2 oder ausdruck3 gibt Flie�kommawert zur�ck @tab Flie�kommawert
-@item ausdruck2 oder ausdruck3 gibt Ganzzahl zur�ck @tab Ganzzahl
-@end multitable
-
-@findex CASE
-@item CASE wert WHEN [vergleichs-wert] THEN ergebnis [WHEN [vergleichs-wert] THEN ergebnis ...] [ELSE ergebnis] END
-@item CASE WHEN [bedingung] THEN ergebnis [WHEN [bedingung] THEN ergebnis ...] [ELSE ergebnis] END
-
-Die erste Version gibt @code{ergebnis} zur�ck, wo
-@code{wert=vergleichs-wert}. Die zweite Version gibt das Ergebnis f�r die
-erste Bedingung zur�ck, die WAHR ist. Wenn es keinen �bereinstimmenden
-Ergebniswert gab, wird das Ergebnis nach @code{ELSE} zur�ckgegeben. Wenn es
-keinen @code{ELSE}-Teil gibt, wird @code{NULL} zur�ckgegeben:
-
-@example
-mysql> SELECT CASE 1 WHEN 1 THEN "eins" WHEN 2 THEN "zwei" ELSE "mehr" END;
- -> "eins"
-mysql> SELECT CASE WHEN 1>0 THEN "wahr" ELSE "unwahr" END;
- -> "wahr"
-mysql> SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END;
- -> NULL
-@end example
-@end table
-
-Der Typ des R�ckgabewerts (@code{INTEGER}, @code{DOUBLE} oder
-@code{STRING}) ist derselbe wie der Typ des ersten zur�ckgegebenen Werts
-(der Ausdruck nach dem ersten @code{THEN}).
-
-
-@node String functions, Numeric Functions, Non-typed Operators, Functions
-@c German node Zeichenketten-Funktionen
-@subsection Zeichenketten-Funktionen
-
-@findex Zeichenketten-Funktionen
-@findex Funktionen, Zeichenketten
-
-Funktionen f�r Zeichenkettenwerte geben @code{NULL} zur�ck, wenn die L�nge
-des Ergebnisses gr��er w�re als der
-@code{max_allowed_packet}-Serverparameter. @xref{Server parameters}.
-
-Bei Funktionen, die mit Zeichenkettenpositionen arbeiten, wird die erste
-Position als 1 gez�hlt.
-
-@table @code
-@findex ASCII()
-@item ASCII(zeichenkette)
-Gibt den ASCII-Code-Wert des �u�ersten linken Zeichens der Zeichenkette
-@code{zeichenkette} zur�ck. Gibt @code{0} zur�ck, wenn @code{zeichenkette}
-die leere Zeichenkette ist. Gibt @code{NULL} zur�ck, wenn
-@code{zeichenkette} @code{NULL} ist:
-
-@example
-mysql> select ASCII('2');
- -> 50
-mysql> select ASCII(2);
- -> 50
-mysql> select ASCII('dx');
- -> 100
-@end example
-
-Siehe auch @code{ORD()}-Funktion.
-
-@findex ORD()
-@item ORD(zeichenkette)
-Wenn das �u�erste linke Zeichen der Zeichenkette @code{zeichenkette} ein
-Multi-Byte-Zeichen ist, gibt diese Funktion den Code des
-Multi-Byte-Zeichens zur�ck, indem der ASCII-Code-Wert des Zeichens in
-folgendem Format zur�ckgegeben wird:
-@code{((erstes byte ASCII code)*256+(zweites byte ASCII code))[*256+drittes byte ASCII code...]}.
-Wenn das �u�erste linke Zeichen kein Multi-Byte-Zeichen ist, wird derselbe
-Wert wie bei der @code{ASCII()}-Funktion zur�ckgegeben:
-
-@example
-mysql> select ORD('2');
- -> 50
-@end example
-
-@findex CONV()
-@item CONV(N,von_basis,zu_basis)
-Wandelt Zahlen zwischen verschiedenen Zahlsystemen um. Gibt eine
-Zeichenkettendarstellung der Zahl @code{N} zur�ck, umgewandelt von Basis
-@code{von_basis} zu Basis @code{zu_basis}. Gibt @code{NULL} zur�ck, wenn
-irgend ein Argument @code{NULL} ist. Das Argument @code{N} wird als
-Ganzzahl interpretiert, kann aber als Ganzzahl oder Zeichenkette angegeben
-werden. Die kleinste Basis ist @code{2} und die gr��te Basis @code{36}.
-Wenn @code{zu_basis} eine negative Zahl ist, wird @code{N} als
-vorzeichenbehaftete Zahl betrachtet. Ansonsten wird @code{N} als
-vorzeichenlos behandelt. @code{CONV} arbeitet mit 64-Bit-Genauigkeit:
-
-@example
-mysql> select CONV("a",16,2);
- -> '1010'
-mysql> select CONV("6E",18,8);
- -> '172'
-mysql> select CONV(-17,10,-18);
- -> '-H'
-mysql> select CONV(10+"10"+'10'+0xa,10,10);
- -> '40'
-@end example
-
-@findex BIN()
-@item BIN(N)
-Gibt eine Zeichenkettendarstellung des Bin�rwerts von @code{N} zur�ck,
-wobei @code{N} eine @code{BIGINT}-Zahl ist. Das ist �quivalent zu
-@code{CONV(N,10,2)}. Gibt @code{NULL} zur�ck, wenn @code{N} @code{NULL}
-ist:
-
-@example
-mysql> select BIN(12);
- -> '1100'
-@end example
-
-@findex OCT()
-@item OCT(N)
-Gibt eine Zeichenkettendarstellung des Oktalwerts von @code{N} zur�ck,
-wobei @code{N} eine @code{BIGINT}-Zahl ist. Das ist �quivalent zu
-@code{CONV(N,10,8)}. Gibt @code{NULL} zur�ck, wenn @code{N} @code{NULL}
-ist:
-
-@example
-mysql> select OCT(12);
- -> '14'
-@end example
-
-@findex HEX()
-@item HEX(N)
-Gibt eine Zeichenkettendarstellung des hexadezimalen Werts von @code{N}
-zur�ck, wobei @code{N} eine @code{BIGINT}-Zahl ist. Das ist �quivalent zu
-@code{CONV(N,10,16)}. Gibt @code{NULL} zur�ck, wenn @code{N} @code{NULL}
-ist:
-
-@example
-mysql> select HEX(255);
- -> 'FF'
-@end example
-
-@findex CHAR()
-@item CHAR(N,...)
-@code{CHAR()} interpretiert die Argumente als Ganzzahlen und gibt eine
-Zeichenkette zur�ck, die aus den Zeichen besteht, die durch die
-ASCII-Code-Werte dieser Ganzzahlen gegeben sind. @code{NULL}-Werte werden
-�bersprungen:
-
-@example
-mysql> select CHAR(77,121,83,81,'76');
- -> 'MySQL'
-mysql> select CHAR(77,77.3,'77.3');
- -> 'MMM'
-@end example
-
-@findex CONCAT()
-@item CONCAT(zeichenkette1,zeichenkette2,...)
-Gibt die Zeichenkette zur�ck, die durch die Verkettung der Argumente
-entsteht. Gibt @code{NULL} zur�ck, wenn irgend ein Argument @code{NULL}
-ist. Kann mehr als 2 Argumente haben. Ein numerisches Argument wird in die
-�quivalente Zeichenkettenform umgewandelt:
-
-@example
-mysql> select CONCAT('My', 'S', 'QL');
- -> 'MySQL'
-mysql> select CONCAT('My', NULL, 'QL');
- -> NULL
-mysql> select CONCAT(14.3);
- -> '14.3'
-@end example
-
-@findex CONCAT_WS()
-@item CONCAT_WS(trennzeichen, zeichenkette1, zeichenkette2,...)
-
-@code{CONCAT_WS()} steht f�r CONCAT mit Trennzeichen und ist eine spezielle
-Form von @code{CONCAT()}. Das erste Argument ist das Trennzeichen f�r die
-restlichen Argumente. Das Trennzeichen kann eine Zeichenkette sein, so wie
-die �brigen Argumente. Wenn das Trennzeichen @code{NULL} ist, ist das
-Ergebnis @code{NULL}. Die Funktion �berspringt jegliche @code{NULL}s und
-leere Zeichenketten nach dem Trennzeichen-Argument. Das Trennzeichen wird
-zwischen den zu verkn�pfenden Zeichenketten hinzugef�gt:
-
-@example
-mysql> select CONCAT_WS(",","Vorname","Zweiter Vorname","Nachname");
- -> 'Vorname,Zweiter Vorname,Nachname'
-mysql> select CONCAT_WS(",","Vorname",NULL,"Nachname");
- -> 'Vorname,Nachname'
-@end example
-
-@findex LENGTH()
-@findex OCTET_LENGTH()
-@findex CHAR_LENGTH()
-@findex CHARACTER_LENGTH()
-@item LENGTH(zeichenkette)
-@itemx OCTET_LENGTH(zeichenkette)
-@itemx CHAR_LENGTH(zeichenkette)
-@itemx CHARACTER_LENGTH(zeichenkette)
-Gibt die L�nge der Zeichenkette @code{zeichenkette} an:
-
-@example
-mysql> select LENGTH('text');
- -> 4
-mysql> select OCTET_LENGTH('text');
- -> 4
-@end example
-
-Beachten Sie, dass bei @code{CHAR_LENGTH()} Multi-Byte-Zeichen nur einmal
-gez�hlt werden.
-
-@findex LOCATE()
-@findex POSITION()
-@item LOCATE(teilzeichenfolge,zeichenkette)
-@itemx POSITION(teilzeichenfolge IN zeichenkette)
-Gibt die Position des ersten Auftretens der Teilzeichenfolge
-@code{teilzeichenfolge} in der Zeichenkette @code{zeichenkette} an. Gibt
-@code{0} zur�ck, wenn @code{teilzeichenfolge} nicht in @code{zeichenkette}
-enthalten ist:
-
-@example
-mysql> select LOCATE('bar', 'foobarbar');
- -> 4
-mysql> select LOCATE('xbar', 'foobar');
- -> 0
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex LOCATE()
-@item LOCATE(teilzeichenfolge,zeichenkette,position)
-Gibt die Position des ersten Auftretens der Teilzeichenfolge
-@code{teilzeichenfolge} in der Zeichenkette @code{zeichenkette} ab Position
-@code{position} an. Gibt @code{0} zur�ck, wenn @code{teilzeichenfolge}
-nicht in @code{zeichenkette} enthalten ist:
-
-@example
-mysql> select LOCATE('bar', 'foobarbar',5);
- -> 7
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex INSTR()
-@item INSTR(zeichenkette,teilzeichenfolge)
-Gibt die Position des ersten Auftretens der Teilzeichenfolge
-@code{teilzeichenfolge} in der Zeichenkette @code{zeichenkette} an. Das ist
-dasselbe wie @code{LOCATE()} mit zwei Argumenten, ausser dass die Argumente
-vertauscht sind:
-
-@example
-mysql> select INSTR('foobarbar', 'bar');
- -> 4
-mysql> select INSTR('xbar', 'foobar');
- -> 0
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex LPAD()
-@item LPAD(zeichenkette,laenge,fuellzeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} zur�ck, links aufgef�llt mit der
-Zeichenkette @code{fuellzeichenkette}, bis @code{zeichenkette}
-@code{laenge} Zeichen lang ist. Wenn @code{zeichenkette} l�nger als
-@code{laenge} ist, wird sie auf @code{laenge} Zeichen verk�rzt.
-
-@example
-mysql> select LPAD('hi',4,'??');
- -> '??hi'
-@end example
-
-@findex RPAD()
-@item RPAD(zeichenkette,laenge,fuellzeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} zur�ck, rechts aufgef�llt mit der
-Zeichenkette @code{fuellzeichenkette}, bis @code{zeichenkette}
-@code{laenge} Zeichen lang ist. Wenn @code{zeichenkette} l�nger als
-@code{laenge} ist, wird sie auf @code{laenge} Zeichen verk�rzt.
-
-@example
-mysql> select RPAD('hi',5,'?');
- -> 'hi???'
-@end example
-
-@findex LEFT()
-@item LEFT(zeichenkette,laenge)
-Gibt die �u�ersten linken @code{laenge} Zeichen der Zeichenkette
-@code{zeichenkette} zur�ck:
-
-@example
-mysql> select LEFT('foobarbar', 5);
- -> 'fooba'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex RIGHT()
-@item RIGHT(zeichenkette,laenge)
-Gibt die �u�ersten rechten @code{laenge} Zeichen der Zeichenkette
-@code{zeichenkette} zur�ck:
-
-@example
-mysql> select RIGHT('foobarbar', 4);
- -> 'rbar'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex SUBSTRING()
-@findex MID()
-@item SUBSTRING(zeichenkette,position,laenge)
-@itemx SUBSTRING(zeichenkette FROM position FOR laenge)
-@itemx MID(zeichenkette,position,laenge)
-Gibt eine @code{laenge} Zeichen lange Teilzeichenfolge der Zeichenkette
-@code{zeichenkette} ab Position @code{position} zur�ck. Die abweichende
-Form, die @code{FROM} benutzt, ist ANSI-SQL92-Syntax:
-
-@example
-mysql> select SUBSTRING('Heinzholger',5,6);
- -> 'zholge'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex SUBSTRING()
-@item SUBSTRING(zeichenkette,position)
-@item SUBSTRING(zeichenkette FROM position)
-Gibt eine Teilzeichenfolge der Zeichenkette @code{zeichenkette} ab Position
-@code{position} zur�ck:
-
-@example
-mysql> select SUBSTRING('Heinzholger',5);
- -> 'zholger'
-mysql> select SUBSTRING('foobarbar' FROM 4);
- -> 'barbar'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex SUBSTRING_INDEX()
-@item SUBSTRING_INDEX(zeichenkette,begrenzer,zaehler)
-Gibt die Teilzeichenfolge von Zeichenkette @code{zeichenkette} vor
-@code{zaehler} Vorkommen des Begrenzers @code{begrenzer} zur�ck. Wenn
-@code{zaehler} positiv ist, wird alle links vom letzten Begrenzer
-zur�ckgegeben (von links gez�hlt). Wenn @code{zaehler} negativ ist, wird
-alles rechts vom letzten Begrenzer (von rechts gez�hlt) zur�ckgegeben:
-
-@example
-mysql> select SUBSTRING_INDEX('www.mysql.com', '.', 2);
- -> 'www.mysql'
-mysql> select SUBSTRING_INDEX('www.mysql.com', '.', -2);
- -> 'mysql.com'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex LTRIM()
-@item LTRIM(zeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} zur�ck, bei der f�hrende
-Leerzeichen entfernt wurden:
-
-@example
-mysql> select LTRIM(' barbar');
- -> 'barbar'
-@end example
-
-@findex RTRIM()
-@item RTRIM(zeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} zur�ck, bei der Leerzeichen am
-Ende entfernt wurden:
-
-@example
-mysql> select RTRIM('barbar ');
- -> 'barbar'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex TRIM()
-@item TRIM([[BOTH | LEADING | TRAILING] [entfernzeichenkette] FROM] zeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} zur�ck, bei der alle
-@code{entfernzeichenkette}-Pr�fixe und / oder -Suffixe entfernt wurden.
-Wenn keiner der Spezifizierer @code{BOTH}, @code{LEADING} oder
-@code{TRAILING} angegeben wird, wird @code{BOTH} angenommen. Wenn
-@code{entfernzeichenkette} nicht angegeben ist, werden Leerzeichen entfernt:
-
-@example
-mysql> select TRIM(' bar ');
- -> 'bar'
-mysql> select TRIM(LEADING 'x' FROM 'xxxbarxxx');
- -> 'barxxx'
-mysql> select TRIM(BOTH 'x' FROM 'xxxbarxxx');
- -> 'bar'
-mysql> select TRIM(TRAILING 'xyz' FROM 'barxxyz');
- -> 'barx'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex SOUNDEX()
-@item SOUNDEX(zeichenkette)
-Gibt eine Soundex-Zeichenkette von @code{zeichenkette} zur�ck. Zwei
-Zeichenketten, die fast gleich klingen, sollten identische
-Soundex-Zeichenketten haben. Eine Standard-Soundex-Zeichenkette ist 4
-Zeichen lang, aber die @code{SOUNDEX()}-Funktion gibt eine beliebig lange
-Zeichenkette zur�ck. Sie k�nnen @code{SUBSTRING()} auf das Ergebnis
-anwenden, um eine Standard-Soundex-Zeichenkette zu erhalten. Alle nicht
-alphanumerischen Zeichen in der angegebenen Zeichenkette werden ignoriert.
-Alle internationalen alphabetischen Zeichen ausserhalb des Wertebereichs A
-bis Z werden als Vokale behandelt:
-
-@example
-mysql> select SOUNDEX('Hello');
- -> 'H400'
-mysql> select SOUNDEX('Quadratically');
- -> 'Q36324'
-@end example
-
-@findex SPACE()
-@item SPACE(N)
-Gibt eine Zeichenkette zur�ck, die aus @code{N} Leerzeichen besteht:
-
-@example
-mysql> select SPACE(6);
- -> ' '
-@end example
-
-@findex REPLACE()
-@item REPLACE(zeichenkette,von_zeichenkette,zu_zeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} zur�ck, bei der alle Vorkommen
-der Zeichenkette @code{von_zeichenkette} durch die Zeichenkette
-@code{zu_zeichenkette} ersetzt wurden:
-
-@example
-mysql> select REPLACE('www.mysql.com', 'w', 'Ww');
- -> 'WwWwWw.mysql.com'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex REPEAT()
-@item REPEAT(zeichenkette,zaehler)
-Gibt eine Zeichenkette zur�ck, die aus der Zeichenkette @code{zeichenkette}
-besteht, die @code{zaehler} mal wiederholt wurde. Wenn @code{zaehler <= 0}
-ist, wird eine leere Zeichenkette zur�ckgegeben. Gibt @code{NULL} zur�ck,
-wenn @code{zeichenkette} oder @code{zaehler} @code{NULL} sind:
-
-@example
-mysql> select REPEAT('MySQL', 3);
- -> 'MySQLMySQLMySQL'
-@end example
-
-@findex REVERSE()
-@item REVERSE(zeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} in umgedrehter Reihenfolge der
-Zeichen zur�ck:
-
-@example
-mysql> select REVERSE('abc');
- -> 'cba'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex INSERT()
-@item INSERT(zeichenkette,position,laenge,neue_zeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} zur�ck, wobei eine
-Teilzeichenfolge ab Position @code{position} mit @code{laenge} Zeichen
-L�nge durch die Zeichenkette @code{neue_zeichenkette} ersetzt wurde:
-
-@example
-mysql> select INSERT('Heinzholger', 6, 4, 'DIET');
- -> 'HeinzDIETer'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex ELT()
-@item ELT(N,zeichenkette1,zeichenkette2,zeichenkette3,...)
-Gibt @code{zeichenkette1} zur�ck, wenn @code{N} = @code{1} ist,
-@code{zeichenkette2}, wenn @code{N} = @code{2} ist usw.. Gibt @code{NULL}
-zur�ck, wenn @code{N} kleiner als @code{1} oder gr��er als die Anzahl von
-Argumenten ist. @code{ELT()} ist das Komplement von @code{FIELD()}:
-
-@example
-mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');
- -> 'ej'
-mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');
- -> 'foo'
-@end example
-
-@findex FIELD()
-@item FIELD(zeichenkette,zeichenkette1,zeichenkette2,zeichenkette3,...)
-Gibt den Index von @code{zeichenkette} in der Liste @code{zeichenkette1},
-@code{zeichenkette2}, @code{zeichenkette3}, @code{...} zur�ck. Gibt
-@code{0} zur�ck, wenn @code{zeichenkette} nicht gefunden wird.
-@code{FIELD()} ist das Komplement von @code{ELT()}:
-
-@example
-mysql> select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
- -> 2
-mysql> select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
- -> 0
-@end example
-
-@findex FIND_IN_SET()
-@item FIND_IN_SET(zeichenkette,zeichenkettenliste)
-Gibt einen Wert @code{1} bis @code{N} zur�ck, wenn die Zeichenkette
-@code{zeichenkette} in der Liste @code{zeichenkettenliste} ist, die aus
-@code{N} Teilzeichenfolgen besteht. Eine Zeichenkettenliste ist eine
-Zeichenkette, die aus Teilzeichenfolgen zusammen gesetzt ist, die durch
-@samp{,}-Zeichen getrennt sind. Wenn das erste Argument eine
-Zeichenketten-Konstante ist und das zweite eine Spalte des Typs @code{SET},
-wird die @code{FIND_IN_SET()}-Funktion optimiert, Bit-Arithmetik zu
-benutzen! Gibt @code{0} zur�ck, wenn @code{zeichenkette} nicht in
-@code{zeichenkettenliste} ist oder wenn @code{zeichenkettenliste} die leere
-Zeichenkette ist. Gibt @code{NULL} zur�ck, wenn eines oder beide Argumente
-@code{NULL} sind. Diese Funktion funktioniert nicht korrekt, wenn das erste
-Argument ein @samp{,} enth�lt:
-
-@example
-mysql> SELECT FIND_IN_SET('b','a,b,c,d');
- -> 2
-@end example
-
-@findex MAKE_SET()
-@item MAKE_SET(bits,zeichenkette1,zeichenkette2,...)
-Gibt einen Satz (eine Zeichenkette, die Teilzeichenfolgen enth�lt, die
-durch @samp{,} getrennt sind) zur�ck, der aus Zeichenketten besteht, die
-das entsprechende Bit in @code{bits} gesetzt haben. @code{zeichenkette1}
-entspricht Bit 0, @code{zeichenkette2} Bit 1 usw. @code{NULL}-Zeichenketten
-in @code{zeichenkette1}, @code{zeichenkette2} usw. werden nicht an das
-Ergebnis angeh�ngt:
-
-@example
-mysql> SELECT MAKE_SET(1,'a','b','c');
- -> 'a'
-mysql> SELECT MAKE_SET(1 | 4,'hallo','liebe','welt');
- -> 'hallo,welt'
-mysql> SELECT MAKE_SET(0,'a','b','c');
- -> ''
-@end example
-
-@findex EXPORT_SET()
-@item EXPORT_SET(bits,an,aus,[trennzeichen,[anzahl_bits]])
-Gibt eine Zeichenkette zur�ck, in der Sie f�r jedes bit, das in 'bit'
-gesetzt ist, eine 'an'-Zeichenkette erhalten, und f�r jedes zur�ckgesetzte
-Bit eine 'aus'-Zeichenkette. Jede Zeichenkette wird mit 'trennzeichen'
-getrennt (vorgabem��ig ','), und nur die 'anzahl_bits' (vorgabem��ig 64)
-von 'bits' wird benutzt:
-
-@example
-mysql> select EXPORT_SET(5,'Y','N',',',4)
- -> Y,N,Y,N
-@end example
-
-@findex LCASE()
-@findex LOWER()
-@item LCASE(zeichenkette)
-@itemx LOWER(zeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} zur�ck, bei der alle Zeichen in
-Kleinschreibung gem�� dem aktuellen Zeichensatz-Mapping (Vorgabe ist
-ISO-8859-1 Latin1) umgewandelt wurden:
-
-@example
-mysql> select LCASE('HEINZholger');
- -> 'heinzholger'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex UCASE()
-@findex UPPER()
-@item UCASE(zeichenkette)
-@itemx UPPER(zeichenkette)
-Gibt die Zeichenkette @code{zeichenkette} zur�ck, bei der alle Zeichen in
-Gro�schreibung gem�� dem aktuellen Zeichensatz-Mapping (Vorgabe ist
-ISO-8859-1 Latin1) umgewandelt wurden:
-
-@example
-mysql> select UCASE('Hej');
- -> 'HEJ'
-@end example
-
-Diese Funktion ist Multi-Byte-sicher.
-
-@findex FILE
-@findex LOAD_FILE()
-@item LOAD_FILE(datei)
-Liest die Datei @code{datei} und gibt den Dateiinhalt als Zeichenkette
-zur�ck. Die Datei muss auf dem Server sein, Sie m�ssen den vollen Pfadnamen
-zur Datei angeben und Sie m�ssen die @strong{file}-Berechtigung besitzen.
-Die Datei muss von allen lesbar sein und kleiner als
-@code{max_allowed_packet}.
-
-Wenn die Datei nicht existiert oder aus den oben genannten Gr�nden nicht
-gelesen werden kann, gibt die Funktion @code{NULL} zur�ck:
-
-@example
-mysql> UPDATE tabelle
- SET blob_spalte=LOAD_FILE("/tmp/bild")
- WHERE id=1;
-@end example
-@end table
-
-Wenn Sie nicht MySQL-Version 3.23 benutzen, m�ssen Sie das Lesen der Datei
-innerhalb Ihrer Applikation durchf�hren und ein @code{INSERT}-Statement
-erzeugen, um die Datenbank mit der Dateiinformation zu aktualisieren. Eine
-Art, das zu tun, finden Sie - wenn Sie die MySQL++-Bibliothek benutzen -
-unter
-@uref{http://www.mysql.com/documentation/mysql++/mysql++-examples.html}.
-
-MySQL konvertiert Zahlen bei Bedarf automatisch in Zeichenketten, und
-umgekehrt:
-
-@example
-mysql> SELECT 1+"1";
- -> 2
-mysql> SELECT CONCAT(2,' test');
- -> '2 test'
-@end example
-
-Wenn Sie eine Zahl explizit in eine Zeichenkette umwandeln wollen,
-�bergeben Sie sie als Argument an @code{CONCAT()}.
-
-Wenn in einer Zeichenketten-Funktion eine bin�re Zeichenkette als Argument
-angegeben wird, ist die resultierende Zeichenkette ebenfalls eine bin�re
-Zeichenkette. Eine Zahl, die in eine Zeichenkette umgewandelt wird, wird
-als bin�re Zeichenkette behandelt. Das betrifft nur Vergleichsoperationen.
-
-
-
-@menu
-* String comparison functions::
-* Case Sensitivity Operators::
-@end menu
-
-@node String comparison functions, Case Sensitivity Operators, String functions, String functions
-@c German node Zeichenketten-Vergleichsfunktionen
-@subsubsection Zeichenketten-Vergleichsfunktionen
-
-@findex Zeichenketten-Vergleichsfunktionen
-@findex Funktionen, Zeichenketten-Vergleich
-
-@cindex Gro�-/Kleinschreibung, in Zeichenketten-Vergleichen
-@cindex Zeichenketten-Vergleiche, Gro�-/Kleinschreibung
-
-Normalerweise wird ein Vergleich unter Ber�cksichtigung der
-Gro�-/Kleinschreibung durchgef�hrt, wenn irgend ein Ausdruck in einem
-Zeichenkettenvergleich abh�ngig von der verwendeten Gro�-/Kleinschreibung
-ist.
-
-@table @code
-@findex LIKE
-@item ausdruck LIKE muster [ESCAPE 'fluchtzeichen']
-Mustervergleich, der den einfachen SQL-Vergleich mit regul�ren Ausdr�cken
-benutzt. Gibt @code{1} (TRUE) oder @code{0} (FALSE) zur�ck. Bei @code{LIKE}
-k�nnen Sie die folgenden zwei Platzhalterzeichen im Muster benutzen:
-
-@multitable @columnfractions .1 .9
-@item @code{%} @tab Entspricht einer beliebigen Anzahl von Zeichen, selbst 0 Zeichen
-@item @code{_} @tab Entspricht genau einem Zeichen
-@end multitable
-
-@example
-mysql> select 'David!' LIKE 'David_';
- -> 1
-mysql> select 'David!' LIKE '%D%v%';
- -> 1
-@end example
-
-Um auf literale Instanzen des Platzhalterzeichens zu testen, stellen Sie
-dem Zeichen ein Fluchtzeichen (Escape-Zeichen) voran. Wenn Sie das
-@code{ESCAPE}-Zeichen nicht angeben, wird @samp{\} angenommen:
-
-@multitable @columnfractions .1 .9
-@item @code{\%} @tab Entspricht einem @code{%}-Zeichen
-@item @code{\_} @tab Entspricht einem @code{_}-Zeichen
-@end multitable
-
-@example
-mysql> select 'David!' LIKE 'David\_';
- -> 0
-mysql> select 'David_' LIKE 'David\_';
- -> 1
-@end example
-
-Um ein anderes Fluchtzeichen (Escape-Zeichen) anzugeben, benutzen Sie die
-@code{ESCAPE}-Klausel:
-
-@example
-mysql> select 'David_' LIKE 'David|_' ESCAPE '|';
- -> 1
-@end example
-
-Die folgenden beiden Statements zeigen, dass Zeichenketten-Vergleiche die
-Gro�-/Kleinschreibung nicht ber�cksichtigen, solange nicht einer der
-Operanden eine bin�re Zeichenkette ist:
-case insensitive unless one of the operands ist a bin�re Zeichenkette:
-
-@example
-mysql> select 'abc' LIKE 'ABC';
- -> 1
-mysql> SELECT 'abc' LIKE BINARY 'ABC';
- -> 0
-@end example
-
-@code{LIKE} ist bei numerischen Ausdr�cken zul�ssig! (Das ist eine
-MySQL-Erweiterung zum ANSI-SQL-@code{LIKE}.)
-
-@example
-mysql> select 10 LIKE '1%';
- -> 1
-@end example
-
-HINWEIS: Weil MySQL die C Escape-Syntax in Zeichenketten benutzt
-(beispielsweise @samp{\n}), m�ssen Sie jedes @samp{\}-Zeichen, das Sie in
-@code{LIKE}-Zeichenketten benutzen, verdoppeln. Um zum Beispiel nach
-@samp{\n} zu suchen, geben Sie @samp{\\n} ein. Um nach @samp{\} zu suchen,
-geben Sie @samp{\\\\} ein (die Backslashes werden einmal vom Parser
-entfernt und noch einmal, wenn der Mustervergleich durchgef�hrt wird, so
-dass letztlich ein einzelner Backslash �brig bleibt).
-
-@findex NOT LIKE
-@item ausdruck NOT LIKE muster [ESCAPE 'fluchtzeichen']
-Dasselbe wie @code{NOT (ausdruck LIKE muster [ESCAPE 'fluchtzeichen'])}.
-
-@cindex mSQL-Kompatibilit�t
-@cindex Kompatibilit�t, mit mSQL
-@findex REGEXP
-@findex RLIKE
-@item ausdruck REGEXP muster
-@itemx ausdruck RLIKE muster
-F�hrt einen Mustervergleich eines Zeichenkettenausdrucks @code{ausdruck}
-gegen ein Muster @code{muster} durch. Das Muster kann ein erweiterter
-regul�rer Ausdruck sein. @xref{Regexp}. Gibt @code{1} zur�ck, wenn
-@code{ausdruck} mit @code{muster} �bereinstimmt, ansonsten @code{0}.
-@code{RLIKE} ist ein Synonym f�r @code{REGEXP}, was aus Gr�nden der
-@code{mSQL}-Kompatibilit�t zur Verf�gung steht. HINWEIS: Weil MySQL die
-C-Escape-Syntax in Zeichenketten benutzt (beispielsweise @samp{\n}), m�ssen
-Sie jeden @samp{\}, den Sie in Ihren @code{REGEXP}-Zeichenketten benutzen,
-verdoppeln. Ab MySQL-Version 3.23.4 ber�cksichtigt @code{REGEXP} nicht die
-verwendete Gro�-/Kleinschreibung f�r normale (nicht bin�re)
-Zeichenketten:
-
-@example
-mysql> select 'Monty!' REGEXP 'm%y%%';
- -> 0
-mysql> select 'Monty!' REGEXP '.*';
- -> 1
-mysql> select 'new*\n*line' REGEXP 'new\\*.\\*line';
- -> 1
-mysql> select "a" REGEXP "A", "a" REGEXP BINARY "A";
- -> 1 0
-mysql> select "a" REGEXP "^[a-d]";
- -> 1
-@end example
-
-@item
-@code{REGEXP} und @code{RLIKE} benutzen den aktuellen Zeichensatz
-(vorgabem��ig ISO-8859-1 Latin1), wenn �ber den Typ eines Zeichens
-entschieden wird.
-
-@findex NOT REGEXP
-@item ausdruck NOT REGEXP muster
-@itemx ausdruck NOT RLIKE muster
-Dasselbe wie @code{NOT (ausdruck REGEXP muster)}.
-
-@findex STRCMP()
-@item STRCMP(ausdruck1,ausdruck2)
-@code{STRCMP()} gibt @code{0} zur�ck, wenn die Zeichenketten gleich sind,
-@code{-1}, wenn das erste Argument kleiner als das zweite ist (nach der
-aktuellen Sortierreihenfolge), und ansonsten @code{1}:
-
-@example
-mysql> select STRCMP('text', 'text2');
- -> -1
-mysql> select STRCMP('text2', 'text');
- -> 1
-mysql> select STRCMP('text', 'text');
- -> 0
-@end example
-
-@findex MATCH ... AGAINST()
-@item MATCH (spalte1,spalte2,...) AGAINST (ausdruck)
-@code{MATCH ... AGAINST()} wird f�r Volltextsuche benutzt und gibt die
-Relevanz zur�ck - ein �hnlichkeitsma� zwischen dem Text in den Spalten
-@code{(spalte1,spalte2,...)} und der Anfrage @code{ausdruck}. Die Relevanz
-ist eine positive Flie�kommazahl. 0 Relevanz bedeutet keine �hnlichkeit.
-Damit @code{MATCH ... AGAINST()} funktioniert, muss zuerst ein
-@strong{FULLTEXT}-Index erzeugt werden. @xref{CREATE TABLE, , @code{CREATE TABLE}}. @code{MATCH ... AGAINST()} ist verf�gbar ab MySQL-Version 3.23.23.
-F�r Details und Benutzungsbeispiele siehe @pxref{Fulltext Search}.
-@end table
-
-
-@node Case Sensitivity Operators, , String comparison functions, String functions
-@c German node Operatoren und Gro�-/Kleinschreibung
-@subsubsection Gro�-/Kleinschreibung
-
-@findex Casts
-
-@cindex Cast-Operatoren
-@cindex Operatoren, Cast-
-
-@table @code
-@findex BINARY
-@item @code{BINARY}
-Der @code{BINARY}-Operator macht die folgende Zeichenkette zu einer bin�ren
-Zeichenkette. Das ist eine einfache M�glichkeit, einen Spaltenvergleich
-zwangsweise in Abh�ngigkeit von der verwendeten Gro�-/Kleinschreibung
-durchzuf�hren, selbst wenn die Spalte nicht als @code{BINARY} oder
-@code{BLOB} definiert ist:
-@example
-mysql> select "a" = "A";
- -> 1
-mysql> select BINARY "a" = "A";
- -> 0
-@end example
-
-@code{BINARY} wurde in MySQL-Version 3.23.0 eingef�hrt.
-
-Beachten Sie, dass MySQL in manchen F�llen nicht in der Lage ist, den Index
-effizient zu benutzen, wenn Sie eine indizierte Spalte zu @code{BINARY}
-machen.
-@end table
-
-Wenn Sie ein Blob ohne Ber�cksichtigung der Gro�-/Kleinschreibung
-vergleichen wollen, k�nnen Sie den Blob jederzeit in Gro�schreibung
-umwandeln, bevor Sie den Vergleich durchf�hren:
-
-@example
-SELECT 'A' LIKE UPPER(blob_spalte) FROM tabelle;
-@end example
-
-Wir planen, bald Casting zwischen unterschiedlichen Zeichens�tzen
-einzuf�hren, um Zeichenketten-Vergleiche noch flexibler zu machen.
-
-
-@node Numeric Functions, Date and time functions, String functions, Functions
-@c German node Numerische Funktionen
-@subsection Numerische Funktionen
-
-
-
-@menu
-* Arithmetic functions::
-* Mathematical functions::
-@end menu
-
-@node Arithmetic functions, Mathematical functions, Numeric Functions, Numeric Functions
-@c German node Arithmetische Funktionen
-@subsubsection Arithmetische Operationen
-
-Es gibt die �blichen arithmetischen Operatoren. Beachten Sie, dass das
-Ergebnis im Falle von @samp{-}, @samp{+} und @samp{*} mit
-@code{BIGINT}-Genauigkeit (64-Bit) berechnet wird, wenn beide Argumente
-Ganzzahlen sind!
-
-@cindex Operationen, arithmetische
-@cindex arithmetische Ausdr�cke
-@table @code
-@findex + (Addition)
-@findex Addition (+)
-@item +
-Addition:
-@example
-mysql> select 3+5;
- -> 8
-@end example
-
-@findex - (Subtraktion)
-@findex Subtraktion (-)
-@item -
-Subtraktion:
-@example
-mysql> select 3-5;
- -> -2
-@end example
-
-@findex * (Multiplikation)
-@findex Multiplikation (*)
-@item *
-Multiplication:
-@example
-mysql> select 3*5;
- -> 15
-mysql> select 18014398509481984*18014398509481984.0;
- -> 324518553658426726783156020576256.0
-mysql> select 18014398509481984*18014398509481984;
- -> 0
-@end example
-
-Das Ergebnis des letzten Ausdrucks ist falsch, weil die
-Ganzzahl-Multiplikation den 64-Bit-Wertebereich von
-@code{BIGINT}-Berechnungen �berschreitet.
-
-@findex / (Division)
-@findex Division (/)
-@item /
-Division:
-@example
-mysql> select 3/5;
- -> 0.60
-@end example
-
-Division durch 0 erzeugt ein @code{NULL}-Ergebnis:
-
-@example
-mysql> select 102/(1-1);
- -> NULL
-@end example
-
-Eine Division wird nur dann mit @code{BIGINT}-Arithmetik berechnet, wenn
-sie in einem Zusammenhang durchgef�hrt wird, in dem das Ergebnis in eine
-Ganzzahl umgewandelt wird!
-@end table
-
-
-@node Mathematical functions, , Arithmetic functions, Numeric Functions
-@c German node Mathematische Funktionen
-@subsubsection Mathematische Funktionen
-Alle mathematischen Funktionen geben im Fehlerfall @code{NULL} zur�ck.
-
-@findex mathematische Funktionen
-@findex Funktionen, mathematische
-
-@table @code
-@findex - (un�res Minus)
-@findex Minus, un�res (-)
-@findex un�res Minus (-)
-@item -
-Un�res Minus. �ndert das Vorzeichen des Arguments:
-@example
-mysql> select - 2;
- -> -2
-@end example
-
-Wenn dieser Operator mit einer @code{BIGINT} benutzt wird, beachten Sie,
-dass der R�ckgabewert eine @code{BIGINT} ist! Das bedeutet, dass Sie
-@code{-} auf Ganzzahlen, die den Wert @code{-2^63} haben k�nnten, vermeiden
-sollten!
-
-@findex ABS()
-@item ABS(X)
-Gibt den absoluten Wert von @code{X} zur�ck:
-@example
-mysql> select ABS(2);
- -> 2
-mysql> select ABS(-32);
- -> 32
-@end example
-
-Diese Funktion kann bei @code{BIGINT}-Werten sicher benutzt werden.
-
-@findex SIGN()
-@item SIGN(X)
-Gibt das Vorzeichen des Arguments als @code{-1}, @code{0} oder @code{1}
-zur�ck, abh�ngig davon, ob @code{X} negativ, 0 oder positiv ist:
-@example
-mysql> select SIGN(-32);
- -> -1
-mysql> select SIGN(0);
- -> 0
-mysql> select SIGN(234);
- -> 1
-@end example
-
-@findex MOD()
-@c German FIX added space before %
-@findex % (Modulo)
-@findex Modulo (%)
-@item MOD(N,M)
-@c German FIX added space before %
-@itemx %
-Modulo (wie der @code{%}-Operator in C). Gibt den Rest von @code{N}
-dividiert durch @code{M} zur�ck:
-@example
-mysql> select MOD(234, 10);
- -> 4
-mysql> select 253% 7;
- -> 1
-mysql> select MOD(29,9);
- -> 2
-@end example
-
-Diese Funktion kann bei @code{BIGINT}-Werten sicher benutzt werden.
-
-@findex FLOOR()
-@item FLOOR(X)
-Gibt den gr��ten Ganzzahl-Wert zur�ck, der nicht gr��er als @code{X}
-ist:
-@example
-mysql> select FLOOR(1.23);
- -> 1
-mysql> select FLOOR(-1.23);
- -> -2
-@end example
-
-Beachten Sie, dass der R�ckgabewert in eine @code{BIGINT} umgewandelt
-wird!
-
-@findex CEILING()
-@item CEILING(X)
-Gibt den kleinsten Ganzzahl-Wert zur�ck, der nicht kleiner als @code{X}
-ist:
-@example
-mysql> select CEILING(1.23);
- -> 2
-mysql> select CEILING(-1.23);
- -> -1
-@end example
-
-Beachten Sie, dass der R�ckgabewert in eine @code{BIGINT} umgewandelt wird!
-
-@findex ROUND()
-@item ROUND(X)
-Gibt das Argument @code{X} zur�ck, gerundet auf die n�chste Ganzzahl:
-@example
-mysql> select ROUND(-1.23);
- -> -1
-mysql> select ROUND(-1.58);
- -> -2
-mysql> select ROUND(1.58);
- -> 2
-@end example
-
-Beachten Sie, dass das Verhalten von @code{ROUND()} abh�ngig von der
-C-Bibliothek-Implementation ist, wenn das Argument in der Mitte zwischen
-zwei Ganzzahlen liegt. Einige runden auf die n�chste gerade Zahl, oder
-immer nach oben, immer nach unten oder immer Richtung 0. Wenn Sie eine
-bestimmte Art zu runden brauchen, sollten Sie statt dessen wohldefinierte
-Funktionen wie @code{TRUNCATE()} oder @code{FLOOR()} benutzen.
-
-@findex ROUND()
-@item ROUND(X,D)
-Gibt das Argument @code{X} zur�ck, gerundet auf eine Zahl mit @code{D}
-Dezimalstellen. Wenn @code{D} @code{0} ist, hat das Ergebnis keinen
-Dezimalpunkt oder Bruchteil:
-
-@example
-mysql> select ROUND(1.298, 1);
- -> 1.3
-mysql> select ROUND(1.298, 0);
- -> 1
-@end example
-
-@findex EXP()
-@item EXP(X)
-Gibt den Wert @code{e} (die Basis des nat�rlichen Logarithmus) hoch
-@code{X} zur�ck:
-@example
-mysql> select EXP(2);
- -> 7.389056
-mysql> select EXP(-2);
- -> 0.135335
-@end example
-@findex LOG()
-@item LOG(X)
-Gibt den nat�rlichen Logarithmus von @code{X} zur�ck:
-@example
-mysql> select LOG(2);
- -> 0.693147
-mysql> select LOG(-2);
- -> NULL
-@end example
-Wenn Sie den Logarithmus einer Zahl @code{X} zu einer beliebigen Basis
-@code{B} errechnen wollen, benutzen Sie die Formel @code{LOG(X)/LOG(B)}.
-
-@findex LOG10()
-@item LOG10(X)
-Gibt den Logarithmus zur Basis 10 von @code{X} zur�ck:
-@example
-mysql> select LOG10(2);
- -> 0.301030
-mysql> select LOG10(100);
- -> 2.000000
-mysql> select LOG10(-100);
- -> NULL
-@end example
-
-@findex POW()
-@findex POWER()
-@item POW(X,Y)
-@itemx POWER(X,Y)
-Gibt den Wert @code{X} hoch @code{Y} zur�ck:
-@example
-mysql> select POW(2,2);
- -> 4.000000
-mysql> select POW(2,-2);
- -> 0.250000
-@end example
-
-@findex SQRT()
-@item SQRT(X)
-Gibt die nicht negative Quadratwurzel von @code{X} zur�ck:
-@example
-mysql> select SQRT(4);
- -> 2.000000
-mysql> select SQRT(20);
- -> 4.472136
-@end example
-
-@findex PI()
-@item PI()
-Gibt den Wert PI zur�ck. Die vorgabem��ig angezeigte Anzahl von
-Dezimalstellen ist 5, aber MySQL benutzt intern die volle doppelte
-Genauigkeit f�r PI.
-@example
-mysql> select PI();
- -> 3.141593
-mysql> SELECT PI()+0.000000000000000000;
- -> 3.141592653589793116
-@end example
-
-@findex COS()
-@item COS(X)
-Gibt den Cosinus von @code{X} zur�ck, wobei @code{X} in Radianten angegeben
-wird:
-@example
-mysql> select COS(PI());
- -> -1.000000
-@end example
-
-@findex SIN()
-@item SIN(X)
-Gibt den Sinus von @code{X} zur�ck, wobei @code{X} in Radianten angegeben
-wird:
-@example
-mysql> select SIN(PI());
- -> 0.000000
-@end example
-
-@findex TAN()
-@item TAN(X)
-Gibt den Tangens von @code{X} zur�ck, wobei @code{X} in Radianten angegeben
-wird:
-@example
-mysql> select TAN(PI()+1);
- -> 1.557408
-@end example
-
-@findex ACOS()
-@item ACOS(X)
-Gibt den Arcuscosinus von @code{X} zur�ck, dass hei�t den Wert, dessen
-Cosinus @code{X} ist. Gibt @code{NULL} zur�ck, wenn @code{X} nicht im
-Bereich von @code{-1} bis @code{1} liegt:
-@example
-mysql> select ACOS(1);
- -> 0.000000
-mysql> select ACOS(1.0001);
- -> NULL
-mysql> select ACOS(0);
- -> 1.570796
-@end example
-
-@findex ASIN()
-@item ASIN(X)
-Gibt den Arcussinus von @code{X} zur�ck, das hei�t den Wert, dessen Sinus
-@code{X} ist. Gibt @code{NULL} zur�ck, wenn @code{X} nicht im Bereich von
-@code{-1} bis @code{1} liegt:
-@example
-mysql> select ASIN(0.2);
- -> 0.201358
-mysql> select ASIN('foo');
- -> 0.000000
-@end example
-
-@findex ATAN()
-@item ATAN(X)
-Gibt den Arcustangens von @code{X} zur�ck, das hei�t den Wert, dessen
-Tangens @code{X} ist:
-@example
-mysql> select ATAN(2);
- -> 1.107149
-mysql> select ATAN(-2);
- -> -1.107149
-@end example
-
-@findex ATAN2()
-@item ATAN2(Y,X)
-Gibt den Arcustangens der beiden Variablen @code{X} und @code{Y} zur�ck.
-Das �hnelt der Berechnung des Arcustangens von @code{Y / X}, ausser dass
-die Vorzeichen beider Argumente benutzt werden, um den Quadranten des
-Ergebnisses zu bestimmen:
-@example
-mysql> select ATAN(-2,2);
- -> -0.785398
-mysql> select ATAN(PI(),0);
- -> 1.570796
-@end example
-
-@findex COT()
-@item COT(X)
-Gibt den Cotangens von @code{X} zur�ck:
-@example
-mysql> select COT(12);
- -> -1.57267341
-mysql> select COT(0);
- -> NULL
-@end example
-
-@findex RAND()
-@item RAND()
-@itemx RAND(N)
-Gibt eine Zufallszahl (Flie�kommawert) im Bereich von @code{0} bis
-@code{1.0} zur�ck. Wenn ein Ganzzahl-Argument @code{N} angegeben wird, wird
-es als Ausgangswert benutzt:
-@example
-mysql> select RAND();
- -> 0.5925
-mysql> select RAND(20);
- -> 0.1811
-mysql> select RAND(20);
- -> 0.1811
-mysql> select RAND();
- -> 0.2079
-mysql> select RAND();
- -> 0.7888
-@end example
-Sie k�nnen eine Spalte mit @code{RAND()}-Werten nicht in einer @code{ORDER
-BY}-Klausel verwenden, weil @code{ORDER BY} die Spalte mehrfach auswerten
-w�rde. In MySQL-Version 3.23 k�nnen Sie jedoch folgendes tun:
-@code{SELECT * FROM tabelle ORDER BY RAND()}
-
-Das ist n�tzlich, um eine Zufallsstichprobe aus @code{SELECT * FROM
-tabelle1,tabelle2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000} zu
-erhalten.
-
-Beachten Sie, dass ein @code{RAND()} in einer @code{WHERE}-Klausel jedes
-Mal von Neuem ausgewertet wird, wenn @code{WHERE} ausgef�hrt wird.
-
-@findex LEAST()
-@item LEAST(X,Y,...)
-Mit zwei oder mehr Argumenten gibt die Funktion das kleinste Argument (das
-mit dem niedrigsten Wert) zur�ck. Die Argumente werden nach folgenden
-Regeln verglichen:
-
-@itemize @bullet
-@item
-Wenn der R�ckgabewert in einem @code{INTEGER}-Zusammenhang benutzt wird
-oder alle Argumente Ganzzahl-Werte sind, werden sie als Ganzzahlen
-verglichen.
-
-@item
-Wenn der R�ckgabewert in einem @code{REAL}-Zusammenhang benutzt wird oder
-alle Argumente Realzahlen sind, werden sie als Realzahlen verglichen.
-
-@item
-Wenn irgend ein Argument eine von der Gro�-/Kleinschreibung abh�ngige
-Zeichenkette ist, werden die Argumente als Zeichenketten, die von der
-Gro�-/Kleinschreibung abh�ngen, verglichen.
-
-@item
-In sonstigen F�llen werden die Argumente als Zeichenketten verglichen, die
-nicht von der Gro�-/Kleinschreibung abh�ngen:
-@end itemize
-
-@example
-mysql> select LEAST(2,0);
- -> 0
-mysql> select LEAST(34.0,3.0,5.0,767.0);
- -> 3.0
-mysql> select LEAST("B","A","C");
- -> "A"
-@end example
-In MySQL-Versionen vor Version 3.22.5 k�nnen Sie @code{MIN()} statt
-@code{LEAST} benutzen.
-
-@findex GREATEST()
-@item GREATEST(X,Y,...)
-Gibt das gr��te Argument (das mit dem h�chsten Wert) zur�ck. Die Argumente
-werden nach denselben Regeln wie bei @code{LEAST} verglichen:
-@example
-mysql> select GREATEST(2,0);
- -> 2
-mysql> select GREATEST(34.0,3.0,5.0,767.0);
- -> 767.0
-mysql> select GREATEST("B","A","C");
- -> "C"
-@end example
-In MySQL-Versionen vor Version 3.22.5 k�nnen Sie @code{MAX()} statt
-@code{GREATEST} benutzen.
-
-@findex DEGREES()
-@item DEGREES(X)
-Gibt das Argument @code{X} zur�ck, von Radianten zu Grad umgewandelt:
-@example
-mysql> select DEGREES(PI());
- -> 180.000000
-@end example
-
-@findex RADIANS()
-@item RADIANS(X)
-Gibt das Argument @code{X} zur�ck, von Grad zu Radianten umgewandelt:
-@example
-mysql> select RADIANS(90);
- -> 1.570796
-@end example
-
-@findex TRUNCATE()
-@item TRUNCATE(X,D)
-Gibt die Zahl @code{X} zur�ck, auf @code{D} Dezimalstellen beschnitten.
-Wenn @code{D} @code{0} ist, hat das Ergebnis keinen Dezimalpunkt oder
-Bruchteil:
-@example
-mysql> select TRUNCATE(1.223,1);
- -> 1.2
-mysql> select TRUNCATE(1.999,1);
- -> 1.9
-mysql> select TRUNCATE(1.999,0);
- -> 1
-@end example
-
-Beachten Sie, dass Dezimalzahlen in Computern normalerweise nicht als
-exakte Zahlen, sondern als Double-Werte gespeichert werden. Daher k�nnen
-verwirrende Ergebnisse wie im folgenden Beispiel auftreten:
-
-@cindex Rundungsfehler
-@example
-mysql> select TRUNCATE(10.28*100,0);
- -> 1027
-@end example
-
-Das Obige passiert, weil 10.28 tats�chlich als etwas wie
-10.2799999999999999 gespeichert wird.
-@end table
-
-
-@node Date and time functions, Other Functions, Numeric Functions, Functions
-@c German node Datums- und Zeit-Funktionen
-@subsection Datums- und Zeit-Funktionen
-
-@findex Datums- und Zeit-Funktionen
-@findex Funktionen, Datums- und Zeit-
-
-Eine Beschreibung des Wertebereichs aller Typen und der g�ltigen Formate
-f�r Datums- und Zeitwerte finden Sie unter @ref{Date and time types}.
-
-Hier ist ein Beispiel, das Datums-Funktionen benutzt. Die unten stehende
-Anfrage w�hlt alle Datens�tze mit einem @code{datum_spalte}-Wert innerhalb
-der letzten 30 Tage aus:
-
-@example
-mysql> SELECT etwas FROM tabelle
- WHERE TO_DAYS(NOW()) - TO_DAYS(datum_spalte) <= 30;
-@end example
-
-@table @code
-@findex DAYOFWEEK()
-@item DAYOFWEEK(datum)
-Gibt den Wochentag-Index zur�ck.
-
-F�r @code{datum} gilt: @code{1} = Sonntag, @code{2} = Montag, ... @code{7}
-= Samstag). Diese Index-Werte entsprechen dem ODBC-Standard:
-
-@example
-mysql> select DAYOFWEEK('1998-02-03');
- -> 3
-@end example
-
-@findex WEEKDAY()
-@item WEEKDAY(datum)
-Gibt den Wochentag-Index f�r @code{datum} zur�ck (@code{0} = Montag,
-@code{1} = Dienstag, ... @code{6} = Sonntag):
-
-@example
-mysql> select WEEKDAY('1997-10-04 22:23:00');
- -> 5
-mysql> select WEEKDAY('1997-11-05');
- -> 2
-@end example
-
-@findex DAYOFMONTH()
-@item DAYOFMONTH(datum)
-Gibt den Tag des Monats f�r @code{datum} im Bereich @code{1} bis @code{31}
-zur�ck:
-
-@example
-mysql> select DAYOFMONTH('1998-02-03');
- -> 3
-@end example
-
-@findex DAYOFYEAR()
-@item DAYOFYEAR(datum)
-Gibt den Tag des Jahres f�r @code{datum} im Bereich @code{1} bis @code{366}
-zur�ck:
-
-@example
-mysql> select DAYOFYEAR('1998-02-03');
- -> 34
-@end example
-
-@findex MONTH()
-@item MONTH(datum)
-Gibt den Monat f�r @code{datum} im Bereich @code{1} bis @code{12} zur�ck:
-
-@example
-mysql> select MONTH('1998-02-03');
- -> 2
-@end example
-
-@findex DAYNAME()
-@item DAYNAME(datum)
-Gibt den Namen des Wochentags f�r @code{datum} zur�ck (auf englisch):
-
-@example
-mysql> select DAYNAME("1998-02-05");
- -> 'Thursday'
-@end example
-
-@findex MONTHNAME()
-@item MONTHNAME(datum)
-Gibt den Namen des Monats f�r @code{datum} zur�ck (auf englisch):
-
-@example
-mysql> select MONTHNAME("1998-02-05");
- -> 'February'
-@end example
-
-@findex QUARTER()
-@item QUARTER(datum)
-Gibt das Quartal des Jahres f�r @code{datum} im Bereich @code{1} bis
-@code{4} zur�ck:
-
-@example
-mysql> select QUARTER('98-04-01');
- -> 2
-@end example
-
-@findex WEEK()
-@item WEEK(datum)
-@itemx WEEK(datum,erste)
-Mit einem einzelnen Argument gibt diese Funktion die Woche f�r @code{datum}
-im Bereich @code{0} bis @code{53} zur�ck (ja, es kann Anf�nge der Woche 53
-geben), f�r Orte, in denen Sonntag der erste Wochentag ist. In der Form mit
-zwei Argumenten gestattet @code{WEEK()} es, festzulegen, ob die Woche am
-Sonntag oder am Montag beginnt. Die Woche beginnt am Sonntag, wenn das
-zweite Argument @code{0} ist, und am Montag, wenn das zweite Argument
-@code{1} ist:
-
-@example
-mysql> select WEEK('1998-02-20');
- -> 7
-mysql> select WEEK('1998-02-20',0);
- -> 7
-mysql> select WEEK('1998-02-20',1);
- -> 8
-mysql> select WEEK('1998-12-31',1);
- -> 53
-@end example
-
-@findex YEAR()
-@item YEAR(datum)
-Gibt das Jahr f�r @code{datum} im Bereich @code{1000} bis @code{9999}
-zur�ck:
-
-@example
-mysql> select YEAR('98-02-03');
- -> 1998
-@end example
-
-@item YEARWEEK(datum)
-@itemx YEARWEEK(datum,erste)
-Gibt Jahr und Woche f�r ein Datum zur�ck. Das zweite Argument funktioniert
-genau wie das zweite Argument von @code{WEEK()}. Beachten Sie, dass das
-Jahr sich in der ersten und letzten Woche des Jahres vom Jahr im
-Datums-Argument unterscheiden kann:
-
-@example
-mysql> select YEARWEEK('1987-01-01');
- -> 198653
-@end example
-
-@findex HOUR()
-@item HOUR(zeit)
-Gibt die Stunde f�r @code{zeit} im Bereich @code{0} bis @code{23} zur�ck:
-
-@example
-mysql> select HOUR('10:05:03');
- -> 10
-@end example
-
-@findex MINUTE()
-@item MINUTE(zeit)
-Gibt die Minute f�r @code{zeit} im Bereich @code{0} bis @code{59} zur�ck:
-
-@example
-mysql> select MINUTE('98-02-03 10:05:03');
- -> 5
-@end example
-
-@findex SECOND()
-@item SECOND(zeit)
-Gibt die Sekunde f�r @code{zeit} im Bereich @code{0} bis @code{59} zur�ck:
-
-@example
-mysql> select SECOND('10:05:03');
- -> 3
-@end example
-
-@findex PERIOD_ADD()
-@item PERIOD_ADD(P,N)
-Z�hlt @code{N} Monate zur Periode @code{P} hinzu (im Format @code{YYMM}
-oder @code{YYYYMM}). Gibt einen Wert im Format @code{YYYYMM} zur�ck.
-
-Beachten Sie, dass das Perioden-Argument @code{P} @emph{kein} Datums-Wert
-ist:
-
-@example
-mysql> select PERIOD_ADD(9801,2);
- -> 199803
-@end example
-
-@findex PERIOD_DIFF()
-@item PERIOD_DIFF(P1,P2)
-Gibt die Anzahl von Monaten zwischen den Perioden @code{P1} und @code{P2}
-zur�ck. @code{P1} und @code{P2} sollten im Format @code{YYMM} oder
-@code{YYYYMM} sein.
-
-Beachten Sie, dass die Perioden-Argumente @code{P1} und @code{P2}
-@emph{keine} Datumswerte sind:
-
-@example
-mysql> select PERIOD_DIFF(9802,199703);
- -> 11
-@end example
-
-@findex DATE_ADD()
-@findex DATE_SUB()
-@findex ADDDATE()
-@findex SUBDATE()
-@findex EXTRACT()
-@item DATE_ADD(datum,INTERVAL ausdruck typ)
-@itemx DATE_SUB(datum,INTERVAL ausdruck typ)
-@itemx ADDDATE(datum,INTERVAL ausdruck typ)
-@itemx SUBDATE(datum,INTERVAL ausdruck typ)
-
-Diese Funktionen f�hren Datumsberechnungen durch. Sie wurden in
-MySQL-Version 3.22 eingef�hrt. @code{ADDDATE()} und @code{SUBDATE()} sind
-Synonyme f�r @code{DATE_ADD()} und @code{DATE_SUB()}.
-
-In MySQL-Version 3.23 k�nnen Sie @code{+} und @code{-} anstelle von
-@code{DATE_ADD()} und @code{DATE_SUB()} benutzen, wenn der Ausdruck auf der
-rechten Seite eine DATE oder DATETIME-Spalte ist (siehe Beispiel).
-
-@code{datum} ist ein @code{DATETIME}- oder @code{DATE}-Wert, der das
-Anfangsdatum festlegt. @code{ausdruck} ist ein Ausdruck, der den
-Intervallwert festlegt, der zum Anfangsdatum hinzugez�hlt oder von diesem
-abgezogen wird. @code{ausdruck} ist eine Zeichenkette; sie kann mit einem
-@samp{-} f�r negative Intervalle beginnen. @code{typ} ist ein
-Schl�sselwort, das angibt, wie der Ausdruck interpretiert werden soll.
-
-Die verwandte Funktion @code{EXTRACT(typ FROM datum)} gibt das
-'typ'-Intervall des Datums zur�ck.
-
-Folgende Tabelle zeigt, in welchem Zusammenhang die @code{typ}- und
-@code{ausdruck}-Argumente stehen:
-
-@multitable @columnfractions .5 .5
-@item @code{typ} @strong{wert} @tab @strong{erwartet} @code{ausdruck} @strong{format}
-@item @code{SECOND} @tab @code{Sekunden}
-@item @code{MINUTE} @tab @code{Minuten}
-@item @code{HOUR} @tab @code{Stunden}
-@item @code{DAY} @tab @code{Tage}
-@item @code{MONTH} @tab @code{Monate}
-@item @code{YEAR} @tab @code{Jahre}
-@item @code{MINUTE_SECOND} @tab @code{"Minuten:Sekunden"}
-@item @code{HOUR_MINUTE} @tab @code{"Stunden:Minuten"}
-@item @code{DAY_HOUR} @tab @code{"Tage Stunden"}
-@item @code{YEAR_MONTH} @tab @code{"Jahre-Monate"}
-@item @code{HOUR_SECOND} @tab @code{"Stunden:Minuten:Sekunden"}
-@item @code{DAY_MINUTE} @tab @code{"Tage Stunden:Minuten"}
-@item @code{DAY_SECOND} @tab @code{"Tage Stunden:Minuten:Sekunden"}
-@end multitable
-
-MySQL erlaubt beliebige Satzzeichen-Begrenzer im @code{ausdruck}-Format.
-Die in der Tabelle gezeigten Begrenzer sind Vorschl�ge. Wenn das
-@code{datum}-Argument ein @code{DATE}-Wert ist und Ihre Berechnungen nur
-@code{YEAR}, @code{MONTH} und @code{DAY}-Anteile beinhalten (also keine
-Zeit-Anteile), ist das Ergebnis ein @code{DATE}-Wert. Ansonsten ist das
-Ergebnis ein @code{DATETIME}-Wert:
-
-@example
-mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
- -> 1998-01-01 00:00:00
-mysql> SELECT INTERVAL 1 DAY + "1997-12-31";
- -> 1998-01-01
-mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
- -> 1997-12-31 23:59:59
-mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
- INTERVAL 1 SECOND);
- -> 1998-01-01 00:00:00
-mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
- INTERVAL 1 DAY);
- -> 1998-01-01 23:59:59
-mysql> SELECT DATE_ADD("1997-12-31 23:59:59",
- INTERVAL "1:1" MINUTE_SECOND);
- -> 1998-01-01 00:01:00
-mysql> SELECT DATE_SUB("1998-01-01 00:00:00",
- INTERVAL "1 1:1:1" DAY_SECOND);
- -> 1997-12-30 22:58:59
-mysql> SELECT DATE_ADD("1998-01-01 00:00:00",
- INTERVAL "-1 10" DAY_HOUR);
- -> 1997-12-30 14:00:00
-mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
- -> 1997-12-02
-@end example
-
-Wenn Sie einen Intervallwert angeben, der zu kurz ist (nicht alle
-Intervall-Anteile beinhaltet, die vom @code{typ}-Schl�sselwort erwartet
-werden), nimmt MySQL an, dass Sie den �u�ersten linken Teil des
-Intervallwerts ausgelassen haben. Wenn Sie beispielsweise einen @code{typ}
-@code{DAY_SECOND} angeben, wird vom Wert von @code{ausdruck} erwartet, dass
-dieser Tages-, Stunden-, Minuten- und Sekunden-Anteile enth�lt. Wenn Sie
-einen Wert wie @code{"1:10"} angeben, nimmt MySQL an, dass die Tages- und
-Stunden-Anteile fehlen und der Wert Minuten und Sekunden darstellt. Mit
-anderen Worten wird @code{"1:10" DAY_SECOND} so interpretiert, dass es
-�quivalent zu @code{"1:10" MINUTE_SECOND} ist. Das ist analog zur Weise,
-wie MySQL @code{TIME}-Werte interpretiert, die eher vergangene Zeit als
-Tageszeit darstellen.
-
-Beachten Sie, dass ein Datumswert automatisch in einen DATETIME-Wert
-umgewandelt wird, wenn Sie einen DATE-Wert zu etwas hinzuz�hlen oder von
-etwas abziehen, das einen Zeit-Anteil hat:
-
-@example
-mysql> select date_add("1999-01-01", interval 1 day);
- -> 1999-01-02
-mysql> select date_add("1999-01-01", interval 1 hour);
- -> 1999-01-01 01:00:00
-@end example
-
-Wenn Sie wirklich falsche Datumsangaben benutzen, ist das Ergebnis
-@code{NULL}. Wenn Sie @code{MONTH}, @code{YEAR_MONTH} oder @code{YEAR}
-hinzuz�hlen und das Datumsergebnis einen Tag hat, der gr��er ist als der
-h�chste Tag f�r den neuen Monat, wird der Tag auf den h�chsten Tag des
-neuen Monats angepasst:
-
-@example
-mysql> select DATE_ADD('1998-01-30', Interval 1 month);
- -> 1998-02-28
-@end example
-
-Beachten Sie, dass das Wort @code{INTERVAL} und das
-@code{typ}-Schl�sselwort in den vorstehenden Beispielen nicht von der
-verwendeten Gro�-/Kleinschreibung abh�ngen.
-
-@findex EXTRACT()
-@item EXTRACT(typ FROM datum)
-
-Die @code{EXTRACT()}-Funktion benutzt dieselbe Art von
-Intervalltyp-Spezifikatoren wie @code{DATE_ADD()} oder @code{DATE_SUB()},
-extrahiert aber Anteile aus dem Datum, statt Datumsberechnungen
-durchzuf�hren:
-
-@example
-mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");
- -> 1999
-mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");
- -> 199907
-mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");
- -> 20102
-@end example
-
-@findex TO_DAYS()
-@item TO_DAYS(datum)
-Gibt f�r ein Datum @code{datum} eine Tagesanzahl zur�ck (die Anzahl von
-Tagen seit dem Jahr 0):
-
-@example
-mysql> select TO_DAYS(950501);
- -> 728779
-mysql> select TO_DAYS('1997-10-07');
- -> 729669
-@end example
-
-@code{TO_DAYS()} ist nicht f�r die Benutzung mit Werten vor der Einf�hrung
-des Gregorianischen Kalenders (1582) vorgesehen, weil es nicht die Tage
-ber�cksichtigt, die verloren gingen, als der Kalender ge�ndert wurde.
-
-@findex FROM_DAYS()
-@item FROM_DAYS(N)
-Gibt f�r eine Tagesanzahl @code{N} einen @code{DATE}-Wert zur�ck:
-
-@example
-mysql> select FROM_DAYS(729669);
- -> '1997-10-07'
-@end example
-
-@code{FROM_DAYS()} ist nicht f�r die Benutzung mit Werten vor der Einf�hrung
-des Gregorianischen Kalenders (1582) vorgesehen, weil es nicht die Tage
-ber�cksichtigt, die verloren gingen, als der Kalender ge�ndert wurde.
-
-@findex DATE_FORMAT()
-@item DATE_FORMAT(datum,format)
-Formatiert den @code{datum}-Wert gem�� der @code{format}-Zeichenkette.
-Folgende Spezifikatoren k�nnen in der @code{format}-Zeichenkette benutzt
-werden:
-@multitable @columnfractions .1 .6
-@item @code{%M} @tab Monatsname auf englisch (@code{January} bis @code{December})
-@item @code{%W} @tab Name des Wochentags auf englisch (@code{Sunday} bis @code{Saturday})
-@item @code{%D} @tab Tag des Monats mit englischem Suffix (@code{1st}, @code{2nd}, @code{3rd} usw.)
-@item @code{%Y} @tab Jahr, numerisch, 4 Ziffern
-@item @code{%y} @tab Jahr, numerisch, 2 Ziffern
-@item @code{%X} @tab Jahr der Woche, wobei Sonntag der erste Tag der Woche ist, numerisch, 4 Ziffern, benutzt mit '%V'
-@item @code{%x} @tab Jahr der Woche, wobei Montag der erste Tag der Woche ist, numerisch, 4 Ziffern, benutzt mit '%v'
-@item @code{%a} @tab Abgek�rzter Name des Wochentags auf englisch (@code{Sun}..@code{Sat})
-@item @code{%d} @tab Tag des Monats, numerisch (@code{00} bis @code{31})
-@item @code{%e} @tab Tag des Monats, numerisch (@code{0} bis @code{31})
-@item @code{%m} @tab Monat, numerisch (@code{01} bis @code{12})
-@item @code{%c} @tab Monat, numerisch (@code{1} bis @code{12})
-@item @code{%b} @tab Abgek�rzter Monatsname auf englisch (@code{Jan} bis @code{Dec})
-@item @code{%j} @tab Tag des Jahrs (@code{001} bis @code{366})
-@item @code{%H} @tab Stunde (@code{00} bis @code{23})
-@item @code{%k} @tab Stunde (@code{0} bis @code{23})
-@item @code{%h} @tab Stunde (@code{01} bis @code{12})
-@item @code{%I} @tab Stunde (@code{01} bis @code{12})
-@item @code{%l} @tab Stunde (@code{1} bis @code{12})
-@item @code{%i} @tab Minuten, numerisch (@code{00} bis @code{59})
-@item @code{%r} @tab Uhrzeit, 12-Stunden-Format (@code{hh:mm:ss [AP]M})
-@item @code{%T} @tab Uhrzeit, 24-Stunden-Format (@code{hh:mm:ss})
-@item @code{%S} @tab Sekunden (@code{00} bis @code{59})
-@item @code{%s} @tab Sekunden (@code{00} bis @code{59})
-@item @code{%p} @tab @code{AM} oder @code{PM}
-@item @code{%w} @tab Wochentag (@code{0}=Sonntag bis @code{6}=Samstag)
-@item @code{%U} @tab Woche (@code{0} bis @code{53}), wobei Sonntag der erste Tag der Woche ist
-@item @code{%u} @tab Woche (@code{0} bis @code{53}), wobei Montag der erste Tag der Woche ist
-@item @code{%V} @tab Woche (@code{1} bis @code{53}), wobei Sonntag der erste Tag der Woche ist. Benutzt mit '%X'
-@item @code{%v} @tab Woche (@code{1} bis @code{53}), wobei Montag der erste Tag der Woche ist. Benutzt mit '%x'
-@item @code{%%} @tab Ein Literal @samp{%}.
-@end multitable
-
-Alle anderen Zeichen werden einfach ohne Interpretation ins Ergebnis
-kopiert:
-
-@example
-mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W%M%Y');
- -> 'Saturday October 1997'
-mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
- -> '22:23:00'
-mysql> select DATE_FORMAT('1997-10-04 22:23:00',
- '%D%y%a%d%m%b%j');
- -> '4th 97 Sat 04 10 Oct 277'
-mysql> select DATE_FORMAT('1997-10-04 22:23:00',
- '%H%k%I%r%T%S%w');
- -> '22 22 10 10:23:00 PM 22:23:00 00 6'
-mysql> select DATE_FORMAT('1999-01-01', '%X%V');
- -> '1998 52'
-@end example
-
-Ab MySQL-Version 3.23 ist das @samp{%}-Zeichen vor
-Format-Spezifikator-Zeichen erforderlich. In fr�heren Versionen von MySQL
-war @samp{%} optional.
-
-@findex TIME_FORMAT()
-@item TIME_FORMAT(zeit,format)
-Dieses wird benutzt wie die obige @code{DATE_FORMAT()}-Funktion, aber die
-@code{format}-Zeichenkette darf nur die Spezifikatoren enthalten, die
-Stunden, Minuten und Sekunden handhaben. Andere Spezifikatoren erzeugen
-einen @code{NULL}-Wert oder @code{0}.
-
-@findex CURDATE()
-@findex CURRENT_DATE
-@item CURDATE()
-@itemx CURRENT_DATE
-Gibt das Datum von heute im @code{'YYYY-MM-DD'}- oder
-@code{YYYYMMDD}-format zur�ck, abh�ngig davon, ob die Funktion in einem
-Zeichenketten- oder in einem numerischen Zusammenhang benutzt wird:
-
-@example
-mysql> select CURDATE();
- -> '1997-12-15'
-mysql> select CURDATE() + 0;
- -> 19971215
-@end example
-
-@findex CURTIME()
-@findex CURRENT_TIME
-@item CURTIME()
-@itemx CURRENT_TIME
-Gibt die aktuelle Zeit als einen Wert im @code{'HH:MM:SS'}- oder
-@code{HHMMSS}-format zur�ck, abh�ngig davon, ob die Funktion in einem
-Zeichenketten- oder in einem numerischen Zusammenhang benutzt wird:
-
-@example
-mysql> select CURTIME();
- -> '23:50:26'
-mysql> select CURTIME() + 0;
- -> 235026
-@end example
-
-@findex NOW()
-@findex SYSDATE()
-@findex CURRENT_TIMESTAMP
-@item NOW()
-@itemx SYSDATE()
-@itemx CURRENT_TIMESTAMP
-Gibt das aktuelle Datum und die aktuelle Zeit als einen Wert im
-@code{'YYYY-MM-DD HH:MM:SS'}- oder @code{YYYYMMDDHHMMSS}-Format zur�ck,
-abh�ngig davon, ob die Funktion in einem Zeichenketten- oder in einem
-numerischen Zusammenhang benutzt wird:
-
-@example
-mysql> select NOW();
- -> '1997-12-15 23:50:26'
-mysql> select NOW() + 0;
- -> 19971215235026
-@end example
-
-@findex UNIX_TIMESTAMP()
-@item UNIX_TIMESTAMP()
-@itemx UNIX_TIMESTAMP(datum)
-Ohne Argument aufgerufen gibt die Funktion einen Unix-Zeitstempel zur�ck
-(Sekunden seit @code{'1970-01-01 00:00:00'} GMT). Wenn
-@code{UNIX_TIMESTAMP()} mit einem @code{datum}-Argument aufgerufen wird,
-gibt sie den Wert des Arguments als Sekunden seit @code{'1970-01-01
-00:00:00'} GMT zur�ck. @code{datum} kann eine @code{DATE}-Zeichenkette,
-eine @code{DATETIME}-Zeichenkette, ein @code{TIMESTAMP} oder eine Zahl im
-Format @code{YYMMDD} oder @code{YYYYMMDD} in lokaler Zeit sein:
-
-@example
-mysql> select UNIX_TIMESTAMP();
- -> 882226357
-mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
- -> 875996580
-@end example
-
-Wenn @code{UNIX_TIMESTAMP} auf einer @code{TIMESTAMP}-Spalte benutzt wird,
-erh�lt die Funktion den Wert direkt, ohne implizite
-``zeichenkette-zu-unix-zeitstempel''-Umwandlung. Wenn Sie
-@code{UNIX_TIMESTAMP()} einen falschen Wert oder einen Wert ausserhalb des
-Wertebereichs angeben, gibt sie 0 zur�ck.
-
-@findex FROM_UNIXTIME()
-@item FROM_UNIXTIME(unix_zeitstempel)
-Gibt das @code{unix_timestamp}-Argument als Wert im @code{'YYYY-MM-DD
-HH:MM:SS'}- oder @code{YYYYMMDDHHMMSS}-Format zur�ck, abh�ngig davon, ob
-die Funktion in einem Zeichenketten- oder in einem numerischen Zusammenhang
-benutzt wird:
-
-@example
-mysql> select FROM_UNIXTIME(875996580);
- -> '1997-10-04 22:23:00'
-mysql> select FROM_UNIXTIME(875996580) + 0;
- -> 19971004222300
-@end example
-
-@findex FROM_UNIXTIME()
-@item FROM_UNIXTIME(unix_zeitstempel,format)
-Gibt das @code{unix_timestamp}-Argument als Wert zur�ck, der wie mit der
-@code{format}-Zeichenkette angegeben formatiert ist. @code{format} kann
-dieselben Spezifikatoren wie die @code{DATE_FORMAT()}-Funktion enthalten:
-
-@example
-mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
- '%Y%D%M%h:%i:%s%x');
- -> '1997 23rd December 03:43:30 x'
-@end example
-
-@findex SEC_TO_TIME()
-@item SEC_TO_TIME(sekunden)
-Gibt das @code{sekunden}-Argument, umgewandelt in Stunden, Minuten und
-Sekunden, als Wert im @code{'HH:MM:SS'}- oder @code{HHMMSS}-Format zur�ck,
-abh�ngig davon, ob die Funktion in einem Zeichenketten- oder in einem
-numerischen Zusammenhang benutzt wird:
-
-@example
-mysql> select SEC_TO_TIME(2378);
- -> '00:39:38'
-mysql> select SEC_TO_TIME(2378) + 0;
- -> 3938
-@end example
-
-@findex TIME_TO_SEC()
-@item TIME_TO_SEC(zeit)
-Gibt das @code{zeit}-Argument, umgewandelt in Sekunden, zur�ck:
-
-@example
-mysql> select TIME_TO_SEC('22:23:00');
- -> 80580
-mysql> select TIME_TO_SEC('00:39:38');
- -> 2378
-@end example
-@end table
-
-
-@node Other Functions, Group by functions, Date and time functions, Functions
-@c German node Weitere Funktionen
-@subsection Weitere Funktionen
-
-
-
-@menu
-* Bit functions::
-* Miscellaneous functions::
-@end menu
-
-@node Bit functions, Miscellaneous functions, Other Functions, Other Functions
-@c German node Bit-Funktionen
-@subsubsection Bit-Funktionen
-
-@findex arithmetische Funktionen
-@findex Bit-Funktionen
-@findex Funktionen, arithmetische
-@findex Funktionen, Bit-
-
-MySQL benutzt @code{BIGINT}-Berechnungen (64-Bit) f�r Bit-Operationen, so
-dass diese Operatoren einen maximalen Wertebereich von 64 Bits haben.
-
-@table @code
-@findex | (bitweises OR)
-@findex OR, bitweises
-@item |
-Bitweises OR:
-@example
-mysql> select 29 | 15;
- -> 31
-@end example
-
-@findex & (bitweises AND)
-@findex AND, bitweises
-@item &
-Bitweises AND:
-@example
-mysql> select 29 & 15;
- -> 13
-@end example
-
-@findex << (left shift)
-@item <<
-Verschiebt eine @code{BIGINT}-Zahl nach links:
-@example
-mysql> select 1 << 2;
- -> 4
-@end example
-
-@findex >> (right shift)
-@item >>
-Verschiebt eine @code{BIGINT}-Zahl nach rechts:
-@example
-mysql> select 4 >> 2;
- -> 1
-@end example
-
-@findex ~
-@item ~
-Invertiert alle Bits:
-@example
-mysql> select 5 & ~1;
- -> 4
-@end example
-
-@findex BIT_COUNT()
-@item BIT_COUNT(N)
-Gibt die Anzahl von Bits, die im Argument @code{N} gesetzt sind, zur�ck:
-@example
-mysql> select BIT_COUNT(29);
- -> 4
-@end example
-@end table
-
-
-@node Miscellaneous functions, , Bit functions, Other Functions
-@c German node Verschiedene Funktionen
-@subsubsection Verschiedene Funktionen
-
-@findex Verschiedene Funktionen
-@findex Funktionen, verschiedene
-
-@table @code
-@findex DATABASE()
-@item DATABASE()
-Gibt den aktuellen Datenbanknamen zur�ck:
-
-@example
-mysql> select DATABASE();
- -> 'test'
-@end example
-
-Wenn es keine aktuelle Datenbank gibt, gibt @code{DATABASE()} die leere
-Zeichenkette zur�ck.
-
-@findex USER()
-@findex SYSTEM_USER()
-@findex SESSION_USER()
-@item USER()
-@itemx SYSTEM_USER()
-@itemx SESSION_USER()
-Gibt den aktuellen MySQL-Benutzernamen zur�ck:
-
-@example
-mysql> select USER();
- -> 'heinzholger@@localhost'
-@end example
-
-Ab MySQL-Version 3.22.11 beinhaltet dieser Wert den Client-Hostnamen sowie
-den Benutzernamen. Sie k�nnen nur den Benutzernamen-Anteil wie folgt
-extrahieren (was funktioniert, ob der Wert nun einen Hostnamen-Anteil hat
-oder nicht):
-
-@example
-mysql> select substring_index(USER(),"@@",1);
- -> 'heinzholger'
-@end example
-
-@findex PASSWORD()
-@item PASSWORD(zeichenkette)
-
-Berechnet eine Passwort-Zeichenkette aus dem Klartext-Passwort
-@code{zeichenkette}. Diese Funktion wird benutzt, um MySQL-Passw�rter zum
-Speichern in der @code{Password}-Spalte der
-@code{user}-Berechtigungstabelle zu verschl�sseln:
-
-@example
-mysql> select PASSWORD('schlechtespasswort');
- -> '1ccbb34b4e2b2f95'
-@end example
-
-@cindex Passwort-Verschl�sselung, Umkehrbarkeit
-Die @code{PASSWORD()}-Verschl�sselung ist nicht umkehrbar.
-
-@code{PASSWORD()} f�hrt keine Passwort-Verschl�sselung in der Art durch,
-wie Unix-Passw�rter verschl�sselt werden. Sie sollten nicht annehmen, dass
-Ihr Unix-Passwort und Ihr MySQL-Passwort dasselbe sind. @code{PASSWORD()}
-ergibt denselben verschl�sselten Wert, wie er in der Unix-Passwortdatei
-gespeichert ist. Siehe @code{ENCRYPT()}.
-
-@findex ENCRYPT()
-@item ENCRYPT(zeichenkette[,salt])
-Verschl�sselt @code{zeichenkette} unter Benutzung des
-Unix-@code{crypt()}-Systemaufrufs. Das @code{salt}-Argument sollte eine
-Zeichenkette mit zwei Zeichen sein (ab MySQL-Version 3.22.16 darf
-@code{salt} l�nger als zwei Zeichen sein):
-
-@example
-mysql> select ENCRYPT("hello");
- -> 'VxuFAJXVARROc'
-@end example
-
-Wenn @code{crypt()} auf Ihrem System nicht verf�gbar ist, gibt
-@code{ENCRYPT()} immer @code{NULL} zur�ck.
-
-@code{ENCRYPT()} ignoriert alle ausser den ersten 8 Zeichen von
-@code{zeichenkette}, zumindest auf einigen Systemen. Das wird durch den
-zugrunde liegenden @code{crypt()}-Systemaufruf festgelegt.
-
-@findex ENCODE()
-@item ENCODE(zeichenkette,passwort_zeichenkette)
-Verschl�sselt @code{zeichenkette}, indem @code{passwort_zeichenkette} als
-Passwort benutzt wird. Um das Ergebnis zu entschl�sseln, benutzen Sie
-@code{DECODE()}.
-
-Das Ergebnis ist eine bin�re Zeichenkette derselben L�nge wie
-@code{zeichenkette}. Wenn Sie sie in einer Spalte speichern wollen,
-benutzen Sie eine @code{BLOB}-Spalte.
-
-@findex DECODE()
-@item DECODE(crypt_zeichenkette,passwort_zeichenkette)
-Entschl�sselt die verschl�sselte Zeichenkette @code{crypt_zeichenkette},
-indem @code{passwort_zeichenkette} als Passwort benutzt wird.
-@code{crypt_zeichenkette} sollte eine Zeichenkette sein, die von
-@code{ENCODE()} zur�ckgegeben wird.
-
-@findex MD5()
-@item MD5(zeichenkette)
-Berechnet eine MD5-Pr�fsumme f�r die Zeichenkette. Der Wert wird als eine
-32 Stellen lange hexadezimale Zahl zur�ckgegeben, die zum Beispiel als
-Hash-Schl�ssel benutzt werden kann:
-
-@example
-mysql> select MD5("testing");
- -> 'ae2b1fca515949e5d54fb22b8ed95575'
-@end example
-
-Das ist ein "RSA Data Sicherheit, Inc. MD5 Message-Digest Algorithm".
-
-@findex LAST_INSERT_ID([ausdruck])
-@item LAST_INSERT_ID([ausdruck])
-Gibt den letzten automatisch erzeugten Wert zur�ck, der in eine
-@code{AUTO_INCREMENT}-Spalte eingef�gt wurde. @xref{mysql_insert_id,,
-@code{mysql_insert_id()}}.
-
-@example
-mysql> select LAST_INSERT_ID();
- -> 195
-@end example
-
-Die letzte ID, die erzeugt wurde, wird im Server f�r jede Verbindung
-separat gespeichert. Sie wird nicht durch andere Clients ge�ndert. Sie wird
-nicht einmal ge�ndert, wenn Sie eine andere @code{AUTO_INCREMENT}-Spalte
-mit einem nicht 'magischen' Wert aktualisieren (also einem Wert, der nicht
-@code{NULL} und nicht @code{0} ist).
-
-Wenn Sie viele Zeilen zugleich mit einem Insert-Statement einf�gen, gibt
-@code{LAST_INSERT_ID()} den Wert f�r die erste eingef�gte Zeile zur�ck. Der
-Grund daf�r liegt darin, dass es Ihnen dadurch erm�glicht wird, dasselbe
-@code{INSERT}-Statement auf einfache Weise auf einem anderen Server zu
-reproduzieren.
-
-@cindex Zahlenfolgen-Emulation
-Wenn @code{ausdruck} als Argument zu @code{LAST_INSERT_ID()} angegeben
-wird, wird der Wert des Arguments von der Funktion zur�ckgegeben, als
-n�chster Wert gesetzt, der von @code{LAST_INSERT_ID()} zur�ckgegeben wird
-und als n�chster auto_increment-Wert benutzt. Damit k�nnen Sie Zahlenfolgen
-emulieren:
-
-Erzeugen Sie zuerst die Tabelle:
-
-@example
-mysql> create table sequenz (id int not null);
-mysql> insert into sequenz values (0);
-@end example
-
-Danach kann die Tabelle benutzt werden, um wie folgt Zahlenfolgen zu
-erzeugen:
-
-@example
-mysql> update sequenz set id=LAST_INSERT_ID(id+1);
-@end example
-
-Sie k�nnen Zahlenfolgen erzeugen, ohne @code{LAST_INSERT_ID()} aufzurufen,
-aber der Nutzen, die Funktion auf diese Art zu benutzen, liegt darin, dass
-der ID-Wert im Server als letzter automatisch erzeugter Wert gehalten wird.
-Sie k�nnen die neue ID auf dieselbe Art abrufen, wie Sie jeden anderen
-normalen @code{AUTO_INCREMENT}-Wert in MySQL lesen w�rden.
-@code{LAST_INSERT_ID()} (ohne Argument) zum Beispiel gibt die neue ID
-zur�ck. Die C-API-Funktion @code{mysql_insert_id()} kann ebenfalls benutzt
-werden, um den Wert zu erhalten.
-
-Beachten Sie, dass Sie diese Funktion nicht benutzen k�nnen, um den Wert
-von @code{LAST_INSERT_ID(ausdruck)} abzurufen, nachdem Sie andere
-SQL-Statements wie @code{SELECT} oder @code{SET} ausgef�hrt haben, weil
-@code{mysql_insert_id()} nur nach @code{INSERT}- und
-@code{UPDATE}-Statements aktualisiert wird.
-
-
-@findex FORMAT()
-@item FORMAT(X,D)
-Formatiert die Zahl @code{X} in ein Format wie @code{'#,###,###.##'},
-gerundet auf @code{D} Dezimalstellen. Wenn @code{D} @code{0} ist, hat das
-Ergebnis keinen Dezimalpunkt oder Bruchteil:
-
-@example
-mysql> select FORMAT(12332.123456, 4);
- -> '12,332.1235'
-mysql> select FORMAT(12332.1,4);
- -> '12,332.1000'
-mysql> select FORMAT(12332.2,0);
- -> '12,332'
-@end example
-
-@findex VERSION()
-@item VERSION()
-Gibt eine Zeichenkette zur�ck, die die MySQL-Serverversion anzeigt:
-
-@example
-mysql> select VERSION();
- -> '3.23.13-log'
-@end example
-
-Wenn Ihre Versionsnummer mit @code{-log} endet, bedeutet das, dass Loggen
-angeschaltet ist.
-
-@findex CONNECTION_ID()
-@item CONNECTION_ID()
-Gibt die Verbindungskennnummer (@code{Thread_id}) f�r die Verbindung
-zur�ck. Jede Verbindung hat ihre eigene eindeutige Kennnummer:
-
-@example
-mysql> select CONNECTION_ID();
- -> 1
-@end example
-
-@cindex Zeit�berschreitung (Timeout)
-@findex GET_LOCK()
-@item GET_LOCK(zeichenkette,zeitueberschreitung)
-Versucht, eine Sperre mit dem Namen, der durch die Zeichenkette
-@code{zeichenkette} angegeben wird, zu erlangen, mit einem Timeout von
-@code{zeitueberschreitung} Sekunden. Gibt @code{1} zur�ck, wenn die Sperre
-erfolgreich erlangt wurde, und @code{0}, wenn der Versuch wegen
-Zeit�berschreitung abgebrochen wurde, oder @code{NULL}, wenn ein Fehler
-auftrat (wenn zum Beispiel kein Arbeitsspeicher mehr frei ist oder der
-Thread mit @code{mysqladmin kill} gekillt wurde). Eine Sperre wird
-aufgehoben, wenn Sie @code{RELEASE_LOCK()} ausf�hren, einen neuen
-@code{GET_LOCK()} ausf�hren oder der Thread beendet wird. Diese Funktion
-kann benutzt werden, um Applikations-Sperren zu implementieren oder um
-Datensatz-Sperren zu simulieren. Sie blockiert Anfragen von anderen Clients
-nach Sperren mit demselben Namen; Clients, die sich auf einen angegebenen
-Namen f�r die Sperr-Zeichenkette einigen, k�nnen die Zeichenkette benutzen,
-um kooperatives beratendes Sperren (advisory locking) auszuf�hren:
-
-@example
-mysql> select GET_LOCK("lock1",10);
- -> 1
-mysql> select GET_LOCK("lock2",10);
- -> 1
-mysql> select RELEASE_LOCK("lock2");
- -> 1
-mysql> select RELEASE_LOCK("lock1");
- -> NULL
-@end example
-
-Beachten Sie, dass der zweite @code{RELEASE_LOCK()}-Aufruf @code{NULL}
-zur�ckgibt, weil die Sperre @code{"lock1"} automatisch durch den zweiten
-@code{GET_LOCK()}-Aufruf aufgehoben wurde.
-
-@findex RELEASE_LOCK()
-@item RELEASE_LOCK(zeichenkette)
-Hebt die Sperre auf, die durch die Zeichenkette @code{zeichenkette} benannt
-ist, die mit @code{GET_LOCK()} erlangt wurde. Gibt @code{1} zur�ck, wenn
-die Sperre aufgehoben wurde, und @code{0}, wenn die Sperre nicht durch
-diesen Thread gemacht wurde (in diesem Fall wird die Sperre nicht
-aufgehoben), oder @code{NULL}, wenn die benannte Sperre nicht existiert.
-Die Sperre existiert nicht, wenn sie nie durch einen Aufruf von
-@code{GET_LOCK()} erlangt wurde oder wenn sie bereits aufgehoben wurde.
-
-@findex BENCHMARK()
-@item BENCHMARK(zaehler,ausdruck)
-Die @code{BENCHMARK()}-Funktion den Ausdruck @code{ausdruck} wiederholt
-@code{zaehler} mal aus. Sie kann benutzt werden, um die Zeit zu ermitteln,
-die MySQL ben�tigt, um den Ausdruck zu verarbeiten. Der Ergebniswert ist
-immer @code{0}. Die Funktion ist f�r die Benutzung im @code{mysql}-Client
-gedacht, der die Ausf�hrungszeiten von Anfragen zum Beispiel wie folgt
-darstellt:
-
-@example
-mysql> select BENCHMARK(1000000,encode("hello","goodbye"));
-+----------------------------------------------+
-| BENCHMARK(1000000,encode("hello","goodbye")) |
-+----------------------------------------------+
-| 0 |
-+----------------------------------------------+
-1 row in set (4.74 sec)
-@end example
-
-Die berichtete Zeit ist die am Client-Ende verstrichene Zeit, nicht die
-Prozessorzeit am Server-Ende. Es ist ratsam, @code{BENCHMARK()} mehrere
-Male auszuf�hren und das Ergebnis unter Ber�cksichtigung der Last, unter
-der die Server-Maschine f�hrt, zu interpretieren.
-
-@findex INET_NTOA()
-@item INET_NTOA(ausdruck)
-Gibt die Netzwerk-Adresse (4 oder 8 Bytes) f�r den numerischen Ausdruck
-zur�ck:
-
-@example
-mysql> select INET_NTOA(3520061480);
- -> "209.207.224.40"
-@end example
-
-@findex INET_ATON()
-@item INET_ATON(ausdruck)
-Gibt eine Ganzzahl zur�ck, die den numerischen Wert einer Netzwerk-Adresse
-darstellt. Adressen k�nnen 4-Byte- oder 8-Byte-Adressen sein:
-
-@example
-mysql> select INET_ATON("209.207.224.40");
- -> 3520061480
-@end example
-
-Die erzeugte Zahl ist immer in Netzwerk-Byte-Reihenfolge; die obige Zahl
-wird zum Beispiel errechnet als @code{209*255^3 + 207*255^2 + 224*255
-+40}.
-
-@findex MASTER_POS_WAIT()
-@item MASTER_POS_WAIT(log_name, log_position)
-Blockiert, bis der Slave w�hrend der Replikation die festgelegte Position
-in der Master-Log-Datei erreicht. Wenn die Master-Information nicht
-initialisiert wird, wird NULL zur�ckgegeben. Wenn der Slave nicht l�uft,
-blockiert die Funktion und wartet, bis er gestartet wurde, und geht dann
-hinter die angegebene Position. Wenn der Slave bereits hinter der
-angegebenen Position ist, kehrt die Funktion sofort zur�ck. Der
-R�ckgabewert ist die Anzahl von Log-Events, die sie warten muss, um bis zur
-angegebenen Position zu kommen, oder NULL in Fehlerf�llen. N�tzlich f�r die
-Steuerung der Master-Slave-Synchronisation, aber urspr�nglich geschrieben,
-um das Testen der Replikation zu erleichtern.
-@end table
-
-
-@node Group by functions, , Other Functions, Functions
-@c German node GROUP-BY-Funktionen
-@subsection Funktionen zur Benutzung bei @code{GROUP BY}-Klauseln
-
-@findex GROUP-BY-Funktionen
-@findex Funktionen, GROUP BY
-
-Wenn Sie in einem Statement eine Gruppierungsfunktion benutzen, die
-keine @code{GROUP BY}-Klausel enth�lt, ist das gleichbedeutend mit der
-Gruppierung aller Zeilen.
-
-@table @code
-@findex COUNT()
-@item COUNT(ausdruck)
-Gibt die Anzahl der Zeilen mit Nicht-@code{NULL}-Werten zur�ck, die
-durch ein @code{SELECT}-Statement abgerufen werden:
-
-@example
-mysql> select student.student_name,COUNT(*)
- from student,kurs
- where student.student_id=kurs.student_id
- GROUP BY student_name;
-
-@end example
-
-@code{COUNT(*)} ist insofern anders, als es die Anzahl der abgerufenen
-Zeilen zur�ckgibt, egal ob sie @code{NULL}-Werte enthalten oder nicht.
-
-@code{COUNT(*)} ist darauf optimiert, das Ergebnis sehr schnell
-zur�ckzugeben, wenn es mittels eines @code{SELECT} von einer Tabelle
-abruft, wenn keine weiteren Spalten abgerufen werden und es keine
-@code{WHERE}-Klausel gibt. Beispiel:
-
-@example
-mysql> select COUNT(*) from student;
-@end example
-
-@findex COUNT(DISTINCT)
-@findex DISTINCT
-@item COUNT(DISTINCT ausdruck,[ausdruck...])
-Gibt die Anzahl unterschiedlicher Nich-@code{NULL}-Werte zur�ck:
-
-@example
-mysql> select COUNT(DISTINCT ergebnisse) from student;
-@end example
-
-Bei MySQL erhalten Sie die Anzahl unterschiedlicher
-Ausdruckskombinationen, die nicht NULL enthalten, indem Sie eine Liste
-von Ausdr�cken angeben. In ANSI-SQL m�ssten Sie eine Verkettung aller
-Ausdr�cke innerhalb von @code{CODE(DISTINCT ..)} angeben.
-
-@findex AVG()
-@item AVG(ausdruck)
-Gibt den Durchschnittswert von @code{ausdruck} zur�ck:
-
-@example
-mysql> select student_name, AVG(test_ergebnis)
- from student
- GROUP BY student_name;
-@end example
-
-@findex MIN()
-@findex MAX()
-@item MIN(ausdruck)
-@itemx MAX(ausdruck)
-Gibt den kleinsten oder gr��ten Wert von @code{ausdruck} zur�ck.
-@code{MIN()} und @code{MAX()} k�nnen Zeichenketten-Argumente aufnehmen
-und geben in solchen F�llen den kleinsten oder gr��ten Zeichenketten-
-Wert zur�ck. @xref{MySQL indexes}.
-
-@example
-mysql> select student_name, MIN(test_ergebnis), MAX(test_ergebnis)
- from student
- GROUP BY student_name;
-@end example
-
-@findex SUM()
-@item SUM(ausdruck)
-Gibt die Summe von @code{ausdruck} zur�ck. Beachten Sie, dass der
-R�ckgabewert NULL ist, wenn die Ergebnismenge keine Zeilen hat!
-
-@findex STD()
-@findex STDDEV()
-@cindex Oracle-Kompatibilit�t
-@cindex Kompatibilit�t, mit Oracle
-@item STD(ausdruck)
-@itemx STDDEV(ausdruck)
-Gibt die Standardabweichung von @code{ausdruck} zur�ck. Das ist eine
-Erweiterung zu ANSI-SQL. Die @code{STDDEV()}-Form dieser Funktion wird
-aus Gr�nden der Oracle-Kompatibilit�t zur Verf�gung gestellt.
-
-@findex BIT_OR()
-@item BIT_OR(ausdruck)
-Gibt das bitweise @code{OR} aller Bits in @code{ausdruck} zur�ck. Die
-Berechnung wird mit 64-Bit-(@code{BIGINT})-Genauigkeit durchgef�hrt.
-
-@findex BIT_AND()
-@item BIT_AND(ausdruck)
-Gibt das bitweise @code{AND} aller Bits in @code{ausdruck} zur�ck. Die
-Berechnung wird mit 64-Bit-(@code{BIGINT})-Genauigkeit durchgef�hrt.
-@end table
-
-@cindex @code{GROUP BY}, Erweiterungen zu ANSI-SQL
-MySQL hat die Benutzung von @code{GROUP BY} erweitert. Sie k�nnen
-Spalten oder Berechnungen im @code{SELECT}-Ausdruck angeben, die nicht
-im @code{GROUP BY}-Teil erscheinen. Das steht f�r @emph{jeden m�glichen
-Wert f�r diese Gruppe}. Das k�nnen Sie benutzen, um bessere Performance
-zu erzielen, indem Sie Sortieren und Gruppieren unn�tiger Bestandteile
-vermeiden. Zum Beispiel m�ssen Sie in folgender Anfrage nicht nach
-@code{kunde.name} gruppieren:
-
-@example
-mysql> select bestellung.kunde_id,kunde.name,max(zahlungen)
- from bestellung,kunde
- where bestellung.kunde_id = kunde.kunde_id
- GROUP BY bestellung.kunde_id;
-@end example
-
-In ANSI-SQL m�ssten Sie der @code{GROUP BY}-Klausel @code{kunde.name}
-hinzuf�gen. In MySQL ist der Name �berfl��ig, solange Sie nicht im
-ANSI-Modus fahren.
-
-@strong{Benutzen Sie dieses Feature nicht}, wenn die Spalten, die Sie im
-@code{GROUP BY}-Teil auslassen, in der Gruppe nicht eindeutig sind!
-Sonst erhalten Sie unvorhersagbare Ergebnisse.
-
-In einigen F�llen k�nnen Sie @code{MIN()} und @code{MAX()} benutzen, um
-einen bestimmten Spaltenwert zu erhalten, selbst wenn er nicht eindeutig
-ist. Folgendes gibt den Wert von @code{spalte} aus der Zeile zur�ck, die
-den kleinsten Wert in der @code{sortierung}-Spalte enth�lt:
-
-@example
-substr(MIN(concat(rpad(sortierung,6,' '),spalte)),7)
-@end example
-
-@node Data Manipulation, Data Definition, Functions, Reference
-@c German node Datenmanipulation
-@section Datenmanipulation: @code{SELECT}, @code{INSERT}, @code{UPDATE}, @code{DELETE}
-
-
-
-@menu
-* SELECT::
-* HANDLER::
-* INSERT::
-* INSERT DELAYED::
-* UPDATE::
-* DELETE::
-* TRUNCATE::
-* REPLACE::
-* LOAD DATA::
-@end menu
-
-@node SELECT, HANDLER, Data Manipulation, Data Manipulation
-@c German node SELECT
-@subsection @code{SELECT}-Syntax
-
-@findex SELECT
-
-@c help SELECT
-@example
-SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
- [HIGH_PRIORITY]
- [DISTINCT | DISTINCTROW | ALL]
- select_ausdruck,...
- [INTO @{OUTFILE | DUMPFILE@} 'datei' export_optionen]
- [FROM tabellenreferenz
- [WHERE where_definition]
- [GROUP BY @{positive_ganzzahl | spalten_name | formel@} [ASC | DESC], ...]
- [HAVING where_definition]
- [ORDER BY @{positive_ganzzahl | spalten_name | formel@} [ASC | DESC] ,...]
- [LIMIT [offset,] zeilen]
- [PROCEDURE prozedur_name]
- [FOR UPDATE | LOCK IN SHARE MODE]]
-@end example
-@c help end
-
-@code{SELECT} wird benutzt, um ausgew�hlte Zeilen aus einer oder mehreren
-Tabellen abzurufen. @code{select_ausdruck} gibt die Spalten an, die Sie
-abrufen wollen. @code{SELECT} kann auch benutzt werden, um Zeilen ohne
-Bezug zu irgend einer Tabelle abzurufen. Beispiel:
-
-@example
-mysql> SELECT 1 + 1;
- -> 2
-@end example
-
-Alle benutzten Schl�sselw�rter m�ssen genau in der oben angegebenen
-Reihenfolge genannt werden. Beispielsweise muss eine @code{HAVING}-Klausel
-nach jeglicher @code{GROUP BY}-Klausel und vor jeglicher @code{ORDER
-BY}-Klausel kommen.
-
-@itemize @bullet
-
-@item
-@cindex Aliase, f�r Ausdr�cke
-@cindex Ausdruck-Aliase
-Einem @code{SELECT}-Ausdruck kann mit @code{AS} ein Alias zugewiesen
-werden. Der Alias wird als Spaltenname verwendet und kann bei @code{ORDER
-BY}- oder @code{HAVING}-Klauseln benutzt werden. Beispiel:
-
-@example
-mysql> select concat(nachname,', ',vorname) AS voller_name
- from tabelle ORDER BY voller_name;
-@end example
-
-@item
-The @code{FROM tabellenreferenz}-Klausel gibt die Tabellen an, aus denen
-Zeilen abgerufen werden sollen. Wenn Sie mehr als eine Tabelle auff�hren,
-f�hren Sie einen Join durch. Informationen �ber die Join-Syntax finden Sie
-unter @ref{JOIN, , @code{JOIN}}.
-
-@item
-Sie k�nnen auf eine Spalte als @code{spalten_name} verweisen, als
-@code{tabelle.spalten_name} oder als @code{datenbank.tabelle.spalten_name}.
-Sie m�ssen das @code{tabelle}- oder @code{datenbank.tabelle}-Pr�fix f�r
-einen Spaltenverweis in einem @code{SELECT}-Statement nicht angeben, es sei
-denn, der Verweis w�re ansonsten mehrdeutig. Sie @ref{Legal names}; hier
-finden sich Beispiele von Mehrdeutigkeit, die erfordern, dass Sie
-ausf�hrlichere Spaltenverweis-Formen benutzen.
-
-@item
-@cindex Aliase, f�r Tabellen
-@cindex Tabellen-Aliase
-Einem Tabellenverweis kann mit @code{tabelle [AS] alias_name} ein
-Tabellen-Alias zugewiesen werden:
-
-@example
-mysql> select t1.name, t2.gehalt from angestellte AS t1, info AS t2
- where t1.name = t2.name;
-mysql> select t1.name, t2.gehalt from angestellte t1, info t2
- where t1.name = t2.name;
-@end example
-
-@item
-Auf Spalten, die f�r die Ausgabe ausgew�hlt wurden, kann in @code{ORDER
-BY}- und @code{GROUP BY}-Klauseln mit Spaltennamen, Spalten-Aliasen oder
-Spaltenpositionen verwiesen werden. Spaltenpositionen fangen mit 1 an:
-
-@example
-mysql> select hochschule, region, seed von tournament
- ORDER BY region, seed;
-mysql> select hochschule, region AS r, seed AS s from turnier
- ORDER BY r, s;
-mysql> select hochschule, region, seed from turnier
- ORDER BY 2, 3;
-@end example
-
-Um in absteigender Reihenfolge zu sortieren, f�gen Sie dem Namen der
-Spalte das @code{DESC}-Schl�sselwort in the @code{ORDER BY}-Klausel hinzu
-(descending, absteigend), nach der Sie sortieren. Die Vorgabe ist
-aufsteigende Reihenfolge. Das k�nnen Sie auch explizit angeben, indem Sie
-das @code{ASC}-Schl�sselwort verwenden.
-
-@item
-In der @code{WHERE}-Klausel k�nnen Sie beliebige Funktionen verwenden, die
-MySQL unterst�tzt. @xref{Functions}.
-
-@item
-Die @code{HAVING}-Klausel kann auf jede Spalte oder jeden Alias verweisen,
-die bzw. der im @code{select_ausdruck} genannt wurde. Die Klausel wird
-zuletzt angewandt, direkt bevor Ergebnisse an den Client geschickt werden,
-ohne jede Optimierung. Benutzen Sie kein @code{HAVING} f�r Dinge, die in
-der @code{WHERE}-Klausel stehen sollten. Schreiben Sie beispielsweise nicht
-folgendes:
-
-@example
-mysql> select spalten_name from tabelle HAVING spalten_name > 0;
-@end example
-
-Sondern statt dessen:
-
-@example
-mysql> select spalten_name from tabelle WHERE spalten_name > 0;
-@end example
-
-Ab MySQL-Version 3.22.5 k�nnen Sie Anfragen auch wie folgt schreiben:
-
-@example
-mysql> select user,max(gehalt) from benutzer
- group by benutzer HAVING max(gehalt)>10;
-@end example
-
-In �lteren MySQL-Versionen schreiben Sie statt dessen:
-
-@example
-mysql> select benutzer,max(gehalt) AS summe from benutzer
- group by benutzer HAVING summe>10;
-@end example
-
-@item
-@code{SQL_SMALL_RESULT}, @code{SQL_BIG_RESULT}, @code{SQL_BUFFER_RESULT},
-@code{STRAIGHT_JOIN} und @code{HIGH_PRIORITY} sind MySQL Erweiterungen zu
-ANSI-SQL92.
-
-@item
-@code{HIGH_PRIORITY} gibt dem @code{SELECT} h�here Priorit�t als einem
-Statement, das eine Tabelle aktualisiert. Sie sollten das nur f�r Anfragen
-benutzen, die sehr schnell sind und sofort durchgef�hrt werden m�ssen. Eine
-@code{SELECT HIGH_PRIORITY}-Anfrage l�uft, wenn die Tabelle eine
-Lese-Sperre hat, selbst wenn es ein Update-Statement gibt, das darauf
-wartet, dass die Tabelle freigegeben wird.
-
-@item
-@code{SQL_BIG_RESULT} kann bei @code{GROUP BY} oder @code{DISTINCT} benutzt
-werden, um dem Optimierer mitzuteilen, dass das Ergebnis sehr viele Zeilen
-haben wird. In diesem Fall benutzt MySQL bei Bedarf direkt
-Festplatten-basierende tempor�re Tabellen. Ausserdem bevorzugt MySQL in
-diesem Fall Sortieren vor dem Anlegen einer tempor�ren Tabelle mit einem
-Schl�ssel auf den @code{GROUP BY}-Elementen.
-
-@item
-@cindex @code{GROUP BY}, Erweiterungen zu ANSI-SQL
-Wenn Sie @code{GROUP BY} benutzen, werden die Ausgabe-Zeilen gem�� dem
-@code{GROUP BY} sortiert, als h�tten Sie ein @code{ORDER BY} f�r alle
-Felder im @code{GROUP BY} angegeben. MySQL hat @code{GROUP BY} erweitert,
-so dass Sie daf�r auch @code{ASC} und @code{DESC} angeben k�nnen:
-
-@example
-SELECT a,COUNT(b) FROM tabelle GROUP BY a DESC
-@end example
-
-@item
-MySQL hat die Benutzung von @code{GROUP BY} erweitert, um es Ihnen zu
-gestatten, auch Felder auszuw�hlen, die nicht in der @code{GROUP
-BY}-Klausel erw�hnt wurden. Wenn Sie nicht die Ergebnisse erhalten, die Sie
-von Ihrer Anfrage erwarten, lesen Sie bitte die @code{GROUP
-BY}-Beschreibung.
-
-@item
-@cindex Hinweise
-@code{SQL_BUFFER_RESULT} erzwingt, dass das Ergebnis in eine tempor�re
-Tabelle geschrieben wird. Das hilft MySQL, fr�hzeitig Tabellensperren
-aufzuheben, und hilft in F�llen, in denen es lange dauert, das Ergebnis an
-den Client zu senden.
-
-@item
-@cindex Hinweise
-@code{SQL_SMALL_RESULT}, eine MySQL-spezifische Option, kann bei
-@code{GROUP BY} oder @code{DISTINCT} benutzt werden, um dem Optimierer
-mitzuteilen, dass der Ergebnissatz klein sein wird. In diesem Fall benutzt
-MySQL schnelle tempor�re Tabellen, um die Ergebnistabelle zu speichern,
-anstatt Sortieren zu benutzen. In MySQL-Version 3.23 sollte das
-normalerweise nicht ben�tigt werden.
-
-@item
-@cindex Hinweise
-@code{STRAIGHT_JOIN} zwingt den Optimierer, Tabellen in der Reihenfolge zu
-verkn�pfen, in der sie in der @code{FROM}-Klausel aufgelistet sind. Sie
-k�nnen das benutzen, um die Geschwindigkeit einer Anfrage zu erh�hen, wenn
-der Optimierer Tabellen in nicht optimaler Reihenfolge verkn�pft.
-@xref{EXPLAIN, , @code{EXPLAIN}}.
-
-@item
-Die @code{LIMIT}-Klausel wird benutzt, um die Anzahl von Zeilen, die vom
-@code{SELECT}-Statement zur�ckgegeben werden, zu beschr�nken. @code{LIMIT}
-erwartet ein oder zwei numerische Argumente.
-
-Wenn zwei Argumente angegeben sind, legt das erste den Offset der ersten
-Zeile fest, die zur�ckgegeben wird, und das zweite gibt die maximale Anzahl
-von Zeilen an, die zur�ckgegeben werden. Der Offset der anf�nglichen Zeile
-ist 0 (nicht 1):
-
-@example
-mysql> select * from tabelle LIMIT 5,10; # Zeilen 6 bis 15 zur�ckgeben
-@end example
-
-Wenn ein Argument angegeben wird, stellt es die maximale Anzahl von Zeilen
-dar, die zur�ckgegeben werden:
-
-@example
-mysql> select * from tabelle LIMIT 5; # Die ersten 5 Zeilen zur�ckgeben
-@end example
-
-Mit anderen Worten ist @code{LIMIT n} �quivalent zu @code{LIMIT 0,n}.
-
-@item
-@tindex /etc/passwd
-Die @code{SELECT ... INTO OUTFILE 'datei'}-Form von @code{SELECT} schreibt
-die ausgew�hlten Zeilen in eine Datei. Die Datei wird auf dem Server-Host
-erzeugt und darf nicht bereits bestehen (das verhindert unter anderem, dass
-Datenbanktabellen und Dateien wie @file{/etc/passwd} zerst�rt werden). Sie
-ben�tigen die @strong{file}-Berechtigung auf dem Server-Host, um diese Form
-von @code{SELECT} auszuf�hren.
-
-@code{SELECT ... INTO OUTFILE} ist haupts�chlich daf�r vorgesehen, um eine
-Tabelle auf der Server-Maschine schnell zu dumpen. Wenn Sie die
-resultierende Datei auf einem anderen Host als dem Server-Host haben
-wollen, k�nnen Sie @code{SELECT ... INTO OUTFILE} nicht benutzen. In diesem
-Fall sollten Sie statt dessen ein Client-Programm wie @code{mysqldump
---tab} oder @code{mysql -e "SELECT ..." > outfile} benutzen, um die Datei
-zu erzeugen.
-
-@code{SELECT ... INTO OUTFILE} ist das Komplement von @code{LOAD DATA
-INFILE}; die Syntax f�r den @code{export_optionen}-Teil des Statements
-besteht aus denselben @code{FIELDS}- und @code{LINES}-Klauseln, die beim
-@code{LOAD DATA INFILE}-Statement benutzt werden. @xref{LOAD DATA, ,
-@code{LOAD DATA}}.
-
-In der resultierenden Textdatei werden nur folgende Zeichen durch das
-@code{ESCAPED BY}-Zeichen escapet:
-
-@itemize @bullet
-@item Das @code{ESCAPED BY}-Zeichen
-@item Das erste Zeichen in @code{FIELDS TERMINATED BY}
-@item Das erste Zeichen in @code{LINES TERMINATED BY}
-@end itemize
-
-Zus�tzlich wird @code{ASCII 0} in @code{ESCAPED BY}, gefolgt von 0
-(@code{ASCII 48}), umgewandelt.
-
-Der Grund hierf�r ist, dass Sie jegliche @code{FIELDS TERMINATED BY}-,
-@code{ESCAPED BY}- oder @code{LINES TERMINATED BY}-Zeichen escapen M�SSEN,
-um die Datei zuverl�ssig wieder einlesen zu k�nnen. @code{ASCII 0} wird
-escapet, um das Lesen mit einigen Pagern zu erleichtern.
-
-Weil sich die resultierende Datei nicht nach der SQL-Syntax richten muss,
-muss nicht weiter escapet werden.
-
-Im Folgenden ein Beispiel, wie man eine Datei in einem Format erh�lt, das
-von vielen alten Programmen benutzt wird:
-
-@example
-SELECT a,b,a+b INTO OUTFILE "/tmp/resultat.text"
-FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
-LINES TERMINATED BY "\n"
-FROM tabelle;
-@end example
-
-@item
-@findex DUMPFILE
-Wenn Sie @code{INTO DUMPFILE} anstelle von @code{INTO OUTFILE} benutzen,
-schreibt MySQL nur eine Zeile in die Datei, ohne jede Spalten- oder
-Zeilen-Begrenzer und ohne jedes Escapen. Das ist n�tzlich, wenn Sie ein
-Blob in eine Datei speichern wollen.
-
-@item
-Beachten Sie, dass jede Datei, die von @code{INTO OUTFILE} und @code{INTO
-DUMPFILE} erzeugt wird, f�r alle Benutzer lesbar ist! Der Grund liegt
-darin, dass der MySQL-Server keine Datei erzeugen kann, die jemandem
-anderen geh�rt als dem Benutzer, unter dem er l�uft (Sie sollten
-@code{mysqld} nie als Root laufen lassen), daher muss die Datei f�r
-jedermann lesbar sein, damit Sie die Zeilen abrufen k�nnen.
-
-@item
-Wenn Sie @code{FOR UPDATE} bei einem Tabellen-Handler mit
-Seiten-/Zeilen-Sperren benutzen, werden die untersuchten Zeilen
-schreib-gesperrt.
-@end itemize
-
-
-
-@menu
-* JOIN::
-* UNION::
-@end menu
-
-@node JOIN, UNION, SELECT, SELECT
-@c German node JOIN
-@subsubsection @code{JOIN}-Syntax
-
-@findex JOIN
-@findex INNER JOIN
-@findex CROSS JOIN
-@findex LEFT JOIN
-@findex LEFT OUTER JOIN
-@findex NATURAL LEFT JOIN
-@findex NATURAL LEFT OUTER JOIN
-@findex RIGHT JOIN
-@findex RIGHT OUTER JOIN
-@findex NATURAL RIGHT JOIN
-@findex NATURAL RIGHT OUTER JOIN
-@findex STRAIGHT_JOIN
-
-MySQL unterst�tzt folgende @code{JOIN}-Syntaxen f�r
-@code{SELECT}-Statements:
-
-@example
-tabellen_verweis, tabellen_verweis
-tabellen_verweis [CROSS] JOIN tabellen_verweis
-tabellen_verweis INNER JOIN tabellen_verweis join_bedingung
-tabellen_verweis STRAIGHT_JOIN tabellen_verweis
-tabellen_verweis LEFT [OUTER] JOIN tabellen_verweis join_bedingung
-tabellen_verweis LEFT [OUTER] JOIN tabellen_verweis
-tabellen_verweis NATURAL [LEFT [OUTER]] JOIN tabellen_verweis
-@{ oder tabellen_verweis LEFT OUTER JOIN tabellen_verweis ON bedingungs_ausdruck @}
-tabellen_verweis RIGHT [OUTER] JOIN tabellen_verweis join_bedingung
-tabellen_verweis RIGHT [OUTER] JOIN tabellen_verweis
-tabellen_verweis NATURAL [RIGHT [OUTER]] JOIN tabellen_verweis
-@end example
-
-Wobei @code{tabellen_verweis} definiert ist als:
-@example
-tabelle [[AS] alias] [USE INDEX (schluessel_liste)] [IGNORE INDEX (schluessel_liste)]
-@end example
-
-Und @code{join_bedingung} definiert ist als:
-
-@example
-ON bedingungs_ausdruck |
-USING (spalten_liste)
-@end example
-
-Sie sollten nie irgend welche Bedingungen im @code{ON}-Teil haben, die dazu
-benutzt werden, um die Zeilen, die im Ergebnissatz auftauchen, zu
-beschr�nken. Wenn Sie so etwas tun wollen, m�ssen Sie das in der
-@code{WHERE}-Klausel tun.
-
-Beachten Sie, dass vor Version 3.23.17 @code{INNER JOIN} keine
-@code{join_bedingung} aufnahm!
-
-@cindex ODBC-Kompatibilit�t
-@cindex Kompatibilit�t, mit ODBC
-Die letzte oben dargestellte @code{LEFT OUTER JOIN}-Syntax gibt es nur aus
-Gr�nden der Kompatibilit�t mit ODBC:
-
-@itemize @bullet
-@item
-Einem Tabellenverweis kann mit @code{tabelle AS alias_name} oder
-@code{tabelle alias_name} ein Alias zugewiesen werden:
-
-@example
-mysql> select t1.name, t2.gehalt from angestellte AS t1, info AS t2
- where t1.name = t2.name;
-@end example
-
-@item
-Der @code{ON}-Bedingungscode ist jeglicher Bedingungscode der Form, wie er
-auch in einer @code{WHERE}-Klausel benutzt werden kann.
-
-@item
-Wenn es f�r die rechte Tabelle keinen �bereinstimmenden Datensatz im
-@code{ON}- oder @code{USING}-Teil eines @code{LEFT JOIN} gibt, wird f�r die
-rechte Tabelle eine Zeile benutzt, in der alle Spalten auf @code{NULL}
-gesetzt sind. Das k�nnen Sie benutzen, um Datens�tze in einer Tabelle
-herauszusuchen, die in einer anderen Tabelle kein Gegenst�ck haben:
-
-@example
-mysql> select tabelle1.* from tabelle1
- LEFT JOIN tabelle2 ON tabelle1.id=tabelle2.id
- where tabelle2.id is NULL;
-@end example
-
-Dieses Beispiel findet alle Zeilen in @code{tabelle1} mit einem
-@code{id}-Wert, der in @code{tabelle2} nicht vorhanden ist (also alle
-Zeilen in @code{tabelle1} ohne entsprechende Zeile in @code{tabelle2}).
-Hierbei wird nat�rlich angenommen, dass @code{tabelle2.id} als @code{NOT
-NULL} deklariert ist. @xref{LEFT JOIN optimisation}.
-
-@item
-Die @code{USING}-@code{(spalten_liste)}-Klausel nennt eine Auflistung von
-Spalten, die in beiden Tabellen existieren m�ssen. Eine
-@code{USING}-Klausel wie:
-
-@example
-A LEFT JOIN B USING (C1,C2,C3,...)
-@end example
-
-Ist definiert als semantisch identisch mit einem @code{ON}-Ausdruck wie
-diesem:
-
-@example
-A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...
-@end example
-
-@item
-Der @code{NATURAL [LEFT] JOIN} zweier Tabellen ist definiert als semantisch
-identisch �quivalent zu einem @code{INNER JOIN} oder einem @code{LEFT JOIN}
-mit einer @code{USING}-Klausel, die alle Spalten nennt, die in beiden
-Tabellen existieren.
-
-@item
-@code{RIGHT JOIN} funktioniert analog wie @code{LEFT JOIN}. Um Code
-zwischen Datenbanken portabel zu halten, wird empfohlen, @code{LEFT JOIN}
-anstelle von @code{RIGHT JOIN} zu benutzen.
-
-@item
-@cindex Hinweise
-@code{STRAIGHT_JOIN} ist identisch mit @code{JOIN}, ausser dass die linke
-Tabelle immer vor der rechten Tabelle gelesen wird. Das kann in den
-(wenigen) F�llen benutzt werden, wo der Optimierer die Tabellen in die
-falsche Reihenfolge bringt.
-
-@item
-@cindex Hinweise
-Ab MySQL-Version 3.23.12 k�nnen Sie Hinweise dar�ber geben, welchen Index
-MySQL benutzen sollte, wenn Informationen aus einer Tabelle abgerufen
-werden. Das ist n�tzlich, wenn @code{EXPLAIN} zeigt, dass MySQL den
-falschen Index benutzt. Indem Sie @code{USE INDEX (schluessel_liste)}
-angeben, k�nnen Sie MySQL anweisen, nur einen der angegebenen Indexe zu
-benutzen, um Zeilen in der Tabelle zu finden. Die alternative Syntax
-@code{IGNORE INDEX (schluessel_liste)} kann benutzt werden, um MySQL
-anzuweisen, einen bestimmten Index nicht zu benutzen.
-@end itemize
-
-Einige Beispiele:
-
-@example
-mysql> select * from tabelle1,tabelle2 where tabelle1.id=tabelle2.id;
-mysql> select * from tabelle1 LEFT JOIN tabelle2 ON tabelle1.id=tabelle2.id;
-mysql> select * from tabelle1 LEFT JOIN tabelle2 USING (id);
-mysql> select * from tabelle1 LEFT JOIN tabelle2 ON tabelle1.id=tabelle2.id
- LEFT JOIN table3 ON tabelle2.id=table3.id;
-mysql> select * from tabelle1 USE INDEX (schluessel1,schluessel2) WHERE schluessel1=1 und schluessel2=2 AND
- schluessel3=3;
-mysql> select * from tabelle1 IGNORE INDEX (schluessel3) WHERE schluessel1=1 und schluessel2=2 AND
- schluessel3=3;
-@end example
-
-@xref{LEFT JOIN optimisation, , @code{LEFT JOIN}-Optimierung}.
-
-
-@node UNION, , JOIN, SELECT
-@c German node UNION
-@subsubsection @code{UNION}-Syntax
-
-@findex UNION
-
-@example
-SELECT ....
-UNION [ALL]
-SELECT ....
- [UNION
- SELECT ...]
-@end example
-
-@code{UNION} ist implementiert in MySQL 4.0.0.
-
-@code{UNION} wird benutzt, um das Ergebnis vieler @code{SELECT}-Statements
-in einem Ergebnissatz zu kombinieren.
-
-Die @code{SELECT}-Befehle sind normale SELECT-Befehle, aber mit folgenden
-Einschr�nkungen:
-
-@itemize @bullet
-@item
-Nur der letzte @code{SELECT}-Befehl darf @code{INTO OUTFILE} enthalten.
-@item
-Nur der letzte @code{SELECT}-Befehl darf @code{ORDER BY} enthalten.
-@end itemize
-
-Wenn Sie das Schl�sselwort @code{ALL} f�r @code{UNION} nicht benutzen, sind
-alle zur�ckgegebenen Zeilen eindeutig (unique), als h�tten Sie ein
-@code{DISTINCT} f�r den gesamten Ergebnissatz gemacht. Wenn Sie @code{ALL}
-angeben, erhalten Sie alle �bereinstimmenden Zeilen von allen benutzten
-@code{SELECT}-Statements.
-
-@node HANDLER, INSERT, SELECT, Data Manipulation
-@c German node INSERT
-@subsection @code{INSERT}-Syntax
-
-@findex INSERT
-
-@example
- INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
- [INTO] tabelle [(spalten_name,...)]
- VALUES (ausdruck,...),(...),...
-oder INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
- [INTO] tabelle [(spalten_name,...)]
- SELECT ...
-oder INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
- [INTO] tabelle
- SET spalten_name=ausdruck, spalten_name=ausdruck, ...
-
-@end example
-
-@code{INSERT} f�gt neue Zeilen in eine bestehende Tabelle ein. Die
-@code{INSERT ... VALUES}-Form des Statements f�gt Zeilen basierend auf
-explizit angegebenen Werten ein. Die @code{INSERT ... SELECT}-Form f�gt
-Zeilen ein, die aus einer oder mehreren anderen Tabellen ausgew�hlt wurden.
-Die @code{INSERT ... VALUES}-Form mit mehrfachen Wertelisten wird ab
-MySQL-Version 3.22.5 unterst�tzt. Die @code{spalten_name=expression}-Syntax
-wird ab MySQL-Version 3.22.10 unterst�tzt.
-
-@code{tabelle} ist die Tabelle, in die Zeilen eingef�gt werden sollen. Die
-Spaltennamenliste oder die @code{SET}-Klausel geben an, f�r welche Spalten
-das Statement Werte angibt:
-
-@itemize @bullet
-@item
-Wenn Sie keine Spaltenliste f�r @code{INSERT ... VALUES} oder @code{INSERT
-... SELECT} angeben, m�ssen f�r alle Spalten Werte in der
-@code{VALUES()}-Liste oder vom @code{SELECT} bereit stehen. Wenn Sie die
-Reihenfolge der Tabellenspalten nicht kennen, benutzen Sie @code{DESCRIBE
-tabelle}, um sie herauszufinden.
-
-@item
-Jede Spalte, die nicht explizit in einer Werteliste angegeben wird, wird
-auf ihren Vorgabewert gesetzt. Wenn Sie beispielsweise eine Spaltenliste
-angeben, die nicht alle Tabellenspalten nennt, werden unbenannte Spalten
-auf ihre Vorgabewerte gesetzt. Die Zuweisung von Vorgabewerten ist in
-@ref{CREATE TABLE, , @code{CREATE TABLE}} beschrieben.
-
-@item
-Ein @code{ausdruck} kann sich auf jede Spalte beziehen, die vorher in einer
-Werteliste angegeben wurde. Beispielsweise k�nnen Sie folgendes eingeben:
-
-@example
-mysql> INSERT INTO tabelle (spalte1,spalte2) VALUES(15,spalte1*2);
-@end example
-
-Aber nicht das hier:
-
-@example
-mysql> INSERT INTO tabelle (spalte1,spalte2) VALUES(spalte2*2,15);
-@end example
-
-@item
-Wenn Sie das Schl�sselwort @code{LOW_PRIORITY} angeben, wird die Ausf�hrung
-von @code{INSERT} verz�gert, bis kein anderer Client mehr aus der Tabelle
-liest. In diesem Fall muss der Client warten, bis das INSERT-Statement
-fertig ist, was lange Zeit dauern kann, wenn die Tabelle stark benutzt
-wird. Das ist im Gegensatz zu @code{INSERT DELAYED}, was den Client sofort
-weitermachen l��t. @xref{INSERT DELAYED}. Beachten Sie, dass
-@code{LOW_PRIORITY} normalerweise nicht bei @code{MyISAM}-Tabellen benutzt
-werden sollte, weil dadurch gleichzeitige Einf�geoperationen verhindert
-werden. @xref{MyISAM}.
-
-@item
-Wenn Sie das Schl�sselwort @code{IGNORE} in einem @code{INSERT} mit vielen
-Wertezeilen angeben, werden alle Zeilen, die einen bestehenden
-@code{PRIMARY}- oder @code{UNIQUE}-Schl�ssel duplizieren w�rden, ignoriert
-und nicht eingef�gt. Wenn Sie @code{IGNORE} nicht angeben, wird die
-Einf�geoperation abgebrochen, wenn es eine Zeile gibt, die einen
-bestehenden Schl�sselwert duplizieren w�rde. Mit der C-API-Funktion
-@code{mysql_info()} k�nnen Sie feststellen, wie viele Zeilen in die Tabelle
-eingef�gt wurden.
-
-@item
-Wenn MySQL mit der @code{DONT_USE_DEFAULT_FIELDS}-Option konfiguriert
-wurde, erzeugen @code{INSERT}-Statements einen Fehler, wenn Sie nicht
-explizit Werte f�r alle Spalten angeben, die einen Nicht-@code{NULL}-Wert
-erfordern. @xref{configure options, , @code{configure}-Optionen}.
-
-@item
-Den Wert, der f�r eine @code{AUTO_INCREMENT}-Spalte benutzt wurde, finden
-Sie mit der @code{mysql_insert_id}-Funktion heraus. @xref{mysql_insert_id,
-, @code{mysql_insert_id()}}.
-@end itemize
-
-@findex mysql_info()
-Wenn Sie ein @code{INSERT ... SELECT}- oder ein @code{INSERT ...
-VALUES}-Statement mit mehrfachen Wertlisten benutzen, k�nnen Sie die
-C-API-Funktion @code{mysql_info()} benutzen, um Informationen �ber die
-Anfrage zu erhalten. Das Format der Informationszeichenkette ist unten
-dargestellt:
-
-@example
-Records: 100 Duplicates: 0 Warnings: 0
-@end example
-
-@code{Duplicates} zeigt die Anzahl von Zeilen, die nicht eingef�gt werden
-konnten, weil sie einen bestehenden eindeutigen Indexwert dupliziert
-h�tten. @code{Warnings} zeigen die Anzahl von Versuchen, Spaltenwerte
-einzuf�gen, die in irgend einer Weise problematisch waren. Warnungen
-erfolgen unter folgenden Umst�nden:
-
-@itemize @bullet
-@item
-Wenn @code{NULL} in eine Spalte eingef�gt wird, die als @code{NOT NULL}
-deklariert ist. Die Spalte wird auf ihren Vorgabewert gesetzt.
-
-@item
-Wenn eine numerische Spalte auf einen Wert ausserhalb des Wertebereichs der
-Spalte gesetzt wird. Der Wert wird auf den entsprechenden Endpunkt des
-Bereichs abgeschnitten.
-
-@item
-Wenn eine numerische Spalte auf einen Wert wie @code{'10.34 a'} gesetzt
-wird. Die unsinnigen Zeichen am Ende werden entfernt und der verbleibende
-numerische Anteil eingef�gt. Wenn der Wert als Zahl �berhaupt keinen Sinn
-ergibt, wird die Spalte auf @code{0} gesetzt.
-
-@item
-Wenn eine Zeichenkette in eine @code{CHAR}-, @code{VARCHAR}-, @code{TEXT}-
-oder @code{BLOB}-Spalte eingef�gt wird, die die maximale L�nge der Spalte
-�berschreitet. Der Wert wird auf die maximale Spaltenl�nge beschnitten.
-
-@item
-Wenn ein Wert in eine DATE- oder TIME-Spalte eingef�gt wird, der f�r den
-Spaltentyp nicht zul�ssig ist. Die Spalte wird auf den entsprechenden
-0-Wert f�r diesen Typ gesetzt.
-@end itemize
-
-@findex HANDLER
-@node INSERT, INSERT DELAYED, HANDLER, Data Manipulation
-@c German node HANDLER
-@subsection @code{HANDLER}-Syntax
-
-@example
-HANDLER tabelle OPEN [ AS alias ]
-HANDLER tabelle READ index @{ = | >= | <= | < @} (wert1, wert2, ... ) [ WHERE ... ] [LIMIT ... ]
-HANDLER tabelle READ index @{ FIRST | NEXT | PREV | LAST @} [ WHERE ... ] [LIMIT ... ]
-HANDLER tabelle READ @{ FIRST | NEXT @} [ WHERE ... ] [LIMIT ... ]
-HANDLER tabelle CLOSE
-@end example
-
-Das @code{HANDLER}-Statement erm�glicht direkten Zugriff auf die
-MySQL-Tabellenschnittstelle unter Umgehung des SQL-Optimierers. Daher ist
-es schneller als SELECT.
-
-Die erste Form des @code{HANDLER}-Statements �ffnet eine Tabelle und macht
-sie �ber die folgenden @code{HANDLER ... READ}-Routinen zug�nglich. Dieses
-Tabellenobjekt wird nicht mit anderen Threads geteilt und wird nicht
-geschlossen, bis der Thread @code{HANDLER tabelle CLOSE} aufruft oder
-stirbt.
-
-Die zweite Form holt eine (oder mehrere, festgelegt durch die
-@code{LIMIT}-Klausel) Zeile, bei der der angegebene Index mit der Bedingung
-�bereinstimmt und die @code{WHERE}-Bedingung erf�llt ist. Wenn der Index
-aus mehreren Teilen besteht (also mehrere Spalten �berspannt), werden die
-Werte in einer Komma-getrennten Liste angegeben, wobei es m�glich ist, nur
-Werte f�r einige erste Spalten anzugeben.
-
-Die dritte Form holt eine (oder mehrere, festgelegt durch die
-@code{LIMIT}-Klausel) Zeile in Index-Reihenfolge aus der Tabelle, bei der
-die @code{WHERE}-Bedingung erf�llt ist.
-
-Die vierte Form (ohne Index-Angabe) holt eine (oder mehrere, festgelegt
-durch die @code{LIMIT}-Klausel) Zeile in nat�rlicher Zeilenreihenfolge aus
-der Tabelle (wie in der Daten-Datei gespeichert), bei der die
-@code{WHERE}-Bedingung erf�llt ist. Das ist schneller als @code{HANDLER
-tabelle READ index}, wenn ein kompletter Tabellen-Scan erw�nscht ist.
-
-Die letzte Form schlie�t eine mit @code{HANDLER ... OPEN} ge�ffnete
-Tabelle.
-
-@code{HANDLER} ist in gewisser Hinsicht ein Statement auf niedriger Ebene
-(Low-Level), dass zum Beispiel keine Konsistenz gew�hrleistet. Das hei�t,
-@code{HANDLER ... OPEN} nimmt @strong{KEINEN} Schnappschuss der Tabelle auf
-und sperrt die Tabelle @strong{NICHT}. Das bedeutet, dass nach
-@code{HANDLER ... OPEN} Tabellendaten ver�ndert werden k�nnen (durch diesen
-oder einen anderen Thread) und dass diese Ver�nderungen nur teilweise in
-@code{HANDLER ... NEXT}- oder @code{HANDLER ... PREV}-Scans erscheinen.
-
-
-
-
-@findex REPLACE ... SELECT
-@findex INSERT ... SELECT
-
-
-
-@menu
-* INSERT SELECT::
-@end menu
-
-@node INSERT SELECT, , INSERT, INSERT
-@c German node INSERT SELECT
-@subsubsection @code{INSERT ... SELECT}-Syntax
-
-@example
-INSERT [LOW_PRIORITY] [IGNORE] [INTO] tabelle [(spalten_liste)] SELECT ...
-@end example
-
-Mit dem @code{INSERT ... SELECT}-Statement k�nnen Sie schnell viele Zeilen
-aus einer oder mehreren anderen Tabellen einf�gen.
-
-@example
-INSERT INTO temporaere_tabelle2 (fldID) SELECT temporaere_tabelle1.fldOrder_ID FROM temporaere_tabelle1 WHERE
-temporaere_tabelle1.fldOrder_ID > 100;
-@end example
-
-Folgende Bedingungen gelten f�r ein @code{INSERT ... SELECT}-Statement:
-
-@c German FIX changed all @Minus to @minus
-@itemize @minus
-@item
-Die Ziel-Tabelle des @code{INSERT}-Statements darf nicht in der
-@code{FROM}-Klausel des @code{SELECT}-Teils der Anfrage erscheinen, weil es
-in ANSI-SQL verboten ist, aus derselben Tabelle auszuw�hlen
-(@code{SELECT}), in die eingef�gt wird. (Das Problem liegt darin, dass das
-@code{SELECT} m�glicherweise Datens�tze finden w�rde, die fr�her w�hrend
-desselben Laufs eingef�gt wurden. Wenn man Sub-Select-Klauseln verwendet,
-k�nnte die Situation schnell sehr verwirrend werden!)
-
-@item
-@code{AUTO_INCREMENT}-Spalten funktionieren wie gehabt.
-
-@item
-Sie k�nnen die C-API-Funktion @code{mysql_info()} benutzen, um
-Informationen �ber die Anfrage zu erhalten. @xref{INSERT}.
-
-@item
-Um sicherzustellen, dass die Update-Log-Datei/Bin�r-Log-Datei benutzt
-werden kann, um die Original-Tabellenl�nge neu zu erzeugen, l��t MySQL
-w�hrend @code{INSERT .... SELECT} keine gleichzeitigen Einf�geoperationen
-zu.
-@end itemize
-
-Sie k�nnen nat�rlich @code{REPLACE} anstelle von @code{INSERT} benutzen, um
-alte Zeilen zu �berschreiben.
-
-
-@node INSERT DELAYED, UPDATE, INSERT, Data Manipulation
-@c German node INSERT DELAYED
-@subsection @code{INSERT DELAYED}-Syntax
-
-@findex INSERT DELAYED
-@findex DELAYED
-
-@cindex INSERT DELAYED
-
-@example
-INSERT DELAYED ...
-@end example
-
-Die @code{DELAYED}-Option f�r das @code{INSERT}-Statement ist eine
-MySQL-spezifische Option, die sehr n�tzlich ist, wenn Sie Clients haben,
-die nicht warten k�nnen, bis das @code{INSERT} fertig ist. Die ist ein
-h�ufiges Problem, wenn Sie MySQL zum Loggen benutzen und gelegentlich
-@code{SELECT}- und @code{UPDATE}-Statements laufen lassen, die lange Zeit
-ben�tigen. @code{DELAYED} wurde in MySQL-Version 3.22.15 eingef�hrt. Es ist
-eine MySQL Erweiterung zu ANSI-SQL92.
-
-@code{INSERT DELAYED} funktioniert nur bei @code{ISAM}- und
-@code{MyISAM}-Tabellen. Beachten Sie: Weil @code{MyISAM}-Tabellen
-gleichzeitige @code{SELECT} und @code{INSERT} unterst�tzen, wenn es keine
-freien Bl�cke mitten in der Daten-Datei gibt, m�ssen Sie @code{INSERT
-DELAYED} bei @code{MyISAM} nur sehr selten benutzen. @xref{MyISAM}.
-
-Wenn Sie @code{INSERT DELAYED} benutzen, erh�lt der Client sofort ein Okay,
-und die Zeile wird eingef�gt, wenn die Tabelle nicht mehr durch einen
-anderen Thread in Benutzung ist.
-
-Ein weiterer gro�er Vorteil von @code{INSERT DELAYED} ist, dass
-Einf�geoperationen vieler Clients geb�ndelt und in einem Block geschrieben
-werden. Das ist viel schneller als viele separate Inserts durchzuf�hren.
-
-Beachten Sie, dass momentan die Zeilen in der Warteschlange solange nur im
-Arbeitsspeicher gehalten werden, bis sie in die Tabelle eingef�gt sind. Das
-hei�t, wenn Sie @code{mysqld} auf die harte Tour killen (@code{kill -9})
-oder wenn @code{mysqld} unerwartet stirbt, sind Zeilen in der
-Warteschlange, die noch nicht auf Festplatte geschrieben wurden, verloren!
-
-Im Folgenden ist detailliert beschrieben, was geschieht, wenn Sie die
-@code{DELAYED}-Option f�r @code{INSERT} oder @code{REPLACE} benutzen. In
-dieser Beschreibung ist der ``Thread'' der Thread, der einen @code{INSERT
-DELAYED}-Befehl empf�ngt. ``Handler'' ist der Thread, der alle @code{INSERT
-DELAYED}-Statements f�r ein bestimmte Tabelle handhabt.
-
-@itemize @bullet
-@item
-When ein Thread ein @code{DELAYED}-Statement f�r eine Tabelle ausf�hrt,
-wird ein Handler-Thread erzeugt, um alle @code{DELAYED}-Statements f�r die
-Tabelle auszuf�hren, wenn ein solcher Handler nicht schon existiert.
-
-@item
-Der Thread pr�ft, ob der Handler bereit eine @code{DELAYED}-Sperre erhalten
-hat oder nicht. Wenn nicht, weist es den Handler-Thread an, das zu tun. Die
-@code{DELAYED}-Sperre kann selbst dann erlangt werden, wenn ein anderer
-Thread eine @code{READ}- oder @code{WRITE}-Sperre auf der Tabelle hat. Der
-Handler wartet jedoch auf alle @code{ALTER TABLE}-Sperren oder @code{FLUSH
-TABLES}, um sicherzustellen, dass die Tabellenstruktur aktuell ist.
-
-@item
-Der Thread f�hrt das @code{INSERT}-Statement aus, aber statt die Zeile in
-die Tabelle zu schreiben stellt er eine Kopie der endg�ltigen Zeile in eine
-Warteschlange, die vom Handler-Thread verwaltet wird. Alle Syntaxfehler
-werden vom Thread erkannt und dem Client-Programm mitgeteilt.
-
-@item
-Der Client kann die Anzahl von Duplikaten oder den
-@code{AUTO_INCREMENT}-Wert f�r die resultierende Zeile nicht mitteilen. Er
-kann Sie vom Server nicht erhalten, weil das @code{INSERT} zur�ckkehrt,
-bevor die Einf�geoperation fertig ist. Wenn Sie die C-API benutzen, gibt
-die @code{mysql_info()}-Funktion aus demselben Grund nichts Sinnvolles
-zur�ck.
-
-@item
-Die Update-Log-Datei wird vom Handler-Thread aktualisiert, wenn die Zeile
-in die Tabelle eingef�gt wird. Im Falle des Einf�gens mehrerer Zeilen wird
-die Update-Log-Datei aktualisiert, wenn die erste Zeile eingef�gt wird.
-
-@item
-Nachdem alle @code{delayed_insert_limit} Zeilen geschrieben wurden, pr�ft
-der Handler, ob noch irgend welche @code{SELECT}-Statements anh�ngig sind
-oder nicht. Falls ja, gestattet er diesen, ausgef�hrt zu werden, bevor
-weiter gemacht wird.
-
-@cindex delayed_insert_limit
-@cindex timeout
-@item
-Wenn der Handler keine Zeilen mehr in seiner Warteschlange hat, wird die
-Tabellensperre aufgehoben. Wenn innerhalb von @code{delayed_insert_timeout}
-Sekunden keine neuen @code{INSERT DELAYED}-Befehle mehr empfangen werden,
-beendet sich der Handler.
-
-@item
-Wenn mehr als @code{delayed_queue_size} Zeilen bereits in einer bestimmten
-Handler-Warteschlange anh�ngig sind, wartet der Thread, der nach
-@code{INSERT DELAYED} anfragt, bis es wieder Platz in der Warteschlange
-gibt. Damit wird sichergestellt, dass der @code{mysqld}-Server nicht den
-gesamten Arbeitsspeicher f�r die DELAYED-Warteschlange verbraucht.
-
-@item
-Der Handler-Thread zeigt sich in der MySQL-Prozessliste mit
-@code{delayed_insert} in der @code{Command}-Spalte. Er wird gekillt, wenn
-Sie einen @code{FLUSH TABLES}-Befehl ausf�hren oder ihn mit @code{KILL
-Thread_id} killen. Er wird jedoch zuerst alle Zeilen in der Warteschlange
-in die Tabelle schreiben, bevor er sich beendet. W�hrend dieser Zeit
-akzeptiert er keine neuen @code{INSERT}-Befehle von anderen Threads mehr.
-Wenn Sie danach einen @code{INSERT DELAYED}-Befehl ausf�hren, wird ein
-neuer Handler-Thread erzeugt.
-
-@item
-Beachten Sie, dass oben Gesagtes bedeutet, dass @code{INSERT
-DELAYED}-Befehle h�here Priorit�t haben als normale @code{INSERT}-Befehle,
-wenn es einen @code{INSERT DELAYED}-Handler gibt, der bereits l�uft!
-Andere Aktualisierungsbefehle m�ssen warten, bis die @code{INSERT
-DELAYED}-Warteschlange leer ist, jemand den Handler-Thread killt (mit
-@code{KILL Thread_id}) oder jemand @code{FLUSH TABLES} ausf�hrt.
-
-@item
-Die folgenden Status-Variablen stellen Informationen �ber @code{INSERT
-DELAYED}-Befehle bereits:
-
-@multitable @columnfractions .35 .65
-@item @strong{Variable} @tab @strong{Bedeutung}
-@item @code{Delayed_insert_thread} @tab Nummer des Handler-Threads
-@item @code{Delayed_writes} @tab Anzahl der Zeilen, die mit @code{INSERT DELAYED} geschrieben wurden
-@item @code{Not_flushed_delayed_rows} @tab Anzahl der Zeilen, die darauf warten, geschrieben zu werden
-@end multitable
-
-Sie k�nnen diese Variablen betrachten, wenn Sie ein @code{SHOW
-STATUS}-Statement oder einen @code{mysqladmin extended-status}-Befehl
-ausf�hren.
-@end itemize
-
-Beachten Sie, dass @code{INSERT DELAYED} langsamer ist als ein normales
-INSERT, wenn die Tabelle nicht in Benutzung ist. Ausserdem gibt es einen
-zus�tzlichen Overhead f�r den Server, um einen separaten Thread f�r jede
-Tabelle zu handhaben, f�r die Sie @code{INSERT DELAYED} benutzen. Das
-hei�t, Sie sollten @code{INSERT DELAYED} nur benutzen, wenn Sie es
-wirklich ben�tigen!
-
-
-@node UPDATE, DELETE, INSERT DELAYED, Data Manipulation
-@c German node UPDATE
-@subsection @code{UPDATE}-Syntax
-
-@findex UPDATE
-
-@example
-UPDATE [LOW_PRIORITY] [IGNORE] tabelle
- SET spalten_name1=ausdruck1, [spalten_name2=ausdruck2, ...]
- [WHERE where_definition]
- [LIMIT #]
-@end example
-
-@code{UPDATE} aktualisiert Spalten in bestehenden Tabellenzeilen mit neuen
-Werten. Die @code{SET}-Klausel gibt an, welche Spalten ge�ndert werden
-sollen und welche Werte ihnen zugewiesen werden. Die @code{WHERE}-Klausel
-legt - falls angegeben - fest, welche Zeilen aktualisiert werden sollen.
-Ansonsten werden alle Zeile aktualisiert. Wenn die @code{ORDER BY}-Klausel
-angegeben ist, werden die Zeilen in der angegebenen Reihenfolge
-aktualisiert.
-
-Wenn Sie das Schl�sselwort @code{LOW_PRIORITY} angeben, wird die Ausf�hrung
-von @code{UPDATE} verz�gert, bis keine anderen Clients mehr aus der Tabelle
-lesen.
-
-Wenn Sie das Schl�sselwort @code{IGNORE} angeben, bricht das
-UPDATE-Statement nicht ab, selbst wenn w�hrend der Aktualisierung Fehler
-wegen doppelter Schl�sseleintr�ge auftreten. Zeilen, die Konflikte
-verursachen w�rden, werden nicht aktualisiert.
-
-Wenn Sie auf eine Spalte von @code{tabelle} in einem Ausdruck zugreifen,
-benutzt @code{UPDATE} den momentanen Wert der Spalte. Folgendes Statement
-zum Beispiel setzt die @code{age}-Spalte auf ihren momentanen Wert plus 1:
-
-@example
-mysql> UPDATE personen SET age=age+1;
-@end example
-
-@code{UPDATE}-Zuweisungen werden von links nach rechts ausgewertet.
-Folgendes Statement zum Beispiel verdoppelt die @code{age}-Spalte und
-inkrementiert sie danach:
-
-@example
-mysql> UPDATE personen SET age=age*2, age=age+1;
-@end example
-
-Wenn Sie eine Spalte auf einen Wert setzen, den sie momentan besitzt,
-erkennt MySQL dies und aktualisiert sie nicht.
-
-@findex mysql_info()
-@code{UPDATE} gibt die Anzahl von Zeilen zur�ck, die tats�chlich ge�ndert
-wurden. Ab MySQL-Version 3.22 gibt die C-API-Funktion @code{mysql_info()}
-die Anzahl von Zeilen zur�ck, die �bereinstimmten und aktualisiert wurden,
-und die Anzahl von Warnungen, die w�hrend @code{UPDATE} geschahen.
-
-In MySQL-Version 3.23 k�nnen Sie @code{LIMIT #} benutzen, um
-sicherzustellen, dass nur eine angegebene Anzahl von Zeilen ge�ndert wird.
-
-
-@node DELETE, TRUNCATE, UPDATE, Data Manipulation
-@c German node DELETE
-@subsection @code{DELETE}-Syntax
-
-@findex DELETE
-
-@example
-DELETE [LOW_PRIORITY | QUICK] FROM tabelle
- [WHERE where_definition]
- [ORDER BY ...]
- [LIMIT zeilen]
-
-oder
-
-DELETE [LOW_PRIORITY | QUICK] tabelle[.*] [tabelle[.*] ...] FROM
-tabellenverweis [WHERE where_definition]
-@end example
-
-@code{DELETE} l�scht Zeilen aus @code{tabelle}, die mit der in
-@code{where_definition} angegebenen Bedingung �bereinstimmen, und gibt die
-Anzahl der gel�schten Datens�tze zur�ck.
-
-Wenn Sie @code{DELETE} ohne @code{WHERE}-Klausel angeben, werden alle
-Zeilen gel�scht. Wenn Sie das im @code{AUTOCOMMIT}-Modus machen,
-funktioniert es wie @code{TRUNCATE}. @xref{TRUNCATE}. In MySQL 3.23 gibt
-@code{DELETE} ohne eine @code{WHERE}-Klausel als Anzahl von betroffenen
-Datens�tzen 0 zur�ck.
-
-Wenn Sie wissen wollen, wie viele Datens�tze tats�chlich gel�scht wurden,
-wenn Sie alle Zeilen l�schen, und eine Geschwindigkeitseinbusse in Kauf
-nehmen, k�nnen Sie ein @code{DELETE}-Statement folgender Form eingeben:
-
-@example
-mysql> DELETE FROM tabelle WHERE 1>0;
-@end example
-
-Beachten Sie, dass das VIEL langsamer als @code{DELETE FROM tabelle} ohne
-@code{WHERE}-Klausel ist, weil es Zeilen eine nach der anderen l�scht.
-
-Wenn Sie das Schl�sselwort @code{LOW_PRIORITY} angeben, wird die Ausf�hrung
-von @code{DELETE} verz�gert, bis kein anderer Client mehr aus der Tabelle
-liest.
-
-Wenn Sie das Wort @code{QUICK} angeben, fasst der Tabellen-Handler w�hrend
-des L�schvorgangs keine Index-Bl�tter (Index Leafs) zusammen, was bestimmte
-Arten von L�schvorg�ngen beschleunigen kann.
-
-In MyISAM-Tabellen werden gel�schte Datens�tze in einer verkn�pften Liste
-verwaltet und nachfolgende @code{INSERT}-Operationen benutzen alte
-Datensatzpositionen neu. Um unbenutzten Platz freizugeben und Dateigr��en
-zu verringern, benutzen Sie das @code{OPTIMIZE TABLE}-Statement oder das
-@code{myisamchk}-Dienstprogramm, um die Tabellen neu zu organisieren.
-@code{OPTIMIZE TABLE} ist einfacher, aber @code{myisamchk} ist schneller.
-Siehe @ref{OPTIMIZE TABLE, , @code{OPTIMIZE TABLE}} und @ref{Optimisation}.
-
-Das Multi-Tabellen-L�schformat wird ab MySQL 4.0.0 unterst�tzt.
-
-Die Idee ist, dass nur �bereinstimmende Zeilen aus den Tabellen, die VOR
-der @code{FROM}-Klausel stehen, gel�scht werden. Die Auswirkung ist, dass
-Sie Zeilen aus vielen Tabellen zugleich l�schen k�nnen, sowie dass
-zus�tzliche Tabellen zum Suchen benutzt werden.
-
-Das @code{.*}-Zeichen nach den Tabellennamen ist nur aus Gr�nden der
-Kompatibilit�t mit @code{Access} vorhanden:
-
-@example
-DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id
-@end example
-
-In diesem Fall werden �bereinstimmende Zeilen nur aus den Tabellen
-@code{t1} und @code{t2} gel�scht.
-
-@code{ORDER BY} und Benutzung mehrfacher Tabellen bei DELETE wird in MySQL
-4.0 unterst�tzt.
-
-Wenn eine @code{ORDER BY}-Klausel benutzt wird, werden die Zeilen in dieser
-Reihenfolge gel�scht. Das ist nur in Verbindung mit @code{LIMIT} wirklich
-sinnvoll. Beispiel:
-
-@example
-DELETE FROM logdatei
-WHERE user = 'jcole'
-ORDER BY zeitstempel
-LIMIT 1
-@end example
-
-Das l�scht den �ltesten Eintrag (von @code{zeitstempel}), wo die Zeile mit
-der @code{WHERE}-Klausel �bereinstimmt.
-
-Die MySQL-spezifische @code{LIMIT rows}-Option f�r @code{DELETE} weist den
-Server an, welche maximale Anzahl von Zeilen gel�scht wird, bevor die
-Kontrolle an den Client zur�ck gegeben wird. Das kann benutzt werden um
-sicherzustellen, dass ein bestimmter @code{DELETE}-Befehl nicht zu viel
-Zeit beansprucht. Sie k�nnen den @code{DELETE}-Befehl einfach wiederholen,
-bis die Anzahl betroffener Zeilen kleiner ist als der @code{LIMIT}-Wert.
-
-
-@node TRUNCATE, REPLACE, DELETE, Data Manipulation
-@c German node TRUNCATE
-@subsection @code{TRUNCATE}-Syntax
-
-@findex TRUNCATE
-
-@example
-TRUNCATE TABLE tabelle
-@end example
-
-In Version 3.23 wird @code{TRUNCATE TABLE} auf @code{COMMIT ; DELETE FROM
-tabelle} gemappt. @xref{DELETE}.
-
-Die Unterschiede zwischen @code{TRUNCATE TABLE} und @code{DELETE FROM ..}
-sind:
-
-@itemize @bullet
-@item
-TRUNCATE f�hrt ein L�schen und Neuerzeugen der Tabelle durch, was viel
-schneller sit, als Zeilen eine nach der anderen zu l�schen.
-@item
-Nicht transaktionssicher. Sie erhalten einen Fehler, wenn Sie eine aktive
-Transaktion haben oder eine aktive Tabellensperre.
-@item
-Gibt die Anzahl gel�schter Zeilen nicht zur�ck.
-@item
-Solange die Tabellendefinitionsdatei @file{tabelle.frm} g�ltig ist, kann
-die Tabelle auf diese Weise neu erzeugt werden, selbst wenn die Daten- oder
-Index-Dateien besch�digt wurden.
-@end itemize
-
-@code{TRUNCATE} ist eine Oracle-SQL-Erweiterung.
-
-@node REPLACE, LOAD DATA, TRUNCATE, Data Manipulation
-@c German node REPLACE
-@subsection @code{REPLACE}-Syntax
-
-@findex REPLACE
-
-@example
- REPLACE [LOW_PRIORITY | DELAYED]
- [INTO] tabelle [(spalten_name,...)]
- VALUES (ausdruck,...),(...),...
-or REPLACE [LOW_PRIORITY | DELAYED]
- [INTO] tabelle [(spalten_name,...)]
- SELECT ...
-or REPLACE [LOW_PRIORITY | DELAYED]
- [INTO] tabelle
- SET spalten_name=ausdruck, spalten_name=ausdruck,...
-@end example
-
-@code{REPLACE} funktioniert genau wie @code{INSERT}, ausser dass der alte
-Datensatz gel�scht wird, bevor ein neuer eingef�gt wird, wenn ein alter
-Datensatz in der Tabelle denselben Wert wie der neue auf einem eindeutigen
-Index hat. @xref{INSERT, , @code{INSERT}}.
-
-Mit anderen Worten k�nnen Sie auf die Werte einer alten Zeile nicht mit
-einem @code{REPLACE}-Statement zugreifen. In einigen alten MySQL-Versionen
-sah es so aus, als k�nnten Sie das tun, aber das war ein Bug und wurde
-korrigiert.
-
-Wenn man einen @code{REPLACE}-Befehl benutzt, gibt
-@code{mysql_affected_rows()} 2 zur�ck, wenn die neue Zeile eine alte
-ersetzte. Das liegt daran, dass in diesem Fall eine Zeile eingef�gt wurde
-und dann das Duplikat gel�scht wurde.
-
-Das macht es einfach zu �berpr�fen, ob @code{REPLACE} eine Zeile
-hinzugef�gt oder eine ersetzt hat.
-
-
-@node LOAD DATA, , REPLACE, Data Manipulation
-@c German node LOAD DATA
-@subsection @code{LOAD DATA INFILE}-Syntax
-
-@findex LOAD DATA INFILE
-
-@example
-LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'datei.txt'
- [REPLACE | IGNORE]
- INTO TABLE tabelle
- [FIELDS
- [TERMINATED BY '\t']
- [[OPTIONALLY] ENCLOSED BY '']
- [ESCAPED BY '\\' ]
- ]
- [LINES TERMINATED BY '\n']
- [IGNORE Anzahl LINES]
- [(spalten_name,...)]
-@end example
-
-Das @code{LOAD DATA INFILE}-Statement liest Zeilen aus einer Textdatei in
-eine Tabelle mit sehr hoher Geschwindigkeit. Wenn das
-@code{LOCAL}-Schl�sselwort angegeben wird, wird die Datei vom Client-Host
-gelesen. Wenn @code{LOCAL} nicht angegeben wird, muss die Datei auf dem
-Server liegen. (@code{LOCAL} ist verf�gbar ab MySQL-Version 3.22.6.)
-
-Aus Sicherheitsgr�nden m�ssen Dateien, die als auf dem Server liegende
-Textdateien eingelesen werden, entweder im Datenbank-Verzeichnis liegen
-oder von allen lesbar sein. Dar�ber hinaus brauchen Sie, wenn Sie
-@code{LOAD DATA INFILE} mit Server-Dateien benutzen, die
-@strong{file}-Berechtigung auf dem Server-Host. @xref{Privileges}.
-
-Wenn Sie das Schl�sselwort @code{LOW_PRIORITY} angeben, wird das
-@code{LOAD DATA}-Statement verz�gert, bis keine anderen Clients mehr aus
-der Tabelle lesen.
-
-Wenn Sie das Schl�sselwort @code{CONCURRENT} bei einer
-@code{MyISAM}-Tabelle angeben, k�nnen andere Threads Daten aus der Tabelle
-abrufen, w�hrend @code{LOAD DATA} ausgef�hrt wird. Die Benutzung dieser
-Option beeinflusst nat�rlich die Performance von @code{LOAD DATA} ein
-bisschen, selbst wenn kein anderer Thread die Tabelle zur gleichen Zeit
-benutzt.
-
-@code{LOCAL} ist etwas langsamer, als wenn der Server direkt auf die
-Dateien zugreifen kann, weil die Inhalte der Datei vom Client-Host auf den
-Server-Host �bertragen werden m�ssen. Auf der anderen Seite ben�tigen Sie
-keine @strong{file}-Berechtigung, um lokale Dateien zu laden.
-
-@c old version
-Wenn Sie MySQL vor Version 3.23.24 benutzen, k�nnen Sie nicht aus einer
-FIFO lesen, wenn Sie @code{LOAD DATA INFILE} benutzen. Wenn Sie aus einer
-FIFO lesen m�ssen (zum Beispiel aus der Ausgabe von gunzip), benutzen Sie
-statt dessen @code{LOAD DATA LOCAL INFILE}.
-
-@cindex @code{mysqlimport}
-Sie k�nnen Daten-Dateien auch mit dem @code{mysqlimport}-Dienstprogramm
-laden; es arbeitet, indem es einen @code{LOAD DATA INFILE}-Befehl an den
-Server schickt. Die @code{--local}-Option veranlasst @code{mysqlimport},
-Daten-Dateien vom Client-Host zu lesen. Sie k�nnen die
-@code{--compress}-Option angeben, um bessere Performance �ber langsame
-Netzwerke zu erzielen, wenn der Client und der Server das komprimierte
-Protokoll unterst�tzen.
-
-Bei der Suche nach Dateien auf dem Server-Host geht der Server nach
-folgenden Regeln vor:
-
-@itemize @bullet
-@item
-Wenn ein absoluter Pfadname angegeben wird, benutzt der Server den
-Pfadnamen so, wie er ist.
-
-@item
-Wenn ein relativer Pfadname mit einer oder mehreren f�hrenden Bestandteilen
-angegeben wird, sucht der Server die Datei relativ zum Daten-Verzeichnis
-des Servers.
-
-@item
-Wenn ein Dateiname ohne f�hrende Bestandteile angegeben wird, sucht der
-Server die Datei im Datenbank-Verzeichnis der aktuellen Datenbank.
-@end itemize
-
-Beachten Sie, dass diese Regeln bedeuten, dass eine Datei, die als
-@file{./meinedatei.txt} angegeben wird, aus dem Daten-Verzeichnis des
-Servers gelesen wird, wohingegen eine Datei, die als @file{meinedatei.txt}
-angegeben wird, aus dem Datenbank-Verzeichnis der aktuellen Datenbank
-gelesen wird. Das folgende @code{LOAD DATA}-Statement beispielsweise liest
-die Datei @file{daten.txt} aus dem Datenbank-Verzeichnis von
-@code{datenbank1}, weil @code{datenbank1} die aktuelle Datenbank ist,
-obwohl das Statement die Datei explizit in eine Tabelle in der
-@code{datenbank2}-Datenbank l�dt:
-
-@example
-mysql> USE datenbank1;
-mysql> LOAD DATA INFILE "daten.txt" INTO TABLE datenbank2.meine_tabelle;
-@end example
-
-Die @code{REPLACE}- und @code{IGNORE}-Schl�sselw�rter steuern die
-Handhabung von Eingabe-Datens�tzen, die bestehende Datens�tze auf
-eindeutigen Schl�sselwerten duplizieren. Wenn Sie @code{REPLACE} angeben,
-ersetzen neue Zeilen bestehende Zeilen, die denselben eindeutigen
-Schl�sselwert besitzen. Wenn Sie @code{IGNORE} angeben, werden
-Eingabe-Zeilen, die eine bestehende Zeile auf einem Schl�sselwert
-duplizieren, �bersprungen. Wenn Sie keine der beiden Optionen angeben,
-tritt ein Fehler auf, wenn ein doppelter Schl�sselwert gefunden wird, und
-der Rest der Textdatei wird ignoriert.
-
-Wenn Sie Daten aus einer lokalen Datei mit dem @code{LOCAL}-Schl�sselwort
-laden, hat der Server keine M�glichkeit, die �bertragung der Datei mitten
-in einer Operation zu beenden. Daher ist das vorgabem��ige Verhalten
-dasselbe, als wenn @code{IGNORE} angegeben w�re.
-
-Wenn Sie @code{LOAD DATA INFILE} auf einer leeren @code{MyISAM}-Tabelle
-benutzen, werden alle nicht eindeutigen Indexe in einem separaten Stapel
-erzeugt (wie bei @code{REPAIR}). Das macht @code{LOAD DATA INFILE}
-normalerweise viel schneller, wenn Sie viele Indexe haben.
-
-@code{LOAD DATA INFILE} ist das Komplement von @code{SELECT ... INTO OUTFILE}.
-@xref{SELECT, , @code{SELECT}}. Um Daten aus einer Datenbank in eine Datei
-zu schreiben, benutzen Sie @code{SELECT ... INTO OUTFILE}. Um die Datei
-zur�ck in die Datenbank zu lesen, benutzen Sie @code{LOAD DATA INFILE}. Die
-Syntax der @code{FIELDS}- und @code{LINES}-Klauseln ist f�r beide Befehle
-dieselbe. Beide Klauseln sind optional, aber @code{FIELDS} muss
-@code{LINES} vorangehen, wenn beide angegeben werden.
-
-Wenn Sie eine @code{FIELDS}-Klausel angeben, ist jede ihrer Unterklauseln
-(@code{TERMINATED BY}, @code{[OPTIONALLY] ENCLOSED BY} und @code{ESCAPED
-BY}) ebenfalls optional, ausser dass Sie zumindest eine von ihnen angeben
-m�ssen.
-
-Wenn Sie keine @code{FIELDS}-Klausel benutzen, sind die Vorgabewerte
-dieselben, als wenn Sie folgendes geschrieben h�tten:
-
-@example
-FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
-@end example
-
-Wenn Sie keine @code{LINES}-Klausel angeben, sind die Vorgabewerte
-dieselben, als wenn Sie folgendes geschrieben h�tten:
-
-@example
-LINES TERMINATED BY '\n'
-@end example
-
-Mit anderen Worten veranlassen die Vorgabewerte @code{LOAD DATA INFILE},
-beim Lesen von Eingaben wie folgt zu arbeiten:
-
-@itemize @bullet
-@item
-Zeilenbegrenzungen werden an Neue-Zeile-Zeichen gesucht (\n).
-
-@item
-Zeilen werden an Tabulatoren (\t) in Felder aufgeteilt.
-
-@item
-Es wird nicht davon ausgegangen, dass Felder in Anf�hrungszeichen
-eingeschlossen sind.
-
-@item
-Tabulatoren, Neue-Zeile-Zeichen oder @samp{\}, denen ein @samp{\}-Zeichen
-voran gestellt ist, werden als Literale interpretiert, die Teil des
-Feldwerts sind.
-@end itemize
-
-Im Vergleich dazu veranlassen die Vorgabewerte von @code{SELECT ... INTO
-OUTFILE} dieses, wie folgt zu arbeiten:
-
-@itemize @bullet
-@item
-Zwischen Felder werden Tabulatoren (\t) geschrieben.
-
-@item
-Felder werden nicht in Anf�hrungsstriche geschrieben.
-
-@item
-@samp{\} wird benutzt, um Tabulator, Neue-Zeile-Zeichen oder @samp{\}
-innerhalb von Feldwerten zu escapen.
-
-@item
-Am Ende von Zeilen werden Neue-Zeile-Zeichen (\n) geschrieben.
-@end itemize
-
-Beachten Sie, dass Sie @code{FIELDS ESCAPED BY '\\'} (mit zwei Backslashes)
-schreiben m�ssen, damit der Wert als ein einzelner Backslash gelesen wird.
-
-Die @code{IGNORE anzahl LINES}-Option kann benutzt werden, um eine
-Kopfzeile aus Spaltennamen am Anfang der Datei zu ignorieren:
-
-@example
-mysql> LOAD DATA INFILE "/tmp/datei.txt" into Tabelle test IGNORE 1 LINES;
-@end example
-
-Wenn Sie @code{SELECT ... INTO OUTFILE} zusammen mit @code{LOAD DATA
-INFILE} benutzen, um Daten aus einer Datenbank in eine Datei zu schreiben
-und dann die Datei sp�ter zur�ck in die Datenbank zu lesen, m�ssen die
-Optionen f�r die Behandlung von Feldern und Zeilen f�r beide Befehle
-�bereinstimmen. Ansonsten interpretiert @code{LOAD DATA INFILE} die Inhalte
-der Datei nicht korrekt. Angenommen, Sie benutzen @code{SELECT ... INTO
-OUTFILE}, um eine Datei zu schreiben, deren Feldern durch Kommas begrenzt
-sind:
-
-@example
-mysql> SELECT * INTO OUTFILE 'daten.txt'
- FIELDS TERMINATED BY ','
- FROM ...;
-@end example
-
-Um die Komma-begrenzte Datei wieder einzulesen, lautet das korrekte
-Statement:
-
-@example
-mysql> LOAD DATA INFILE 'daten.txt' INTO TABLE tabelle2
- FIELDS TERMINATED BY ',';
-@end example
-
-Wenn Sie statt dessen versuchen, die Datei mit dem unten stehenden
-Statement einzulesen, funktioniert das nicht, weil es @code{LOAD DATA
-INFILE} anweist, nach Tabulatoren zwischen Feldern zu suchen:
-
-@example
-mysql> LOAD DATA INFILE 'daten.txt' INTO TABLE tabelle2
- FIELDS TERMINATED BY '\t';
-@end example
-
-Das wahrscheinliche Ergebnis ist, dass jede Eingabezeile als ein einzelnes
-Feld interpretiert wird.
-
-@code{LOAD DATA INFILE} kann auch benutzt werden, um Dateien aus externen
-Quellen einzulesen. Eine Datei im dBASE-Format zum Beispiel hat Felder, die
-durch Kommas getrennt und in Anf�hrungszeichens eingeschlossen sind. Wenn
-Zeilen in der Datei von Neue-Zeile-Zeichen begrenzt sind, zeigt der unten
-stehende Befehl die Feld- und Zeilen-Handhabungsoptionen, die f�r das Laden
-der Datei benutzt werden:
-
-@example
-mysql> LOAD DATA INFILE 'daten.txt' INTO TABLE tabelle
- FIELDS TERMINATED BY ',' ENCLOSED BY '"'
- LINES TERMINATED BY '\n';
-@end example
-
-Jede der Feld- oder Zeilen-Handhabungsoptionen kann eine leere Zeichenkette
-angeben (@code{''}). Wenn nicht leer, m�ssen die @code{FIELDS [OPTIONALLY]
-ENCLOSED BY}- und @code{FIELDS ESCAPED BY}-Werte ein einzelnes Zeichen
-sein. Die @code{FIELDS TERMINATED BY}- und @code{LINES TERMINATED BY}-Werte
-k�nnen aus mehr als einem Zeichen bestehen. Um zum Beispiel Zeilen zu
-schreiben, die durch Wagenr�cklauf-Neue-Zeile-Paare getrennt sind, oder um
-eine Datei einzulesen, die solche Zeilen enth�lt, geben Sie eine
-@code{LINES TERMINATED BY '\r\n'}-Klausel an.
-
-Um beispielsweise eine Datei mit Witzen einzulesen, die durch @code{%%}
-getrennt sind, k�nnen Sie folgendes eingeben:
-
-@example
-create table witze (a int not null auto_increment primary key, witz text not null);
-load data infile "/tmp/witze.txt" into table witze fields terminated by "" lines terminated by "\n%%\n" (witz);
-@end example
-
-@code{FIELDS [OPTIONALLY] ENCLOSED BY} steuert die Art von
-Anf�hrungszeichen von Feldern. Wenn Sie bei der Ausgabe (@code{SELECT ...
-INTO OUTFILE}) das Wort @code{OPTIONALLY} auslassen, sind alle Felder vom
-@code{ENCLOSED BY}-Zeichen eingeschlossen. Ein Beispiel einer solchen
-Ausgabe (mit Kommas als Feldbegrenzern) ist unten dargestellt:
-
-@example
-"1","eine Zeichenkette","100.20"
-"2","eine Zeichenkette, die ein Komma (,) enth�lt","102.20"
-"3","eine Zeichenkette, die ein \" Anf�hrungszeichen enth�lt","102.20"
-"4","eine Zeichenkette, die ein \", Anf�hrungszeichen und Komma (,) enth�lt","102.20"
-@end example
-
-Wenn Sie @code{OPTIONALLY} angeben, wird das @code{ENCLOSED BY}-Zeichen nur
-benutzt, um @code{CHAR}- und @code{VARCHAR}-Felder zu umschlie�en:
-
-@example
-1,"eine Zeichenkette",100.20
-2,"eine Zeichenkette mit einem , Komma",102.20
-3,"eine Zeichenkette mit einem \" Anf�hrungszeichen",102.20
-4,"eine Zeichenkette mit \", Anf�hrungszeichen und Komma",102.20
-@end example
-
-Beachten Sie, dass @code{ENCLOSED BY}-Zeichen innerhalb eines Feldwerts
-escapet werden, indem ihnen das @code{ESCAPED BY}-Zeichen vorangestellt
-wird. Beachten Sie auch, dass es bei der Angabe eines leeren empty
-@code{ESCAPED BY}-Werts m�glich ist, Ausgaben zu erzeugen, die nicht
-korrekt von @code{LOAD DATA INFILE} eingelesen werden k�nnen. Die oben
-dargestellte Ausgabe zum Beispiel w�rde wie im Folgenden gezeigt
-erscheinen, wenn das Fluchtzeichen (Escape-Zeichen) leer ist. Beachten Sie,
-dass das zweite Feld der vierten Zeile nach dem Anf�hrungszeichen ein Komma
-enth�lt, was (irrt�mlich) als Feldbegrenzer interpretiert wird:
-
-@example
-1,"eine Zeichenkette",100.20
-2,"eine Zeichenkette mit einem , Komma",102.20
-3,"eine Zeichenkette mit einem " Anf�hrungszeichen",102.20
-4,"eine Zeichenkette mit ", Anf�hrungszeichen und Komma",102.20
-@end example
-
-F�r die Eingabe wird das @code{ENCLOSED BY}-Zeichen - falls vorhanden - vom
-Ende von Feldwerten entfernt. (Das gilt, egal ob @code{OPTIONALLY}
-angegeben ist oder nicht; @code{OPTIONALLY} hat keine Auswirkung auf die
-Interpretation der Eingabe.) @code{ENCLOSED BY}-Zeichen, denen das
-@code{ESCAPED BY}-Zeichen vorangestellt ist, werden als Teil des aktuellen
-Feldwerts interpretiert. Zus�tzlich werden verdoppelte @code{ENCLOSED
-BY}-Zeichen innerhalb von Feldern als ein einzelnes @code{ENCLOSED
-BY}-Zeichen interpretiert, falls das Feld selbst mit diesem Zeichen
-anf�ngt. Wenn beispielsweise @code{ENCLOSED BY '"'} angegeben wird, werden
-Anf�hrungszeichen wie folgt behandelt:
-
-@example
-"Der ""BIG"" Boss" -> Der "BIG" Boss
-Der "BIG" Boss -> Der "BIG" Boss
-Der ""BIG"" Boss -> Der ""BIG"" Boss
-@end example
-
-@code{FIELDS ESCAPED BY} steuert, wie Sonderzeichen geschrieben oder
-gelesen werden. Wenn das @code{FIELDS ESCAPED BY}-Zeichen nicht leer ist,
-wird es benutzt, um es bei der Ausgabe folgenden Zeichen voranzustellen:
-@itemize @bullet
-@item
-Dem @code{FIELDS ESCAPED BY}-Zeichen
-@item
-Dem @code{FIELDS [OPTIONALLY] ENCLOSED BY}-Zeichen
-@item
-Dem ersten Zeichen von @code{FIELDS TERMINATED BY}- und @code{LINES
-TERMINATED BY}-Werten
-@item
-ASCII @code{0} (was tats�chlich nach dem Fluchtzeichen (Escape-Zeichen)
-als ASCII @code{'0'} geschrieben wird, nicht ein Byte mit Wert 0)
-@end itemize
-
-Wenn das @code{FIELDS ESCAPED BY}-Zeichen leer ist, werden keine Zeichen
-escapet. Es ist wahrscheinlich keine gute Idee, ein leeres Fluchtzeichen
-(Escape-Zeichen) anzugeben, insbesondere, wenn Feldwerte in Ihren Daten
-irgend welche der Zeichen enthalten, die gerade aufgelistet wurden.
-
-F�r die Eingabe werden, falls das @code{FIELDS ESCAPED BY}-Zeichen nicht
-leer ist, Vorkommen dieses Zeichens entfernt, und die folgenden Zeichen
-werden buchst�blich als Teil des Feldwerts genommen. Die Ausnahmen sind ein
-escapetes @samp{0} oder @samp{N} (beispielsweise @code{\0} oder @code{\N},
-wenn das Fluchtzeichen (Escape-Zeichen) @samp{\} ist). Diese Folgen werden
-als ASCII-@code{0} interpretiert (ein Byte mit Wert 0) und @code{NULL}.
-Siehe unten zu den Regeln der @code{NULL}-Handhabung.
-
-Weitere Informationen �ber die @samp{\}-Escape-Syntax finden Sie unter
-@ref{Literals}.
-
-In bestimmten F�llen beeinflussen sich die Handhabungsoptionen f�r Felder
-und Zeilen gegenseitig:
-
-@itemize @bullet
-@item
-Wenn @code{LINES TERMINATED BY} eine leere Zeichenkette ist und
-@code{FIELDS TERMINATED BY} nicht leer ist, werden Zeile auch durch
-@code{FIELDS TERMINATED BY} begrenzt.
-@item
-Wenn die @code{FIELDS TERMINATED BY}- und @code{FIELDS ENCLOSED BY}-Werte
-beide leer sind (@code{''}), wird ein Festzeilen- (nicht begrenztes) Format
-benutzt. Beim Festzeilenformat werden keine Begrenzer zwischen Feldern
-benutzt. Statt dessen werden Spaltenwerte geschrieben und gelesen, indem
-die Anzeigebreite der Spalten benutzt wird. Wenn eine Spalte zum Beispiel
-als @code{INT(7)} deklariert ist, werden Werte f�r die Spalte mit
-7-Zeichen-Feldern geschrieben. Bei der Eingabe werden Werte f�r die Spalte
-mit 7-Zeichen-Feldern bezogen. Festzeilenformate beeinflussen auch die
-Handhabung von @code{NULL}-Werten (siehe unten). Beachten Sie, dass
-Festgr��enformate nicht funktionieren, wenn Sie einen
-Multi-Byte-Zeichensatz benutzen.
-@end itemize
-
-Die Handhabung von @code{NULL}-Werten variiert in Abh�ngigkeit von den
-@code{FIELDS}- und @code{LINES}-Optionen, die Sie benutzen:
-
-@itemize @bullet
-@item
-Bei den vorgabem��igen @code{FIELDS}- und @code{LINES}-Werten wird
-@code{NULL} f�r die Ausgabe als @code{\N} geschrieben und @code{\N} als
-@code{NULL} f�r die Eingabe gelesen (unter der Annahme, dass das
-@code{ESCAPED BY}-Zeichen @samp{\} ist).
-
-@item
-Wenn @code{FIELDS ENCLOSED BY} nicht leer ist, wird ein Feld, das das
-Literalwort @code{NULL} als seinen Wert enth�lt, als @code{NULL}-Wert
-gelesen (das weicht ab vom Wort @code{NULL}, begrenzt durch @code{FIELDS
-ENCLOSED BY}-Zeichen, was als die Zeichenkette @code{'NULL'} gelesen wird).
-
-@item
-Wenn @code{FIELDS ESCAPED BY} leer ist, wird @code{NULL} als das Wort
-@code{NULL} gelesen.
-
-@item
-Beim Festzeilenformat (was auftritt, wenn sowohl @code{FIELDS TERMINATED
-BY} als auch @code{FIELDS ENCLOSED BY} leer sind), wird @code{NULL} als
-leere Zeichenkette geschrieben. Beachten Sie, dass das dazu f�hrt, dass
-@code{NULL}-Werte und leere Zeichenketten in der Tabelle nicht mehr
-unterscheidbar sind, wenn in die Datei geschrieben wird, weil sie beide als
-leere Zeichenketten geschrieben werden. Wenn Sie in der Lage sein m�ssen,
-diese zu unterscheiden, wenn Sie die Datei wieder einlesen, sollten Sie
-kein Festzeilenformat benutzen.
-@end itemize
-
-Einige F�lle werden von @code{LOAD DATA INFILE} nicht unterst�tzt:
-@itemize @bullet
-
-@item
-Festgr��enzeilen (@code{FIELDS TERMINATED BY} und @code{FIELDS ENCLOSED
-BY} sind beide leer) und @code{BLOB}- oder @code{TEXT}-Spalten.
-
-@item
-Wenn Sie ein Trennzeichen angeben, das dasselbe wie ein anderes ist oder
-einem anderen vorangestellt ist. @code{LOAD DATA INFILE} kann in diesem
-Fall die Eingabe nicht korrekt interpretieren. Folgende
-@code{FIELDS}-Klausel zum Beispiel w�rde Probleme bereiten:
-
-@example
-FIELDS TERMINATED BY '"' ENCLOSED BY '"'
-@end example
-
-@item
-Wenn @code{FIELDS ESCAPED BY} leer ist, f�hrt ein Feldwert, der ein
-Vorkommen von @code{FIELDS ENCLOSED BY} oder @code{LINES TERMINATED BY}
-gefolgt vom @code{FIELDS TERMINATED BY}-Wert enth�lt, dazu, dass @code{LOAD
-DATA INFILE} mit dem Einlesen eines Feldes oder einer Zeile zu fr�h
-aufh�rt. Das passiert, weil @code{LOAD DATA INFILE} nicht korrekt festlegen
-kann, wo der Feld- oder Zeilenwert endet.
-@end itemize
-
-Das folgende Beispiel l�dt alle Spalten der @code{personen}-Tabelle:
-
-@example
-mysql> LOAD DATA INFILE 'personen.txt' INTO TABLE personen;
-@end example
-
-Es ist keine Felderliste angegeben, daher erwartet @code{LOAD DATA INFILE},
-dass die Eingabefelder ein Feld f�r jede Tabellenspalte enthalten. Die
-Vorgabewerte f�r @code{FIELDS} und @code{LINES}-Werte werden benutzt.
-
-Wenn Sie Daten nur in einige Tabellenspalten einladen wollen, geben Sie
-eine Felderliste an:
-
-@example
-mysql> LOAD DATA INFILE 'personen.txt'
- INTO TABLE personen (spalte1,spalte2,...);
-@end example
-
-Eine Felderliste m�ssen Sie ausserdem angeben, wenn die Reihenfolge der
-Felder in der Eingabedatei von der Reihenfolge der Tabellenspalten
-abweicht. Ansonsten kann MySQL nicht feststellen, wie er Eingabefelder
-Tabellenspalten zuordnen soll.
-
-Wenn eine Zeile zu wenige Felder hat, werden die Spalten, f�r die es kein
-Eingabefeld gibt, auf ihre Vorgabewerte gesetzt. Die Zuweisung von
-Vorgabewerten ist unter @ref{CREATE TABLE, , @code{CREATE TABLE}}
-beschrieben.
-
-Ein leerer Feldwert wird anders interpretiert als ein fehlender Feldwert:
-
-@itemize @bullet
-@item
-Bei Zeichenketten-Typen wird die Spalte auf die leere Zeichenkette gesetzt.
-
-@item
-Bei numerischen Typen wird die Spalte auf @code{0} gesetzt.
-
-@item
-Bei Datums- und Zeit-Typen wird die Spalte auf den entsprechenden
-``0''-Wert f�r den Typ gesetzt.
-@xref{Date and time types}.
-@end itemize
-
-Beachten Sie, dass das dieselben Werte sind, die sich ergeben, wenn Sie
-einer Zeichenkette explizit eine leere Zeichenkette zuweisen oder solches
-f�r einen DATE- oder TIME-Type in einem @code{INSERT}- oder
-@code{UPDATE}-Statement tun.
-
-@code{TIMESTAMP}-Spalten werden nur dann auf das aktuelle Datum und die
-aktuelle Zeit gesetzt, wenn es einen @code{NULL}-Wert f�r die Spalte gibt
-oder (nur f�r die erste @code{TIMESTAMP}-Spalte) die
-@code{TIMESTAMP}-Spalte in der Felderliste ausgelassen ist, wenn eine
-Felderliste angegeben wird.
-
-Wenn eine Eingabezeile zu viele Felder hat, werden die zus�tzlichen Felder
-ignoriert und die Anzahl von Warnungen herauf gez�hlt.
-
-@code{LOAD DATA INFILE} betrachtet alle Eingaben als Zeichenketten, daher
-k�nnen Sie f�r @code{ENUM} oder @code{SET}-Spalten keine numerischen Werte
-benutzen, wie Sie das bei @code{INSERT}-Statements tun k�nnen. Alle
-@code{ENUM}- und @code{SET}-Werte m�ssen als Zeichenketten angegeben
-werden!
-
-@findex mysql_info()
-Wenn Sie die C-API benutzen, k�nnen Sie Informationen �ber die Anfrage
-durch den Aufruf der API-Funktion @code{mysql_info()} erhalten, wenn die
-@code{LOAD DATA INFILE}-Anfrage beendet ist. Das Format der
-Informationszeichenkette sieht wie folgt aus:
-
-@example
-Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
-@end example
-
-Warnungen erfolgen unter denselben Umst�nden, als wenn Werte �ber das
-@code{INSERT}-Statement (@pxref{INSERT, , @code{INSERT}}) eingef�gt werden,
-ausser dass @code{LOAD DATA INFILE} zus�tzlich Warnungen erzeugt, wenn es
-zu wenige oder zu viele Felder in der Eingabezeile gibt. Die Warnungen
-werden nirgendwo gespeichert; die Anzahl von Warnungen kann daher nur als
-Anhaltspunkt daf�r benutzt werden, ob alles gut ging. Wenn Sie Warnungen
-erhalten und genau wissen wollen, warum Sie diese erhalten, besteht eine
-M�glichkeit daf�r darin, @code{SELECT ... INTO OUTFILE} in eine andere
-Datei zu benutzen und diese mit der Original-Eingabedatei zu vergleichen.
-
-Wenn Sie wollen, dass @code{LOAD DATA} aus einer Pipe liest, k�nnen Sie
-folgenden Trick benutzen:
-
-@example
-mkfifo /mysql/db/x/x
-chmod 666 /mysql/db/x/x
-cat < /dev/tcp/10.1.1.12/4711 > /nt/mysql/db/x/x
-mysql -e "LOAD DATA INFILE 'x' INTO TABLE x" x
-@end example
-
-Wenn Sie eine MySQL-Version vor 3.23.25 benutzen, k�nnen Sie das nur mit
-@code{LOAD DATA LOCAL INFILE} durchf�hren.
-
-Weitere Informationen �ber die Effizienz von @code{INSERT} versus
-@code{LOAD DATA INFILE} und M�glichkeiten, die Geschwindigkeit zu steigern,
-finden Sie unter @code{LOAD DATA INFILE}, @xref{Insert speed}.
-
-
-@node Data Definition, Basic User Commands, Data Manipulation, Reference
-@c German node Datendefinition
-@section Datendefinition: @code{CREATE}, @code{DROP}, @code{ALTER}
-
-
-
-@menu
-* CREATE DATABASE::
-* DROP DATABASE::
-* CREATE TABLE::
-* ALTER TABLE::
-* RENAME TABLE::
-* DROP TABLE::
-* CREATE INDEX::
-* DROP INDEX::
-@end menu
-
-@node CREATE DATABASE, DROP DATABASE, Data Definition, Data Definition
-@c German node CREATE DATABASE
-@subsection @code{CREATE DATABASE}-Syntax
-
-@findex CREATE DATABASE
-
-@example
-CREATE DATABASE [IF NOT EXISTS] datenbank
-@end example
-
-@c German FIX unwrapped @ref
-@code{CREATE DATABASE} erzeugt eine Datenbank mit dem angegebenen Namen.
-Die Regeln f�r erlaubte Datenbanknamen finden Sie unter @ref{Legal names}.
-Ein Fehler tritt auf, wenn die Datenbank bereits existiert und Sie
-@code{IF NOT EXISTS} nicht angeben.
-
-Datenbanken sind in MySQL als Verzeichnisse implementiert, die Dateien
-enthalten, die den Tabellen in der Datenbank entsprechen. Weil es keine
-Tabellen in einer Datenbank gibt, wenn diese erstmalig erzeugt wird,
-erzeugt das @code{CREATE DATABASE}-Statement nur ein Verzeichnis unter dem
-MySQL-Daten-Verzeichnis.
-
-@cindex @code{mysqladmin}
-Sie k�nnen auch mit @code{mysqladmin} Datenbanken erzeugen.
-@xref{Client-Side Scripts}.
-
-
-@node DROP DATABASE, CREATE TABLE, CREATE DATABASE, Data Definition
-@c German node DROP DATABASE
-@subsection @code{DROP DATABASE}-Syntax
-
-@findex DROP DATABASE
-
-@example
-DROP DATABASE [IF EXISTS] datenbank
-@end example
-
-@code{DROP DATABASE} l�scht alle Tabellen in der Datenbank und l�scht die
-Datenbank. Wenn Sie ein @code{DROP DATABASE} auf eine symbolisch verkn�pfte
-Datenbank ausf�hren, werden sowohl der Link als auch die Original-Datenbank
-gel�scht. @strong{Seien Sie mit diesem Befehl sehr vorsichtig!}
-
-@code{DROP DATABASE} gibt die Anzahl von Dateien zur�ck, die aus dem
-Datenbank-Verzeichnis entfernt wurden. Normalerweise ist das dreimal die
-Anzahl der Tabellen, weil normalerweise jede Tabelle einer
-@file{.MYD}-Datei, einer @file{.MYI}-Datei und einer @file{.frm}-Datei
-entspricht.
-
-Der @code{DROP DATABASE}-Befehl entfernt aus dem angegebenen
-Datenbank-Verzeichnis alle Dateien mit folgenden Erweiterungen:
-
-@multitable @columnfractions .25 .25 .25 .25
-@item .BAK @tab .DAT @tab .HSH @tab .ISD
-@item .ISM @tab .ISM @tab .MRG @tab .MYD
-@item .MYI @tab .db @tab .frm
-@end multitable
-
-Alle Unterverzeichnisse, die aus 2 Ziffern bestehen
-(@code{RAID}-Verzeichnisse), werden ebenfalls gel�scht.
-
-Ab MySQL-Version 3.22 k�nnen Sie die Schl�sselw�rter @code{IF EXISTS}
-benutzen, um eine Fehlermeldung zu vermeiden, die erscheint, wenn die
-Datenbank nicht existiert.
-
-@cindex @code{mysqladmin}
-Sie k�nnen Datenbanken auch mit @code{mysqladmin} l�schen.
-@xref{Client-Side Scripts}.
-
-
-
-@node CREATE TABLE, ALTER TABLE, DROP DATABASE, Data Definition
-@c German node CREATE TABLE
-@subsection @code{CREATE TABLE}-Syntax
-
-@findex CREATE TABLE
-
-
-@example
-CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tabelle [(create_definition,...)]
-[tabellen_optionen] [select_statement]
-
-create_definition:
- spalten_name typ [NOT NULL | NULL] [DEFAULT vorgabe_wert] [AUTO_INCREMENT]
- [PRIMARY KEY] [referenz_definition]
- oder PRIMARY KEY (index_spalten_name,...)
- oder KEY [index_name] (index_spalten_name,...)
- oder INDEX [index_name] (index_spalten_name,...)
- oder UNIQUE [INDEX] [index_name] (index_spalten_name,...)
- oder FULLTEXT [INDEX] [index_name] (index_spalten_name,...)
- oder [CONSTRAINT symbol] FOREIGN KEY index_name (index_spalten_name,...)
- [referenz_definition]
- oder CHECK (ausdruck)
-
-typ:
- TINYINT[(laenge)] [UNSIGNED] [ZEROFILL]
- oder SMALLINT[(laenge)] [UNSIGNED] [ZEROFILL]
- oder MEDIUMINT[(laenge)] [UNSIGNED] [ZEROFILL]
- oder INT[(laenge)] [UNSIGNED] [ZEROFILL]
- oder INTEGER[(laenge)] [UNSIGNED] [ZEROFILL]
- oder BIGINT[(laenge)] [UNSIGNED] [ZEROFILL]
- oder REAL[(laenge,dezimalstellen)] [UNSIGNED] [ZEROFILL]
- oder DOUBLE[(laenge,dezimalstellen)] [UNSIGNED] [ZEROFILL]
- oder FLOAT[(laenge,dezimalstellen)] [UNSIGNED] [ZEROFILL]
- oder DECIMAL(laenge,dezimalstellen) [UNSIGNED] [ZEROFILL]
- oder NUMERIC(laenge,dezimalstellen) [UNSIGNED] [ZEROFILL]
- oder CHAR(laenge) [BINARY]
- oder VARCHAR(laenge) [BINARY]
- oder DATE
- oder TIME
- oder TIMESTAMP
- oder DATETIME
- oder TINYBLOB
- oder BLOB
- oder MEDIUMBLOB
- oder LONGBLOB
- oder TINYTEXT
- oder TEXT
- oder MEDIUMTEXT
- oder LONGTEXT
- oder ENUM(wert1,wert2,wert3,...)
- oder SET(wert1,wert2,wert3,...)
-
-index_spalten_name:
- spalten_name [(laenge)]
-
-referenz_definition:
- REFERENCES tabelle [(index_spalten_name,...)]
- [MATCH FULL | MATCH PARTIAL]
- [ON DELETE referenz_option]
- [ON UPDATE referenz_option]
-
-referenz_option:
- RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
-
-tabellen_optionen:
- TYPE = @{BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM @}
-or AUTO_INCREMENT = #
-or AVG_ROW_LENGTH = #
-or CHECKSUM = @{0 | 1@}
-or COMMENT = "string"
-or MAX_ROWS = #
-or MIN_ROWS = #
-or PACK_KEYS = @{0 | 1 | DEFAULT@}
-or PASSWORD = "string"
-or DELAY_KEY_WRITE = @{0 | 1@}
-or ROW_FORMAT= @{ default | dynamic | fixed | compressed @}
-or RAID_TYPE= @{1 | STRIPED | RAID0 @} RAID_CHUNKS=# RAID_CHUNKSIZE=#
-or UNION = (tabelle,[tabelle...])
-or INSERT_METHOD= @{NO | FIRST | LAST @}
-or DATA directory="verzeichnis"
-or INDEX directory="verzeichnis"
-
-select_statement:
- [IGNORE | REPLACE] SELECT ... (jedes zul�ssige SELECT-Statement)
-@end example
-
-@code{CREATE TABLE} erzeugt eine Tabelle mit dem angegebenen Namen in der
-aktuellen Datenbank. Die Regeln f�r erlaubte Tabellennamen finden Sie unter
-@ref{Legal names}. Ein Fehler tritt auf, wenn es keine aktuelle
-Datenbank gibt oder wenn die Tabelle bereits existiert.
-
-Ab MySQL-Version 3.22 kann der Tabellenname als @code{datenbank.tabelle}
-angegeben werden. Das funktioniert unabh�ngig davon, ob es eine aktuelle
-Datenbank gibt oder nicht.
-
-In MySQL-Version 3.23 k�nnen Sie das @code{TEMPORARY}-Schl�sselwort
-benutzen, wenn Sie eine Tabelle erzeugen. Eine tempor�re Tabelle wird
-automatisch gel�scht, wenn eine Verbindung stirbt und der Name sich auf die
-Verbindung bezieht. Das bedeutet, dass zwei verschiedene Verbindungen beide
-denselben tempor�ren Tabellenname benutzen k�nnen, oder miteinander oder
-einer bestehenden Tabelle gleichen Namens in Konflikt zu geraten. (Die
-bestehende Tabelle ist versteckt, bis die tempor�re Tabelle gel�scht wird.)
-
-Ab MySQL-Version 3.23 k�nnen Sie die Schl�sselw�rter @code{IF NOT EXISTS}
-benutzen, so dass kein Fehler auftritt, wenn die Tabelle bereits besteht.
-Beachten Sie, dass keine �berpr�fung erfolgt, dass die Tabellenstrukturen
-identisch sind.
-
-Jede Tabelle @code{tabelle} wird durch einige Dateien im
-Datenbank-Verzeichnis dargestellt. Im Falle von MyISAM-Tabellen erhalten
-Sie:
-
-@multitable @columnfractions .2 .8
-@item @strong{Datei} @tab @strong{Zweck}
-@item @code{tabelle.frm} @tab Tabellendefinitionsdatei (form)
-@item @code{tabelle.MYD} @tab Daten-Datei
-@item @code{tabelle.MYI} @tab Index-Datei
-@end multitable
-
-Weitere Information �ber die Eigenschaften der verschiedenen Spaltentypen
-finden Sie unter @ref{Column types}:
-
-@itemize @bullet
-@item
-Wenn weder @code{NULL} noch @code{NOT NULL} angegeben ist, wird die Spalte
-behandelt, als wenn @code{NULL} angegeben worden w�re.
-
-@item
-Eine Ganzzahl-Spalte kann das zus�tzliche Attribut @code{AUTO_INCREMENT}
-haben. Wenn Sie einen Wert von @code{NULL} (empfohlen) oder @code{0} in
-eine @code{AUTO_INCREMENT}-Spalte einf�gen, wird die Spalte auf
-@code{wert+1} gesetzt, wobei @code{wert} der gr��te momentan in der
-Tabelle vorhandene Spaltenwert ist. @code{AUTO_INCREMENT}-Folgen fangen mit
-@code{1} an. @xref{mysql_insert_id, , @code{mysql_insert_id()}}.
-
-Wenn Sie eine Zeile l�schen, die den h�chsten Wert einer
-@code{AUTO_INCREMENT}-Spalte enth�lt, wird der Wert bei einer @code{ISAM}-
-oder @code{BDB}-Tabelle wieder verwendet, nicht aber bei einer
-@code{MyISAM}- oder @code{InnoDB}-Tabelle. Wenn Sie alle Zeilen in der
-Tabelle mit @code{DELETE FROM tabelle} (ohne ein @code{WHERE}) im
-@code{AUTOCOMMIT}-Modus l�schen, f�ngt die Folge bei allen Tabellentypen
-von Neuem an.
-
-@strong{HINWEIS:} Es darf nur eine @code{AUTO_INCREMENT}-Spalte pro Tabelle
-geben und diese muss indiziert sein. MySQL-Version 3.23 funktioniert
-dar�ber hinaus nur korrekt, wenn die @code{AUTO_INCREMENT}-Spalte nur
-positive Werte hat. Das Einf�gen einer negativen Zahl wird als Einf�gen
-einer sehr gro�en positiven Zahl betrachtet. Damit werden
-Genauigkeitsprobleme vermieden, wenn Zahlen vom positiven zum negativen
-Bereich �bergehen. Ausserdem wird sichergestellt, dass man nicht
-versehentlich eine @code{AUTO_INCREMENT}-Spalte erh�lt, die 0 enth�lt.
-
-@cindex ODBC-Kompatibilit�t
-@cindex Kompatibilit�t, mit ODBC
-Um MySQL kompatibel mit einigen ODBC-Applikationen zu machen, k�nnen Sie
-die letzte eingef�gte Zeile mit folgender Anfrage finden:
-
-@example
-SELECT * FROM tabelle WHERE auto_spalte IS NULL
-@end example
-
-@item
-@code{NULL}-Werte werden bei @code{TIMESTAMP}-Spalten anders als bei
-anderen Spaltentypen gehandhabt. Sie k�nnen @code{NULL} nicht wortgetreu in
-einer @code{TIMESTAMP}-Spalte speichern: Wenn Sie die Spalte auf
-@code{NULL} setzen, wird sie auf das aktuelle Datum und die aktuelle Zeit
-gesetzt. Weil @code{TIMESTAMP}-Spalten sich auf diese Art verhalten,
-treffen die @code{NULL}- und @code{NOT NULL}-Attribute nicht auf normale
-Art zu und werden ignoriert, wenn Sie sie angeben.
-
-Auf der anderen Seite berichtet der Server, um es f�r MySQL-Clients
-leichter zu machen, @code{TIMESTAMP}-Spalten zu benutzen, dass solchen
-Spalten @code{NULL}-Werte zugewiesen werden k�nnen (was stimmt), obwohl
-@code{TIMESTAMP} nie wirklich einen @code{NULL}-Wert enthalten wird. Sie
-k�nnen das sehen, wenn Sie @code{DESCRIBE tabelle} eingeben, um eine
-Beschreibung Ihrer Tabelle zu erhalten.
-
-Beachten Sie, dass das Setzen einer @code{TIMESTAMP}-Spalte auf @code{0}
-nicht dasselbe ist wie das Setzen auf @code{NULL}, weil @code{0} ein
-g�ltiger @code{TIMESTAMP}-Wert ist.
-
-@item
-Wenn kein @code{DEFAULT}-Wert f�r eine Spalte angegeben wird, weist MySQL
-automatisch einen zu.
-
-Wenn die Spalte @code{NULL} als Wert aufnehmen darf, ist der Vorgabewert
-@code{NULL}.
-
-Wenn die Spalte als @code{NOT NULL} deklariert ist, h�ngt der Vorgabewert
-vom Spaltentyp ab:
-
-@itemize @minus
-@item
-Bei numerischen Typen ausser denen, die mit dem
-@code{AUTO_INCREMENT}-Attribut deklariert wurden, ist der Vorgabewert
-@code{0}. Bei einer @code{AUTO_INCREMENT}-Spalte ist der Vorgabewert der
-n�chste Wert in der Folge.
-
-@item
-Bei Datums- und Zeit-Typen ausser @code{TIMESTAMP} ist der Vorgabewert der
-entsprechende 0-Wert f�r den Typ. Bei der ersten @code{TIMESTAMP}-Spalte
-einer Tabelle ist der Vorgabewert das aktuelle Datum und die aktuelle Zeit.
-@xref{Date and time types}.
-
-@item
-Bei Zeichenketten-Typen ausser @code{ENUM} ist der Vorgabewert die leere
-Zeichenkette. Bei @code{ENUM} ist der Vorgabewert der erste
-Aufz�hlungswert.
-@end itemize
-
-Vorgabewerte m�ssen Konstanten sein. Das hei�t zum Beispiel, dass Sie den
-Vorgabewert einer DATE-Spalte nicht als Wert einer Funktion wie
-@code{NOW()} oder @code{CURRENT_DATE} setzen k�nnen.
-
-@item
-@code{KEY} ist ein Synonym f�r @code{INDEX}.
-
-@item
-In MySQL darf ein @code{UNIQUE}-Schl�ssel nur unterschiedliche Werte haben.
-Ein Fehler tritt auf, wenn Sie versuchen, eine neue Zeile hinzuzuf�gen, der
-Schl�sselwert dem einer bestehenden Zeile entspricht.
-
-@item
-@tindex PRIMARY KEY
-Ein @code{PRIMARY KEY} ist ein eindeutiger @code{KEY} mit der zus�tzlichen
-Beschr�nkung, dass alle Schl�sselspalten als @code{NOT NULL} deklariert
-sein m�ssen. In MySQL wird der Schl�ssel @code{PRIMARY} genannt. Eine
-Tabelle darf nur einen @code{PRIMARY KEY} haben. Wenn Sie keinen
-@code{PRIMARY KEY} haben und irgend welche Applikationen nach einem
-@code{PRIMARY KEY} in Ihrer Tabelle verlangen, gibt MySQL den ersten
-@code{UNIQUE}-Schl�ssel, der keinerlei @code{NULL}-Spalten hat, als
-@code{PRIMARY KEY} zur�ck.
-
-@item
-Ein @code{PRIMARY KEY} kann ein mehrspaltiger Index sein. Sie k�nnen jedoch
-keinen mehrspaltiger Index mit dem @code{PRIMARY KEY}-Schl�sselattribut in
-einer Spaltenspezifikation erzeugen. Wenn Sie das tun, wird nur die erste
-Spalte als @code{PRIMARY} gekennzeichnet. Sie m�ssen die @code{PRIMARY
-KEY(index_spalten_name, ...)}-Syntax benutzen.
-
-@item
-Wenn der @code{PRIMARY}- oder @code{UNIQUE}-Schl�ssel aus nur einer Spalte
-besteht und diese vom Typ Ganzzahl ist, k�nnen Sie auf sie auch als
-@code{_rowid} verweisen (neu ab Version 3.23.11).
-
-@item
-Wenn Sie einem Index keinen Namen zuweisen, wird dem Index derselbe Name
-zugewiesen wie der erste @code{index_spalten_name}, mit einem optionalen
-Suffix (@code{_2}, @code{_3}, @code{...}), um ihn eindeutig zu machen. Sie
-k�nnen die Indexnamen f�r eine Tabelle mit @code{SHOW INDEX FROM tabelle}
-anzeigen. @xref{SHOW, , @code{SHOW}}.
-
-@item
-@cindex @code{NULL}-Werte und Indexe
-@cindex Indexe und @code{NULL}-Werte
-Nur der @code{MyISAM}-Tabellentyp unterst�tzt Indexe auf Spalten, die
-@code{NULL}-Werte enthalten k�nnen. In anderen F�llen m�ssen Sie solche
-Spalten als @code{NOT NULL} deklarieren, sonst tritt ein Fehler auf.
-
-@item
-Mit der @code{spalten_name(laenge)}-Syntax k�nnen Sie einen Index
-festlegen, der nur einen Teil einer @code{CHAR}- oder @code{VARCHAR}-Spalte
-enth�lt. Das kann die Index-Datei viel kleiner machen.
-@xref{Indexes}.
-
-@item
-@cindex @code{BLOB}-Spalten, Indexierung
-@cindex Indexe und @code{BLOB}-Spalten
-@cindex @code{TEXT}-Spalten, Indexierung
-@cindex Indexe und @code{TEXT}-Spalten
-Nur der @code{MyISAM}-Tabellentyp unterst�tzt Indexierung auf @code{BLOB}-
-und @code{TEXT}-Spalten. Wenn Sie einen Index auf eine @code{BLOB}- oder
-@code{TEXT}-Spalte setzen, M�SSEN Sie immer die L�nge des Indexes angeben:
-@example
-CREATE TABLE test (blob_spalte BLOB, index(blob_spalte(10)));
-@end example
-
-@item
-Wenn Sie @code{ORDER BY} oder @code{GROUP BY} bei einer @code{TEXT}- oder
-@code{BLOB}-Spalte benutzen, werden nur die ersten @code{max_sort_length}
-Bytes benutzt. @xref{BLOB, , @code{BLOB}}.
-
-@item
-Ab MySQL-Version 3.23.23 k�nnen Sie auch spezielle @strong{FULLTEXT}-Indexe
-erzeugen, Diese werden f�r Volltextsuche benutzt. Nur der
-@code{MyISAM}-Tabellentyp unterst�tzt @code{FULLTEXT}-Indexe. Sie k�nnen
-auf @code{VARCHAR}- und @code{TEXT}-Spalten erzeugt werden. Die Indexierung
-erfolgt immer �ber die gesamte Spalte, teilweise Indexierung wird nicht
-unterst�tzt. Siehe @ref{Fulltext Search} f�r Details zur Funktionsweise.
-
-@item
-Die @code{FOREIGN KEY}-, @code{CHECK}- und @code{REFERENCES}-Klauseln tun
-momentan noch nichts. Die Syntax wird nur aus Gr�nden der Kompatibilit�t
-bereit gestellt, um das Portieren von Code von anderen SQL-Servern zu
-erleichtern und um Applikationen laufen zu lassen, die Tabellen mit
-Referenzen erzeugen.
-@c German FIX old ref was @xref{Fehlende Funktionen}.
-@xref{ANSI diff Foreign Keys}.
-
-@item
-Jede @code{NULL}-Spalte ben�tigt ein zus�tzliches Bit, gerundet auf das
-n�chste Byte.
-
-@item
-Die maximale Datensatzl�nge in Bytes kann wie folgt berechnet werden:
-
-@example
-Zeilenl�nge = 1
- + (Summe Spaltenl�ngen)
- + (Anzahl von NULL-Spalten + 7)/8
- + (Anzahl von Spalten variabler L�nge)
-@end example
-
-@item
-Die @code{tabellen_optionen}- und @code{SELECT}-Optionen sind implementiert
-ab MySQL-Version 3.23.
-
-Die unterschiedlichen Tabellentypen sind:
-
-@multitable @columnfractions .20 .80
-@item BDB oder Berkeley_db @tab Transaktionssichere Tabellen mit Seitensperren (Page Locking). @xref{BDB}.
-@item HEAP @tab Die Daten dieser Tabelle werden nur im Arbeitsspeicher gehalten. @xref{HEAP}.
-@item ISAM @tab Der Original-Tabellen-Handler. @xref{ISAM}.
-@item InnoDB @tab Transaktionssichere Tabellen mit Zeilensperren. @xref{InnoDB}.
-@item MERGE @tab Eine Sammlung von MyISAM-Tabellen, die als eine Tabelle benutzt werden. @xref{MERGE}.
-@item MRG_MERGE @tab Ein Alias f�r MERGE-Tabellen.
-@item MyISAM @tab Der neue bin�re portable Tabellen-Handler, der ISAM ersetzt. @xref{MyISAM}.
-@end multitable
-@xref{Table types}.
-
-Wenn ein Tabellentyp angegeben wird und dieser besondere Typ nicht
-verf�gbar ist, w�hlt MySQL den Tabellentyp, der dem angegebenen am n�chsten
-kommt. Wenn beispielsweise @code{TYPE=BDB} angegeben wird und die
-Distribution von MySQL keine @code{BDB}-Tabellen unterst�tzt, wird die
-Tabelle statt dessen als @code{MyISAM} erzeugt.
-
-Die anderen Tabellenoptionen werden benutzt, um das Verhalten der Tabelle
-zu optimieren. In den meisten F�llen m�ssen Sie keine davon angeben. Die
-Optionen funktionieren bei allen Tabellentypen, falls nicht anders
-angegeben:
-
-@multitable @columnfractions .20 .80
-@item @code{AUTO_INCREMENT} @tab Der n�chste auto_increment-Wert, den Sie f�r Ihre Tabelle setzen wollen (MyISAM).
-@item @code{AVG_ROW_LENGTH} @tab N�herungsweise die durchschnittliche Zeilenl�nge Ihrer Tabelle. Diese Option m�ssen Sie nur f�r gro�e Tabellen mit unterschiedlich gro�en Datens�tzen setzen.
-@item @code{CHECKSUM} @tab Setzen Sie diesen Wert auf 1, wenn Sie wollen, dass MySQL eine Pr�fsumme f�r alle Zeilen unterh�lt (macht die Tabelle ein bisschen langsamer bei der Aktualisierung, aber macht es einfacher, besch�digte Tabellen zu finden) (MyISAM).
-@item @code{COMMENT} @tab Ein 60-Zeichen-Kommentar f�r Ihre Tabelle.
-@item @code{MAX_ROWS} @tab Maximale Anzahl von Zeilen, die Sie in Ihrer Tabelle zu speichern planen.
-@item @code{MIN_ROWS} @tab Minimale Anzahl von Zeilen, die Sie in Ihrer Tabelle zu speichern planen.
-@item @code{PACK_KEYS} @tab Setzen Sie diesen Wert auf 1, wenn Sie einen kleineren Index erhalten wollen. Das macht Aktualisierungen �blicherweise langsamer und liest schneller (MyISAM, ISAM). Setzen auf 0 schaltet die Komprimierung von Schl�sseln ab. Setzen auf @code{DEFAULT} (MySQL 4.0) weist die Tabellen-Handler an, nur lange @code{CHAR}- / @code{VARCHAR}-Spalten zu packen.
-@item @code{PASSWORD} @tab Verschl�sselt die @code{.frm}-Datei mit einem Passwort. Diese Option tut nichts in der Standard-MySQL-Version.
-@item @code{DELAY_KEY_WRITE} @tab Setzen Sie diesen Wert auf 1, wenn Sie Schl�ssel-Tabellen-Aktualisierungen verz�gern wollen, bis die Tabelle geschlossen wird (MyISAM).
-@item @code{ROW_FORMAT} @tab Definiert, wie die Zeilen gespeichert werden sollen. Momentan funktioniert diese Option nur bei MyISAM-Tabellen, die die @code{DYNAMIC}- und @code{FIXED}-Zeilenformate unterst�tzen. @xref{MyISAM table formats}.
-@end multitable
-
-Wenn Sie eine @code{MyISAM}-Tabelle benutzen, verwendet MySQL das Produkt
-aus @code{max_rows * avg_row_length} um zu entscheiden, wie Gro� die
-resultierende Tabelle sein wird. Wenn Sie keine der obigen Optionen
-angeben, ist die maximale Gr��e f�r eine Tabelle 4 GB (oder 2 GB, wenn Ihr
-Betriebssystem nur 2 GB-Tabellen unterst�tzt). Das geschieht, um
-Zeigergr��en gering zu halten und um den Index kleiner und schneller zu
-machen, wenn Sie nicht wirklich gro�e Dateien ben�tigen.
-
-Wenn Sie @code{PACK_KEYS} nicht benutzen, ist die Vorgabe, nur
-Zeichenketten zu komprimieren, nicht Zahlen. Wenn Sie @code{PACK_KEYS=1}
-benutzen, werden auch Zahlen komprimiert.
-
-Wenn Sie bin�re Zahlschl�ssel komprimieren, benutzt MySQL die
-Pr�fix-Komprimierung. Das bedeutet, dass Sie nur dann einen Nutzen daraus
-ziehen, wenn Sie Zahlen haben, die sich oft wiederholen. Pr�fix-Kompression
-bedeutet, das jeder Schl�ssel ein zus�tzliches Byte ben�tigt, um
-darzustellen, wie viele Bytes des vorherigen Schl�ssels f�r den n�chsten
-Schl�ssel dieselben sind (beachten Sie, dass der Zeiger auf die Zeile in
-der Reihenfolge 'hohes Byte zuerst' direkt nach dem Schl�ssel gespeichert
-wird, um die Kompression zu verbessern). Das hei�t, wenn Sie viele gleiche
-Schl�ssel auf zwei Zeilen hintereinander haben, werden alle folgenden
-'gleichen' Schl�ssel �blicherweise nur 2 Bytes in Anspruch nehmen
-(inklusive dem Zeiger auf die Zeile). Vergleichen Sie das mit dem
-Normalfall, bei dem die folgenden Schl�ssel speicher_platz_fuer_schl�ssel +
-zeiger_groesse beanspruchen (�blicherweise 4). Auf der anderen Seite
-verlieren Sie 1 Byte pro Schl�ssel, wenn alle Schl�ssel v�llig
-unterschiedlich sind, falls der Schl�ssel kein Schl�ssel ist, der
-@code{NULL}-Werte haben kann (in diesem Fall wird die komprimierte
-Schl�ssell�nge, die im selben Byte gespeichert ist, benutzt, um zu
-kennzeichnen, ob ein Schl�ssel @code{NULL} ist).
-
-@item
-Wenn Sie ein @code{SELECT} nach dem @code{CREATE}-Statement angeben,
-erzeugt MySQL neue Felder f�r alle Elemente im @code{SELECT}. Beispiel:
-
-@example
-mysql> CREATE TABLE test (a int not null auto_increment,
- primary key (a), key(b))
- TYPE=MyISAM SELECT b,c from test2;
-@end example
-
-Das erzeugt eine @code{MyISAM}-Tabelle mit drei Spalten a, b und c.
-Beachten Sie, dass die Spalten des @code{SELECT}-Statements an die rechte
-Seite der Tabelle angeh�ngt werden, nicht �berlappend. Nehmen wir folgendes
-Beispiel:
-
-@example
-mysql> select * from foo;
-+---+
-| n |
-+---+
-| 1 |
-+---+
-
-mysql> create table bar (m int) select n from foo;
-Query OK, 1 row affected (0.02 sec)
-Records: 1 Duplicates: 0 Warnings: 0
-
-mysql> select * from bar;
-+------+---+
-| m | n |
-+------+---+
-| NULL | 1 |
-+------+---+
-1 row in set (0.00 sec)
-@end example
-
-F�r jede Zeile in Tabelle @code{foo} wird eine Zeile in @code{bar} mit den
-Werten von @code{foo} und Vorgabewerten f�r die neuen Spalten eingef�gt.
-
-@code{CREATE TABLE ... SELECT} erzeugt nicht automatisch irgend welche
-Indexe. Das wird absichtlich gemacht, um den Befehl so flexibel wie m�glich
-zu machen. Wenn Sie Indexe in der erzeugten Tabelle haben wollen, geben Sie
-diese vor dem @code{SELECT}-Statement an:
-
-@example
-mysql> create table bar (unique (n)) select n von foo;
-@end example
-
-Wenn Fehler beim Kopieren der Daten in die Tabelle auftreten, wird diese
-automatisch gel�scht.
-
-Um sicherzustellen, dass die Update-Log-Datei/Bin�r-Log-Datei benutzt
-werden kann, um die Original-Tabellen neu zu erzeugen, l��t MySQL keine
-gleichzeitigen Einf�geoperationen w�hrend @code{CREATE TABLE .... SELECT}
-zu.
-@item
-Die @code{RAID_TYPE}-Option hilft, die 2 GB- / 4 GB-Grenze f�r die
-MyISAM-Daten-Datei zu durchbrechen (nicht f�r die Index-Datei), auf
-Betriebssystemen, die keine gro�en Dateien unterst�tzen.
-Sie erzielen mehr Geschwindigkeit vom I/O-Flaschenhals, wenn Sie die
-@code{RAID}-Verzeichnisse auf unterschiedliche physikalische Platten legen.
-@code{RAID_TYPE} funktioniert auf jedem Betriebssystem, solange Sie MySQL
-mit @code{--with-raid} konfiguriert haben. Momentan ist der einzige
-zul�ssige @code{RAID_TYPE} @code{STRIPED} (@code{1} und @code{RAID0} sind
-Aliase daf�r).
-
-Wenn Sie @code{RAID_TYPE=STRIPED} bei einer @code{MyISAM}-Tabelle angeben,
-erzeugt @code{MyISAM} @code{RAID_CHUNKS}-Unterverzeichnisse namens 00, 01,
-02 im Datenbank-Verzeichnis. In jedem dieser Verzeichnisse erzeugt
-@code{MyISAM} eine @code{tabelle.MYD}. Wenn Sie Daten in die Daten-Datei
-schreiben, mappt der @code{RAID}-Handler die ersten @code{RAID_CHUNKSIZE} *
-1024 Bytes auf die erste Datei, die n�chsten @code{RAID_CHUNKSIZE} * 1024
-Bytes auf die n�chste Datei usw.
-
-@item
-@code{UNION} wird benutzt, wenn Sie eine Sammlung identischer Tabelle als
-eine benutzen wollen. Das funktioniert nur bei MERGE-Tabellen. @xref{MERGE}.
-
-Momentan ben�tigen Sie @code{SELECT}-, @code{UPDATE}-
-und-@code{DELETE}-Berechtigungen auf die Tabellen, die Sie auf eine
-@code{MERGE}-Tabelle mappen. Alle gemappten Tabellen m�ssen sich in
-derselben Datenbank wie die @code{MERGE}-Tabelle befinden.
-
-@item
-Wenn Sie Daten in eine @code{MERGE}-Tabelle einf�gen wollen, m�ssen Sie mit
-@code{INSERT_METHOD} angeben, in welche Tabelle die Zeile eingef�gt werden
-soll. @xref{MERGE}.
-
-@item
-In der erzeugten Tabelle wird der @code{PRIMARY}-Schl�ssel zuerst
-platziert, gefolgt von allen @code{UNIQUE}-Schl�sseln und danach von den
-normalen Schl�sseln. Das hilft dem MySQL-Optimierer zu priorisieren,
-welcher Schl�ssel benutzt werden soll, und auch, Duplikate von
-@code{UNIQUE}-Schl�sseln zu entdecken.
-
-@item
-Wenn Sie @code{DATA directory="verzeichnis"} oder @code{INDEX
-directory="verzeichnis"} benutzen, k�nnen Sie angeben, wohin die
-Tabellen-Handler ihre Tabellen- und Index-Dateien legen sollen. Das
-funktioniert nur bei @code{MyISAM}-Tabellen in @code{MySQL} 4.0, wenn Sie
-die @code{--skip-symlink}-Option nicht benutzen. @xref{Symbolic links to tables}.
-
-@end itemize
-
-
-@menu
-* Silent column changes::
-@end menu
-
-@node Silent column changes, , CREATE TABLE, CREATE TABLE
-@c German node Stille Spaltentyp-�nderungen
-@subsubsection Stille Spaltentyp-�nderungen
-
-@cindex Stille Spaltentyp-�nderungen
-
-In einigen F�llen �ndert MySQL lautlos eine Spaltenspezifikation von der,
-die in einem @code{CREATE TABLE}-Statement angegeben wurde. (Das kann auch
-bei @code{ALTER TABLE} passieren.):
-
-@itemize @bullet
-@item
-@code{VARCHAR}-Spalten mit einer L�nge kleiner 4 werden in @code{CHAR}
-ge�ndert.
-
-@item
-Wenn irgend eine Spalte in einer Tabelle eine variable L�nge hat, hat im
-Ergebnis jede Zeile eine variable L�nge. Wenn daher eine Tabelle irgend
-welche Spalten variabler L�nge enth�lt (@code{VARCHAR}, @code{TEXT} oder
-@code{BLOB}), werden alle @code{CHAR}-Spalten, die l�nger als drei Zeichen
-sind, in @code{VARCHAR}-Spalten umgewandelt. Das beeinflusst die Benutzung
-dieser Spalten in keiner Weise, denn in MySQL ist @code{VARCHAR} nur eine
-andere Art, Zeichen zu speichern. MySQL f�hrt diese Umwandlung durch, weil
-sie Platz spart und Tabellenoperationen schneller macht.
-@xref{Table types}.
-
-@item
-@code{TIMESTAMP}-Anzeigebreiten m�ssen geradzahlig und im Bereich von 2 bis
-14 sein. Wenn Sie eine Anzeigebreite von 0 oder gr��er als 14 angeben,
-wird die Gr��e auf 14 gesetzt. Ungerade Werte im Bereich von 1 bis 13
-werden auf den n�chst h�heren geraden Wert gesetzt.
-
-@item
-Sie k�nnen keinen echten @code{NULL}-Wert in einer @code{TIMESTAMP}-Spalte
-speichern. Wenn Sie sie auf @code{NULL} setzen, wird sie auf das aktuelle
-Datum und die aktuelle Zeit gesetzt. Weil sich @code{TIMESTAMP}-Spalten so
-verhalten, treffen die Attribute @code{NULL} und @code{NOT NULL} nicht auf
-normale Weise zu und werden ignoriert, wenn Sie sie angeben. @code{DESCRIBE
-tabelle} zeigt dagegen immer an, dass einer @code{TIMESTAMP}-Spalte
-@code{NULL}-Werte zugewiesen werden k�nnen.
-
-@item
-MySQL mappt bestimmte Spaltentypen, die von anderen
-SQL-Datenbank-Herstellern benutzt werden, auf MySQL-Typen.
-@xref{Other-vendor column types}.
-@end itemize
-
-Wenn Sie sehen wollen, ob MySQL einen anderen Spaltentyp als den, den Sie
-angegeben haben, benutzt hat, geben Sie nach dem Erzeugen oder �ndern Ihrer
-Tabelle ein @code{DESCRIBE tabelle}-Statement ein.
-
-@cindex @code{myisampack}
-Bestimmte andere Spaltentyp-�nderungen k�nnen auftreten, wenn Sie eine
-Tabelle mit @code{myisampack} komprimieren. @xref{Compressed format}.
-
-
-@node ALTER TABLE, RENAME TABLE, CREATE TABLE, Data Definition
-@c German node ALTER TABLE
-@subsection @code{ALTER TABLE}-Syntax
-
-@findex ALTER TABLE
-
-@example
-ALTER [IGNORE] TABLE tabelle aenderungs_angabe [, aenderungs_angabe ...]
-
-aenderungs_angabe:
- ADD [COLUMN] create_definition [FIRST | AFTER spalten_name]
- oder ADD [COLUMN] (create_definition, create_definition,...)
- oder ADD INDEX [index_name] (index_spalten_name,...)
- oder ADD PRIMARY KEY (index_spalten_name,...)
- oder ADD UNIQUE [index_name] (index_spalten_name,...)
- oder ADD FULLTEXT [index_name] (index_spalten_name,...)
- or ADD [CONSTRAINT symbol] FOREIGN KEY index_name (index_spalten_name,...)
- [referenz_definition]
- oder ALTER [COLUMN] spalten_name @{SET DEFAULT literal | DROP DEFAULT@}
- oder CHANGE [COLUMN] alter_spalten_name create_definition
- oder MODIFY [COLUMN] create_definition
- oder DROP [COLUMN] spalten_name
- oder DROP PRIMARY KEY
- oder DROP INDEX index_name
- oder DISABLE KEYS
- oder ENABLE KEYS
- oder RENAME [TO] neue_tabelle
- oder ORDER BY spalte
- oder tabellen_optionen
-@end example
-
-Mit @code{ALTER TABLE} k�nnen Sie die Struktur einer bestehenden Tabelle
-�ndern. Sie k�nnen beispielsweise Spalten hinzuf�gen oder l�schen, Indexe
-erzeugen oder l�schen, den Typ bestehender Spalten �ndern oder Spalten oder
-die Tabelle selbst umbenennen. Sie k�nnen auch den Kommentar f�r die
-Tabelle und den Typ der Tabelle �ndern. @xref{CREATE TABLE, , @code{CREATE TABLE}}.
-
-Wenn Sie @code{ALTER TABLE} benutzen, um eine Spaltenspezifikation zu
-�ndern, und @code{DESCRIBE tabelle} anzeigt, dass die Spalte nicht ge�ndert
-wurde, ist es m�glich, dass MySQL Ihre �nderungen aus einem der Gr�nde
-ignoriert hat, die in @ref{Silent column changes} beschrieben sind.
-Wenn Sie beispielsweise versuchen, eine @code{VARCHAR}-Spalte zu
-@code{CHAR} zu �ndern, benutzt MySQL dennoch @code{VARCHAR}, wenn die
-Tabelle weitere Spalten variabler L�nge enth�lt.
-
-@code{ALTER TABLE} funktioniert mittels Anlegen einer tempor�ren Kopie der
-Original-Tabelle. Die �nderungen werden an der Kopie durchgef�hrt, dann
-wird die Original-Tabelle gel�scht und die neue umbenannt. Das wird so
-durchgef�hrt, dass alle Aktualisierungen automatisch ohne irgend welche
-fehlgeschlagenen Aktualisierungen an die neue Tabelle weitergeleitet
-werden. W�hrend @code{ALTER TABLE} ausgef�hrt wird, ist die alte Tabelle
-durch andere Clients lesbar. Aktualisierungen und Schreibvorg�nge in die
-Tabelle werden angehalten, bis die neue Tabelle bereit ist.
-
-Beachten Sie, dass MySQL immer eine tempor�re Tabelle anlegt, wenn Sie f�r
-@code{ALTER TABLE} irgend eine Option ausser @code{RENAME} angeben, selbst
-wenn die Daten eigentlich nicht kopiert werden m�ssten (zum Beispiel, wenn
-Sie einen Spaltennamen �ndern). Wir planen, dass zu beheben, aber da man
-@code{ALTER TABLE} normalerweise nicht ausf�hren muss, ist das auf unserer
-TODO-Liste nicht sehr hoch angesetzt.
-
-@itemize @bullet
-@item
-Um @code{ALTER TABLE} ausf�hren zu k�nnen, ben�tigen Sie @strong{ALTER}-,
-@strong{INSERT}- und @strong{CREATE}-Berechtigungen f�r die Tabelle.
-
-@item
-@code{IGNORE} ist eine MySQL-Erweiterung zu ANSI-SQL92. Es steuert, wie
-@code{ALTER TABLE} funktioniert, wenn es in der neuen Tabelle Duplikate auf
-eindeutigen Schl�sseln gibt. Wenn @code{IGNORE} nicht angegeben wird, wird
-das Kopieren abgebrochen und zur�ckgesetzt. Wenn @code{IGNORE} angegeben
-wird, wird bei Zeilen mit Duplikaten auf einem eindeutigen Schl�ssel nur
-die erste Zeile benutzt, die anderen werden gel�scht.
-
-@item
-Sie k�nnen mehrfache @code{ADD}-, @code{ALTER}-, @code{DROP}- und
-@code{CHANGE}-Klauseln in einem einzigen @code{ALTER TABLE}-Statement
-angeben. Das ist eine MySQL-Erweiterung zu ANSI-SQL92, welches nur eine
-Klausel pro @code{ALTER TABLE}-Statement zul��t.
-
-@item
-@code{CHANGE spalten_name}, @code{DROP spalten_name} und @code{DROP INDEX}
-sind MySQL-Erweiterungen zu ANSI-SQL92.
-
-@item
-@code{MODIFY} ist eine Oracle-Erweiterung zu @code{ALTER TABLE}.
-
-@item
-Das optionale Wort @code{COLUMN} kann weggelassen werden.
-
-@item
-Wenn Sie @code{ALTER TABLE tabelle RENAME TO neuer_name} ohne weitere
-Optionen benutzen, benennt MySQL einfach die Dateien um, die der Tabelle
-@code{tabelle} entsprechen. Es besteht keine Notwendigkeit, die tempor�re
-Tabelle zu erzeugen. @xref{RENAME TABLE,, @code{RENAME TABLE}}.
-
-@item
-Ab @strong{MySQL 4.0} kann das obige Feature explizit aktiviert werden.
-@code{ALTER TABLE ... DISABLE KEYS} veranlasst MySQL, mit dem Aktualisieren
-nicht eindeutiger Indexe f�r die @code{MyISAM}-Tabelle aufzuh�ren. Dann
-sollte @code{ALTER TABLE ... ENABLE KEYS} benutzt werden, um fehlende
-Indexe wieder zu erzeugen. Weil MySQL das mit Algorithmen durchf�hrt, die
-viel schneller sind als das Einf�gen von Schl�sseln nacheinander, kann das
-Abschalten von Schl�sseln bei Masseneinf�geoperationen erheblich
-Geschwindigkeitsvorteile bringen.
-
-@item
-@code{create_definition}-Klauseln benutzen dieselbe Syntax f�r @code{ADD}
-und @code{CHANGE} wie bei @code{CREATE TABLE}. Beachten Sie, dass diese
-Syntax den Spaltenname beinhaltet, nicht nur den Spaltentyp.
-@c German FIX unsplit @xref
-@xref{CREATE TABLE, , @code{CREATE TABLE}}.
-
-@item
-Sie k�nnen eine Spalte mit einer @code{CHANGE alter_spalten_name
-create_definition}-Klausel umbenennen. Um das zu tun, geben Sie den alten
-und den neuen Spaltennamen und den Typ an, den die Spalte momentan hat. Um
-beispielsweise eine @code{INTEGER}-Spalte von @code{a} nach @code{b}
-umzubenennen, tun Sie folgendes:
-
-@example
-mysql> ALTER TABLE t1 CHANGE a b INTEGER;
-@end example
-
-Wenn Sie einen Spaltentyp, nicht aber den Namen �ndern wollen, ben�tigt
-@code{CHANGE} dennoch zwei Spaltennamen, selbst wenn sie dieselben sind.
-Beispiel:
-
-@example
-mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
-@end example
-
-Ab MySQL-Version 3.22.16a k�nnen Sie jedoch auch @code{MODIFY} benutzen, um
-einen Spaltentyp ohne Umbenennung zu �ndern:
-
-@example
-mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;
-@end example
-
-@item
-Wenn Sie @code{CHANGE} oder @code{MODIFY} benutzen, um eine Spalte zu
-k�rzen, f�r die es einen Index auf einem Teil der Spalte gibt (wenn Sie zum
-Beispiel einen Index auf den ersten 10 Zeichen einer @code{VARCHAR}-Spalte
-haben), k�nnen Sie die Spalte nicht k�rzer als die Anzahl von Zeichen
-machen, die indiziert sind.
-
-@item
-Wenn Sie versuchen, einen Spaltentyp mit @code{CHANGE} oder @code{MODIFY}
-zu �ndern, versucht MySQL, Daten so umzuwandeln, dass sie so gut wie
-m�glich zum neuen Typ passen.
-
-@item
-AB MySQL-Version 3.22 k�nnen Sie @code{FIRST} oder @code{ADD ... AFTER
-spalten_name} benutzen, um eine Spalte an einer bestimmten Position
-innerhalb einer Tabellenzeile einzuf�gen. Vorgabem��ig wird die Spalte am
-Ende hinzugef�gt.
-
-@findex ALTER COLUMN
-@item
-@code{ALTER COLUMN} gibt einen Vorgabewert f�r eine Spalte an oder entfernt
-den alten Vorgabewert. Wenn der alte Vorgabewert entfernt wird und die
-Spalte @code{NULL} sein darf, ist der neue Vorgabewert @code{NULL}. Wenn
-die Spalte nicht @code{NULL} sein darf, weist MySQL einen Vorgabewert zu,
-wie in @ref{CREATE TABLE, , @code{CREATE TABLE}} beschrieben.
-
-@findex DROP INDEX
-@item
-@code{DROP INDEX} entfernt einen Index. Das ist eine MySQL-Erweiterung zu
-ANSI-SQL92. @xref{DROP INDEX}.
-
-@item
-Wenn Spalten aus einer Tabelle gel�scht werden, werden sie auch aus
-jeglichen Indexen entfernt, deren Teil sie sind. Wenn alle Spalten, aus
-denen ein Index besteht, gel�scht werden, wird der Index ebenfalls
-gel�scht.
-
-@item
-Wenn eine Tabelle nur eine Spalte enth�lt, kann die Spalte nicht gel�scht
-werden. Wenn Sie beabsichtigen, die Tabelle zu entfernen, benutzen Sie
-statt dessen @code{DROP TABLE}.
-
-@findex DROP PRIMARY KEY
-@item
-@code{DROP PRIMARY KEY} l�scht den Prim�rschl�ssel. Wenn es keinen solchen
-gibt, l�scht es den ersten @code{UNIQUE}-Index in der Tabelle. (MySQL
-kennzeichnet den ersten @code{UNIQUE}-Schl�ssel als @code{PRIMARY KEY},
-wenn @code{PRIMARY KEY} nicht explizit angegeben wurde.)
-
-@findex UNIQUE
-@findex PRIMARY KEY
-Wenn Sie einen @code{UNIQUE INDEX} oder @code{PRIMARY KEY} zu einer Tabelle
-hinzuf�gen, wird dieser vor jedem Nicht-@code{UNIQUE}-Index gespeichert, so
-dass MySQL doppelte Schl�sseleintr�ge so fr�h wie m�glich feststellen kann.
-
-@findex ORDER BY
-@item
-@code{ORDER BY} gestattet Ihnen, eine Tabelle mit Zeilen in einer
-bestimmten Reihenfolge zu erzeugen. Beachten Sie, dass die Tabelle nach
-INSERTs und DELETEs nicht in dieser Reihenfolge verbleibt. In einigen
-F�llen kann es das Sortieren f�r MySQL erleichtern, wenn die Tabelle nach
-der Spalte geordnet ist, nach der Sie sie sp�ter ordnen wollen. Diese
-Option ist haupts�chlich n�tzlich, wenn Sie wissen, dass Sie die Zeilen
-meistens in einer bestimmten Reihenfolge abfragen werden. Wenn Sie diese
-Option nach gro�en �nderungen in der Tabelle benutzen, k�nnen Sie
-m�glicherweise eine h�here Performance erzielen.
-
-@findex ALTER TABLE
-@item
-Wenn Sie @code{ALTER TABLE} auf einer @code{MyISAM}-Tabelle benutzen,
-werden alle nicht eindeutigen Indexe in einem separaten Stapellauf erzeugt
-(wie bei @code{REPAIR}). Das sollte @code{ALTER TABLE} viel schneller
-machen, wenn Sie viele Indexe haben.
-
-@item
-Ab @strong{MySQL 4.0} kann dies explizit aktiviert werden. @code{ALTER
-TABLE ... DISABLE KEYS} veranlasst MySQL, mit der Aktualisierung nicht
-eindeutiger Indexe f�r @code{MyISAM}-Tabellen aufzuh�ren. @code{ALTER TABLE
-... ENABLE KEYS} sollte dann benutzt werden, um fehlende Indexe wieder zu
-erzeugen. Weil MySQL das mit Algorithmen durchf�hrt, die viel schneller
-sind als das Einf�gen von Schl�sseln nacheinander, kann das Abschalten von
-Schl�sseln bei Masseneinf�geoperationen erheblich Geschwindigkeitsvorteile
-bringen.
-
-@item
-@findex mysql_info()
-Mit der C-API-Funktion @code{mysql_info()} k�nnen Sie herausfinden, wie
-viele Datens�tze kopiert wurden und (wenn @code{IGNORE} benutzt wird) wie
-viele Datens�tze aufgrund der Duplizierung eindeutiger Schl�sselwerte
-gel�scht wurden.
-
-@item
-@cindex Fremdschl�ssel
-@cindex Referenzen
-Die @code{FOREIGN KEY}-, @code{CHECK}- und @code{REFERENCES}-Klauseln
-machen nichts. Die Syntax f�r sie steht nur aus Kompatibilit�tsgr�nden
-bereit, um das Portieren von Code von anderen SQL-Servern zu erleichtern
-und um Applikationen laufen zu lassen, die Tabellen mit Referenzen
-erzeugen.
-@c German FIX old ref was @xref{Fehlende Funktionen}.
-@xref{ANSI diff Foreign Keys}.
-@end itemize
-
-Hier ist ein Beispiel, das einige der Anwendungsf�lle von @code{ALTER
-TABLE} zeigt. Wir fangen mit einer Tabelle @code{t1} an, die wie folgt
-erzeugt wird:
-
-@example
-mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));
-@end example
-
-Um die Tabelle von @code{t1} nach @code{t2} umzubenennen, geben Sie ein:
-
-@example
-mysql> ALTER TABLE t1 RENAME t2;
-@end example
-
-Um Spalte @code{a} von @code{INTEGER} nach @code{TINYINT NOT NULL} zu
-�ndern (der Name bleibt derselbe) und Spalte @code{b} von @code{CHAR(10)}
-nach @code{CHAR(20)} zu �ndern und gleichzeitig von @code{b} nach @code{c}
-umzubenennen, geben Sie ein:
-
-@example
-mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
-@end example
-
-Jetzt wird eine @code{TIMESTAMP}-Spalte namens @code{d} hinzugef�gt:
-
-@example
-mysql> ALTER TABLE t2 ADD d TIMESTAMP;
-@end example
-
-Nunmehr erzeugen wir einen Index auf Spalte @code{d} und machen Spalte
-@code{a} zum Prim�rschl�ssel:
-
-@example
-mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
-@end example
-
-Wir entfernen Spalte @code{c}:
-
-@example
-mysql> ALTER TABLE t2 DROP COLUMN c;
-@end example
-
-Und f�gen eine neue @code{AUTO_INCREMENT}-Ganzzahl-Spalte namens @code{c}
-hinzu:
-
-@example
-mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
- ADD INDEX (c);
-@end example
-
-Beachten Sie, dass wir @code{c} indiziert haben, weil
-@code{AUTO_INCREMENT}-Spalten indiziert sein m�ssen, und auch, dass wir
-@code{c} als @code{NOT NULL} deklariert haben, weil indizierte Spalten
-nicht @code{NULL} sein d�rfen.
-
-Wenn Sie eine @code{AUTO_INCREMENT}-Spalte hinzuf�gen, werden automatisch
-Spaltenwerte mit Zahlenfolgen eingef�gt. Sie k�nnen die erste Zahl setzen,
-indem Sie @code{SET INSERT_ID=#} vor @code{ALTER TABLE} ausf�hren oder
-indem Sie die @code{AUTO_INCREMENT = #}-Tabellenoption benutzen.
-@xref{SET OPTION}.
-
-Wenn Sie bei MyISAM-Tabellen nicht die @code{AUTO_INCREMENT}-Spalte �ndern,
-ist die Folgezahl davon nicht betroffen. Wenn Sie eine
-@code{AUTO_INCREMENT}-Spalte l�schen und dann eine weitere
-@code{AUTO_INCREMENT}-Spalte hinzuf�gen, fangen die Zahlen wieder bei 1 an.
-
-@xref{ALTER TABLE problems}.
-
-
-@node RENAME TABLE, DROP TABLE, ALTER TABLE, Data Definition
-@c German node RENAME TABLE
-@subsection @code{RENAME TABLE}-Syntax
-
-@findex RENAME TABLE
-
-@example
-RENAME TABLE tabelle TO neue_tabelle[, tabelle2 TO neue_tabelle2,...]
-@end example
-
-Das Umbenennen wird atomisch durchgef�hrt, was hei�t, dass kein anderer
-Thread auf die Tabelle(n) zugreifen kann, w�hrend umbenannt wird. Das
-erm�glicht, eine Tabelle durch eine leere zu ersetzen:
-
-@example
-CREATE TABLE neue_tabelle (...);
-RENAME TABLE alte_tabelle TO datensicherung_tabelle, neue_tabelle TO alte_tabelle;
-@end example
-
-Das Umbenennen wird von links nach rechts durchgef�hrt, was bedeutet, dass
-Sie beim Vertauschen zweier Tabellennamen folgendes tun k�nnen:
-
-@example
-RENAME TABLE alte_tabelle TO datensicherung_tabelle,
- neue_tabelle TO alte_tabelle,
- datensicherung_tabelle TO neue_tabelle;
-@end example
-
-Solange zwei Datenbanken auf derselben Platte liegen, k�nnen Sie auch von
-einer Datenbank in eine andere umbenennen:
-
-@example
-RENAME TABLE aktuelle_datenbank.tabelle TO andere_datenbank.tabelle;
-@end example
-
-Wenn Sie @code{RENAME} ausf�hren, d�rfen Sie keine gesperrten Tabellen oder
-aktive Transaktionen haben. Ausserdem ben�tigen Sie die @code{ALTER}- und
-@code{DROP}-Berechtigungen f�r die Original-Tabelle und die @code{CREATE}-
-und @code{INSERT}-Berechtigungen auf die neue Tabelle.
-
-Wenn beim Umbenennen mehrfacher Tabellen Fehler auftreten, f�hrt MySQL ein
-entgegengesetztes Umbenennen aller umbenannten Tabellen durch, um alles
-wieder in den Ausgangszustand zu versetzen.
-
-
-@node DROP TABLE, CREATE INDEX, RENAME TABLE, Data Definition
-@c German node DROP TABLE
-@subsection @code{DROP TABLE}-Syntax
-
-@findex DROP TABLE
-
-@example
-DROP TABLE [IF EXISTS] tabelle [, tabelle,...] [RESTRICT | CASCADE]
-@end example
-
-@code{DROP TABLE} entfernt eine oder mehrere Tabellen. Alle Tabellendaten
-und die Tabellendefinition werden @emph{zerst�rt}, seien Sie daher
-@strong{vorsichtig} mit diesem Befehl!
-
-Ab MySQL-Version 3.22 k�nnen Sie die Schl�sselw�rter @code{IF EXISTS}
-benutzen, um Fehler zu vermeiden, die auftreten, wenn Tabellen nicht
-existieren.
-
-@code{RESTRICT} und @code{CASCADE} sind wegen leichterer Portierung
-zugelassen. Momentan tun sie nichts.
-
-@strong{HINWEIS}: @code{DROP TABLE} ist nicht transaktionssicher und f�hrt
-automatisch jegliche aktiven Transaktionen zuende.
-
-
-@node CREATE INDEX, DROP INDEX, DROP TABLE, Data Definition
-@c German node CREATE INDEX
-@subsection @code{CREATE INDEX}-Syntax
-
-@findex CREATE INDEX
-
-@cindex Indexe
-@cindex Indexe, mehrteilige
-@cindex mehrteilige Indexe
-
-@example
-CREATE [UNIQUE|FULLTEXT] INDEX index_name ON tabelle (spalten_name[(laenge)],... )
-@end example
-
-Das @code{CREATE INDEX}-Statement macht vor MySQL-Version 3.22 nichts. Ab
-Version 3.22 ist @code{CREATE INDEX} auf ein @code{ALTER TABLE}-Statement
-gemappt, um Indexe zu erzeugen. @xref{ALTER TABLE, , @code{ALTER TABLE}}.
-
-Normalerweise erzeugen Sie alle Indexe auf eine Tabelle zur Zeit, wo die
-Tabelle selbst mit @code{CREATE TABLE} erzeugt wird.
-@c German FIX unsplit @xref
-@xref{CREATE TABLE, ,@code{CREATE TABLE}}.
-@code{CREATE INDEX} gestattet, bestehenden Tabellen
-Indexe hinzuzuf�gen.
-
-A Spaltenliste der Form @code{(spalte1,spalte2,...)} erzeugt einen
-mehrspaltigen Index. Die Indexwerte werden durch Verkettung der Werte der
-angegebenen Spalten erzeugt.
-
-Bei @code{CHAR}- und @code{VARCHAR}-Spalten k�nnen Indexe, die nur einen
-Teil einer Spalte benutzen, mit der @code{spalten_name(laenge)}-Syntax
-erzeugt werden. (Bei @code{BLOB}- und @code{TEXT}-Spalten ist die
-L�ngenangabe erforderlich.) Unten stehendes Statement zeigt, wie ein Index
-erzeugt wird, der die ersten 10 Zeichen der @code{name}-Spalte benutzt:
-
-@example
-mysql> CREATE INDEX teil_von_name ON kunde (name(10));
-@end example
-
-Weil sich die meisten Namen �blicherweise in den ersten 10 Zeichen
-unterscheiden, sollte dieser Index nicht viel langsamer sein, als wenn der
-Index aus der gesamten @code{name}-Spalte erzeugt worden w�re. Die
-Benutzung von Teilspalten f�r Indexe kann die Index-Datei auch viel kleiner
-machen, was viel Speicherplatz sparen und zus�tzlich
-@code{INSERT}-Operationen beschleunigen kann!
-
-Beachten Sie, dass Sie einen Index auf eine Spalte, die @code{NULL}-Werte
-haben darf, oder auf eine @code{BLOB}/@code{TEXT}-Spalte erst ab
-MySQL-Version 3.23.2 und nur beim @code{MyISAM}-Tabellentyp erzeugen
-k�nnen.
-
-Weitere Informationen dar�ber, wie MySQL Indexe benutzt, finden Sie unter
-@ref{MySQL indexes, , MySQL-Indexe}.
-
-@code{FULLTEXT}-Indexe k�nnen nur @code{VARCHAR}- und @code{TEXT}-Spalten
-indexieren und funktionieren nur bei @code{MyISAM}-Tabellen.
-@code{FULLTEXT}-Indexe sind ab MySQL-Version 3.23.23 verf�gbar.
-@ref{Fulltext Search}.
-
-
-@node DROP INDEX, , CREATE INDEX, Data Definition
-@c German node DROP INDEX
-@subsection @code{DROP INDEX}-Syntax
-
-@findex DROP INDEX
-
-@example
-DROP INDEX index_name ON tabelle
-@end example
-
-@code{DROP INDEX} l�scht den Index namens @code{index_name} aus der Tabelle
-@code{tabelle}. @code{DROP INDEX} macht vor MySQL-Version 3.22 nichts. Ab
-Version 3.22 ist @code{DROP INDEX} auf ein @code{ALTER TABLE}-Statement
-gemappt, um den Index zu l�schen. @xref{ALTER TABLE, , @code{ALTER TABLE}}.
-
-
-@node Basic User Commands, Transactional Commands, Data Definition, Reference
-@c German node Grundlegende Benutzerbefehle
-@section Grundlegende Befehle des MySQL-Dienstprogramms f�r Benutzer
-
-
-
-@menu
-* USE::
-* DESCRIBE::
-@end menu
-
-@node USE, DESCRIBE, Basic User Commands, Basic User Commands
-@c German node USE
-@subsection @code{USE}-Syntax
-
-@findex USE
-
-@example
-USE datenbank
-@end example
-
-Das @code{USE datenbank}-Statement weist MySQL an, @code{datenbank} als
-vorgabem��ige Datenbank f�r nachfolgende Anfragen zu benutzen. Die
-Datenbank bleibt die aktuelle, entweder bis zum Ende der Sitzung, oder bis
-ein weiteres @code{USE}-Statement abgesetzt wird:
-
-@example
-mysql> USE datenbank1;
-mysql> SELECT count(*) FROM tabelle; # w�hlt aus von datenbank1.tabelle
-mysql> USE datenbank2;
-mysql> SELECT count(*) FROM tabelle; # w�hlt aus von datenbank2.tabelle
-@end example
-
-Wenn Sie eine bestimmte Datenbank mit dem @code{USE}-Statement zu aktuellen
-machen, hei�t das nicht, dass Sie nicht auf Tabellen in anderen
-Datenbanken zugreifen k�nnen. Das unten stehende Beispiel zeigt den Zugriff
-auf die @code{autor}-Tabelle in der @code{datenbank1}-Datenbank und auf
-die @code{herausgeber}-Tabelle in der @code{datenbank2}-Datenbank:
-
-@example
-mysql> USE datenbank1;
-mysql> SELECT autor_name,herausgeber_name FROM autor,datenbank2.herausgeber
- WHERE autor.herausgeber_id = datenbank2.herausgeber.herausgeber_id;
-@end example
-
-@cindex Sybase Kompatibilit�t
-@cindex Kompatibilit�t, mit Sybase
-The @code{USE}-Statement wird f�r die Sybase-Kompatibilit�t zur Verf�gung
-gestellt.
-
-
-@node DESCRIBE, , USE, Basic User Commands
-@c German node DESCRIBE
-@subsection @code{DESCRIBE}-Syntax (Informationen �ber Spalten erhalten)
-
-@findex DESC
-@findex DESCRIBE
-
-@example
-@{DESCRIBE | DESC@} tabelle @{spalten_name | platzhalter@}
-@end example
-
-@code{DESCRIBE} ist ein K�rzel f�r @code{SHOW COLUMNS FROM}.
-@xref{SHOW DATABASE INFO}.
-
-@code{DESCRIBE} stellt Informationen �ber die Spalten einer Tabelle bereit.
-@code{spalten_name} kann ein Spaltenname oder eine Zeichenkette sein, die
-die SQL-@samp{%}- und -@samp{_}-Platzhalterzeichen enth�lt.
-
-Wenn die Spaltentypen sich von dem unterscheiden, was Sie auf der Grundlage
-eines @code{CREATE TABLE}-Statements erwartet h�tten, beachten Sie, dass
-MySQL manchmal Spaltentypen �ndert. @xref{Silent column changes}.
-
-@cindex Oracle-Kompatibilit�t
-@cindex Kompatibilit�t, mit Oracle
-Dieses Statement wird f�r die Oracle-Kompatibilit�t zur Verf�gung gestellt.
-
-Das @code{SHOW}-Statement stellt �hnliche Informationen bereit.
-@xref{SHOW, , @code{SHOW}}.
-
-
-@node Transactional Commands, Fulltext Search, Basic User Commands, Reference
-@c German node Transaktionale Befehle
-@section Transaktionale und Sperrbefehle von MySQL
-
-
-
-@menu
-* COMMIT::
-* LOCK TABLES::
-* SET TRANSACTION::
-@end menu
-
-@node COMMIT, LOCK TABLES, Transactional Commands, Transactional Commands
-@c German node COMMIT
-@subsection @code{BEGIN/COMMIT/ROLLBACK}-Syntax
-
-@findex BEGIN
-@findex COMMIT
-@findex ROLLBACK
-
-Vorgabem��ig l�uft MySQL im @code{autocommit}-Modus. Das hei�t, dass
-MySQL eine Aktualisierung auf Platte speichert, sobald Sie eine
-Aktualisierung ausf�hren.
-
-Wenn Sie transaktionssichere Tabellen (wie @code{InnoDB} oder @code{BDB} )
-benutzen, k�nnen Sie MySQL mit folgendem Befehl in den
-Nicht-@code{autocommit}-Modus setzen:
-
-@example
-SET AUTOCOMMIT=0
-@end example
-
-Danach m�ssen Sie @code{COMMIT} benutzen, um Ihre �nderungen auf Platte zu
-sichern, oder @code{ROLLBACK}, wenn Sie die �nderungen verwerfen wollen,
-die Sie seit dem Beginn der Transaktion gemacht haben.
-
-Wenn Sie f�r eine Reihe von Statements zum @code{AUTOCOMMIT}-Modus
-umschalten wollen, k�nnen Sie das @code{BEGIN}- oder @code{BEGIN
-WORK}-Statement benutzen:
-
-@example
-BEGIN;
-SELECT @@A:=SUM(gehalt) FROM tabelle1 WHERE type=1;
-UPDATE tabelle2 SET zusammenfassung=@@A WHERE type=1;
-COMMIT;
-@end example
-
-Beachten Sie, dass bei der Benutzung nicht transaktionssicher Tabellen die
-�nderungen dennoch sofort gespeichert werden, unabh�ngig vom Status des
-@code{autocommit}-Modus.
-
-Wenn Sie @code{ROLLBACK} bei der Aktualisierung einer nicht transaktionalen
-Tabelle ausf�hren, erhalten Sie einen Fehler
-(@code{ER_WARNING_NOT_COMPLETE_ROLLBACK}) als Warnung. Alle
-transaktionssicheren Tabellen werden zur�ckgesetzt, aber nicht
-transaktionale Tabelle �ndern sich nicht.
-
-Wenn Sie @code{BEGIN} oder @code{SET AUTOCOMMIT=0} benutzen, sollten Sie
-die MySQL-Bin�r-Log-Datei f�r Datensicherungen benutzen statt der �lteren
-Update-Log-Datei. Transaktionen werden in der Bin�r-Log-Datei in einem
-St�ck gespeichert, beim @code{COMMIT}, um sicherzustellen, dass
-Transaktionen, die zur�ckgesetzt werden (Rollback), nicht gespeichert
-werden. @xref{Binary log}.
-
-Folgende Befehle beenden automatisch eine Transaktion (als ob Sie ein
-@code{COMMIT} vor der Ausf�hrung des Befehls ausgef�hrt h�tten:
-
-@multitable @columnfractions .33 .33 .33
-@item @code{ALTER TABLE} @tab @code{BEGIN} @tab @code{CREATE INDEX}
-@item @code{DROP DATABASE} @tab @code{DROP TABLE} @tab @code{RENAME TABLE}
-@item @code{TRUNCATE}
-@end multitable
-
-@c German FIX changed @xref to @xref
-Sie k�nnen die Isolationsebene (Isolation Level) f�r Transaktionen mit
-@code{SET TRANSACTION ISOLATION LEVEL ...} @ref{SET TRANSACTION} �ndern.
-
-
-@node LOCK TABLES, SET TRANSACTION, COMMIT, Transactional Commands
-@c German node LOCK TABLES
-@subsection @code{LOCK TABLES/UNLOCK TABLES}-Syntax
-
-@findex LOCK TABLES
-@findex UNLOCK TABLES
-
-@example
-LOCK TABLES tabelle [AS alias] @{READ | [READ LOCAL] | [LOW_PRIORITY] WRITE@}
- [, tabelle @{READ | [LOW_PRIORITY] WRITE@} ...]
-...
-UNLOCK TABLES
-@end example
-
-@code{LOCK TABLES} sperrt Tabellen f�r den aktuellen Thread. @code{UNLOCK
-TABLES} hebt alle Sperren auf, die vom aktuellen Thread veranlasst wurden.
-Alle Tabellen, die durch den aktuellen Thread gesperrt sind, werden
-automatisch entsperrt, wenn der Thread ein weiteres @code{LOCK TABLES}
-absetzt oder wenn die Verbindung zum Server geschlossen wird.
-
-Die wichtigsten Gr�nde f�r die Benutzung von @code{LOCK TABLES} sind die
-Emulation von Transaktionen oder um mehr Geschwindigkeit bei der
-Aktualisierung von Tabellen zu erhalten. Das wird sp�ter detaillierter
-erl�utert.
-
-Wenn ein Thread eine @code{READ}-Sperre auf eine Tabelle erlangt, kann
-dieser Thread (und alle anderen Threads) nur aus der Tabelle lesen. Wenn
-ein Thread eine @code{WRITE}-Sperre auf eine Tabelle erlangt, kann nur der
-Thread, der die Sperre veranlasst hat, @code{READ} oder @code{WRITE} auf
-der Tabelle durchf�hren. Andere Threads werden blockiert.
-
-Der Unterschied zwischen @code{READ LOCAL} und @code{READ} ist, dass
-@code{READ LOCAL} nicht kollidierende @code{INSERT}-Statements w�hrend der
-Dauer der Sperre zul��t. Das kann jedoch nicht benutzt werden, wenn Sie
-Datenbankdateien ausserhalb von MySQL bearbeiten, w�hrend die Sperre aktiv
-ist.
-
-Wenn Sie @code{LOCK TABLES} benutzen, m�ssen Sie alle Tabellen sperren, die
-Sie benutzen werden, und Sie m�ssen denselben Alias benutzen, den Sie in
-Ihren Anfragen benutzen werden! Wenn Sie eine Tabelle in einer Anfrage
-mehrfach (mit Aliasen) benutzen, m�ssen Sie f�r jeden Alias eine Sperre
-machen!
-
-@code{WRITE}-Sperren haben normalerweise h�here Priorit�t als
-@code{READ}-Sperren, um sicherzustellen, dass Aktualisierungen so fr�h wie
-m�glich bearbeitet werden. Dass hei�t, wenn ein Thread eine
-@code{READ}-Sperre erlangt und dann ein anderer Thread eine
-@code{WRITE}-Sperre verlangt, dass nachfolgende @code{READ}-Sperrenanfragen
-warten, bis der @code{WRITE}-Thread die Sperre erhalten und freigegeben
-hat. Sie k�nnen @code{LOW_PRIORITY WRITE}-Sperren benutzen, um anderen
-Threads zu gestatten, @code{READ}-Sperren zu erlangen, w�hrend der Thread
-auf die @code{WRITE}-Sperre wartet. Sie sollten nur dann @code{LOW_PRIORITY
-WRITE}-Sperren benutzen, wenn Sie sicher sind, dass es irgendwann eine Zeit
-gibt, in der kein anderer Thread eine @code{READ}-Sperre haben wird.
-
-@code{LOCK TABLES} funktioniert wie folgt:
-@enumerate
-@item
-Sortiert alle Tabellen, die gesperrt werden sollen, in einer intern
-definierten Reihenfolge (aus Benutzersicht ist die Reihenfolge
-undefiniert).
-@item
-Wenn eine Tabelle mit einer Lese- und einer Schreibsperre gesperrt ist,
-wird die Schreibsperre vor die Lesesperre platziert.
-@item
-Sperrt eine Tabelle nach der anderen, bis der Thread alle Sperren erhalten
-hat.
-@end enumerate
-
-Diese Methode stellt sicher, dass Tabellensperren blockierungsfrei ist. Bei
-diesem Schema gibt es jedoch ein paar weitere Dinge, derer man sich bewusst
-sein muss:
-
-Wenn Sie eine @code{LOW_PRIORITY_WRITE}-Sperre f�r eine Tabelle benutzen,
-hei�t das, dass MySQL auf diese bestimmte Sperre wartet, bis es keinen
-Thread gibt, der eine @code{READ}-Sperre will. Wenn der Thread die
-@code{WRITE}-Sperre erhalten hat und darauf wartet, die Sperre f�r die
-n�chste Tabelle in der Tabellensperrliste zu erhalten, warten alle anderen
-Threads darauf, dass die @code{WRITE}-Sperre aufgehoben wird. Wenn das bei
-Ihrer Applikation zu ernsthaften Problemen f�hrt, sollten Sie in Betracht
-ziehen, einige Ihrer Tabelle in transaktionssichere Tabelle umzuwandeln.
-
-Es ist sicher, einen Thread mit @code{KILL} zu killen, der auf eine
-Tabellensperre wartet. @xref{KILL}.
-
-Beachten Sie, dass Sie @strong{NICHT} irgend welche Tabellen sperren
-sollten, die Sie mit @code{INSERT DELAYED} benutzen. Das liegt darin, dass
-in diesem Fall das @code{INSERT} von einem separaten Thread durchgef�hrt
-wird.
-
-Normalerweise m�ssen Sie Tabellen nicht sperren, weil alle einzelnen
-@code{UPDATE}-Statements atomisch sind. Kein anderer Thread kann mit einem
-aktuell ausgef�hrten SQL-Statement in die Quere kommen. Es gibt dennoch
-einige F�llen, in denen es w�nschenswert sein kann, Tabellen zu sperren:
-
-@itemize @bullet
-@item
-Wenn Sie viele Operationen auf einer gro�en Zahl von Tabellen laufen
-lassen wollen, ist es viel schneller, die Tabellen zu sperren, die Sie
-benutzen werden. Der Nachteil besteht nat�rlich darin, dass kein anderer
-Thread eine @code{READ}-gesperrte Tabelle aktualisieren und kein anderer
-Thread eine @code{WRITE}-gesperrte Tabelle lesen kann.
-
-Der Grund, dass einiges mit @code{LOCK TABLES} schneller geht, liegt darin,
-dass MySQL den Schl�ssel-Cache f�r die gesperrten Tabellen nicht auf Platte
-zur�ckschreibt (flush), bis @code{UNLOCK TABLES} aufgerufen wird
-(normalerweise wird der Schl�ssel-Cache nach jedem SQL-Statement auf Platte
-zur�ckgeschrieben). Das erh�ht die Geschwindigkeit bei den Operationen
-INSERT / UPDATE / DELETE bei @code{MyISAM}-Tabellen.
-@item
-Wenn Sie einen Tabellen-Handler in MySQL benutzen, der keine Transaktionen
-unterst�tzt, m�ssen Sie @code{LOCK TABLES} benutzen, wenn Sie sicherstellen
-wollen, dass kann anderer Thread zwischen einem @code{SELECT} und einem
-@code{UPDATE} dazwischen kommen kann. Das unten stehende Beispiel erfordert
-@code{LOCK TABLES}, um sicher ausgef�hrt zu werden:
-
-@example
-mysql> LOCK TABLES trans READ, kunde WRITE;
-mysql> select sum(wert) from trans where kunde_id=irgendeine_id;
-mysql> update kunde set gesamt_wert=summe_aus_vorherigem_statement
- where kunde_id=irgendeine_id;
-mysql> UNLOCK TABLES;
-@end example
-
-Ohne @code{LOCK TABLES} besteht die M�glichkeit, dass ein anderer Thread
-eine neue Zeile in die @code{trans}-Tabelle einf�gt, zwischen der
-Ausf�hrung des @code{SELECT}- und des @code{UPDATE}-Statements.
-@end itemize
-
-Wenn Sie inkrementelle Updates (@code{UPDATE kunde SET
-wert=wert+neuer_wert}) oder die @code{LAST_INSERT_ID()}-Funktion benutzen,
-k�nnen Sie @code{LOCK TABLES} in vielen F�llen vermeiden.
-
-Einige Problemf�lle k�nnen Sie auch l�sen, indem Sie die Sperrfunktionen
-auf Benutzerebene @code{GET_LOCK()} und @code{RELEASE_LOCK()} benutzen.
-Diese Sperren werden in einer Hash-Tabelle im Server gespeichert und sind
-mit @code{pThread_mutex_lock()} und @code{pThread_mutex_unlock()} f�r die
-Erzielung h�herer Geschwindigkeit implementiert.
-@xref{Miscellaneous functions}.
-
-Siehe @ref{Internal locking} wegen weiterer Informationen �ber
-Sperrmethoden.
-
-Sie k�nnen alle Tabellen in allen Datenbanken mit Lesesperren sperren, und
-zwar mit dem @code{FLUSH TABLES WITH READ LOCK}-Befehl. @xref{FLUSH}. Das
-ist eine sehr bequeme M�glichkeit, Datensicherungen zu erhalten, wenn Sie
-ein Dateisystem wie Veritas haben, dass Schnappsch�sse im Zeitverlauf
-aufnehmen kann.
-
-@strong{HINWEIS}: @code{LOCK TABLES} ist nicht transaktionssicher und
-schickt automatisch jegliche aktiven Transaktionen ab (Commit), bevor es
-versucht, die Tabellen zu sperren.
-
-
-@node SET TRANSACTION, , LOCK TABLES, Transactional Commands
-@c German node SET TRANSACTION
-@subsection @code{SET TRANSACTION}-Syntax
-
-@findex ISOLATION LEVEL
-
-@example
-SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
-[READ UNCOMMITTED |�READ COMMITTED | REPEATABLE READ | SERIALIZABLE]
-@end example
-
-Setzt die Transaktionsisolationsebene f�r die globale, gesamte Sitzung oder
-f�r die n�chste Transaktion.
-
-Das vorgabem��ige Verhalten ist das Setzen der Isolationsebene f�r die
-n�chste (nicht angefangene) Transaktion.
-
-Wenn Sie die @code{GLOBAL}-Berechtigung setzen, betrifft das alle neu
-erzeugten Threads. Sie ben�tigen daf�r die @code{PROCESS}-Berechtigung.
-
-Wenn Sie die @code{SESSION}-Berechtigung setzen, betrifft das die folgenden
-und alle zuk�nftigen Transaktionen.
-
-Sie k�nnen die vorgabem��ige Isolationsebene f�r @code{mysqld} mit
-@code{--transaction-isolation=...} setzen. @xref{Command-line options}.
-
-
-@node Fulltext Search, Query Cache, Transactional Commands, Reference
-@c German node Volltextsuche
-@section MySQL-Volltextsuche
-
-@cindex Suchen, Volltext
-@cindex Volltextsuche
-@cindex FULLTEXT
-
-Ab Version 3.23.23 bietet MySQL Unterst�tzung f�r Volltext-Indexierung und
--Suche. Volltext-Indexe sind in MySQL Indexe vom Typ @code{FULLTEXT}.
-@code{FULLTEXT}-Indexe k�nnen von @code{VARCHAR}- und @code{TEXT}-Spalten
-zur Zeit von @code{CREATE TABLE} erzeugt werden oder sp�ter mit @code{ALTER
-TABLE} oder @code{CREATE INDEX} hinzugef�gt werden. Bei gro�en Datenmengen
-ist es viel schneller, einen @code{FULLTEXT}-Index mit @code{ALTER TABLE}
-(oder @code{CREATE INDEX}) hinzuzuf�gen, als Zeilen in eine leere Tabelle
-mit einem @code{FULLTEXT}-Index einzuf�gen.
-
-Die Volltextsuche wird mit der @code{MATCH}-Funktion durchgef�hrt.
-
-@example
-mysql> CREATE TABLE artikel (
- -> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
- -> titel VARCHAR(200),
- -> artikeltext TEXT,
- -> FULLTEXT (titel,artikeltext)
- -> );
-Query OK, 0 rows affected (0.00 sec)
-
-mysql> INSERT INTO artikel VALUES
- -> (0,'MySQL-Tutorial', 'DBMS steht f�r DataBase-Management ...'),
- -> (0,'Wie man MySQL effizient einsetzt', 'Nachdem Sie ...'),
- -> (0,'MySQL optimieren','In diesem Tutorial wird gezeigt, wie ...'),
- -> (0,'1001 MySQL-Tricks','1. Lassen Sie mysqld nie als root laufen. 2. Normalisieren ...'),
- -> (0,'MySQL vs. YourSQL', 'Im folgenden Datenbankvergleich ...'),
- -> (0,'MySQL-Sicherheitsaspekte', 'Wenn er korrekt konfiguriert ist, ist MySQL ...');
-Query OK, 5 rows affected (0.00 sec)
-Records: 5 Duplicates: 0 Warnings: 0
-
-mysql> SELECT * FROM artikel WHERE MATCH (titel,artikeltext) AGAINST ('Datenbank');
-+----+-------------------+---------------------------------------------+
-| id | titel | artikeltext |
-+----+-------------------+---------------------------------------------+
-| 5 | MySQL vs. YourSQL | Im folgenden Datenbankvergleich ... |
-| 1 | MySQL-Tutorial | DBMS steht f�r DataBase-Management ... |
-+----+-------------------+---------------------------------------------+
-2 rows in set (0.00 sec)
-@end example
-
-Die Funktion @code{MATCH} pr�ft eine nat�rlichsprachige Anfrage gegen
-(@code{AGAINST}) eine Textsammlung (einfach ein Satz von Spalten, der vom
-@code{FULLTEXT}-Index abgedeckt wird). F�r jede Zeile in einer Tabelle gibt
-sie eine Relevanz zur�ck - ein �hnlichkeitsma� zwischen dem Text in dieser
-Zeile (in den Spalten, die Teil der Textsammlung sind) und der Anfrage.
-Wenn sie in einer @code{WHERE}-Klausel benutzt wird (siehe Beispiel oben),
-werden die zur�ckgegebenen Zeilen automatisch nach absteigender Relevanz
-sortiert. Die Relevanz ist eine nicht negative Flie�kommazahl. 0 Relevanz
-bedeutet keine �hnlichkeit. Die Relevanz wird auf der Grundlage der Anzahl
-von W�rtern in der Zeile, der Anzahl eindeutiger W�rter in dieser Zeile,
-der Gesamtzahl von W�rtern in der Textsammlung und der Anzahl von
-Dokumenten (Zeilen) berechnet, die ein bestimmtes Wort enthalten.
-
-Das obige Beispiel ist ein grundlegendes Beispiel der Benutzung der
-@code{MATCH}-Funktion. Die Zeilen werden nach absteigender Relevanz
-zur�ckgegeben.
-
-@example
-mysql> SELECT id,MATCH (titel,artikeltext) AGAINST ('Tutorial') FROM artikel;
-+----+------------------------------------------------+
-| id | MATCH (titel,artikeltext) AGAINST ('Tutorial') |
-+----+------------------------------------------------+
-| 1 | 0.64840710366884 |
-| 2 | 0 |
-| 3 | 0.66266459031789 |
-| 4 | 0 |
-| 5 | 0 |
-| 6 | 0 |
-+----+------------------------------------------------+
-5 rows in set (0.00 sec)
-@end example
-
-Dieses Beispiel zeigt, wie man Relevanzen abruft. Weil weder die
-@code{WHERE}- noch die @code{ORDER BY}-Klausel vorhanden sind, werden die
-Zeilen unsortiert zur�ckgegeben.
-
-@example
-mysql> SELECT id, artikeltext, MATCH (titel,artikeltext) AGAINST (
- -> 'Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen') AS rang
- -> FROM artikel WHERE MATCH (titel,artikeltext) AGAINST
- -> ('Sicherheits-Implikationen, wenn Sie MySQL als root laufen lassen');
-+----+----------------------------------------------------------------+-----------------+
-| id | artikeltext | rang |
-+----+----------------------------------------------------------------+-----------------+
-| 4 | 1. Lassen Sie mysqld nie als root laufen. 2. Normalisieren ... | 1.5055546709332 |
-| 6 | Wenn er korrekt konfiguriert ist, ist MySQL ... | 1.31140957288 |
-+----+----------------------------------------------------------------+-----------------+
-2 rows in set (0.00 sec)
-@end example
-
-Das ist ein komplexeres Beispiel - die Anfrage gibt die Relevanz zur�ck und
-sortiert die Zeilen auch noch nach absteigender Relevanz. Um das zu
-erzielen, m�ssen Sie @code{MATCH} zweimal angeben. Beachten Sie, dass das
-keinen zus�tzlichen Overhead verursacht, weil der MySQL-Optimierer bemerkt,
-dass diese zwei @code{MATCH}-Aufrufe identisch sind und daher den Code f�r
-die Volltextsuche nur einmal aufruft.
-
-MySQL benutzt einen sehr einfachen Parser, um Text in W�rter zu zerlegen.
-Ein ``Wort'' ist jede Folge von Buchstaben, Zahlen, @samp{'} und @samp{_}.
-Jedes ``Wort'', das in der Liste der Stopwords vorkommt oder einfach nur
-zu kurz ist (3 Zeichen oder weniger), wird ignoriert.
-
-Jedes korrekte Wort in der Textsammlung und in der Anfrage wird nach seiner
-Signifikanz in der Anfrage oder der Textsammlung gewichtet. Daher hat ein
-Wort, dass in vielen Dokumenten vorkommt, ein geringeres Gewicht (und kann
-sogar 0 Gewicht haben), weil es in dieser bestimmten Textsammlung einen
-geringen semantischen Wert hat. Ansonsten, wenn das Wort selten vorkommt,
-erh�lt es ein h�heres Gewicht. Die Gewichte der W�rter werden anschlie�end
-kombiniert, um die Relevanz der Zeile zu berechnen.
-
-Solch eine Technik funktioniert am besten bei gro�en Textsammlungen (in
-der Tat wurde sie sorgf�ltig darauf optimiert). Bei sehr kleinen Tabellen
-spiegelt die Wortverteilung nicht ad�quat seinen semantischen Wert wider,
-so dass dieses Modell manchmal bizarre Ergebnisse ergeben kann:
-
-@example
-mysql> SELECT * FROM artikel WHERE MATCH (titel,artikeltext) AGAINST ('MySQL');
-Empty set (0.00 sec)
-@end example
-
-Die Suche nach dem Wort @code{MySQL} erzeugt im obigen Beispiel keine
-Ergebnisse. Das Wort @code{MySQL} ist in mehr als der H�lfte der Zeilen
-vorhanden und wird deshalb als Stopword betrachtet (eins mit dem
-semantischen Wert 0). Das ist in der Tat das gew�nschte Verhalten - eine
-nat�rlichsprachige Anfrage sollte bei einer 1 GB gro�en Tabelle nicht jede
-zweite Zeile zur�ckgeben.
-
-Bei einem Wort, dass in der H�lfte der Zeilen in einer Tabelle
-�bereinstimmt, ist es nicht sehr wahrscheinlich, dass relevante Dokumente
-gefunden werden, sondern statt dessen viele irrelevante Dokumente. Das
-kennen wir alle aus Recherchen �ber Suchmaschinen auf dem Internet. Das ist
-die �berlegung, die dahinter steht, dass solchen W�rtern ein niedriger
-semantischer Wert @strong{in diesem bestimmten Satz von Daten} gegeben
-wird.
-
-
-
-@menu
-* Fulltext Restrictions::
-* Fulltext Fine-tuning::
-* Volltext-Features in MySQL 4.0::
-* Fulltext TODO::
-@end menu
-
-@node Fulltext Restrictions, Fulltext Fine-tuning, Fulltext Search, Fulltext Search
-@c German node Volltext-Einschr�nkungen
-@subsection Volltext-Einschr�nkungen
-
-@itemize @bullet
-@item
-Alle Parameter der @code{MATCH}-Funktion m�ssen Spalten derselben Tabelle
-sein, die Teil desselben Volltext-Indexes ist.
-@item
-Das Argument f�r @code{AGAINST} muss eine Konstanten-Zeichenkette sein.
-@end itemize
-
-
-@node Fulltext Fine-tuning, Volltext-Features in MySQL 4.0, Fulltext Restrictions, Fulltext Search
-@c German node Volltext-Feineinstellungen
-@subsection MySQL-Volltextsuche fein einstellen
-
-@c German FIX changed @xref to @pxref
-Leider hat die Volltextsuche noch keine durch den Benutzer einstellbare
-Parameter, doch diese stehen sehr weit oben auf der TODO-Liste. Wenn Sie
-jedoch eine MySQL-Quelldistribution
-(@pxref{Installing source})
-haben, k�nnen Sie das Verhalten der Volltextsuche in einiger Hinsicht
-�ndern.
-
-Beachten Sie, dass die Volltextsuche sorgf�ltig auf beste Sucheffektivit�t
-eingestellt wurde. Wenn Sie dieses vorgabem��ige Verhalten �ndern, wird
-das die Suchergebnisse in den meisten F�llen verschlechtern. �ndern Sie die
-MySQL-Quelltexte deshalb nur, wenn Sie genau wissen, was Sie tun!
-
-@itemize @bullet
-
-@item
-Die minimale zu indexierende Wortl�nge wird in der
-@code{myisam/ftdefs.h}-Datei in folgender Zeile festgelegt:
-@example
-#define MIN_WORD_LEN 4
-@end example
-�ndern Sie diesen Wert nach Belieben, kompilieren Sie MySQL neu und bauen
-Sie Ihre @code{FULLTEXT}-Indexe neu auf.
-
-@item
-Die Stopword-Liste wird in @code{myisam/ft_static.c} definiert. �ndern Sie
-sie nach Ihrem Geschmack, kompilieren Sie MySQL neu und bauen Sie Ihre
-@code{FULLTEXT}-Indexe neu auf.
-
-@item
-Die 50%-Schwelle wird durch das spezielle, ausgew�hlte Gewichtungsschema
-festgelegt. Um dieses abzuschalten, �ndern Sie folgende Zeile in
-@code{myisam/ftdefs.h}:
-@example
-#define GWS_IN_USE GWS_PROB
-@end example
-zu
-@example
-#define GWS_IN_USE GWS_FREQ
-@end example
-und kompilieren Sie MySQL neu.
-In diesem Fall brauchen Sie die Indexe nicht neu aufzubauen.
-
-@end itemize
-
-
-@node Volltext-Features in MySQL 4.0, Fulltext TODO, Fulltext Fine-tuning, Fulltext Search
-@c German node <no English equivalent>
-@subsection Neue Features der Volltextsuche in MySQL 4.0
-
-Dieser Abschnitt enth�lt eine Auflistung der Volltext-Features, die bereits
-im MySQL-4.0-Baum implementiert sind. Er erl�utert den @strong{More
-Funktionen f�r Volltextsuche}-Eintrag in @ref{TODO}.
-
-@itemize @bullet
-@item @code{REPAIR TABLE} mit @code{FULLTEXT}-Indexen, @code{ALTER TABLE}
-mit @code{FULLTEXT}-Indexen und @code{OPTIMIZE TABLE} mit
-@code{FULLTEXT}-Indexen l�uft jetzt bis zu 100 mal schneller.
-
-@item @code{MATCH ... AGAINST} wird folgende @strong{Boolesch Operatoren}
-unterst�tzen:
-
-@itemize @bullet
-@item @code{+}wort bedeutet, dass das Wort in jeder zur�ckgegebenen Zeile
-enthalten sein @strong{muss}.
-@item @code{-}wort bedeutet, dass das Wort in jeder zur�ckgegebenen Zeile
-@strong{nicht} enthalten sein darf.
-@item @code{<} und @code{>} k�nnen benutzt werden, um die Wortgewichtung in
-der Anfrage herab- und heraufzusetzen.
-@item @code{~} kann benutzt werden, um einem 'Rausch-Wort' ein
-@strong{negatives} Gewicht zuzuweisen.
-@item @code{*} ist ein Trunkierungsoperator.
-@end itemize
-
-Die Boole'sche Suche benutzt eine vereinfachte Art, die Relevanz zu
-berechnen, die keine 50%-Schwelle hat.
-
-@item Suchen sind jetzt wegen optimierter Suchalgorithmen bis zu 2 mal
-schneller.
-
-@item Das Dienstprogramm @code{ft_dump} wurde f�r
-Low-Level-@code{FULLTEXT}-Index-Operationen hinzugef�gt (Anfragen / Dumps /
-Statistiken).
-
-@end itemize
-
-
-@node Fulltext TODO, , Volltext-Features in MySQL 4.0, Fulltext Search
-@c German node Volltext-TODO-Liste
-@subsection Volltextsuche TODO-Liste
-
-@itemize @bullet
-@item Alle Operationen mit @code{FULLTEXT}-Index @strong{schneller} machen.
-@item Unterst�tzung f�r Klammern @code{()} in Boole'scher Volltextsuche.
-@item Phrasensuche, N�herungsoperatoren
-@item Boole'sche Suche funktioniert ohne @code{FULLTEXT}-Index (ja,
-@strong{sehr} langsam).
-@item Unterst�tzung f�r "immer indizierte W�rter". Das k�nnten beliebige
-Zeichenketten sein, die der Benutzer wie W�rter behandeln will. Beispiele
-sind "C++", "AS/400", "TCP/IP" usw.
-@item Unterst�tzung f�r Volltextsuche in @code{MERGE}-Tabellen.
-@item Unterst�tzung f�r Multi-Byte-Zeichens�tze.
-@item Die Stopword-Liste von der Sprache der Daten abh�ngig machen.
-@item Eind�mmen (Stemming, nat�rlich abh�ngig von der Sprache der Daten).
-@item Generischer Benutzer-unterst�tzbarer UDF- (?) Preparser.
-@item Das Modell flexibler machen (durch Hinzuf�gen einiger regulierbarer
-Parameter f�r @code{FULLTEXT} in @code{CREATE/ALTER TABLE}).
-@end itemize
-
-
-@c ACHTUNG! Folgender NODE ist neu seit 2002-01-15!
-@c ATTENTION! The following node ist new since 2001-01-15!
-
-@node Query Cache, , Fulltext Search, Reference
-@c German node Anfragen-Cache
-@section MySQL-Anfragen-Cache
-
-@cindex Anfragen-Cache
-@cindex @code{SELECT}, Anfragen-Cache
-
-Ab Version 4.0.1 besitzt der @code{MySQL-Server} einen
-@code{Anfragen-Cache}. Wenn er benutzt wird, speichert er den Text einer
-@code{SELECT}-Anfrage zusammen mit dem entsprechenden Ergebnis, das an den
-Client gesendet wird. Wenn eine weitere identische Anfrage empfangen wird,
-kann der Server die Ergebnisse aus dem Cache beziehen, statt dieselbe
-Anfrage zu parsen und noch einmal auszuf�hren.
-
-Der Anfragen-Cache ist extrem n�tzlich in Umgebungen, in denen sich
-(einige) Tabellen nicht h�ufig �ndern und in denen Sie viele identische
-Anfragen haben. Das ist eine typische Situation f�r viele Web-Server, die
-viele dynamische Inhalte benutzen.
-
-Im folgenden finden Sie einige Performance-Daten f�r den Anfragen-Cache
-(die wir mit der MySQL-Benchmark-Suite auf einer Linux Alpha 2 x 500 MHz
-mit 2 GB RAM und einem 64-MB-Anfragen-Cache gewonnen haben):
-
-@itemize @bullet
-@item
-Wenn Sie den Anfragen-Cache-Code abschalten wollen, setzen Sie
-@code{query_cache_size=0}. Wenn Sie den Anfragen-Cache-Code abschalten,
-gibt es keinen bemerkbaren Overhead.
-@item
-Wenn alle Anfragen, die Sie ausf�hren, einfach sind (wie das Ausw�hlen
-einer Zeile aus einer Tabelle mit einer Zeile), sich aber dennoch
-unterscheiden, so dass die Anfragen nicht gecachet werden k�nnen, ist der
-Overhead bei einem aktiven Anfragen-Cache 13%. Das sollte als Szenario f�r
-den schlechtesten Fall angesehen werden. Im echten Leben sind Anfragen
-jedoch meist viel komplizierter, so dass der Overhead normalerweise
-betr�chtlich geringer ist.
-@item
-Die Suche nach einer Zeile in einer Einzeilen-Tabelle ist 238% schneller.
-Das kann als minimale Geschwindigkeitssteigerung f�r eine gecachete Anfrage
-betrachtet werden.
-@end itemize
-
-
-
-@menu
-* Query Cache How::
-* Query Cache Configuration::
-* Query Cache in SELECT::
-* Query Cache Status and Maintenance::
-@end menu
-
-@node Query Cache How, Query Cache Configuration, Query Cache, Query Cache
-@c German node Anfragen-Cache-Funktionsweise
-@subsection Wie der Anfragen-Cache funktioniert
-
-Anfragen werden vor dem Parsen verglichen, daher werden
-
-@example
-SELECT * FROM TABELLE
-@end example
-
-und
-
-@example
-Select * from tabelle
-@end example
-
-als unterschiedliche Anfragen f�r den Anfragen-Cache betrachtet. Anfragen
-m�ssen also exakt gleich sein (Byte f�r Byte), um als identisch erkannt zu
-werden. Zus�tzlich kann eine Anfrage als unterschiedlich betrachtet werden,
-wenn ein Client zum Beispiel ein neues Kommunikationsprotokollformat
-benutzt oder einen anderen Zeichensatz als ein anderer Client.
-
-Anfragen, die unterschiedliche Datenbanken, Protokollversionen oder
-unterschiedliche vorgabem��ige Zeichens�tze benutzen, werden als
-unterschiedliche Anfragen angesehen und separat gecachet.
-
-Der Cache funktioniert auch bei Anfragen der Art @code{SELECT CALC_ROWS
-...} und @code{SELECT FOUND_ROWS() ...}, weil die Anzahl der gefundenen
-Zeilen ebenfalls im Cache gespeichert wird.
-
-Wenn sich eine Tabelle �ndert (@code{INSERT}, @code{UPDATE}, @code{DELETE},
-@code{TRUNCATE}, @code{ALTER} oder @code{DROP TABLE|DATABASE}), werden alle
-gecacheten Anfragen, die diese Tabelle benutzten (m�glicherweise �ber eine
-@code{MRG_MyISAM}-Tabelle!) ung�ltig und werden aus dem Cache entfernt.
-
-Momentan werden alle @code{InnoDB}-Tabellen beim @code{COMMIT} als f�r den
-Cache ung�ltig gekennzeichnet. In Zukunft wird das ge�ndert, so dass nur
-Tabellen, die in der Transaktion ge�ndert wurden, f�r die entsprechenden
-Cache-Eintr�ge als ung�ltig markiert werden.
-
-Eine Anfrage kann nicht gecachet werden, wenn sie eine der folgenden
-Funktionen enth�lt:
-@multitable @columnfractions .25 .25 .25 .25
-@item @strong{Funktion} @tab @strong{Funktion}
- @tab @strong{Funktion} @tab @strong{Funktion}
-@item @code{Benutzerdefinierte Funktionen} @tab @code{CONNECTION_ID}
- @tab @code{FOUND_ROWS} @tab @code{GET_LOCK}
-@item @code{RELEASE_LOCK} @tab @code{LOAD_FILE}
- @tab @code{MASTER_POS_WAIT} @tab @code{NOW}
-@item @code{SYSDATE} @tab @code{CURRENT_TIMESTAMP}
- @tab @code{CURDATE} @tab @code{CURRENT_DATE}
-@item @code{CURTIME} @tab @code{CURRENT_TIME}
- @tab @code{DATABASE} @tab @code{ENCRYPT} (mit einem Parameter)
-@item @code{LAST_INSERT_ID} @tab @code{RAND}
- @tab @code{UNIX_TIMESTAMP} (ohne Parameter) @tab @code{USER}
-@item @code{BENCHMARK}
-@end multitable
-
-Eine Anfrage kann ebenfalls nicht gecachet werden, wenn sie
-Benutzer-Variablen enth�lt oder wenn sie in der Form @code{SELECT ... IN
-SHARE MODE} oder der Form @code{SELECT * FROM AUTOINCREMENT_FIELD IS NULL}
-(um als ODBC-Workaround die letzte eingef�gte ID abzurufen) ist.
-
-@code{FOUND ROWS()} gibt jedoch den korrekten Werte zur�ck, selbst wenn
-eine vorhergehende Anfrage aus dem Cache geholt wurde.
-
-Anfragen, die keinerlei Tabellen benutzen oder solche, bei denen der
-Benutzer eine Spaltenberechtigung f�r irgend eine der beteiligten Tabellen
-hat, werden nicht gecachet.
-
-Bevor eine Anfrage aus dem Anfragen-Cache geholt wird, pr�ft MySQL, ob der
-Benutzer die SELECT-Berechtigung f�r alle beteiligten Datenbanken und
-Tabellen hat. Wenn nicht, wird das Cache-Ergebnis nicht benutzt.
-
-@node Query Cache Configuration, Query Cache in SELECT, Query Cache How, Query Cache
-@c German node Anfragen-Cache-Konfiguration
-@subsection Anfragen-Cache-Konfiguration
-
-Aufgrund des Anfragen-Caches gibt es ein paar neue @code{MySQL}
-Systemvariablen f�r @code{mysqld}, die in einer Konfigurationsdatei oder
-auf der Kommandozeile beim Starten von @code{mysqld} gesetzt werden k�nnen:
-
-@itemize
-@item @code{query_cache_limit}
-Keine Ergebnisse cachen, die gr��er als dieser Wert sind (Vorgabe 1 MB).
-
-@item @code{query_cache_size}
-Der zugewiesene Arbeitsspeicher, um Ergebnisse aus alten Anfragen zu
-speichern. Wenn er 0 ist, ist der Anfragen-Cache abgeschaltet (Vorgabe).
-
-@item @code{query_cache_startup_type}
-Dieser Wert (nur Zahlen) kann wie folgt gesetzt werden:
-@multitable @columnfractions .3 .7
-@item @strong{Option} @tab @strong{Beschreibung}
-@item 0 @tab (OFF - AUS, Ergebnisse nicht cachen oder abrufen)
-@item 1 @tab (ON - AN, alle Ergebnisse ausser @code{SELECT SQL_NO_CACHE ...}-Anfragen cachen)
-@item 2 @tab (DEMAND - AUF VERLANGEN, nur @code{SELECT SQL_CACHE ...}-Anfragen cachen)
-@end multitable
-@end itemize
-
-
-Innerhalb eines Threads (Verbindung) kann das Verhalten des Anfragen-Caches
-abweichend von der Vorgabe ver�ndert werden. Die Syntax ist wie folgt:
-
-@code{SQL_QUERY_CACHE_TYPE = OFF | ON | DEMAND}
-@code{SQL_QUERY_CACHE_TYPE = 0 | 1 | 2}
-
-@multitable @columnfractions .3 .7
-@item @strong{Option} @tab @strong{Beschreibung}
-@item 0 oder OFF @tab Keine Ergebnisse cachen oder abrufen.
-@item 1 oder ON @tab Alle Ergebnisse ausser @code{SELECT SQL_NO_CACHE ...}-Anfragen cachen.
-@item 2 oder DEMAND @tab Nur @code{SELECT SQL_CACHE ...}-Anfragen cachen.
-@end multitable
-
-Vorgabem��ig h�ngt @code{SQL_QUERY_CACHE_TYPE} vom Wert von
-@code{query_cache_startup_type} ab, als der Thread erzeugt wurde.
-
-
-@node Query Cache in SELECT, Query Cache Status and Maintenance, Query Cache Configuration, Query Cache
-@c German node Anfragen-Cache in SELECT
-@subsection Anfragen-Cache-Optionen in @code{SELECT}
-
-Es gibt zwei m�gliche Anfragen-Cache-bezogene Parameter, die in einer
-@code{SELECT}-Anfrage angegeben werden k�nnen:
-
-@findex SQL_CACHE
-@findex SQL_NO_CACHE
-
-@multitable @columnfractions .3 .7
-@item @strong{Option} @tab @strong{Beschreibung}
-@item @code{SQL_CACHE}
- @tab Wenn @code{SQL_QUERY_CACHE_TYPE} @code{DEMAND} ist, darf die Anfrage gecachet werden.
- Wenn @code{SQL_QUERY_CACHE_TYPE} @code{ON} ist, ist das die Vorgabe.
- Wenn @code{SQL_QUERY_CACHE_TYPE} @code{OFF} ist, nichts tun.
-@item @code{SQL_NO_CACHE}
- @tab Diese Anfrage wird nicht gecachet.
-@end multitable
-
-
-@node Query Cache Status and Maintenance, , Query Cache in SELECT, Query Cache
-@c German node Anfragen-Cache-Status und -Wartung
-@subsection Anfragen-Cache-Status und -Wartung
-
-Mit dem @code{FLUSH QUERY CACHE}-Befehl k�nnen Sie den Anfragen-Cache
-defragmentieren, um den Speicher besser zu benutzen. Dieser Befehl entfernt
-keinerlei Anfragen aus dem Cache.
-@code{FLUSH TABLES} schreibt auch den Anfragen-Cache zur�ck auf Platte.
-
-Der @code{RESET QUERY CACHE}-Befehl entfernt alle Anfragenergebnisse aus
-dem Anfragen-Cache.
-
-Sie k�nnen die Anfragen-Cache-Performance in @code{SHOW STATUS} beobachten:
-
-@multitable @columnfractions .3 .7
-@item @strong{Variable} @tab @strong{Beschreibung}
-@item @code{Qcache_queries_in_cache}
- @tab Anzahl von Anfragen, die im Cache registriert sind.
-@item @code{Qcache_inserts}
- @tab Anzahl von Anfragen, die zum Cache hinzugef�gt wurden.
-@item @code{Qcache_hits}
- @tab Anzahl von Cache-Hits.
-@item @code{Qcache_not_cached}
- @tab Anzahl von nicht gecacheten Anfragen
- (nicht cachebar oder wegen @code{SQL_QUERY_CACHE_TYPE}).
-@item @code{Qcache_free_memory}
- @tab Menge des freien Speichers f�r den Anfragen-Cache.
-@item @code{Qcache_total_blocks}
- @tab Gesamtzahl von Bl�cken im Anfragen-Cache.
-@item @code{Qcache_free_blocks}
- @tab Anzahl freier Speicherbl�cke im Anfragen-Cache.
-@end multitable
-
-Gesamtzahl von Anfragen =
-@code{Qcache_inserts} + @code{Qcache_hits} + @code{Qcache_not_cached}.
-
-Der Anfragen-Cache benutzt variable Blockl�ngen, so dass
-@code{Qcache_total_blocks} und @code{Qcache_free_blocks} eine
-Speicherfragmentierung des Anfragen-Caches anzeigen k�nnen. Nach
-@code{FLUSH QUERY CACHE} verbleibt nur ein einzelner (gro�er) freier
-Block.
-
-Hinweis: Jede Anfrage ben�tigt minimal zwei Bl�cke (einen f�r den
-Anfragentext und einen weiteren f�r das Anfragenergebnis). Ausserdem
-ben�tigt jede Tabelle, die in einer Anfrage benutzt wurde, einen Block.
-Wenn allerdings zwei oder mehr Anfragen dieselbe Tabelle benutzen, muss nur
-ein Block zugewiesen werden.
-
-
-@c ACHTUNG! Folgender NODE ist ge�ndert, 2002-01-15!
-@c ATTENTION! The following node has been changed 2001-01-15!
-@node Table types, Clients, Reference, Top
-@c German node Tabellentypen
-@chapter MySQL-Tabellentypen
-
-@cindex Tabellentypen, Auswahl
-@cindex @code{InnoDB}-Tabellentyp
-@cindex @code{Berkeley_db}-Tabellentyp
-@cindex @code{HEAP}-Tabellentyp
-@cindex @code{ISAM}-Tabellentyp
-@cindex @code{BDB}-Tabellentyp
-@cindex @code{MERGE}-Tabellentyp
-@cindex MySQL-Tabellentypen
-@cindex @code{MyISAM}-Tabellentyp
-@cindex Typen, Tabellen-
-
-AB MySQL-Version 3.23.6 k�nnen Sie unter drei grundlegenden
-Tabellenformaten (@code{ISAM}, @code{HEAP} und @code{MyISAM} w�hlen. Neuere
-MySQL-Versionen k�nnen zus�tzliche Tabellentypen unterst�tzen
-(@code{InnoDB}, oder @code{BDB}), abh�ngig davon, wie Sie sie kompilieren.
-
-
-Beim Erzeugen einer neuen Tabelle k�nnen Sie MySQL mitteilen, welcher
-Tabellentyp daf�r benutzt werden soll. MySQL erzeugt immer eine
-@code{.frm}-Datei, die die Tabellen- und Spaltendefinitionen enth�lt.
-Abh�ngig vom Tabellentyp werden Index und Daten in anderen Dateien
-gespeichert.
-
-Beachten Sie, dass Sie f�r die Benutzung von @code{InnoDB}-Tabellen
-zumindest die @code{innodb_data_file_path}-Startoption ben�tigen.
-@xref{InnoDB start}.
-
-Der vorgabem��ige Tabellentyp in MySQL ist @code{MyISAM}. Wenn Sie
-versuchen, einen Tabellentyp zu benutzen, der nicht einkompiliert oder
-aktiviert ist, erzeugt MySQL statt dessen eine Tabelle vom Typ
-@code{MyISAM}. Das ist ein sehr n�tzliches Feature, wenn Sie Tabellen
-zwischen unterschiedlichen SQL-Servern kopieren wollen, die
-unterschiedliche Tabellentypen unterst�tzten (zum Beispiel Tabellen zu
-einem Slave kopieren, der f�r Geschwindigkeit optimiert ist, aber keine
-transaktionalen Tabellen hat). Dieses automatische �ndern des Tabellentyps
-kann andererseits f�r neue MySQL-Benutzer sehr verwirrend sein. Wir planen
-f�r MySQL 4.0, das zu beheben, indem eine Warnung ausgegeben wird, wenn ein
-Tabellentyp automatisch ge�ndert wird.
-
-Sie k�nnen Tabellen zwischen unterschiedlichen Typen mit dem @code{ALTER
-TABLE}-Statement umwandeln. @xref{ALTER TABLE, , @code{ALTER TABLE}}.
-
-MySQL unterst�tzt zwei unterschiedliche Arten von Tabellen:
-transaktionssichere Tabellen (@code{InnoDB} und @code{BDB}) und nicht
-transaktionssichere Tabellen (@code{HEAP}, @code{ISAM}, @code{MERGE} und
-@code{MyISAM}).
-
-Vorteile transaktionssicherer Tabellen (TST):
-
-@itemize @bullet
-@item
-Sicherer. Selbst wenn MySQL abst�rzt oder wenn Sie Hardware-Probleme
-bekommen, bekommen Sie Ihre Daten zur�ck, entweder �ber automatische
-Wiederherstellung oder von einer Datensicherung plus Transaktionslog-Datei.
-@item
-Sie k�nnen viele Statements kombinieren und alle in einem Rutsch mit dem
-@code{COMMIT}-Befehl akzeptieren.
-@item
-Sie k�nnen @code{ROLLBACK} ausf�hren, um Ihre �nderungen zu ignorieren
-(wenn Sie nicht im Auto-Commit-Modus fahren).
-@item
-Wenn eine Aktualisierung fehlschl�gt, werden Ihre �nderungen
-zur�ckgesichert. (Bei nicht transaktionssicheren Tabellen sind
-durchgef�hrte �nderungen permanent.)
-@end itemize
-
-Vorteile nicht transaktionssicherer Tabellen (NTST):
-
-@itemize @bullet
-@item
-Viel schneller, da es keinen Transaktionsoverhead gibt.
-@item
-Ben�tigen aufgrund des fehlenden Transaktionsoverheads weniger
-Speicherplatz.
-@item
-Ben�tigen weniger Arbeitsspeicher f�r Aktualisierungen.
-@end itemize
-
-Sie k�nnen TST- and NTST-Tabellen in denselben Statements kombinieren, um
-das Beste aus beiden Welten zu bekommen.
-
-
-
-@menu
-* MyISAM::
-* MERGE::
-* ISAM::
-* HEAP::
-* InnoDB::
-* BDB::
-@end menu
-
-@node MyISAM, MERGE, Table types, Table types
-@c German node MyISAM
-@section MyISAM-Tabellen
-
-@code{MyISAM} ist der vorgabem��ige Tabellentyp in MySQL-Version 3.23. Er
-basiert auf dem @code{ISAM}-Code und hat viele n�tzliche Erweiterungen.
-
-Der Index wird in einer Datei mit der Endung @code{.MYI} (MYIndex)
-gespeichert, die Daten in einer Datei mit der Endung @code{.MYD} (MYData).
-Sie k�nnen @code{MyISAM}-Tabellen mit dem @code{myisamchk}-Dienstprogramm
-�berpr�fen und reparieren. @xref{Repair}. Sie k�nnen
-@code{MyISAM}-Tabellen mit @code{myisampack} komprimieren, damit sie viel
-weniger Speicherplatz ben�tigen. @xref{myisampack}.
-
-Folgende Neuerungen gibt es bei @code{MyISAM}:
-
-@itemize @bullet
-@item
-Es gibt einen Flag in der @code{MyISAM}-Datei, der anzeigt, ob die Tabelle
-korrekt geschlossen wurde. Wenn @code{mysqld} mit @code{--myisam-recover}
-gestartet wird, werden @code{MyISAM}-Tabellen beim �ffnen automatisch
-gepr�ft und / oder repariert, falls die Tabelle nicht korrekt geschlossen
-wurde.
-@item
-Sie k�nnen neue Zeilen in eine Tabelle, die keinerlei freie Bl�cke mitten
-in der Daten-Datei hat, einf�gen (@code{INSERT}), w�hrend zeitgleich
-andere Threads aus der Tabelle lesen (zeitgleiches Einf�gen). Ein freier
-Block kann entstehen, wenn eine Aktualisierung einer Zeile dynamischer
-L�nge, die viele Daten enth�lt, mit weniger Daten durchgef�hrt wird, oder
-wenn Zeilen gel�scht werden. Wenn alle freien Bl�cke aufgebraucht sind,
-k�nnen alle zuk�nftigen Einf�geoperationen auf die zeitgleiche Art
-erfolgen.
-@item
-Unterst�tzung f�r gro�e Dateien (63-Bit) auf Dateisystemen /
-Betriebssystemen, die gro�e Dateien unterst�tzen.
-@item
-Alle Daten werden mit dem niedrigen Byte zuerst gespeichert. Das macht die
-Daten Maschinen- und Betriebssystem-unabh�ngig. Die einzige Anforderung
-ist, dass die Maschine zweien-komplement�re vorzeichenbehaftete Ganzzahlen
-(two's-complement signed integers) benutzt, was bei jeder Maschine in den
-letzten 20 Jahren der Fall war), sowie das IEEE-Flie�komma-Format (bei
-Mainstream-Maschinen absolut dominierend). Die einzige Art von Maschinen,
-die vielleicht keine Bin�rkompatibilit�t unterst�tzen, sind eingebettete
-Systeme (Embedded Systems), weil diese manchmal eigent�mliche Prozessoren
-haben.
-
-Wenn Daten mit dem niedrigen Byte zuerst gespeichert werden, ergibt sich
-daraus kein gro�er Geschwindigkeitsnachteil. Die Bytes in einer
-Tabellenzeile sind normalerweise unzusammenh�ngend und man ben�tigt kaum
-mehr Ressourcen, um ein unzusammenh�ngendes Byte in Reihenfolge statt in
-umgekehrter Reihenfolge zu lesen. Der tats�chliche Hole-Spaltenwert-Code
-ist im Vergleich zu sonstigem Code ebenfalls nicht zeitkritisch.
-@item
-Alle Zahlenschl�ssel werden mit dem hohen Byte zuerst gespeichert, um
-bessere Index-Kompression zu erzielen.
-@item
-Die interne Handhabung einer @code{AUTO_INCREMENT}-Spalte. @code{MyISAM}
-aktualisiert diese automatisch bei @code{INSERT / UPDATE}. Der
-@code{AUTO_INCREMENT}-Wert kann mit @code{myisamchk} zur�ckgesetzt werden.
-Das macht @code{AUTO_INCREMENT}-Spalten schneller (mindestens 10%), und
-alten Zahlen werden im Gegensatz zum alten @code{ISAM} nicht wieder
-benutzt. Beachten Sie, dass das alte Verhalten immer noch da ist, wenn ein
-@code{AUTO_INCREMENT} am Ende eines mehrteiligen Schl�ssels definiert wird.
-@item
-Wenn er in sortierter Reihenfolge eingef�gt wird (wie bei der Benutzung
-einer @code{AUTO_INCREMENT}-Spalte), wird der Schl�sselbaum gespalten, so
-dass der hohe Knoten nur einen Schl�ssel enth�lt. Das verbessert die
-Platzausnutzung im Schl�sselbaum.
-@item
-@code{BLOB}- und @code{TEXT}-Spalten k�nnen indiziert werden.
-@item
-@code{NULL}-Werte sind in indizierten Spalten erlaubt. Daf�r werden 0 bis 1
-Byte pro Schl�ssel ben�tigt.
-@item
-Die maximale Schl�ssell�nge betr�gt vorgabem��ig 500 Bytes (das kann beim
-Neukompilieren ge�ndert werden). Wenn Schl�ssel l�nger als 250 Bytes sind,
-wird f�r diese eine h�here Schl�sselblockgr��e als die vorgabem��igen
-1024 Bytes benutzt.
-@item
-Die maximale Anzahl von Schl�sseln pro Tabelle betr�gt vorgabem��ig 32.
-Diese kann bis auf 64 erh�ht werden, ohne dass @code{myisamchk} neu
-kompiliert werden muss.
-@item
-@code{myisamchk} kennzeichnet Tabellen als gepr�ft, wenn es mit
-@code{--update-state} l�uft. @code{myisamchk --fast} pr�ft nur die
-Tabellen, die diese Kennzeichnung nicht haben.
-@item
-@code{myisamchk -a} speichert Statistiken f�r Schl�sselteile (und nicht nur
-f�r gesamte Schl�ssel wie bei @code{ISAM}).
-@item
-Zeilen dynamischer Gr��e werden viel weniger fragmentiert werden, wenn
-L�sch- mit Aktualisierungs- und Einf�geoperationen gemischt werden. Daf�r
-wird gesorgt, indem angrenzende gel�schte Bl�cke automatisch kombiniert
-werden und dadurch, dass Bl�cke erweitert werden, wenn der n�chste Block
-gel�scht wird.
-@item
-@code{myisampack} kann @code{BLOB}- and @code{VARCHAR}-Spalten
-komprimieren.
-@item
-Sie k�nnen die Daten-Datei und die Index-Datei in unterschiedliche
-Verzeichnisse legen, um mehr Geschwindigkeit zu erhalten (mit der
-@code{DATA/INDEX DIRECTORY="pfad"}-Option f�r @code{CREATE TABLE}).
-@xref{CREATE TABLE}.
-@end itemize
-
-@code{MyISAM} unterst�tzt ausserdem die folgenden Dinge, die MySQL in naher
-Zukunft benutzen k�nnen wird:
-
-@itemize @bullet
-@item
-Unterst�tzung f�r einen echten @code{VARCHAR}-Typ. Eine
-@code{VARCHAR}-Spalte f�ngt mit einer in 2 Bytes gespeicherten L�nge an.
-@item
-Tabellen mit @code{VARCHAR} k�nnen eine feste oder dynamische
-Datensatzl�nge haben.
-@item
-@code{VARCHAR} und @code{CHAR} k�nnen bis zu 64 KB Gro� sein. Alle
-Schl�sselsegmente haben ihre eigene Sprachdefinition. Das versetzt MySQL in
-die Lage, unterschiedliche Sprachdefinitionen pro Spalte zu haben.
-@item
-Ein gehashter berechneter Index kann f�r @code{UNIQUE} benutzt werden. Das
-erlaubt Ihnen, @code{UNIQUE} auf jeder beliebigen Kombination von Spalten
-in einer Tabelle zu haben. (Sie k�nnen jedoch auf einem @code{UNIQUE}
-berechneten Index nicht suchen.)
-@end itemize
-
-Beachten Sie, dass Index-Dateien bei @code{MyISAM} �blicherweise viel
-kleiner sind als bei @code{ISAM}. Das bedeutet, dass @code{MyISAM}
-normalerweise weniger Systemressourcen verbraucht als @code{ISAM},
-allerdings mehr Prozessorleistung beim Einf�gen von Daten in einen
-komprimierten Index.
-
-Folgende Optionen f�r @code{mysqld} k�nnen benutzt werden, um das Verhalten
-von @code{MyISAM}-Tabellen zu �ndern. @xref{SHOW VARIABLES}.
-
-@multitable @columnfractions .40 .60
-@item @strong{Option} @tab @strong{Beschreibung}
-@item @code{--myisam-recover=#}
- @tab Automatische Wiederherstellung besch�digter Tabellen.
-@item @code{-O myisam_sort_buffer_size=#}
- @tab Der beim Wiederherstellen von Tabellen benutzte Puffer.
-@item @code{--delay-key-write-for-all-tables}
- @tab Keine Schl�sselpuffer zwischen Schreibvorg�ngen auf jedwede
-MyISAM-Tabelle zur�ckschreiben (flush).
-@item @code{-O myisam_max_extra_sort_file_size=#}
- @tab Wird benutzt, um MySQL bei der Entscheidung zu helfen, wann die
-langsame, aber sichere Schl�ssel-Cache-Index-Erzeugungsmethode benutzt
-werden sollte. @strong{Hinweis:} Dieser Parameter wird in Megabytes
-angegeben!
-@item @code{-O myisam_max_sort_file_size=#}
- @tab Die schnelle Index-Sortiermethode beim Erzeugen eines Indexes nicht
-benutzen, wenn die tempor�re Datei gr��er als dieser Wert werden w�rde.
-@strong{Hinweis:} Dieser Parameter wird in Megabytes angegeben!
-megabytes!--
-@item @code{-O myisam_bulk_insert_tree_size=#}
- @tab Die Gr��e des Baum-Caches, der bei der Optimierung von
-Massen-Einf�geoperationen benutzt wird. @strong{Hinweis:} Das ist die
-Begrenzung @strong{pro Thread}!
-@end multitable
-
-Die automatische Wiederherstellung wird aktiviert, wenn Sie @code{mysqld}
-mit @code{--myisam-recover=#} starten. @xref{Command-line options}. Beim
-�ffnen wird gepr�ft, ob die Tabelle als besch�digt gekennzeichnet ist oder
-ob die Z�hlvariable f�r die Tabelle nicht 0 ist und Sie mit
-@code{--skip-locking} laufen lassen. Wenn eine dieser Bedingungen erf�llt
-ist, geschieht folgendes:
-
-@itemize @bullet
-@item
-Die Tabelle wird auf Fehler gepr�ft.
-@item
-Wenn ein Fehler gefunden wird, wird eine schnelle Reparatur der Tabelle
-versucht (mit Sortieren und ohne Neuerzeugung der Daten-Datei).
-@item
-Wenn die Reparatur wegen eines Fehlers in der Daten-Datei fehlschl�gt (zum
-Beispiel ein Fehler wegen eines doppelten Schl�sseleintrags), wird die
-Reparatur noch einmal versucht, diesmal allerdings mit Neuerzeugung der
-Daten-Datei.
-@item
-Wenn dieser Versuch fehlschl�gt, wird die Reparatur noch einmal mit der
-alten Reparaturoption versucht (Zeile f�r Zeile ohne Sortieren schreiben),
-was jede Sorte von Fehler beheben sollte, bei gewissen
-Festplatten-Erfordernissen ...
-@end itemize
-
-Wenn die Wiederherstellung nicht in der Lage ist, alle Zeilen aus einem
-vorher abgeschlossenen Statement wiederherzustellen, und Sie nicht
-@code{FORCE} als Option f�r @code{myisam-recover} angegeben haben, wird die
-automatische Reparatur mit einer Fehlermeldung in der Fehlerdatei
-abgebrochen:
-
-@example
-Error: Couldn't repair table: test.g00pages
-@end example
-
-H�tten Sie in diesem Fall die @code{FORCE}-Option benutzt, w�rden Sie statt
-dessen in der Fehlerdatei eine Warnung erhalten:
-
-@example
-Warning: Found 344 of 354 rows when repairing ./test/g00pages
-@end example
-
-Wenn Sie automatisches Wiederherstellung mit der @code{BACKUP}-Option
-laufen lassen, beachten Sie, dass Sie ein Cron-Skript haben sollten, dass
-automatisch Dateien mit Namen wie @file{tabellenname-datetime.BAK} aus den
-Datenbank-Verzeichnissen auf ein Sicherungsmedium verschiebt.
-
-@xref{Command-line options}.
-
-
-
-@menu
-* Key space::
-* MyISAM table formats::
-* MyISAM table problems::
-@end menu
-
-@node Key space, MyISAM table formats, MyISAM, MyISAM
-@c German node Speicherplatz f�r Schl�ssel
-@subsection F�r Schl�ssel ben�tigter Speicherplatz
-
-@cindex Speicherplatz f�r Schl�ssel, MyISAM
-
-MySQL unterst�tzt unterschiedliche Index-Typen, doch der normale Typ ist
-ISAM oder MyISAM. Diese benutzen einen B-Baum-Index, und Sie k�nnen die
-Gr��e der Index-Datei grob als @code{(schluessel_laenge+4)/0.67}
-kalkuliert, summiert �ber alle Schl�ssel. (Das ist der schlechteste Fall,
-bei dem alle Schl�ssel in sortierter Reihenfolge eingeordnet werden und es
-keinerlei Schl�ssel-Komprimierung gibt.)
-
-Zeichenketten-Indexe werden Leerzeichen-komprimiert. Wenn der erste
-Index-Teil eine Zeichenkette ist, wird er zus�tzlich Pr�fix-komprimiert.
-Leerzeichen-Kompression macht die Index-Datei kleiner als in den obigen
-Zahlen dargestellt, wenn die Zeichenkettenspalte viele Leerzeichen am Ende
-hat oder eine @code{VARCHAR}-Spalte ist, die nicht immer in voller L�nge
-genutzt wird. Pr�fix-Kompression wird bei Schl�sseln benutzt, die mit einer
-Zeichenkette beginnen. Pr�fix-Kompression hilft, wenn es viele
-Zeichenketten mit identischem Pr�fix gibt.
-
-Bei @code{MyISAM}-Tabellen k�nnen Sie auch Zahlen Pr�fix-komprimieren,
-indem Sie beim Erzeugen der Tabelle @code{PACK_KEYS=1} angeben. Das hilft,
-wenn Sie viele Ganzzahl-Schl�ssel mit identischem Pr�fix haben, wenn die
-Zahlen mit dem hohen Byte zuerst gespeichert werden.
-
-
-@node MyISAM table formats, MyISAM table problems, Key space, MyISAM
-@c German node MyISAM-Tabellenformate
-@subsection MyISAM-Tabellenformate
-
-@strong{MyISAM} unterst�tzt 3 verschiedene Tabellentypen. Zwei von ihnen
-werden automatisch gew�hlt, abh�ngig vom Spaltentyp, den Sie benutzen. Der
-dritte, komprimierte Tabellen, kann nur mit dem
-@code{myisampack}-Dienstprogramm erzeugt werden.
-
-Wenn Sie eine Tabelle erzeugen (@code{CREATE}) oder �ndern (@code{ALTER}),
-k�nnen Sie bei Tabellen, die kein @code{BLOB} enthalten, ein dynamisches
-(@code{DYNAMIC}) oder festes (@code{FIXED}) Tabellenformat mit der
-@code{ROW_FORMAT=#}-Tabellenoption erzwingen. Zuk�nftig werden Sie in der
-Lage sein, Tabellen zu komprimieren / dekomprimieren, indem Sie
-@code{ROW_FORMAT=compressed | default} f�r @code{ALTER TABLE} angeben.
-@xref{CREATE TABLE}.
-
-
-
-@menu
-* Static format::
-* Dynamic format::
-* Compressed format::
-@end menu
-
-@node Static format, Dynamic format, MyISAM table formats, MyISAM table formats
-@c German node Statisches Format
-@subsubsection Kennzeichen statischer (Festl�ngen-) Tabellen
-
-Das ist das vorgabem��ige Format. Es wird benutzt, wenn die Tabelle keine
-@code{VARCHAR}-, @code{BLOB}- oder @code{TEXT}-Spalten enth�lt.
-
-Dieses Format ist das einfachste und sicherste Format. Es ist auch das
-schnellste der Formate auf Platte. Die Geschwindigkeit ergibt sich aus der
-einfachen Weise, wie Daten auf der Platte gefunden werden k�nnen. Wenn man
-etwas mit einem Index und statischem Format nachschl�gt, ist es sehr
-einfach. Man multipliziert einfach die Zeilennummer mit der Zeilenl�nge.
-
-Wenn eine Tabelle gescannt wird, ist es ausserdem sehr einfach, mit jedem
-Plattenzugriff eine konstante Anzahl von Datens�tzen zu lesen.
-
-Die Sicherheit zeigt sich, wenn Ihr Computer beim Schreiben in eine
-MyISAM-Datei fester L�nge abst�rzt. In diesem Fall kann @code{myisamchk}
-leicht herausfinden, wo jede Zeile anf�ngt und aufh�rt. Daher kann es
-�blicherweise alle Datens�tze mit Ausnahme desjenigen, in den nur teilweise
-geschrieben wurde, wieder herstellen. Beachten Sie, dass in MySQL alle
-Indexe in jedem Fall wiederhergestellt werden k�nnen:
-
-@itemize @bullet
-@item
-Alle @code{CHAR}-, @code{NUMERIC}- und @code{DECIMAL}-Spalten werden mit
-Leerzeichen auf die Spaltenbreite aufgef�llt.
-@item
-Sehr schnell.
-@item
-Leicht zu cachen.
-@item
-Nach einem Absturz leicht zu rekonstruieren, weil sich Datens�tze an festen
-Positionen befinden.
-@item
-m�ssen nicht (mit @code{myisamchk}) reorganisiert werden, es sei denn, eine
-riesige Anzahl von Datens�tzen wurde gel�scht und Sie wollen dem
-Betriebssystem freien Speicherplatz zur�ckgeben.
-@item
-Ben�tigen normalerweise mehr Speicherplatz als dynamische Tabellen.
-@end itemize
-
-
-@node Dynamic format, Compressed format, Static format, MyISAM table formats
-@c German node Dynamisches Format
-@subsubsection Kennzeichen dynamischer Tabellen
-
-@cindex Kennzeichen dynamischer Tabellen
-@cindex Tabellen, dynamische
-
-Dieses Format wird benutzt, wenn die Tabelle irgend welche @code{VARCHAR}-,
-@code{BLOB}- oder @code{TEXT}-Spalten enth�lt, oder wenn die Tabelle mit
-@code{ROW_FORMAT=dynamic} erzeugt wurde.
-
-Dieses Format ist etwas komplexer, weil jede Zeile einen Header haben muss,
-der aussagt, wie lang sie ist. Ein Datensatz kann ausserdem an mehr als
-einem Speicherplatz enden, wenn er bei einer Aktualisierung verl�ngert
-wird.
-
-@cindex Tabellen, defragmentieren
-Sie k�nnen @code{OPTIMIZE table} oder @code{myisamchk} benutzen, um eine
-Tabelle zu defragmentieren. Wenn Sie statische Daten haben, auf die Sie oft
-zugreifen oder die Sie in derselben Tabelle oft �ndern, als @code{VARCHAR}-
-oder @code{BLOB}-Spalten haben, ist es eine gute Idee, die dynamischen
-Spalten in andere Tabellen zu verschieben, einfach um Fragmentierung zu
-vermeiden:
-
-@itemize @bullet
-@item
-Alle Zeichenketten-Spalten sind dynamisch (ausser denen mit einer L�nge
-kleiner 4).
-@item
-Jedem Datensatz ist eine Bitmap vorangestellt, die angibt, welche Spalten
-bei Zeichenketten-Spalten leer (@code{''}) sind oder 0 bei numerischen
-Spalten. (Das ist nicht dasselbe wie Spalten, die @code{NULL}-Werte
-enthalten.) Wenn eine Zeichenketten-Spalte nach der Entfernung von
-Leerzeichen am Ende eine L�nge von 0 hat oder eine numerische Spalte einen
-Wert von 0 hat, wird sie in der Bitmap markiert und nicht auf Platte
-gespeichert. Nicht leere Zeichenketten werden als ein L�ngen-Byte plus dem
-Zeichenketten-Inhalt gespeichert.
-@item
-Ben�tigen �blicherweise weniger Plattenplatz als Festl�ngen-Tabellen.
-@item
-Jeder Datensatz benutzt nur so viel Speicherplatz wie erforderlich. Wenn
-ein Datensatz gr��er wird, wird er in so viele Teile wie erforderlich
-aufgeteilt. Hierdurch wird Datensatzfragmentierung hervorgerufen.
-@item
-Wenn Sie eine Zeile mit Informationen aktualisieren, die die Zeilenl�nge
-�berschreiten, wird die Zeile fragmentiert. In diesem Fall sollten Sie von
-Zeit zu Zeit @code{myisamchk -r} laufen lassen, um bessere Performance zu
-erzielen. Benutzen Sie @code{myisamchk -ei tabellen_name}, um einige
-statistische Informationen zu erhalten.
-@item
-Sind nach einem Absturz nicht so einfach zu rekonstruieren, weil ein
-Datensatz in viele Teile fragmentiert sein und ein Link (Fragment) fehlen
-kann.
-@item
-Die erwartete Zeilenl�nge bei Datens�tzen dynamischer L�nge ist:
-
-@example
-3
-+ (anzahl_der_spalten + 7) / 8
-+ (anzahl_der_zeichenketten_spalten)
-+ komprimierte_groesse_numerischer_spalten
-+ laenge_von_zeichenketten
-+ (anzahl_von_NULL_spalten + 7) / 8
-@end example
-
-F�r jeden Link kommen 6 Bytes hinzu. Ein dynamischer Datensatz wird immer
-dann verkn�pft (linked), wenn eine Aktualisierung eine Vergr��erung des
-Datensatzes bewirkt. Jede neue Verkn�pfung hat mindestens 20 Bytes, so dass
-die n�chste Vergr��erung wahrscheinlich in dieselbe Verkn�pfung passt.
-Wenn nicht, entsteht eine weitere Verkn�pfung. Sie k�nnen mit
-@code{myisamchk -ed} pr�fen, wie viele Verkn�pfungen es gibt. Alle
-Verkn�pfungen k�nnen mit @code{myisamchk -r} entfernt werden.
-@end itemize
-
-
-@node Compressed format, , Dynamic format, MyISAM table formats
-@c German node Komprimiertes Format
-@subsubsection Kennzeichen komprimierter Tabellen
-
-@cindex Tabellen, komprimiertes Format
-
-Das ist ein Nur-Lese-Typ, der mit dem optionalen
-@code{myisampack}-Dienstprogramm (@code{pack_isam} f�r
-@code{ISAM}-Tabellen) erzeugt wird:
-
-@itemize @bullet
-@item
-All MySQL-Distributionen, selbst diejenigen, die es vor der GPL-Version von
-MySQL gab, k�nnen Tabellen lesen, die mit @code{myisampack} komprimiert
-wurden.
-@item
-Komprimierte Tabellen ben�tigen viel weniger Speicherplatz. Das minimiert
-Plattenzugriffe, was sehr nett ist, wenn Sie langsame Platten benutzen (wie
-CD-ROMs).
-@item
-Jeder Datensatz wird separat komprimiert (sehr geringer Zugriffs-Overhead).
-Der Header f�r einen Datensatz hat eine feste L�nge (1 bis 3 Bytes),
-abh�ngig vom gr��ten Datensatz in der Tabelle. Jede Spalte wird
-unterschiedlich komprimiert. Einige Kompressionstypen sind:
-@itemize @minus
-@item
-F�r jede Spalte gibt es �blicherweise eine unterschiedliche
-Huffman-Tabelle.
-@item
-Komprimierung von Leerzeichen am Ende.
-@item
-Komprimierung von Leerzeichen am Anfang.
-@item
-Zahlen mit dem Wert @code{0} werden mit 1 Bit gespeichert.
-@item
-Wenn Werte in einer Ganzzahl-Spalte einen kleinen Wertebereich haben, wird
-die Spalte mit dem kleinsten m�glichen Typ gespeichert. Eine
-@code{BIGINT}-Spalte (8 Bytes) kann beispielsweise als
-@code{TINYINT}-Spalte (1 Byte) gespeichert werden, wenn sich alle Werte im
-Bereich von @code{0} bis @code{255} befinden.
-@item
-Wenn eine Spalte nur einen kleinen Satz m�glicher Werte besitzt, wird der
-Spaltentyp zu @code{ENUM} umgewandelt.
-@item
-Eine Spalte kann auch eine Kombination der obigen Komprimierungen benutzen.
-@end itemize
-@item
-Kann Datens�tze fester oder dynamischer L�nge handhaben, aber nicht
-@code{BLOB}- oder @code{TEXT}-Spalten.
-@item
-Kann mit @code{myisamchk} dekomprimiert werden.
-@end itemize
-
-
-@node MyISAM table problems, , MyISAM table formats, MyISAM
-@c German node MyISAM-Tabellenprobleme
-@subsection MyISAM-Tabellenprobleme
-
-Das Dateiformat, das MySQL benutzt, um Daten zu speichern, wurde ausgiebig
-getestet, aber es gibt immer Umst�nde, die dazu f�hren k�nnen, dass
-Datenbanktabellen besch�digt werden.
-
-
-
-@menu
-* Corrupted MyISAM tables::
-* MyISAM table close::
-@end menu
-
-@node Corrupted MyISAM tables, MyISAM table close, MyISAM table problems, MyISAM table problems
-@c German node Besch�digte MyISAM-Tabellen
-@subsubsection Besch�digte MyISAM-Tabellen
-
-Obwohl das MyISAM-Tabellenformat sehr zuverl�ssig ist (alle �nderungen an
-einer Tabelle werden geschrieben, bevor das SQL-Statement zur�ckkehrt),
-k�nnen Sie dennoch besch�digte Tabellen bekommen, wenn eines der folgenden
-Dinge passiert:
-
-@itemize @bullet
-@item
-Der @code{mysqld}-Prozess wird mitten in einem Schreibvorgang gekillt.
-@item
-Unerwartetes Herunterfahren des Computers (wenn der Computer beispielsweise
-abgeschaltet wird).
-@item
-Ein Hardware-Fehler.
-@item
-Sie benutzen ein externes Programm (wie myisamchk) auf einer benutzten
-Tabelle.
-@item
-Ein Software-Bug im MySQL- oder MyISAM-Code.
-@end itemize
-
-Typische Symptome einer besch�digten Tabelle sind:
-
-@itemize @bullet
-@item
-Sie erhalten den Fehler @code{Incorrect key file for table: '...'. Try to
-repair it}, wenn Sie Daten aus der Tabelle ausw�hlen.
-@item
-Anfragen finden keine Zeilen in der Tabelle oder geben unvollst�ndige Daten
-zur�ck.
-@end itemize
-
-Sie k�nnen mit dem Befehl @code{CHECK TABLE} pr�fen, ob eine Tabelle in
-Ordnung ist. @xref{CHECK TABLE}.
-
-Sie k�nnen eine besch�digte Tabelle mit @code{REPAIR TABLE} reparieren.
-@xref{REPAIR TABLE}. Wenn @code{mysqld} nicht l�uft, k�nnen Sie eine
-Tabelle auch mit dem @code{myisamchk}-Befehl reparieren.
-@code{myisamchk-Syntax}.
-
-Wenn Ihre Tabellen oft besch�digt werden, sollten Sie versuchen, den Grund
-daf�r herauszufinden! @xref{Crashing}.
-
-In diesem Fall ist es am wichtigsten zu wissen, ob die Tabelle durch einen
-Absturz von @code{mysqld} besch�digt wurde (das k�nnen Sie leicht
-feststellen, wenn es eine aktuelle Zeile @code{restarted mysqld} in der
-mysqld-Fehlerdatei gibt). Wenn das nicht der Fall ist, sollten Sie
-versuchen, daraus einen Testfall zu machen. @xref{Reproduceable test case}.
-
-
-@node MyISAM table close, , Corrupted MyISAM tables, MyISAM table problems
-@c German node MyISAM-Tabellenschlie�en
-@subsubsection Client benutzt Tabelle oder hat sie nicht korrekt geschlossen
-
-Jede @code{MyISAM}-@code{.MYI}-Datei hat im Header einen Z�hler, der
-benutzt werden kann, um zu pr�fen, ob die Tabelle korrekt geschlossen
-wurde.
-
-Wenn Sie folgende Warnmeldung von @code{CHECK TABLE} oder @code{myisamchk}
-erhalten:
-
-@example
-# client is using or hasn't closed the table properly
-@end example
-
-hei�t das, dass der Z�hler nicht mehr synchron ist. Das bedeutet nicht,
-dass die Tabelle besch�digt ist, aber Sie sollten zumindest eine
-�berpr�fung vornehmen, um sicherzustellen, dass die Tabelle in Ordnung ist.
-
-Der Z�hler funktioniert wie folgt:
-
-@itemize @bullet
-@item
-Wenn die Tabelle das erste Mal in MySQL aktualisiert wird, wird der Z�hler
-im Header der Index-Dateien heraufgez�hlt.
-@item
-Der Z�hler wird w�hrend weiterer Aktualisierungen nicht ver�ndert.
-@item
-Wenn die letzte Instanz einer Tabelle geschlossen wird (wegen eines
-@code{FLUSH} oder weil es nicht mehr genug Platz im Tabellen-Cache gibt),
-wird der Z�hler heruntergez�hlt, wenn die Tabelle zu irgend einem Zeitpunkt
-aktualisiert wurde.
-@item
-Wenn Sie eine Tabelle reparieren oder pr�fen und sie in Ordnung ist, wird
-der Z�hler auf 0 zur�ckgesetzt.
-@item
-Um Probleme zu vermeiden, die durch Interaktion mit anderen Prozessen
-entstehen, die vielleicht eine Pr�fung der Tabelle durchf�hren, wird der
-Z�hler beim Schlie�en nicht heruntergez�hlt, wenn er 0 war.
-@end itemize
-
-Mit anderen Worten kann der Z�hler nur in folgenden F�llen nicht mehr
-synchron sein:
-
-@itemize @bullet
-@item
-Die @code{MyISAM}-Tabellen werden ohne @code{LOCK} und @code{FLUSH TABLES}
-kopiert.
-@item
-MySQL ist zwischen einer Aktualisierung und dem endg�ltigen Schlie�en
-abgest�rzt. (Beachten Sie, dass die Tabelle trotzdem in Ordnung sein kann,
-weil MySQL stets f�r alles zwischen jedem Statement Schreibvorg�nge
-durchf�hrt.
-@item
-Jemand hat @code{myisamchk --repair} oder @code{myisamchk --update-state}
-auf eine Tabelle ausgef�hrt, die durch @code{mysqld} in Benutzung war.
-@item
-Viele @code{mysqld}-Server benutzen die Tabelle und einer davon hat
-@code{REPAIR} oder @code{CHECK} der Tabelle ausgef�hrt, w�hrend sie durch
-einen anderen Server in Benutzung war. Hierbei kann @code{CHECK} sicher
-ausgef�hrt werden (selbst wenn Sie Warnungen von anderen Servern erhalten
-werden), aber @code{REPAIR} sollte vermieden werden, weil es momentan die
-Daten-Datei durch eine neue ersetzt, was anderen Servern nicht signalisiert
-wird.
-@end itemize
-
-
-@node MERGE, ISAM, MyISAM, Table types
-@c German node MERGE
-@section MERGE-Tabellen
-
-@cindex Tabellen, Merge-
-@cindex MERGE-Tabellen, Definition
-
-@code{MERGE}-Tabellen sind neu seit MySQL-Version 3.23.25. Der Code ist
-noch Gamma, sollte aber ausreichend stabil sein.
-
-Eine @code{MERGE}-Tabelle (auch bekannt als @code{MRG_MyISAM}-Tabelle) ist
-eine Sammlung identischer @code{MyISAM}-Tabellen, die wie eine benutzt
-werden k�nnen. Sie k�nnen auf dieser Sammlung von Tabellen nur
-@code{SELECT}, @code{DELETE} und @code{UPDATE} ausf�hren. Wenn Sie eine
-@code{MERGE}-Tabelle l�schen (@code{DROP}), l�schen Sie nur die
-@code{MERGE}-Spezifikation.
-
-Beachten Sie, dass @code{DELETE FROM merge_tabelle} ohne @code{WHERE} nur
-das Mapping f�r die Tabelle l�scht, nicht alles in den gemappten Tabellen.
-(Geplant ist, das in Version 4.1 zu beheben.)
-
-Mit identischen Tabellen ist gemeint, dass alle Tabellen mit identischen
-Spalten- und Schl�sselinformationen erzeugt wurden. Sie k�nnen kein MERGE
-auf Tabellen ausf�hren, deren Spalten unterschiedlich komprimiert sind,
-nicht genau dieselben Spalten oder die Schl�ssel in unterschiedlicher
-Reihenfolge haben. Einige der Tabellen k�nnen jedoch mit @code{myisampack}
-komprimiert sein. @xref{myisampack}.
-
-Wenn Sie eine @code{MERGE}-Tabelle erzeugen, erhalten Sie eine
-@code{.frm}-Tabellendefinitionsdatei und eine
-@code{.MRG}-Tabellenlistendatei. Die @code{.MRG} enth�lt lediglich eine
-Liste der Index-Dateien (@code{.MYI}-Dateien), die wie eine benutzt werden
-sollen. Alle benutzten Tabellen m�ssen in derselben Datenbank wie die
-@code{MERGE}-Tabelle selbst sein.
-
-Momentan ben�tigen Sie @code{SELECT}-, @code{UPDATE}- und
-@code{DELETE}-Berechtigungen f�r die Tabellen, die Sie auf eine
-@code{MERGE}-Tabelle mappen.
-
-@code{MERGE}-Tabellen k�nnen bei der L�sung folgender Probleme helfen:
-
-@itemize @bullet
-@item
-Auf einfache Weise einen Satz von Log-Tabellen verwalten. Beispielsweise
-k�nnen Sie Daten aus unterschiedlichen Monaten in separaten Dateien
-speichern, einige davon mit @code{myisampack} komprimieren und dann eine
-@code{MERGE}-Tabelle erzeugen, um sie wie eine zu benutzen.
-@item
-Mehr Geschwindigkeit. Sie k�nnen eine gro�e Nur-Lese-Tabelle nach
-bestimmten Kriterien aufspalten und die verschiedenen Tabellenteile auf
-unterschiedlichen Festplatten speichern. Eine @code{MERGE}-Tabelle darauf
-k�nnte viel schneller sein als die gro�e Tabelle zu benutzen. (Nat�rlich
-k�nnen Sie auch ein RAID benutzen, um dieselben Vorteile zu erzielen.)
-@item
-Effizientere Suchen durchf�hren. Wenn Sie genau wissen, wonach Sie suchen,
-k�nnen Sie mit einigen Anfragen in lediglich einer der aufgespaltenen
-Tabellen suchen und die @strong{MERGE}-Tabelle f�r andere benutzen. Es
-k�nnen sogar viele unterschiedliche @code{MERGE}-Tabellen aktiv sein,
-m�glicherweise mit Dateien, die sich �berlappen.
-@item
-Effizientere Reparaturen durchf�hren. Es ist leichter, die individuellen
-Dateien zu reparieren, die auf eine @code{MERGE}-Datei gemappt sind, als
-eine wirklich gro�e Datei zu reparieren.
-@item
-Sofortiges Mappen vieler Dateien als einer. Eine @code{MERGE}-Tabelle
-benutzt den Index der individuellen Tabellen. Sie muss selbst keinen
-eigenen Index warten. Dadurch k�nnen Sie @code{MERGE}-Tabellensammlungen
-SEHR schnell erzeugen oder neu mappen. Beachten Sie, dass Sie die
-Schl�sseldefinitionen angeben, wenn Sie eine @code{MERGE}-Tabelle erzeugen!
-@item
-Wenn Sie einen Satz von Tabellen bei Bedarf oder im Stapel zu einer gro�en
-Tabelle vereinigen, sollten Sie statt dessen bei Bedarf eine
-@code{MERGE}-Tabelle darauf erzeugen. Das ist viel schneller und spart eine
-Menge Speicherplatz.
-@item
-Umgehen der Dateigr��engrenze des Betriebssystems.
-@item
-Sie k�nnen ein Alias / Synonym f�r eine Tabelle erzeugen, indem Sie sie
-einfach ein MERGE �ber eine Tabelle benutzen. Das sollte keine sp�rbaren
-Performance-Auswirkungen haben (nur eine Reihe indirekter Aufrufen und
-memcpy's bei jedem Lesen).
-@end itemize
-
-Die Nachteile von @code{MERGE}-Tabellen sind:
-
-@itemize @bullet
-@item
-Sie k�nnen nur identische @code{MyISAM}-Tabellen f�r eine
-@code{MERGE}-Tabelle benutzen.
-@item
-@code{AUTO_INCREMENT}-Spalten werden bei @code{INSERT} nicht automatisch
-aktualisiert.
-@item
-@code{REPLACE} funktioniert nicht.
-@item
-@code{MERGE}-Tabellen benutzen mehr Datei-Deskriptoren. Wenn Sie eine
-@strong{MERGE} benutzen, die �ber 10 Tabellen mappt, und 10 Benutzer diese
-benutzen, ben�tigen Sie 10 * 10 + 10 Datei-Deskriptoren (10 Daten-Dateien
-f�r 10 Benutzer und 10 gemeinsam genutzte Index-Dateien).
-@item
-Lesevorg�nge von Schl�sseln sind langsamer. Wenn Sie eine Leseoperation auf
-einen Schl�ssel durchf�hren, muss der @code{MERGE}-Handler ein Lesen auf
-alle zugrunde liegenden Tabellen ausf�hren, um zu pr�fen, welche am
-n�chsten zum angegebenen Schl�ssel passt. Wenn Sie ein 'Lese n�chsten'
-ausf�hren, muss der @code{MERGE}-Handler die Lese-Puffer durchsuchen, um
-den n�chsten Schl�ssel zu finden. Erst wenn ein Schl�sselpuffer
-aufgebraucht ist, muss der Handler den n�chsten Schl�sselblock lesen. Das
-macht @code{MERGE}-Schl�ssel bei @code{eq_ref}-Suchen viel langsamer, aber
-nicht viel langsamer bei @code{ref}-Suchen.
-@xref{EXPLAIN}.
-@item
-Sie k�nnen kein @code{DROP TABLE}, @code{ALTER TABLE} oder @code{DELETE
-FROM tabelle} ohne eine @code{WHERE}-Klausel auf jeder Tabelle, die von
-einer @code{MERGE}-Tabelle gemappt ist, ausf�hren, wenn diese 'offen' ist.
-Wenn Sie das tun, k�nnte die @code{MERGE}-Tabelle immer noch auf die
-Originaltabelle verweisen, und Sie w�rden unerwartete Ergebnisse erhalten.
-@end itemize
-
-Wenn Sie eine @code{MERGE}-Tabelle erzeugen, m�ssen Sie mit
-@code{UNION(liste-von-tabellen)} angeben, welche Tabellen Sie wie eine
-benutzen wollen. Optional k�nnen Sie mit @code{INSERT_METHOD} angeben, ob
-Sie wollen, dass Einf�gungen in die @code{MERGE}-Tabelle in der ersten oder
-der letzten Tabelle in der @code{UNION}-Liste geschehen sollen. Wenn Sie
-keine @code{INSERT_METHOD} oder @code{NO} angeben, geben alle
-@code{INSERT}-Befehle auf die @code{MERGE}-Tabelle einen Fehler zur�ck.
-
-Folgendes Beispiel zeigt, wie Sie @code{MERGE}-Tabellen benutzen:
-
-@example
-CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, nachricht CHAR(20));
-CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY, nachricht CHAR(20));
-INSERT INTO t1 (nachricht) VALUES ("test"),("tabelle"),("t1");
-INSERT INTO t2 (nachricht) VALUES ("test"),("tabelle"),("t2");
-CREATE TABLE gesamt (a INT NOT NULL, nachricht CHAR(20), KEY(a)) TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
-@end example
-
-Beachten Sie, dass wir keinen @code{UNIQUE}- oder @code{PRIMARY
-KEY}-Schl�ssel in der @code{gesamt}-Tabelle angegeben haben, weil der
-Schl�ssel in der @code{gesamt}-Tabelle nicht eindeutig sein wird.
-
-Beachten Sie auch, dass Sie die @code{.MRG}-Datei direkt von ausserhalb des
-MySQL-Servers manipulieren k�nnen:
-
-@example
-shell> cd /mysql-data-verzeichnis/aktuelle-datenbank
-shell> ls -1 t1.MYI t2.MYI > gesamt.MRG
-shell> mysqladmin flush-tables
-@end example
-
-Jetzt k�nnen Sie Dinge wie folgendes tun:
-
-@example
-mysql> select * from gesamt;
-+---+-----------+
-| a | nachricht |
-+---+-----------+
-| 1 | test |
-| 2 | table |
-| 3 | t1 |
-| 1 | test |
-| 2 | table |
-| 3 | t2 |
-+---+-----------+
-@end example
-
-Um eine @code{MERGE}-Tabelle neu zu mappen, k�nnen Sie folgendes tun:
-
-@itemize @bullet
-@item
-Die Tabelle l�schen (@code{DROP}) und neu erzeugen.
-@item
-@code{ALTER TABLE tabelle UNION(...)} benutzen.
-@item
-Die @code{.MRG}-Datei �ndern und ein @code{FLUSH TABLE} auf die
-@code{MERGE}-Tabelle und alle zugrunde liegenden Tabellen ausf�hren, um den
-Handler zu zwingen, die neue Definitionsdatei einzulesen.
-@end itemize
-
-
-@menu
-* MERGE table problems::
-@end menu
-
-@node MERGE table problems, , MERGE, MERGE
-@c German node MERGE-Tabellenprobleme
-@subsection MERGE-Tabellenprobleme.
-
-Folgende Probleme sind bei @code{MERGE}-Tabellen bekannt:
-
-@itemize @bullet
-@item
-@code{DELETE FROM merge_tabelle} ohne @code{WHERE} l�scht nur das Mapping
-f�r die Tabelle, nicht alles in den gemappten Tabellen.
-@item
-@code{RENAME TABLE} auf eine Tabelle, die in einer aktiven
-@code{MERGE}-Tabelle benutzt wird, kann die Tabelle besch�digen. Das wird
-in MySQL 4.0.x behoben.
-@item
-Beim Erzeugen einer Tabelle des Typs @code{MERGE} wird nicht gepr�ft, ob
-die zugrunde liegenden Tabellen kompatible Typen sind. Wenn Sie
-@code{MERGE}-Tabellen in dieser Weise benutzen, ist es sehr wahrscheinlich,
-dass merkw�rdige Probleme auftauchen.
-@item
-Wenn Sie @code{ALTER TABLE} benutzen, um als erstes eine
-@code{UNIQUE}-Index zu einer Tabelle hinzuzuf�gen, die in einer
-@code{MERGE}-Tabelle benutzt wird, und dann @code{ALTER TABLE} benutzen, um
-einen normalen Index auf die @code{MERGE}-Tabelle hinzuzuf�gen, wird die
-Schl�ssel-Reihenfolge f�r die Tabellen anders sein, wenn es einen alten,
-nicht eindeutigen Schl�ssel in der Tabelle gab. Das liegt daran, dass
-@code{ALTER TABLE} @code{UNIQUE}-Schl�ssel vor normale Schl�ssel einf�gt,
-um in der Lage zu sein, doppelte Schl�sseleintr�ge so fr�h wie m�glich zu
-erkennen.
-@item
-Der Bereichsoptimierer kann @code{MERGE}-Tabellen noch nicht effizient
-benutzen und kann manchmal nicht optimale Joins produzieren. Das wird in
-MySQL 4.0.x behoben.
-@item
-@code{DROP TABLE} auf eine Tabelle, die in einer @code{MERGE}-Tabelle
-benutzt wird, funktioniert unter Windows nicht, weil der
-@code{MERGE}-Handler das Tabellen-Mapping versteckt vor der oberen Ebene
-von MySQL durchf�hrt. Weil Windows es nicht zul��t, dass Dateien gel�scht
-werden, die offen sind, m�ssen Sie zuerst alle @code{MERGE}-Tabellen auf
-Platte zur�ckschreiben (mit @code{FLUSH TABLES}) oder die
-@code{MERGE}-Tabelle l�schen, bevor Sie die Tabelle l�schen. Das wird zu
-dem Zeitpunkt behoben, wenn Sichten (@code{VIEW}s) eingef�hrt werden.
-@end itemize
-
-@node ISAM, HEAP, MERGE, Table types
-@c German node ISAM
-@section ISAM-Tabellen
-
-@cindex tables, ISAM
-
-Sie k�nnen auch den veralteten @code{ISAM}-Tabellentyp benutzen. Dieser
-wird recht bald verschwinden (wahrscheinlich in MySQL 4.1), weil
-@code{MyISAM} eine bessere Implementation derselbe Sache ist. @code{ISAM}
-benutzt einen @code{B-tree}-Index. Der Index wird in einer Datei mit der
-Endung @code{.ISM} gespeichert, und die Daten in einer Datei mit der Endung
-@code{.ISD}. Sie k�nnen @code{ISAM}-Tabellen mit dem
-@code{isamchk}-Dienstprogramm pr�fen / reparieren. @xref{Disaster Prevention}.
-
-@code{ISAM} hat folgende Features / Eigenschaften:
-
-@itemize @bullet
-@item Komprimierte und Festl�ngen-Schl�ssel
-@item Feste und dynamische Datensatzl�ngen
-@item 16 Schl�ssel mit 16 Schl�sselteilen pro Schl�ssel
-@item Maximale Schl�ssell�nge 256 (Vorgabe)
-@item Daten werden im Maschinenformat gespeichert. Das ist schnell, aber
-Maschinen- / Betriebssystem-abh�ngig.
-@end itemize
-
-Die meisten Dinge, die f�r @code{MyISAM}-Tabellen gelten, gelten auch f�r
-@code{ISAM}-Tabellen. @xref{MyISAM}. Die gr��ten Unterschiede im Vergleich
-zu @code{MyISAM} sind:
-
-@itemize @bullet
-@item @code{ISAM}-Tabellen sind nicht bin�rportabel zwischen verschiedenen
-Betriebssystemen / Plattformen.
-@item Handhabt keine Tabellen > 4 GB.
-@item Unterst�tzt nur Pr�fix-Komprimierung von Zeichenketten.
-@item Kleinere Schl�ssel-Beschr�nkungen.
-@item Dynamische Tabelle werden schneller fragmentiert.
-@item Tabellen werden mit @code{pack_isam} statt mit @code{myisampack}
-komprimiert.
-@end itemize
-
-Wenn Sie eine @code{ISAM}-Tabelle in eine @code{MyISAM}-Tabelle umwandeln
-wollen, k�nnen Sie Dienstprogramme wie @code{mysqlcheck} oder ein
-@code{ALTER TABLE}-Statement benutzen:
-
-@example
-mysql> ALTER TABLE tabelle TYPE = MYISAM;
-@end example
-
-Die eingebetteten (embedded) MySQL-Versionen unterst�tzen keine
-@code{ISAM}-Tabellen.
-
-@node HEAP, InnoDB, ISAM, Table types
-@c German node HEAP
-@section HEAP-Tabellen
-
-@cindex Tabellen, @code{HEAP}
-
-@code{HEAP}-Tabellen benutzen eine gehashten Index und werden im
-Arbeitsspeicher gespeichert. Das macht sie sehr schnell, aber wenn MySQL
-abst�rzt, verlieren Sie alle darin gespeicherten Daten. @code{HEAP} ist
-sehr n�tzlich f�r tempor�re Tabellen.
-
-Die MySQL-internen @code{HEAP}-Tabellen benutzen 100% dynamisches Hashen
-ohne Overflow-Bereiche. Es wird kein zus�tzlicher Platz f�r freie Listen
-ben�tigt. @code{HEAP}-Tabellen haben auch keine Probleme mit L�schen plus
-Einf�gen, was normalerweise bei gehashten Tabellen h�ufig vorkommt:
-
-@example
-mysql> CREATE TABLE test TYPE=HEAP SELECT ip,SUM(downloads) as down
- FROM log_tabelle GROUP BY ip;
-mysql> SELECT COUNT(ip),AVG(down) FROM test;
-mysql> DROP TABLE test;
-@end example
-
-Einige Dinge sollten Sie bei der Benutzung von @code{HEAP}-Tabellen in
-Betracht ziehen:
-
-@itemize @bullet
-@item
-Sie sollten immer @code{MAX_ROWS} im @code{CREATE}-Statement angeben, um
-sicherzustellen, dass Sie nicht versehentlich den gesamten Arbeitsspeicher
-benutzen.
-@item
-Indexe werden nur bei @code{=} und @code{<=>} benutzt (sind aber SEHR
-schnell).
-@item
-@code{HEAP}-Tabellen k�nnen nur ganze Schl�ssel benutzen, um nach einer
-Zeile zu suchen. Vergleichen Sie das mit @code{MyISAM}-Tabellen, bei denen
-jedes Pr�fix des Schl�ssels f�r das Suchen von Zeilen benutzt werden kann.
-@item
-@code{HEAP}-Tabellen benutzen ein festes Datensatzl�ngenformat.
-@item
-@code{HEAP} unterst�tzt keine @code{BLOB}/@code{TEXT}-Spalten.
-@item
-@code{HEAP} unterst�tzt keine @code{AUTO_INCREMENT}-Spalten.
-@item
-@code{HEAP} unterst�tzt keinen Index auf eine @code{NULL}-Spalte.
-@item
-Es darf keine nicht eindeutigen Schl�ssel auf eine @code{HEAP}-Tabelle
-geben (das ist ungebr�uchlich f�r gehashte Tabellen).
-@item
-@code{HEAP}-Tabellen werden von allen Clients gemeinsam benutzt (so wie
-jede andere Tabelle).
-@item
-Sie k�nnen nicht nach dem n�chsten Eintrag in der Reihenfolge suchen (also
-den Index benutzen, um ein @code{ORDER BY} zu machen).
-@item
-Die Daten f�r @code{HEAP}-Tabellen werden in kleinen Bl�cken zugewiesen.
-Die Tabellen sind 100% dynamisch (beim Einf�gen). Es werden keine
-Overflow-Bereiche und kein zus�tzlicher Platz f�r Schl�ssel ben�tigt.
-Gel�schte Zeilen werden in eine verkn�pfte Liste geschrieben und wieder
-benutzt, wenn Sie neue Daten in die Tabelle einf�gen.
-@item
-Sie brauchen genug zus�tzlichen Arbeitsspeicher f�r alle
-@code{HEAP}-Tabellen, die Sie zugleich benutzen wollen.
-@item
-Um Speicher freizugeben, f�hren Sie @code{DELETE FROM heap_tabelle},
-@code{TRUNCATE heap_tabelle} oder @code{DROP TABLE heap_tabelle} aus.
-@item
-MySQL kann nicht herausfinden, wie viele Zeilen es zwischen zwei Werten
-ungef�hr gibt (das wird vom Bereichsoptimierer ben�tigt, um zu entscheiden,
-welcher Index benutzt wird). Das kann einige Anfragen betreffen, wenn Sie
-eine @code{MyISAM}-Tabelle in eine @code{HEAP}-Tabelle umwandeln.
-@item
-Um sicherzustellen, dass Sie nicht versehentlich etwas Unkluges tun, k�nnen
-Sie keine @code{HEAP}-Tabellen gr��er als @code{max_heap_table_size}
-erzeugen.
-@end itemize
-
-Der f�r eine Zeile in einer @code{HEAP}-Tabelle ben�tigte Speicher ist:
-
-@example
-SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*) * 2)
-+ ALIGN(length_of_row+1, sizeof(char*))
-@end example
-
-@code{sizeof(char*)} ist 4 auf 32-Bit-Maschinen und 8 auf 64-Bit-Maschinen.
-
-
-@node InnoDB, BDB, HEAP, Table types
-@c German node InnoDB
-@section InnoDB-Tabellen
-
-
-
-@menu
-* InnoDB overview::
-* InnoDB start::
-* InnoDB init::
-* Using InnoDB tables::
-* Adding and removing::
-* Backing up::
-* Moving::
-* InnoDB transaction model::
-* Implementation::
-* Table and index::
-* File space management::
-* Error handling::
-* InnoDB restrictions::
-* InnoDB contact information::
-@end menu
-
-@node InnoDB overview, InnoDB start, InnoDB, InnoDB
-@c German node �berblick �ber InnoDB
-@subsection �berblick �ber InnoDB-Tabellen
-
-@cindex Transaktionen, Unterst�tzung
-@cindex transaktionssichere Tabellen
-@cindex ACID
-
-InnoDB stellt MySQL einen transaktionssicheren (@code{ACID}-kompatiblen)
-Tabellen-Handler mit F�higkeiten f�r Commit, Rollback und Reparatur nach
-Absturz zur Verf�gung. InnoDB beherrscht Sperren auf Zeilenebene sowie ein
-konsistentes, nicht sperrendes Lesen in der Art von Oracle bei
-@code{SELECT}s. Diese Features steigern die Handhabung gleichzeitiger
-Verbindungen und die Performance. Es gibt bei InnoDB keine Notwendigkeit
-f�r Sperr-Eskalation, weil die Sperren auf Zeilenebene bei InnoDB in sehr
-wenig Speicherplatz passen. InnoDB-Tabellen unterst�tzen als erster
-Tabellentyp in MySQL @code{FOREIGN KEY}-Beschr�nkungen.
-
-InnoDB wurde f�r maximale Performance bei der Bearbeitung gro�er
-Datenmengen entworfen. Seine Prozessor-Effizienz wird wahrscheinlich von
-keiner anderen Festplatten-basierenden relationalen Datenbank-Engine
-erreicht.
-
-Technisch gesehen ist InnoDB ein komplettes Datenbank-Backend, das unter
-MySQL platziert ist. InnoDB hat seinen eigenen Puffer-Pool, um Daten und
-Indexe im Hauptspeicher zu cachen. InnoDB speichert seine Tabellen und
-Indexe in einem Tabellenplatz (Tablespace), der aus mehreren Dateien
-bestehen kann. Das unterscheidet sich beispielsweise von MyISAM-Tabellen,
-bei denen jede Tabelle als separate Datei gespeichert ist. InnoDB-Tabellen
-k�nnen jede beliebige Gr��e annehmen, sogar auf Betriebssystemen, deren
-Dateigr��e auf 2 GB beschr�nkt ist.
-
-Die neuesten Informationen �ber InnoDB finden Sie unter
-@uref{http://www.innodb.com/}. Die aktuellste Version des InnoDB-Handbuchs
-ist immer dort zu finden, und Sie k�nnen auch kommerzielle Lizenzen und
-kommerziellen Support f�r InnoDB bestellen.
-
-InnoDB wird momentan (Oktober 2001) f�r die Produktion auf mehreren gro�en
-Datenbank-Sites benutzt, die hohe Performance ben�tigen. Die bekannte
-Internet-Newssite Slashdot.org l�uft auf InnoDB. Mytrix Inc. speichert �ber
-1 TB an Daten in InnoDB, und eine andere Site handhabt eine
-durchschnittliche Last von 800 Einf�ge- und Update-Operationen pro Sekunde
-mit InnoDB.
-
-InnoDB-Tabellen sind in der MySQL-Quelldistribution ab Version 3.23.34a
-enthalten und in der MySQL-Max-Bin�rversion aktiviert. F�r Windows sind die
-Max-Bin�rdateien in der Standarddistribution enthalten.
-
-Wenn Sie eine Bin�rversion von MySQL herunter geladen haben, die
-Unterst�tzung f�r InnoDB enth�lt, folgen Sie einfach den Anweisungen im
-Handbuch f�r die Installation einer Bin�rversion von MySQL. Wenn Sie
-bereits MySQL-3.23 installiert haben, k�nnen Sie MySQL-Max am einfachsten
-installieren, indem Sie die ausf�hrbare Datei f�r den Server
-(@file{mysqld}) durch die entsprechende ausf�hrbare Datei in der
-Max-Distribution ersetzen. MySQL and MySQL-Max unterscheiden sich nur in
-Bezug auf die ausf�hrbare Datei f�r den Server. @xref{MySQL binaries}. @xref{mysqld-max, , @code{mysqld-max}}.
-
-@c German FIX changed @xref to @ref
-Um MySQL mit InnoDB-Unterst�tzung zu kompilieren, laden Sie MySQL-3.23.34a
-oder neuer von @uref{http://www.mysql.com/} herunter und konfigurieren Sie
-MySQL mit der @code{--with-innodb}-Option. Sehen Sie im Handbuch unter
-@ref{Installing source} nach.
-
-@example
-cd /pfad/zur/quelldistribution/von/mysql-3.23.37
-./configure --with-innodb
-@end example
-
-Um InnoDB zu benutzen, m�ssen Sie InnoDB init in Ihrer @file{my.cnf}- oder
-@file{my.ini}-Datei angeben. In dieser Datei m�ssen Sie mindestens
-folgenden Zeile im @code{[mysqld]}-Abschnitt hinzuf�gen:
-
-@example
-innodb_data_file_path=ibdata:30M
-@end example
-
-@c German FIX changed @xref to @ref
-F�r eine gute Performance ist es jedoch am besten, Optionen wie die unten
-im Abschnitt @ref{InnoDB start} empfohlenen anzugeben.
-
-InnoDB wird unter der GNU-GPL-Lizenz Version 2 (vom Juni 1991) vertrieben.
-In den Quelldistributionen von MySQL erscheint InnoDB als Unterverzeichnis.
-
-
-@node InnoDB start, InnoDB init, InnoDB overview, InnoDB
-@c German node Mit InnoDB anfangen
-@subsection Mit InnoDB anfangen - Optionen
-
-Um InnoDB-Tabellen in MySQL-Max-3.23 zu benutzen, @strong{M�SSEN} Sie
-Konfigurationsparameter im @code{[mysqld]}-Abschnitt der
-MySQL-Konfigurationsdatei @file{my.cnf} angeben. @xref{Option files}.
-
-Der einzige erforderliche Parameter, um InnoDB in MySQL-Max-3.23 benutzen
-zu k�nnen, ist @code{innodb_data_file_path}.
-In MySQL-4.0 m�ssen Sie nicht einmal @code{innodb_data_file_path} angeben.
-Vorgabem��ig wird eine 64 MB gro�e Daten-Datei @file{ibdata1} im
-@code{datadir} von MySQL erzeugt.
-
-Um jedoch eine gute Performance zu erzielen, M�SSEN Sie explizit die unten
-in Beispielen aufgef�hrten InnoDB-Parameter setzen.
-
-Der Vorgabewert f�r @code{innodb_data_home_dir} ist das @code{datadir} von
-MySQL. Wenn Sie @code{innodb_data_home_dir} nicht angeben, k�nnen Sie in
-@code{innodb_data_file_path} keine absoluten Pfade benutzen.
-
-Nehmen wir an, Sie haben eine Windows-NT-Maschine mit 128 MB RAM und einer
-einzelnen 10 GB gro�en Festplatte. Unten steht ein Beispiel von m�glichen
-Konfigurationsparametern in @file{my.cnf} f�r InnoDB:
-
-@example
-[mysqld]
-# Hier k�nnen Ihre sonstigen MySQL-Serveroptionen stehen
-# ...
-#
-innodb_data_home_dir = c:\ibdata
-# Die Daten-Dateien m�ssen in der Lage sein,
-# Ihre Daten und Indexe aufzunehmen
-innodb_data_file_path = ibdata1:2000M;ibdata2:2000M
-# Puffer-Poolgr��e auf 50% bis 80%
-# des Arbeitsspeichers Ihres Computers setzen
-set-variable = innodb_buffer_pool_size=70M
-set-variable = innodb_additional_mem_pool_size=10M
-innodb_log_group_home_dir = c:\iblogs
-# .._log_arch_dir muss dasselbe sein wie
-# .._log_group_home_dir
-innodb_log_arch_dir = c:\iblogs
-innodb_log_archive=0
-set-variable = innodb_log_files_in_group=3
-# Die Log-Dateigr��e auf ungef�hr 15%
-# der Puffer-Poolgr��e setzen
-set-variable = innodb_log_file_size=10M
-set-variable = innodb_log_buffer_size=8M
-# ..flush_log_at_trx_commit auf 0 setzen,
-# wenn Sie es sich leisten k�nnen,
-# ein paar der letzten Transaktionen zu verlieren
-innodb_flush_log_at_trx_commit=1
-set-variable = innodb_file_io_threads=4
-set-variable = innodb_lock_wait_timeout=50
-@end example
-
-Beachten Sie, dass die Daten-Dateien bei einigen Betriebssystemen kleiner
-als 2 GB sein m�ssen! Die Gesamtgr��e von Daten-Dateien muss gr��er oder
-gleich 10 MB sein. Die Gesamtgr��e der Log-Dateien MUSS auf
-32-Bit-Computern kleiner als 4 GB sein.
-
-@strong{InnoDB legt keine Verzeichnisse an. Diese m�ssen Sie selbst
-erzeugen!}
-Stellen Sie auch sicher, dass der MySQL-Server Rechte hat, Dateien in den
-Verzeichnissen anzulegen, die Sie angeben.
-
-Wenn Sie zum ersten Mal eine InnoDB-Datenbank erzeugen, sollten Sie den
-MySQL-Server am besten von der Kommandozeilen-Eingabeaufforderung starten.
-InnoDB gibt dann Informationen �ber die Datenbank-Erzeugung auf dem
-Bildschirm aus und Sie sehen, was passiert. Unten in Abschnitt 3 sehen Sie,
-wie die Ausgaben aussehen sollten.
-Unter Windows k�nnen Sie @file{mysqld-max.exe} so starten:
-@example
-ihr-pfad-zu-mysqld>mysqld-max --standalone --console
-@end example
-
-Nehmen wir an, Sie haben einen Linux-Computer mit 512 MB RAM und drei
-Festplatten mit jeweils 20 GB (in Verzeichnispfaden @file{/}, @file{/dr2}
-and @file{/dr3}). Unten ist ein Beispiel m�glicher Konfigurationsparameter
-in @file{my.cnf} f�r InnoDB:
-
-@example
-[mysqld]
-# Hier k�nnen Ihre sonstigen MySQL-Serveroptionen stehen
-# ...
-#
-innodb_data_home_dir = /
-# Die Daten-Dateien m�ssen in der Lage sein,
-# Ihre Daten und Indexe aufzunehmen
-innodb_data_file_path = ibdata/ibdata1:2000M;dr2/ibdata/ibdata2:2000M
-# Puffer-Poolgr��e auf 50% bis 80%
-# des Arbeitsspeichers Ihres Computers setzen
-set-variable = innodb_buffer_pool_size=350M
-set-variable = innodb_additional_mem_pool_size=20M
-innodb_log_group_home_dir = /dr3/iblogs
-# .._log_arch_dir muss dasselbe sein wie
-# .._log_group_home_dir
-innodb_log_arch_dir = /dr3/iblogs
-innodb_log_archive=0
-set-variable = innodb_log_files_in_group=3
-# Die Log-Dateigr��e auf ungef�hr 15%
-# der Puffer-Poolgr��e setzen
-set-variable = innodb_log_file_size=50M
-set-variable = innodb_log_buffer_size=8M
-# ..flush_log_at_trx_commit auf 0 setzen,
-# wenn Sie es sich leisten k�nnen,
-# ein paar der letzten Transaktionen zu verlieren
-innodb_flush_log_at_trx_commit=1
-set-variable = innodb_file_io_threads=4
-set-variable = innodb_lock_wait_timeout=50
-#innodb_flush_method=fdatasync
-#innodb_fast_shutdown=1
-#set-variable = innodb_thread_concurrency=5
-@end example
-
-Beachten Sie, dass die beiden Daten-Dateien auf unterschiedliche Platten
-platziert wurden. Der Grund f�r den Namen @code{innodb_data_file_path}
-ist, dass Sie auch Pfade zu Ihren Daten-Dateien angeben k�nnen und dass
-@code{innodb_data_home_dir} nur textlich mit Ihren Daten-Datei-Pfaden
-verkettet wird, wobei ein m�glicher Schr�gstrich oder Backslash dazwischen
-hinzugef�gt wird. InnoDB f�llt den Tabellenplatz (Tablespace), der durch
-die Daten-Dateien gebildet wird, von unten nach oben. In manchen F�llen
-verbessert es die Performance der Datenbank, wenn nicht alle Daten auf
-derselben physikalischen Festplatte platziert sind. Es verbessert h�ufig
-die Performance, Log-Dateien auf anderen Platten als die Daten zu
-platzieren.
-
-Die Bedeutung der Konfigurationsparameter ist wie folgt:
-
-@multitable @columnfractions .30 .70
-@item @strong{Option} @tab @strong{Beschreibung}
-@item @code{innodb_data_home_dir} @tab
-Der allgemeine Teil des Verzeichnispfads f�r alle InnoDB-Daten-Dateien. Die
-Vorgabe f�r diesen Parameter ist das @code{datadir} von MySQL.
-@item @code{innodb_data_file_path} @tab
-Pfade zu individuellen Daten-Dateien und ihre Gr��en. Der volle
-Verzeichnispfad zu jeder Daten-Datei wird durch Verkettung von
-innodb_data_home_dir mit den hier angegebenen Pfaden hergestellt. Die
-Dateigr��en werden in Megabytes angegeben, daher das 'M' nach der obigen
-Angabe. InnoDB versteht auch die Abk�rzung 'G', 1G bedeutet 1024M. Ab
-3.23.44 k�nnen Sie die Dateigr��e auf mehr als 4 GB setzen, wenn das
-Betriebssystem gro�e Dateien unterst�tzt. Auf einige Betriebssystemen
-m�ssen Dateien kleiner als 2 GB sein. Die Summe der Dateigr��en muss
-mindestens 10 MB betragen.
-@item @code{innodb_mirrored_log_groups} @tab
-Anzahl identischer Kopien von Log-Gruppen, die f�r die Datenbank gehalten
-werden. Momentan sollte dieser Parameter auf 1 gesetzt werden.
-@item @code{innodb_log_group_home_dir} @tab
-Verzeichnispfad zu den InnoDB-Log-Dateien.
-@item @code{innodb_log_files_in_group} @tab
-Anzahl von Log-Dateien in der Log-Gruppe. InnoDB schreibt in zirkul�rer
-Weise in die Dateien. Hier wird ein Wert 3 empfohlen.
-@item @code{innodb_log_file_size} @tab
-Gr��e jeder Log-Datei in einer Log-Gruppe in Megabytes. Sinnvolle Werte
-reichen von 1 MB bis 1/n-tel der Gr��e des Puffer-Pools, die unten
-angegeben wird, wobei n die Anzahl der Log-Dateien in der Gruppe ist. Je
-gr��er der Wert, desto weniger Checkpoint-Flush-Aktivit�t wird im Puffer
-ben�tigt, was Festplatten-Ein- und -Ausgaben erspart. Gr��ere Log-Dateien
-bedeutet jedoch auch, dass die Wiederherstellung im Fall eines Absturzes
-langsamer ist. Die Gesamtgr��e aller Log-Dateien muss auf 32-Bit-Computern
-kleiner als 4 GB sein.
-@item @code{innodb_log_buffer_size} @tab
-Die Gr��e des Puffers, den InnoDB benutzt, um in die Log-Dateien auf
-Platte zu schreiben. Sinnvolle Werte liegen im Bereich von 1 MB bis zur
-H�lfte der Gesamtgr��e der Log-Dateien. Ein gro�er Log-Puffer erlaubt,
-dass gro�e Transaktionen laufen k�nnen, ohne dass die Notwendigkeit
-besteht, das Log auf Platte zu schreiben, bis die Transaktion abgeschickt
-(commit) wird. Wenn Sie daher gro�e Transaktionen haben, sparen Sie
-Festplatten-Ein- und Ausgaben, wenn Sie den Log-Puffer Gro� machen.
-@item @code{innodb_flush_log_at_trx_commit} @tab
-Normalerweise wird dieser Parameter auf 1 gesetzt, was bedeutet, dass beim
-Abschicken (commit) einer Transaktion das Log auf Platte geschrieben wird
-(flush) und die durch die Transaktion gemachten �nderungen permanent werden
-und einen Datenbankabsturz �berleben. Wenn Sie willens sind, in Bezug auf
-diese Sicherheit Kompromisse einzugeben und eher kleine Transaktionen
-laufen lassen, k�nnen Sie diesen Wert auf 0 setzen, um Festplatten-Ein- und
--Ausgaben in Bezug auf die Log-Dateien zu verringern.
-@item @code{innodb_log_arch_dir} @tab
-Das Verzeichnis, in dem komplett geschriebene Log-Dateien archiviert
-werden, wenn Archivierung benutzt wird. Der Wert dieses Parameters sollte
-momentan derselbe sein wie @code{innodb_log_group_home_dir}.
-@item @code{innodb_log_archive} @tab
-Dieser Wert sollte momentan auf 0 gesetzt werden. Weil MySQL die
-Wiederherstellung aus einer Datensicherung unter Benutzung seiner eigenen
-Log-Dateien durchf�hrt, gibt es momentan keine Notwendigkeit,
-InnoDB-Log-Dateien zu archivieren.
-@item @code{innodb_buffer_pool_size} @tab
-Die Gr��e des Speicherpuffers, den InnoDB benutzt, um Daten und Indexe
-seiner Tabellen zu cachen. Je gr��er Sie diesen Wert setzen, desto weniger
-Festplatten-Ein- und -Ausgaben werden f�r den Zugriff auf Daten in Tabellen
-ben�tigt. Auf einem dedizierten Datenbank-Server k�nnen Sie diesen
-Parameter auf bis zu 80% des physikalischen Arbeitsspeichers der Maschine
-setzen. Setzen Sie ihn allerdings nicht zu hoch, weil bei manchen
-Betriebssystemen der Wettbewerb um Arbeitsspeicher zu Paging f�hrt.
-@item @code{innodb_additional_mem_pool_size} @tab
-Die Gr��e des Speicher-Pools, den InnoDB f�r die Speicherung von
-Daten-W�rterbuchinformationen und anderen internen Datenstrukturen benutzt.
-Ein sinnvoller Wert hierf�r k�nnte 2 MB sein. Je mehr Tabellen Sie jedoch
-in Ihrer Applikation haben, desto mehr m�ssen Sie hier zuweisen. Wenn
-InnoDB in diesem Pool keinen Speicherplatz mehr hat, l��t es sich
-Speicherplatz vom Betriebssystem zuweisen und schreibt Warnmeldungen in die
-MySQL-Fehler-Log-Datei.
-@item @code{innodb_file_io_threads} @tab
-Die Anzahl der Datei-Ein- und -Ausgabe-Threads in InnoDB. Normalerweise
-sollte dieser Wert 4 sein, aber Windows-Festplatten k�nnten von einer
-h�heren Zahl profitieren.
-@item @code{innodb_lock_wait_timeout} @tab
-Timeout in Sekunden. Solange wartet eine InnoDB-Transaktion auf eine
-Sperre, bevor sie abgebrochen (Rollback) wird. InnoDB erkennt automatisch
-Transaktionsblockierungen in seiner eigenen Sperr-Tabelle und bricht die
-Transaktion ab (Rollback). Wenn Sie den @code{LOCK TABLES}-Befehl oder
-andere transaktionssichere Tabellen-Handler als InnoDB in derselben
-Transaktion benutzen, kann eine Blockierung auftreten, die InnoDB nicht
-erkennen kann. In solchen F�llen ist ein Timeout n�tzlich, um die Situation
-zu bereinigen.
-@item @code{innodb_flush_method} @tab
-(Verf�gbar ab Version 3.23.40.)
-Der Vorgabewert hierf�r ist @code{fdatasync}.
-Ein andere Option ist @code{O_DSYNC}.
-@end multitable
-
-
-@node InnoDB init, Using InnoDB tables, InnoDB start, InnoDB
-@c German node InnoDB initialisieren
-@subsection InnoDB-Tabellenplatz (Tablespace) erzeugen
-
-Angenommen, Sie haben MySQL installiert und @file{my.cnf} so editiert, dass
-sie die notwendigen InnoDB Konfigurationsparameter enth�lt. Bevor Sie MySQL
-starten, sollten Sie �berpr�fen, dass die f�r InnoDB-Daten- und Log-Dateien
-angegebenen Verzeichnisse existieren und dass Sie auf diese Zugriffsrechte
-haben. InnoDB kann keine Verzeichnisse anlegen, nur Dateien. �berpr�fen Sie
-auch, ob Sie auf der Festplatte genug Platz f�r Daten- und Log-Dateien
-haben.
-
-Wenn Sie jetzt MySQL starten, f�ngt InnoDB an, Ihre Daten- und Log-Dateien
-zu erzeugen. InnoDB gibt dabei etwas wie das folgende aus:
-
-@example
-~/mysqlm/sql > mysqld
-InnoDB: The first specified data file /home/stefan/data/ibdata1 did not exist:
-InnoDB: a new database to be created!
-InnoDB: Setting file /home/stefan/data/ibdata1 size to 134217728
-InnoDB: Database physically writes the file full: wait...
-InnoDB: Data file /home/stefan/data/ibdata2 did not exist: new to be created
-InnoDB: Setting file /home/stefan/data/ibdata2 size to 262144000
-InnoDB: Database physically writes the file full: wait...
-InnoDB: Log file /home/stefan/data/logs/ib_logfile0 did not exist: new to be created
-InnoDB: Setting log file /home/stefan/data/logs/ib_logfile0 size to 5242880
-InnoDB: Log file /home/stefan/data/logs/ib_logfile1 did not exist: new to be created
-InnoDB: Setting log file /home/stefan/data/logs/ib_logfile1 size to 5242880
-InnoDB: Log file /home/stefan/data/logs/ib_logfile2 did not exist: new to be created
-InnoDB: Setting log file /home/stefan/data/logs/ib_logfile2 size to 5242880
-InnoDB: Started
-mysqld: ready for connections
-@end example
-
-Jetzt wurde eine neue InnoDB-Datenbank erzeugt. Sie k�nnen sich mit den
-�blichen MySQL-Client-Programmen wie @code{mysql} mit dem MySQL-Server
-verbinden. Wenn Sie den MySQL-Server mit @file{mysqladmin shutdown}
-herunter fahren, gibt InnoDB etwa wie das folgende aus:
-
-@example
-010321 18:33:34 mysqld: Normal shutdown
-010321 18:33:34 mysqld: Shutdown Complete
-InnoDB: Starting shutdown...
-InnoDB: Shutdown completed
-@end example
-
-Wenn Sie jetzt einen Blick auf die Daten-Dateien und Log-Verzeichnisse
-werfen, sehen Sie die erzeugten Dateien. Das Log-Verzeichnis enth�lt auch
-eine kleine Datei namens @file{ib_arch_log_0000000000}. Diese Datei
-resultiert aus der Datenbank-Erzeugung, nach der InnoDB die
-Log-Archivierung ausgeschaltet hat. Wenn MySQL noch einmal gestartet wird,
-sieht die Ausgabe etwa wie folgt aus:
-
-@example
-~/mysqlm/sql > mysqld
-InnoDB: Started
-mysqld: ready for connections
-@end example
-
-
-
-@menu
-* Error creating InnoDB::
-@end menu
-
-@node Error creating InnoDB, , InnoDB init, InnoDB init
-@c German node Fehler bei der Erzeugung von InnoDB
-@subsubsection Falls etwas bei der Datenbank-Erzeugung schiefgeht
-
-Falls etwas bei der Datenbank-Erzeugung schiefgeht, sollten Sie alle durch
-InnoDB erzeugten Dateien l�schen. Das hei�t alle Daten-Dateien, alle
-Log-Dateien, die kleine archivierte Log-Datei und - falls Sie bereits
-InnoDB-Tabellen erzeugt haben, auch die entsprechenden @file{.frm}-Dateien
-f�r diese Tabellen in den MySQL-Datenbankverzeichnissen. Danach k�nnen Sie
-die InnoDB-Datenbankerzeugung erneut versuchen.
-
-
-@node Using InnoDB tables, Adding and removing, InnoDB init, InnoDB
-@c German node InnoDB-Tabellen benutzen
-@subsection InnoDB-Tabellen erzeugen
-
-Angenommen, Sie haben den MySQL-Client mit dem Befehl @code{mysql test}
-gestartet. Um eine Tabelle im InnoDB-Format zu erzeugen, m�ssen Sie im
-SQL-Befehl zur Tabellenerzeugung @code{TYPE = InnoDB} angeben:
-
-@example
-CREATE TABLE kunde (A INT, B CHAR (20), INDEX (A)) TYPE = InnoDB;
-@end example
-
-Dieser SQL-Befehl erzeugt eine Tabelle und einen Index auf die Spalte
-@code{A} im InnoDB-Tabellenplatz (Tablespace), der aus den Daten-Dateien
-besteht, die Sie in @file{my.cnf} angegeben haben. MySQL erzeugt zus�tzlich
-eine Datei @file{kunde.frm} im MySQL-Datenbankverzeichnis @file{test}.
-Intern f�gt InnoDB seinem eigenen Datenw�rterbuch einen Eintrag f�r die
-Tabelle @code{'test/kunde'} hinzu. Wenn Sie daher eine Tabelle namens
-@code{kunde} in einer anderen Datenbank von MySQL erzeugen, kollidieren die
-Tabellennamen innerhalb InnoDB nicht.
-
-Sie k�nnen den freien Speicherplatz im InnoDB-Tabellenplatz (Tablespace)
-mit dem Tabellen-Status-Befehl von MySQL f�r jede Tabelle, die Sie mit
-@code{TYPE = InnoDB} erzeugt haben, abfragen. Die Menge freien Platzes im
-Tabellenplatz (Tablespace) erscheint im Kommentar-Abschnitt der Tabelle in
-der Ausgabe von @code{SHOW}. Beispiel:
-
-@example
-SHOW TABLE STATUS FROM test LIKE 'kunde'
-@end example
-
-Beachten Sie, dass die Statistiken, die @code{SHOW} �ber InnoDB-Tabellen
-ausgibt, nur N�herungswerte sind: Sie werden f�r die SQL-Optimierung
-benutzt. Die f�r Tabelle und Indexe reservierten Gr��en in Bytes sind
-allerdings genau.
-
-@subsubsection MyISAM-Tabellen in InnoDB-Tabellen umwandeln
-
-InnoDB hat keine spezielle Optimierung f�r separate Index-Erzeugung. Daher
-lohnt es sich nicht, die Tabelle zu exportieren und importieren und die
-Indexe danach zu erzeugen. Die schnellste Art, eine Tabelle in InnoDB zu
-�ndern, ist, die Einf�gungen direkt in eine InnoDB-Tabelle vorzunehmen,
-das hei�t, @code{ALTER TABLE ... TYPE=INNODB} zu benutzen oder eine leere
-InnoDB-Tabelle mit identischen Definitionen zu nehmen und die Zeilen mit
-@code{INSERT INTO ... SELECT * FROM ...} einzuf�gen.
-
-Um eine bessere Kontrolle �ber den Einf�geprozess zu erhalten, kann es
-besser sein, gro�e Tabellen in Teilst�cken einzuf�gen:
-
-@example
-INSERT INTO neue_tabelle SELECT * FROM alte_tabelle WHERE schluessel > etwas
- AND schluessel <= etwas_anderes;
-@end example
-
-Nachdem alle Daten eingef�gt wurden, k�nnen Sie die Tabellen umbenennen.
-
-W�hrend der Umwandlung gro�er Tabellen sollten Sie den InnoDB-Puffer-Pool
-hoch setzen, um Festplatten-Ein- und -Ausgaben zu verringern, allerdings
-nicht h�her als 80% des physikalischen Arbeitsspeichers. Sie sollten die
-InnoDB-Log-Dateien Gro� machen und auch den Log-Puffer.
-
-Stellen Sie sicher, dass Sie genug Tabellenplatz (Tablespace) haben!
-InnoDB-Tabellen ben�tigen viel mehr Platz als MyISAM-Tabellen. Wenn ein
-@code{ALTER TABLE} nicht mehr genug Platz hat, wird ein Rollback gestartet,
-das Stunden dauern kann, wenn es auf der Festplatte stattfindet. Bei
-Einf�geoperationen verwendet InnoDB den Einf�gepuffer, um sekund�re
-Index-Datens�tze mit Indexen in Stapeln zu vermischen. Das spart eine Menge
-an Festplatten-Ein- und -Ausgaben. Beim Rollback wird kein solcher
-Mechanismus benutzt, weshalb das Rollback bis zu 30 mal l�nger als das
-Einf�gen dauern kann.
-
-Falls Sie keine wertvollen Daten in Ihren InnoDB-Dateien haben, ist es im
-Fall eines 'festgefahrenen' Rollback besser, den Datenbank-Prozess zu
-killen und alle InnoDB-Daten- und Log-Dateien sowie alle InnoDB-Tabellen
-(@file{.frm}-Dateien) zu l�schen und noch einmal anzufangen, statt darauf
-zu warten, dass Millionen von Festplatten-Ein- und -Ausgaben beendet
-werden.
-
-@subsubsection Fremdschl�ssel-(Foreign Key)-Beschr�nkungen
-
-InnoDB-Version 3.23.44 hat Fremdschl�ssel-(Foreign Key)-Beschr�nkungen.
-InnoDB ist der erste MySQL-Tabellentyp, der die Definition von
-Fremdschl�ssel-Beschr�nkungen zul��t, um die Integrit�t Ihrer Daten zu
-�berwachen.
-
-Die Syntax einer Fremdschl�sseldefinition in InnoDB:
-@example
-FOREIGN KEY (index_spalten_name, ...) REFERENCES tabellen_name (index_spalten_name, ...)
-@end example
-
-Beispiel:
-
-@example
-CREATE TABLE eltern(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
-CREATE TABLE kind(id INT, eltern_id INT, INDEX par_ind (eltern_id),
- FOREIGN KEY (eltern_id) REFERENCES eltern(id)) TYPE=INNODB;
-@end example
-
-Beide Tabellen m�ssen vom Typ InnoDB sein und es muss einen Index geben,
-bei dem der Fremdschl�ssel und der referenzierte Schl�ssel als erste
-Spalten aufgef�hrt sind. Jegliches @code{ALTER TABLE} entfernt momentan
-alle Fremdschl�sselbeschr�nkungen, die f�r die Tabelle definiert wurden,
-aber nicht die Beschr�nkungen, die die Tabelle referenzieren.
-Korrespondierende Spalten im Fremdschl�ssel und dem referenzierten
-Schl�ssel m�ssen �hnliche interne Datentypen innerhalb InnoDB sein, so dass
-sie ohne Typumwandlung verglichen werden k�nnen. Die L�ngen von
-Zeichenkettentypen m�ssen nicht dieselben sein. Die Gr��e und Vorzeichen /
-kein Vorzeichen von Ganzzahltypen m�ssen dieselben sein.
-
-Beim Pr�fen von Fremdschl�sseln setzt InnoDB gemeinsame Sperren auf
-Zeilenebene auf kind- und eltern-Datens�tze, die es betrachten muss. InnoDB
-pr�ft Fremdschl�ssel-(Foreign Key)-Beschr�nkungen sofort: Die Pr�fung wird
-nicht bis zu einem Transaktions-Commit verschoben.
-
-InnoDB l��t zu, dass jegliche Tabelle gel�scht wird, selbst wenn das die
-Fremdschl�ssel-(Foreign Key)-Beschr�nkungen durchbrechen w�rde, die die
-Tabelle referenzieren. Wenn Sie eine Tabelle l�schen, werden die
-Beschr�nkungen, die in ihrem CREATE-Statement definiert wurden, ebenfalls
-gel�scht.
-
-Wenn Sie eine gel�schte Tabelle neu erzeugen, muss sie eine Definition
-haben, die mit den Fremdschl�ssel-(Foreign Key)-Beschr�nkungen konform ist,
-die sie referenzieren. Sie muss die richten Spaltennamen und -typen haben,
-und sie muss - wie oben angegeben - Indexe auf die referenzierten Schl�ssel
-haben.
-
-Sie k�nnen die Fremdschl�ssel-(Foreign Key)-Beschr�nkungen f�r eine Tabelle
-wie folgt auflisten:
-@code{T} with
-@example
-SHOW TABLE STATUS FROM ihr_datenbank_name LIKE 'T';
-@end example
-Die Fremdschl�ssel-(Foreign Key)-Beschr�nkungen werden im
-Tabellen-Kommentar der Ausgabe aufgelistet.
-
-InnoDB unterst�tzt noch kein @code{CASCADE ON DELETE} oder andere spezielle
-Optionen f�r diese Beschr�nkungen.
-
-@node Adding and removing, Backing up, Using InnoDB tables, InnoDB
-@c German node Hinzuf�gen und entfernen
-@subsection Hinzuf�gen und Entfernen von InnoDB-Daten- und -Log-Dateien
-
-Sie k�nnen die Gr��e einer InnoDB-Daten-Datei nicht vergr��ern. Um Ihrem
-Tabellenplatz (Tablespace) mehr hinzuzuf�gen, m�ssen Sie eine neue
-Daten-Datei hinzuf�gen. Um das zu tun, m�ssen Sie Ihre MySQL-Datenbank
-herunter fahren, die @file{my.cnf}-Datei editieren und eine neue Datei zu
-@code{innodb_data_file_path} hinzuf�gen. Dann starten Sie MySQL erneut.
-
-Momentan k�nnen Sie keine Daten-Datei aus InnoDB entfernen. Um die Gr��e
-Ihrer Datenbank zu verringern, m�ssen Sie @file{mysqldump} benutzen, um
-alle Ihre Tabellen zu dumpen, eine neue Datenbank erzeugen und Ihre
-Tabellen in die neue Datenbank importieren.
-
-Wenn Sie die Anzahl oder die Gr��e Ihrer InnoDB-Log-Dateien �ndern wollen,
-m�ssen Sie MySQL herunter fahren und sicher stellen, dass er ohne Fehler
-herunter fuhr. Dann kopieren Sie die alten Log-Dateien an eine sichere
-Stelle, falls etwas beim Herunterfahren schiefging und Sie die Datenbank
-wiederherstellen m�ssen. L�schen Sie die alten Log-Dateien aus dem
-Log-Datei-Verzeichnis, editieren Sie @file{my.cnf} und starten Sie MySQL
-noch einmal. InnoDB meldet beim Starten, dass es neue Log-Dateien anlegt.
-
-
-@node Backing up, Moving, Adding and removing, InnoDB
-@c German node Datensicherung InnoDB
-@subsection Datensicherung und Wiederherstellung einer InnoDB-Datenbank
-
-Der Schl�ssel zur sicheren Datenbankverwaltung sind regelm��ige
-Datensicherungen. Im eine 'bin�re' Sicherung Ihrer Datenbank zu machen, tun
-Sie folgendes:
-
-@itemize @bullet
-@item
-Fahren Sie Ihre MySQL-Datenbank herunter und stellen Sie sicher, dass dabei
-keine Fehler auftraten.
-@item
-Kopieren Sie Ihre Daten-Dateien an eine sichere Stelle.
-@item
-Kopieren Sie alle InnoDB-Log-Dateien an eine sichere Stelle.
-@item
-Kopieren Sie Ihre @file{my.cnf} Konfigurationsdatei(en) an eine sichere
-Stelle.
-@item
-Kopieren Sie alle @file{.frm}-Dateien f�r Ihre InnoDB-Tabellen an eine
-sichere Stelle.
-@end itemize
-
-Momentan gibt es kein Online- oder inkrementelles Datensicherungsprogramm
-f�r InnoDB, obwohl diese auf der TODO-Liste sind.
-
-Zus�tzlich zu den beschriebenen Bin�r-Datensicherungen sollten Sie
-ausserdem regelm��ig Dumps Ihrer Tabellen mit @file{mysqldump} machen. Der
-Grund ist, dass eine Bin�rdatei besch�digt sein kann, ohne dass Sie das
-bemerken. Gedumpte Tabellen werden in Textdateien gespeichert, die
-Menschen-lesbar und viel einfacher als bin�re Datenbankdateien sind. Aus
-gedumpten Dateien l��t sich Tabellenbesch�digung leichter erkennen und da
-ihr Format einfacher ist, ist das Risiko ernsthafter Datenbesch�digung in
-ihnen geringer.
-
-Es ist eine gute Idee, Dumps zur gleichen Zeit zu machen wie die bin�re
-Datensicherung Ihrer Datenbank. Sie m�ssen alle Clients aus Ihrer Datenbank
-ausschlie�en, um konsistente Schnappsch�sse aller Ihrer Tabellen im Dump
-zu bekommen. Danach k�nnen Sie die bin�re Datensicherung machen, so dass
-Sie einen konsistenten Schnappschuss Ihrer Datenbank in zwei Formaten
-haben.
-
-Um in der Lage zu sein, Ihre InnoDB-Datenbank aus den beschriebenen bin�ren
-Datensicherungen wiederherzustellen, m�ssen Sie Ihre MySQL-Datenbank mit
-allgemeinem Loggen und angeschalteter Log-Archivierung von MySQL laufen
-lassen. Mit allgemeinem Loggen ist hier der Log-Mechanismus des
-MySQL-Servers gemeint, der unabh�ngig von den InnoDB-Logs ist.
-
-Zum Wiederherstellen nach einem Absturz des MySQL-Serverprozesses ist es
-lediglich n�tig, diesen erneut zu starten. InnoDB pr�ft automatisch die
-Log-Dateien und f�hrt ein Roll-Forward der Datenbank bis zum aktuellen
-Stand durch. InnoDB macht ein automatisches Rollback nicht abgeschlossener
-(committed) Transaktionen, die zur Zeit des Absturzes anh�ngig waren.
-W�hrend der Wiederherstellung gibt InnoDB etwa folgendes aus:
-
-@example
-~/mysqlm/sql > mysqld
-InnoDB: Database was not shut down normally.
-InnoDB: Starting recovery from log files...
-InnoDB: Starting log scan based on checkpoint at
-InnoDB: log sequence number 0 13674004
-InnoDB: Doing recovery: scanned up to log sequence number 0 13739520
-InnoDB: Doing recovery: scanned up to log sequence number 0 13805056
-InnoDB: Doing recovery: scanned up to log sequence number 0 13870592
-InnoDB: Doing recovery: scanned up to log sequence number 0 13936128
-...
-InnoDB: Doing recovery: scanned up to log sequence number 0 20555264
-InnoDB: Doing recovery: scanned up to log sequence number 0 20620800
-InnoDB: Doing recovery: scanned up to log sequence number 0 20664692
-InnoDB: 1 uncommitted transaction(s) which must be rolled back
-InnoDB: Starting rollback of uncommitted transactions
-InnoDB: Rolling back trx no 16745
-InnoDB: Rolling back of trx no 16745 completed
-InnoDB: Rollback of uncommitted transactions completed
-InnoDB: Starting an apply batch of log records to the database...
-InnoDB: Apply batch completed
-InnoDB: Started
-mysqld: ready for connections
-@end example
-
-Wenn Ihre Datenbank besch�digt wird oder Ihre Festplatte Fehler hat, m�ssen
-Sie eine Wiederherstellung aus einer Datensicherung durchf�hren. Im Falle
-der Besch�digung sollten Sie zun�chst eine Datensicherung finden, die nicht
-besch�digt ist. Machen Sie aus der Datensicherung eine Wiederherstellung
-aus den allgemeinen Log-Dateien von MySQL unter Beachtung der Anleitungen
-im MySQL-Handbuch.
-
-
-
-@menu
-* InnoDB checkpoints::
-@end menu
-
-@node InnoDB checkpoints, , Backing up, Backing up
-@c German node InnoDB-Checkpoints
-@subsubsection Checkpoints
-
-InnoDB hat einen Checkpoint-Mechanismus implementiert, der sich Fuzzy
-Checkpoint nennt. InnoDB schreibt ver�nderten Datenbankseiten aus dem
-Puffer-Pool in kleinen Stapeln (Batch) auf Platte (flush), daher besteht
-keine Notwendigkeit, den Puffer-Pool in einem einzelnen Stapel
-zur�ckzuschreiben, was in der Praxis dazu f�hren w�rde, dass SQL-Statements
-von Benutzern f�r eine Weile angehalten w�rden.
-
-Bei der Reparatur nach Abst�rzen sucht InnoDB nach einem Checkpoint-Label in
-den Log-Dateien. Es wei�, dass alle �nderungen an der Datenbank vor dem
-Label bereits im Platten-Image der Datenbank enthalten sind. InnoDB scannt
-anschlie�end die Log-Dateien ab dem Checkpoint vorw�rts und wendet die
-geloggten �nderungen auf die Datenbank an.
-
-InnoDB schreibt in zirkul�rer Art in die Log-Dateien. Alle abgeschickten
-(committed) �nderungen, die dazu f�hren, dass sich die Datenbankseiten im
-Puffer-Pool vom Image auf der Platte unterscheiden, m�ssen in den
-Log-Dateien verf�gbar sein, f�r den Fall, dass InnoDB eine
-Wiederherstellung durchf�hren muss. Das hei�t, wenn InnoDB anf�ngt, eine
-Log-Datei auf zirkul�re Weise wieder zu benutzen, muss es sicherstellen,
-dass die Datenbankseiten-Images auf der Festplatte bereits die �nderungen
-enthalten, die in der Log-Datei mitgeschrieben sind, die InnoDB benutzen
-wird. Mit anderen Worten muss InnoDB einen Checkpoint machen, was oft das
-Zur�ckschreiben auf Platte (flush) ge�nderter Datenbankseiten beinhaltet.
-
-Das erkl�rt, warum es Festplatten-Ein- und -Ausgaben sparen kann, wenn man
-die Log-Dateien sehr Gro� macht. Es kann sinnvoll sein, die Gesamtgr��e
-der Log-Dateien so Gro� wie den Puffer-Pool oder sogar noch gr��er zu
-machen. Der Nachteil gro�er Log-Dateien ist, dass eine Reparatur nach
-Absturz l�nger dauern kann, weil mehr Log-Eintr�ge auf die Datenbank
-angewendet werden m�ssen.
-
-
-@node Moving, InnoDB transaction model, Backing up, InnoDB
-@c German node Verschieben
-@subsection Eine InnoDB-Datenbank auf eine andere Maschine verschieben
-
-InnoDB-Daten- und Log-Dateien sind auf allen Plattformen bin�rkompatibel,
-wenn das Flie�kommazahlenformat auf den Maschinen dasselbe ist. Sie k�nnen
-eine InnoDB-Datenbank einfach verschieben, indem Sie alle relevanten
-Dateien kopieren, die im vorherigen Abschnitt �ber Datensicherung erw�hnt
-wurden. Wenn sich das Flie�kommaformat auf den Maschinen unterscheidet,
-sie aber keine @code{FLOAT}- oder @code{DOUBLE}-Datentypen in Ihren
-Tabellen benutzt haben, ist die Prozedur dieselbe: Kopieren Sie einfach die
-relevanten Dateien. Wenn die Formate unterschiedlich sind und Ihre Tabellen
-Flie�komma-Daten enthalten, m�ssen Sie @file{mysqldump} und
-@file{mysqlimport} benutzen, um diese Tabellen zu verschieben.
-
-Ein Tipp zur Performance: Schalten Sie Auto-Commit aus, wenn Sie Daten in
-Ihre Datenbank importieren (unter der Annahme, dass Ihr Tabellenplatz
-(Tablespace) genug Platz f�r das gro�e Rollback-Segment enth�lt, den die
-gro�e Import-Transaktion erzeugen wird). Machen Sie das Commit erst nach
-dem Import einer ganzen Tabelle oder eines Segments einer Tabelle.
-
-
-@node InnoDB transaction model, Implementation, Moving, InnoDB
-@c German node InnoDB-Transaktionsmodell
-@subsection InnoDB-Transaktionsmodell
-
-Im InnoDB-Transaktionsmodell war das Ziel, die besten Eigenschaften einer
-multiversionsf�higen Datenbank mit dem traditionellen Zwei-Phasen-Sperren
-zu verbinden. InnoDB f�hrt Sperren auf Zeilenebene durch und l��t Anfragen
-vorgabem��ig als nicht sperrende konsistente Leseoperationen laufen, im
-Stil von Oracle. Das Tabellensperren ist in InnoDB so platzsparend
-gespeichert, dass keine Sperr-Eskalation ben�tigt wird: Typischerweise
-d�rfen mehrere Benutzer jede Zeile in der Datenbank oder eine beliebige
-Teilmenge der Zeilen sperren, ohne dass InnoDB keinen Speicher mehr hat.
-
-Bei InnoDB findet jede Benutzeraktivit�t innerhalb von Transaktionen statt.
-Wenn der Auto-Commit-Modus in MySQL benutzt wird, stellt jedes
-SQL-Statement eine einzelne Transaktion dar. Wenn der Auto-Commit-Modus
-ausgeschaltet wird, kann man sich vorstellen, dass ein Benutzer stets eine
-Transaktion offen hat. Wenn er das SQL-@code{COMMIT}- oder
-@code{ROLLBACK}-Statement absetzt, beendet das die aktuelle Transaktion und
-eine neue beginnt. Beide Statements heben alle InnoDB-Sperren auf, die
-w�hrend der aktuellen Transaktion gesetzt wurden. Ein @code{COMMIT}
-bedeutet, dass die in der aktuellen Transaktion gemachten �nderungen
-permanent und sichtbar f�r andere Benutzer gemacht werden. Auf der anderen
-Seite bricht ein @code{ROLLBACK} alle �nderungen ab, die in der aktuellen
-Transaktion gemacht wurden.
-
-
-
-@menu
-* InnoDB consistent read::
-* InnoDB locking reads::
-* InnoDB Next-key locking::
-* InnoDB Locks set::
-* InnoDB Deadlock detection::
-* InnoDB Consistent read example::
-@end menu
-
-@node InnoDB consistent read, InnoDB locking reads, InnoDB transaction model, InnoDB transaction model
-@c German node Konsistentes Lesen bei InnoDB
-@subsubsection Konsistentes Lesen
-
-Konsistentes Lesen bedeutet, dass InnoDB seine Multiversionsf�higkeiten
-nutzt, um einer Anfrage einen Schnappschuss der Datenbank zu einem
-bestimmten Zeitpunkt zu zeigen. Die Anfrage sieht genau die �nderungen, die
-von Transaktionen durchgef�hrt wurden, die bis zu diesem Zeitpunkt
-abgeschlossen wurden (committed), und keine �nderungen, die sp�ter gemacht
-wurden oder die noch nicht abgeschlossen sind. Die Ausnahme von der Regel
-ist, dass die Anfrage die �nderungen sieht, die durch die Transaktion
-selbst durchgef�hrt wurde, die die Anfrage absetzt.
-
-Wenn eine Transaktion ihr erstes Konsistentes Lesen durchf�hrt, weist
-InnoDB den Schnappschuss oder Zeitpunkt zu, den jedes Konsistente Lesen
-in derselben Transaktion benutzen wird. Im Schnappschuss sind alle
-Transaktionen enthalten, die vor der Zuweisung zum Schnappschuss
-abgeschlossen (committed) wurden. Daher ist Konsistentes Lesens innerhalb
-derselben Transaktion auch untereinander konsistent. Sie k�nnen einen
-frischeren Schnappschuss f�r Ihre Anfragen erhalten, indem Sie die aktuelle
-Transaktion beenden (commit) und danach neue Anfragen absetzen.
-
-Konsistentes Lesen ist der vorgabem��ige Modus, in dem InnoDB
-@code{SELECT}-Statements abarbeitet. Konsistentes Lesen setzt keinerlei
-Sperren auf die Tabellen, auf die es zugreift. Daher k�nnen andere Benutzer
-zur selben Zeit, wie Konsistentes Lesen auf die Tabelle durchgef�hrt wird,
-diese ver�ndern.
-
-
-@node InnoDB locking reads, InnoDB Next-key locking, InnoDB consistent read, InnoDB transaction model
-@c German node Lese-Sperren bei InnoDB
-@subsubsection Lesevorg�nge sperren
-
-Unter manchen Umst�nden ist Konsistentes Lesen nicht w�nschenswert.
-Angenommen, Sie wollen eine neue Zeile in die Tabelle @code{kind} einf�gen
-und dabei sicherstellen, dass das Kind bereits Eltern in der Tabelle
-@code{eltern} hat.
-
-Wenn Sie Konsistentes Lesen benutzen, um die Tabelle @code{eltern} zu lesen
-und in der Tat die Eltern des Kindes in der Tabelle sehen, k�nnen Sie dann
-sicher die Kind-Zeile zur Tabelle @code{kind} hinzuf�gen? Nein, denn es
-kann sein, dass zwischenzeitlich jemand anderes die Eltern-Zeile aus der
-Tabelle @code{eltern} gel�scht hat und Sie das nicht sehen.
-
-Die L�sung besteht darin, das @code{SELECT} im Sperrmodus durchzuf�hren.
-@code{LOCK IN SHARE MODE}.
-
-@example
-SELECT * FROM eltern WHERE NAME = 'Hinz' LOCK IN SHARE MODE;
-@end example
-
-Wenn Sie ein Lesen im Share-Modus durchf�hren, hei�t das, dass die letzten
-verf�gbaren Daten gelesen werden und eine Shared-Modus-Sperre auf die Zeile
-gesetzt wird, die gelesen wird. Wenn die letzten Daten zu einer noch nicht
-abgeschlossenen Transaktion eines anderen Benutzers geh�ren, wird gewartet,
-bis die Transaktion abgeschlossen (committed) ist. Eine Shared-Modus-Sperre
-verhindert, dass andere die Zeile aktualisieren oder l�schen, die gerade
-gelesen wurde. Nachdem festgestellt wurde, dass die obige Anfrage die
-Eltern @code{'Hinr'} zur�ckgibt, kann das Kind sicher zur Tabelle
-@code{kind} hinzugef�gt und die Transaktion abgeschlossen werden. Dieses
-Beispiel zeigt, wie Sie in Ihren Applikations-Code referentielle Integrit�t
-integrieren k�nnen.
-
-Sehen wir uns ein weiteres Beispiel an. Wir haben ein ganzzahliges
-Z�hlerfeld in einer Tabelle @code{kind_codes}, was benutzt wird, um jedem
-Kinde, das wir der Tabelle @code{kind} hinzuf�gen, eine eindeutige Kennung
-zuzuweisen. Es ist offensichtlich, dass Konsistentes Lesen oder
-Shared-Modus-Lesen kein geeignetes Mittel ist, um den aktuellen Wert des
-Z�hlers zu ermitteln, weil n�mlich zwei Benutzer der Datenbank denselben
-Wert des Z�hlers sehen k�nnen und wir daher einen Fehler wegen doppelter
-Schl�sseleintr�ge erhalten, wenn wir zwei Kinder mit derselben Kennung in
-die Tabelle einf�gen.
-
-In diesem Fall gibt es zwei geeignete M�glichkeiten, das Lesen und
-Heraufz�hlen des Z�hlers zu implementieren:
-(1) Zuerst den Z�hler um eins erh�hen und erst danach lesen.
-(2) Zuerst den Z�hler im Sperr-Modus @code{FOR UPDATE} lesen und danach
-heraufz�hlen:
-
-@example
-SELECT COUNTER_FIELD FROM kind_codes FOR UPDATE;
-UPDATE kind_codes SET COUNTER_FIELD = COUNTER_FIELD + 1;
-@end example
-
-@code{SELECT ... FOR UPDATE} liest die letzten verf�gbaren Daten und setzt
-exklusive Sperren auf jede Zeile, die es liest. Daher setzt es dieselben
-Sperren, die ein gesuchtes SQL-@code{UPDATE} auf die Zeilen setzen w�rde.
-
-
-@node InnoDB Next-key locking, InnoDB Locks set, InnoDB locking reads, InnoDB transaction model
-@c German node N�chsten-Schl�ssel-Sperren bei InnoDB
-@subsubsection N�chsten Schl�ssel sperren: Wie das Phantom-Problem vermieden wird
-
-Beim Sperren auf Zeilenebene benutzt InnoDB einen Algorithmus, der
-N�chsten-Schl�ssel-Sperren genannt wird. InnoDB f�hrt das Sperren auf
-Zeilenebene so durch, dass es beim Suchen oder Scannen eines Indexes auf
-eine Tabelle gemeinsam genutzte (shared) oder exklusive Sperren auf die
-Index-Datens�tze setzt, die es findet. Daher werden die Sperren auf
-Zeilenebene genauer Index-Datensatz-Sperren genannt.
-
-Die Sperren, die InnoDB auf Index-Datens�tze setzt, betreffen auch die
-'L�cke' vor diesem Index-Datensatz. Wenn ein Benutzer eine gemeinsam
-benutzte (shared) oder exklusive Sperre auf den Datensatz R in einem Index
-hat, kann ein anderen Benutzer keinen Datensatz direkt vor R (in der
-Index-Reihenfolge) einf�gen. Dieses Sperren von L�cken wird durchgef�hrt,
-um das so genannte Phantom-Problem zu vermeiden. Angenommen, man will alle
-Kinder aus der Tabelle @code{kind} lesen und sperren, die eine Kennung
-gr��er 100 haben, und irgend ein Feld in der ausgew�hlten Zeile
-aktualisieren:
-
-@example
-SELECT * FROM kind WHERE ID > 100 FOR UPDATE;
-@end example
-
-Angenommen, es gibt einen Index auf der Tabelle @code{kind} auf der Spalte
-@code{ID}. Unsere Anfrage scannt diesen Index ab dem ersten Datensatz, bei
-dem @code{ID} gr��er als 100 ist. Wenn jetzt die auf den Index-Datensatz
-gesetzten Sperren nicht Einf�geoperationen sperren w�rden, die in die
-L�cken ausgef�hrt w�rden, k�nnte zwischenzeitlich ein neues Kind in die
-Tabelle eingef�gt werden. Wenn jetzt unsere Transaktion noch einmal
-folgendes ausf�hren w�rde:
-
-@example
-SELECT * FROM kind WHERE ID > 100 FOR UPDATE;
-@end example
-
-Sehen wir ein neues Kind in der Ergebnismenge, die die Anfrage zur�ckgibt.
-Das verst��t gegen das Isolationsprinzip von Transaktionen: Eine
-Transaktion sollte in der Lage sein, so abzulaufen, dass die Daten, die sie
-gelesen hat, sich nicht w�hrend der Transaktion �ndern. Wenn wir einen Satz
-von Zeilen als Daten-Posten betrachten, w�rde das neue 'Phantom'-Kind
-dieses Isolationsprinzip durchbrechen.
-
-Wenn InnoDB einen Index scannt, kann es auch die L�cke nach dem letzten
-Datensatz im Index sperren. Genau das passiert im vorherigen Beispiel: Die
-Sperren, die von InnoDB gesetzt werden, verhindert jedes Einf�gen in die
-Tabelle an Stellen, wo @code{ID} gr��er als 100 ist.
-
-Sie k�nnen N�chsten-Schl�ssel-Sperren dazu benutzen, eine
-Eindeutigkeitspr�fung in Ihre Applikation zu implementieren: Wenn Sie Ihre
-Daten im Share-Modus lesen und kein Duplikat f�r eine Zeile sehen, die Sie
-einf�gen werden, k�nnen Sie Ihre Zeile sicher einf�gen und wissen, dass das
-N�chsten-Schl�ssel-Sperren verhindern wird, dass zwischenzeitlich jemand
-eine Duplikatzeile Ihrer Zeile einf�gt. Daher gestattet Ihnen das
-N�chsten-Schl�ssel-Sperren, die Nicht-Existenz von irgend etwas in Ihrer
-Tabelle zu 'sperren'.
-
-@node InnoDB Locks set, InnoDB Deadlock detection, InnoDB Next-key locking, InnoDB transaction model
-@c German node Bei InnoDB gesetzte Sperren
-@subsubsection Sperren, die in InnoDB durch unterschiedliche SQL-Statements gesetzt werden
-
-@itemize @bullet
-@item
-@code{SELECT ... FROM ...} : Das ist Konsistentes Lesen, es wird ein
-Schnappschuss einer Datenbank gelesen und es werden keine Sperren gesetzt.
-@item
-@code{SELECT ... FROM ... LOCK IN SHARE MODE} : setzt gemeinsam genutztes
-(shared) N�chsten-Schl�ssel-Sperren auf alle Index-Datens�tze, die beim
-Lesen gefunden werden.
-@item
-@code{SELECT ... FROM ... FOR UPDATE} : setzt exklusives
-N�chsten-Schl�ssel-Sperren auf alle Index-Datens�tze, die beim Lesen
-gefunden werden.
-@item
-@code{INSERT INTO ... VALUES (...)} : setzt eine exklusive Sperre auf die
-eingef�gte Zeile. Beachten Sie, dass diese Sperre kein
-N�chsten-Schl�ssel-Sperren ist und andere Benutzer nicht davon abh�lt,
-etwas in die L�cke vor der eingef�gten Zeile einzuf�gen. Wenn ein Fehler
-wegen doppelter Schl�sseleintr�ge auftritt, setzt dieser Befehl eine
-gemeinsam genutzte (shared) Sperre auf den doppelten (Duplikat)
-Index-Datensatz.
-@item
-@code{INSERT INTO T SELECT ... FROM S WHERE ...} setzt eine exklusive
-Sperre (kein N�chsten-Schl�ssel-Sperren) auf jede Zeile, die in @code{T}
-eingef�gt wurde. Sucht nach @code{S} in Form von Konsistentem Lesen, aber
-setzt N�chsten-Schl�ssel-Sperren auf @code{S}, wenn bei MySQL das Loggen
-angeschaltet ist. InnoDB muss in letzterem Fall Sperren setzen, weil bei
-einer Roll-Forward-Wiederherstellung aus einer Datensicherung jedes
-SQL-Statement auf genau dieselbe Weise ausgef�hrt werden muss, wie es
-urspr�nglich ausgef�hrt wurde.
-@item
-@code{CREATE TABLE ... SELECT ...} f�hrt @code{SELECT} als Konsistentes
-Lesen oder mit gemeinsam genutzten (shared) Sperren aus, wie im vorherigen
-Punkt.
-@item
-@code{REPLACE} wird wie Einf�gen ausgef�hrt, wenn es keine Kollision auf
-einem eindeutigen Schl�ssel gibt. Ansonsten wird ein exklusives
-N�chsten-Schl�ssel-Sperren auf die Reihe gesetzt, die aktualisiert werden
-muss.
-@item
-@code{UPDATE ... SET ... WHERE ...} setzt ein exklusives
-N�chsten-Schl�ssel-Sperren auf jeden Datensatz, der beim Suchen gefunden
-wird.
-@item
-@code{DELETE FROM ... WHERE ...} setzt ein exklusives
-N�chsten-Schl�ssel-Sperren auf jeden Datensatz, der beim Suchen gefunden
-wird.
-@item
-Wenn auf der Tabelle eine @code{FOREIGN KEY}-Beschr�nkung definiert ist,
-setzt jedes Einf�gen, Aktualisieren oder L�schen, was die �berpr�fung der
-Beschr�nkungsbedingung erfordert, gemeinsam genutzte (shared) Sperren auf
-Datensatzebene auf die Datens�tze, die bei der �berpr�fung der Beschr�nkung
-betrachtet werden. Auch im Falle, dass die Beschr�nkung fehlschl�gt, setzt
-InnoDB diese Sperren.
-@item
-@code{LOCK TABLES ... } : setzt Tabellensperren. In der Implementation
-setzt die MySQL-Ebene des Codes diese Sperren. Die automatische
-Blockierungserkennung von InnoDB kann keine Blockierungen bemerken, bei
-denen solche Tabellensperren involviert sind, siehe n�chster Abschnitt
-weiter unten. Sehen Sie auch im Abschnitt 13 ('InnoDB-Einschr�nkungen')
-wegen folgendem nach: Weil MySQL keine Sperren auf Zeilenebene erkennt, ist
-es m�glich, dass Sie eine Sperre auf eine Tabelle erhalten, auf der ein
-anderer Benutzer momentan Sperren auf Zeilenebene hat. Das gef�hrdet
-allerdings nicht die Transaktionsintegrit�t.
-@end itemize
-
-
-@node InnoDB Deadlock detection, InnoDB Consistent read example, InnoDB Locks set, InnoDB transaction model
-@c German node Blockierungserkennung bei InnoDB
-@subsubsection Blockierungserkennung und Rollback
-
-InnoDB erkennt automatisch eine Blockierung von Transaktionen und rollt die
-Transaktion zur�ck, deren Sperranforderung diejenige war, die die
-Blockierung aufbaute, also einen Kreis im Warte-Diagramm von Transaktionen.
-InnoDB kann keine Blockierungen erkennen, bei denen eine Sperre im Spiel
-ist, die durch ein MySQL-@code{LOCK TABLES}-Statement verursacht wurde,
-oder wenn eine Sperre durch einen anderen Tabellen-Handler als InnoDB
-gesetzt wurde. Solche Situationen m�ssen Sie mit
-@code{innodb_lock_wait_timeout}, das in @file{my.cnf} gesetzt wird.
-
-Wenn InnoDB ein komplettes Rollback einer Transaktion durchf�hrt, werden
-alle Sperren der Transaktion aufgehoben. Wenn jedoch nur ein einzelnes
-SQL-Statement als Ergebnis eines Fehlers zur�ckgerollt wird, k�nnen einige
-der Sperren, die durch das SQL-Statement gesetzt wurde, verbleiben. Das
-liegt daran, dass InnoDB Zeilensperren in einem Format speichert, die ihm
-unm�glich machen, im Nachhinein zu erkennen, welche Sperre durch welches
-SQL-Statement gesetzt wurde.
-
-@node InnoDB Consistent read example, , InnoDB Deadlock detection, InnoDB transaction model
-@c German node Konsistentes Lesen bei InnoDB im Beispiel
-@subsubsection Ein Beispiel, wie konsistentes Lesen bei InnoDB funktioniert
-
-Wenn Sie ein Konsistentes Lesen ausf�hren, also ein gew�hnliches
-@code{SELECT}-Statement, gibt InnoDB Ihrer Transaktion einen Zeitpunkt
-(Timepoint), gem�� dem Ihre Anfrage die Datenbank sieht. Wenn daher
-Transaktion B eine Zeile l�scht und das wirksam wird (commit), nachdem Ihr
-Zeitpunkt zugewiesen wurde, werden Sie die Zeile nicht als gel�scht sehen.
-Gleiches gilt f�r Einf�ge- und Aktualisierungsoperationen.
-
-Sie k�nnen Ihren Zeitpunkt 'vorstellen', indem Sie Ihre Transaktion
-abschicken (commit) und dann ein weiteres @code{SELECT} ausf�hren.
-
-Das nennt sich Multiversioned Concurrency Control (multiversionierte
-Gleichzeitigkeitskontrolle):
-
-@example
- Benutzer A Benutzer B
-
- set autocommit=0; set autocommit=0;
-zeit
-| SELECT * FROM t;
-| empty set
-| INSERT INTO t VALUES (1, 2);
-|
-v SELECT * FROM t;
- empty set
- COMMIT;
-
- SELECT * FROM t;
- empty set;
-
- COMMIT;
-
- SELECT * FROM t;
- ---------------------
- | 1 | 2 |
- ---------------------
-@end example
-
-Daher sieht Benutzer A die durch B eingef�gte Zeile erst, wenn B das
-Einf�gen und A seine eigene Transaktion abgeschickt hat (commit), so dass
-der Zeitpunkt hinter das Commit von B 'vorgestellt' ist.
-
-Wenn Sie den 'frischsten' Zustand der Datenbank sehen wollen, sollten Sie
-ein sperrendes Lesen (Locking Read) benutzen:
-
-@example
-SELECT * FROM t LOCK IN SHARE MODE;
-@end example
-
-
-@subsection Tipps zur Performance-Steigerung
-
-@strong{1.}
-Wenn das Unix-@file{top} oder der Windows-@file{Task-Manager} zeigen, dass
-die CPU-Auslastung weniger als 70% betr�gt, ist Ihre Auslastung
-wahrscheinlich Platten-gebunden. Das kann daran liegen, dass Sie zu viele
-Transaktionen abschicken (commit) oder dass der Puffer-Pool zu klein ist.
-Dann kann es helfen, den Puffer-Pool zu vergr��ern. Setzen Sie ihn aber
-nicht h�her als 80% des physikalischen Arbeitsspeichers.
-
-@strong{2.}
-Packen Sie mehrere �nderungen in eine Transaktion. InnoDB muss das Log
-jedes Mal auf Platte zur�ckschreiben (flush), wenn eine Transaktion
-abgeschickt wird (commit), wenn diese Transaktion irgend welche �nderungen
-an der Datenbank vorgenommen hat. Weil die Rotationsgeschwindigkeit einer
-Platte typischerweise h�chsten 167 Umdrehungen pro Sekunde betr�gt,
-beschr�nkt das die Anzahl von Commits auf eben diese Zahl pro Sekunde, wenn
-die Festplatte nicht das Betriebssystem t�uscht.
-
-@strong{3.}
-Wenn Sie es sich leisten k�nnen, einige der zuletzt abgeschickten
-(committed) Transaktionen zu verlieren, k�nnen Sie den
-@file{my.cnf}-Parameter @code{innodb_flush_log_at_trx_commit} auf 0 setzen.
-InnoDB versucht dann trotzdem, das Log einmal pro Sekunde auf Platte
-zur�ckzuschreiben (flush), doch dieses Zur�ckschreiben ist nicht
-garantiert.
-
-@strong{4.}
-Machen Sie Ihre Log-Dateien Gro�, selbst so Gro� wie den Puffer-Pool.
-Wenn InnoDB seine Log-Dateien vollgeschrieben hat, muss es die ver�nderten
-Inhalte des Puffer-Pools in einem Checkpoint auf Platte schreiben. Kleine
-Log-Dateien verursachen daher unn�tige Festplatten-Schreibzugriffe. Der
-Nachteil gro�er Log-Dateien liegt darin, dass die Wiederherstellungszeit
-l�nger wird.
-
-@strong{5.}
-Ausserdem sollte der Log-Puffer recht Gro� sein, sagen wir 8 MB.
-
-@strong{6.} (Relevant from 3.23.39 up.)
-In einigen Versionen von Linux und Unix ist das Zur�ckschreiben von Dateien
-auf Platte (flush) mit dem Unix-@code{fdatasync} und anderen �hnlichen
-Methoden �berraschend langsam. InnoDB benutzt vorgabem��ig die
-@code{fdatasync}-Funktion. Wenn Sie mit der Datenbank-Schreib-Performance
-nicht zufrieden sind, k�nnen Sie versuchen, die @code{innodb_flush_method}
-in @file{my.cnf} auf @code{O_DSYNC} zu setzen, obwohl O_DSYNC auf den
-meisten Systemen langsamer zu sein scheint.
-
-@strong{7.} Wenn Sie Daten in InnoDB importieren, stellen Sie sicher, dass
-MySQL @code{autocommit=1} nicht angeschaltet hat, denn dann ben�tigt jedes
-Einf�gen ein Zur�ckschreiben des Logs auf Platte (flush). Setzen Sie vor
-Ihre SQL-Importdatei die Zeile
-
-@example
-set autocommit=0;
-@end example
-
-und danach
-
-@example
-commit;
-@end example
-
-Wenn Sie die @file{mysqldump}-Option @code{--opt} benutzen, erhalten Sie
-Dump-Dateien, die sich sehr schnell auch in eine InnoDB-Tabelle importieren
-lassen, selbst ohne sie in die oben erw�hnten @code{set autocommit=0; ...
-commit;}-Wrapper zu verpacken.
-
-@strong{8.}
-H�ten Sie sich vor gro�en Rollbacks beim Einf�gen von Massendaten: InnoDB
-benutzt den Einf�ge-Puffer, um beim Einf�gen Festplatten-Ein- und -Ausgaben
-zu sparen, doch beim entsprechenden Rollback wird kein solcher Mechanismus
-benutzt. Ein Festplatten-gebundenes Rollback kann die 30-fache Zeit des
-entsprechenden Einf�gevorgangs in Anspruch nehmen. Es hilft nicht, den
-Datenbankprozess zu killen, weil der Rollback erneut starten wird, wenn die
-Datenbank hochf�hrt. Die einzige M�glichkeit, ein aus dem Ruder gelaufenes
-Rollback loszuwerden, besteht darin, den Puffer-Pool zu erh�hen, so dass
-das Rollback CPU-gebunden wird und damit schnell l�uft, oder indem die
-gesamte InnoDB-Datenbank gel�scht wird.
-
-@strong{9.}
-Seien Sie auch vor anderen gro�en Festplatten-gebundenen Operationen auf
-der Hut. Benutzen Sie @code{DROP TABLE} oder @code{TRUNCATE} (ab
-MySQL-4.0), um eine Tabelle zu l�schen, nicht @code{DELETE FROM tabelle}.
-
-@strong{10.}
-Benutzen Sie das mehrzeilige @code{INSERT}, um den Kommunikations-Overhead
-zwischen Client und Server zu verringern, wenn Sie viele Zeilen einf�gen
-m�ssen:
-
-@example
-INSERT INTO tabelle VALUES (1, 2), (5, 5);
-@end example
-
-Dieser Tipp gilt nat�rlich f�r jeden Tabellentyp, nicht nur f�r InnoDB.
-
-@subsubsection Der InnoDB-Monitor
-
-Ab Version 3.23.41 beinhaltet InnoDB den InnoDB-Monitor, der Informationen
-�ber den internen Zustand von InnoDB ausgibt. Wenn er angeschaltet ist,
-veranlasst der InnoDB-Monitor den MySQL-Server @file{mysqld}, etwa alle 15
-Sekunden Daten an die Standardausgabe auszugeben (Hinweis: der MySQL-Client
-gibt nichts aus). Diese Daten sind n�tzlich, um die Performance zu tunen.
-Unter Windows m�ssen Sie @code{mysqld-max} von einer DOS-Kommandozeile aus
-mit @code{--standalone --console} starten, um die Ausgabe auf das
-DOS-Fenster umzuleiten.
-
-Es gibt einen separaten @code{innodb_lock_monitor}, der dieselben
-Informationen ausgibt wie @code{innodb_monitor}, aber zus�tzlich
-Informationen �ber Sperren, die durch jede Transaktion gesetzt werden.
-
-Die ausgegebene Information enth�lt Daten �ber:
-@itemize @bullet
-@item
-Sperren, die auf eine Transaktion warten,
-@item
-Semaphore, die auf Threads warten,
-@item
-anh�ngige Datei-Ein- und -Ausgabeanforderungen,
-@item
-Puffer-Pool-Statistiken und
-@item
-Bereinigungs- (purge) und Einf�ge-Puffer-Vermengungs- (merge) Aktivit�t des
-Haupt-Threads von InnoDB.
-@end itemize
-
-Sie k�nnen den InnoDB-Monitor mit folgendem SQL-Befehl starten:
-
-@example
-CREATE TABLE innodb_monitor(a int) type = innodb;
-@end example
-
-Und ihn mit folgendem Befehl anhalten:
-
-@example
-DROP TABLE innodb_monitor;
-@end example
-
-Die @code{CREATE TABLE}-Syntax ist nur eine M�glichkeit, einen Befehl durch
-den MySQL-SQL-Parser an die InnoDB-Engine durchzureichen. Wenn Sie die
-Datenbank herunter fahren, w�hrend der Monitor l�uft, und Sie den Monitor
-erneut starten wollen, m�ssen Sie die Tabelle l�schen, bevor Sie ein
-erneutes @code{CREATE TABLE} absetzen k�nnen, um den Monitor zu starten.
-Diese Syntax wird sich in zuk�nftigen Releases m�glicherweise �ndern.
-
-
-Beispiel f�r die Ausgabe des InnoDB-Monitors:
-
-@example
-================================
-010809 18:45:06 INNODB MONITOR OUTPUT
-================================
---------------------------
-LOCKS HELD BY transactions
---------------------------
-LOCK INFO:
-Number of locks in the record hash table 1294
-LOCKS FOR TRANSACTION ID 0 579342744
-TABLE LOCK table test/tabelle trx id 0 582333343 lock_mode IX
-
-RECORD LOCKS space id 0 page no 12758 n bits 104 table test/tabelle index
-PRIMARY trx id 0 582333343 lock_mode X
-Record lock, heap no 2 PHYSICAL RECORD: n_fields 74; 1-byte offs FALSE;
-info bits 0
- 0: len 4; hex 0001a801; asc ;; 1: len 6; hex 000022b5b39f; asc ";; 2: len 7;
-hex 000002001e03ec; asc ;; 3: len 4; hex 00000001;
-...
------------------------------------------------
-CURRENT SEMAPHORES RESERVED AND SEMAPHORE WAITS
------------------------------------------------
-SYNC INFO:
-Sorry, cannot give mutex list info in non-debug version!
-Sorry, cannot give rw-lock list info in non-debug version!
------------------------------------------------------
-SYNC ARRAY INFO: reservation count 6041054, signal count 2913432
-4a239430 waited for by thread 49627477 op. S-LOCK file NOT KNOWN line 0
-Mut ex 0 sp 5530989 r 62038708 sys 2155035; rws 0 8257574 8025336; rwx 0 1121090 1848344
------------------------------------------------------
-CURRENT PENDING FILE I/O'S
---------------------------
-Pending normal aio reads:
-Reserved slot, messages 40157658 4a4a40b8
-Reserved slot, messages 40157658 4a477e28
-...
-Reserved slot, messages 40157658 4a4424a8
-Reserved slot, messages 40157658 4a39ea38
-Total of 36 reserved aio slots
-Pending aio writes:
-Total of 0 reserved aio slots
-Pending insert buffer aio reads:
-Total of 0 reserved aio slots
-Pending log writes or reads:
-Reserved slot, messages 40158c98 40157f98
-Total of 1 reserved aio slots
-Pending synchronous reads or writes:
-Total of 0 reserved aio slots
------------
-BUFFER POOL
------------
-LRU list length 8034
-Free list length 0
-Flush list length 999
-Buffer pool size in pages 8192
-Pending reads 39
-Pending writes: LRU 0, flush list 0, single page 0
-Pages read 31383918, created 51310, written 2985115
-----------------------------
-END OF INNODB MONITOR OUTPUT
-============================
-010809 18:45:22 InnoDB starts purge
-010809 18:45:22 InnoDB purged 0 pages
-@end example
-
-Einige Anmerkungen zur Ausgabe:
-
-@itemize @bullet
-@item
-Wenn der Abschnitt @code{LOCKS HELD BY transactions} warten auf Sperren
-berichtet, kann es sein, dass Ihre Applikation Sperr-Konflikte hat. Die
-Ausgabe kann auch helfen, Gr�nde f�r Transaktions-Blockierungen
-aufzusp�ren.
-@item
-Der Abschnitt @code{SYNC INFO} berichtet reservierte Semaphore, wenn Sie
-InnoDB mit @code{UNIV_SYNC_DEBUG} kompilieren, definiert in @file{univ.i}.
-@item
-Der Abschnitt @code{SYNC ARRAY INFO} berichtet Threads, die auf ein
-Semaphor warten, und Statistiken, wie viele Male Threads ein Spin oder ein
-Warten auf einem Mutex oder einem Lese-/Schreibe-Sperr-Semaphor ben�tigten.
-Eine gro�e Anzahl auf Semaphore wartender Threads kann ein Ergebnis von
-Festplatten-Ein- und -Ausgaben oder Konfliktproblemen innerhalb von InnoDB
-sein. Konflikte k�nnen durch starke Parallelen von Anfragen oder durch
-Probleme des Betriebssystems beim Thread Scheduling hervorgerufen werden.
-@item
-Der Abschnitt @code{CURRENT PENDING FILE I/O'S} listet anh�ngige Datei-Ein-
-und -Ausgabeanforderungen auf. Eine gro�e Anzahl davon zeigt an, dass die
-Auslastung Festplatten-Ein- und -Ausgabe-gebunden ist.
-@item
-Der Abschnitt @code{BUFFER POOL} gibt statistische Informationen �ber
-gelesene und geschriebene Seiten. Aus diesen Zahlen k�nnen Sie errechnen,
-wie viele Daten-Datei-Ein- und Ausgaben Ihre Anfragen aktuell durchf�hren.
-@end itemize
-
-@node Implementation, Table and index, InnoDB transaction model, InnoDB
-@c German node Implementation
-@subsection Implementation des Multiversionings
-
-Weil InnoDB eine multiversionierte Datenbank ist, muss es Informationen
-�ber alte Versionen von Zeilen im Tabellenplatz (Tablespace) aufbewahren.
-Diese Informationen werden in einer Datenstruktur gespeichert, die wir in
-Anlehnung an eine analoge Struktur in Oracle Rollback-Segment nennen.
-
-InnoDB f�gt jeder Zeile, die in der Datenbank gespeichert wird, intern zwei
-Felder hinzu. Ein 6 Byte gro�es Feld enth�lt den
-Transaktions-Identifikator der letzten Transaktion, die die Zeile eingef�gt
-oder aktualisiert hat. Ein L�schen wir intern als eine Aktualisierung
-behandelt, wobei ein spezielles Bit in die Zeile eingef�gt wird, um sie als
-gel�scht zu markieren. Jede Zeile enth�lt ausserdem ein 7 Byte gro�es
-Feld, das Roll-Zeiger genannt wird. Der Roll-Zeiger zeigt auf einen
-R�ckg�ngig-Log-Datensatz, der in das Rollback-Segment geschrieben wird.
-Wenn die Zeile aktualisiert wurde, enth�lt der R�ckg�ngig-Log-Datensatz die
-Informationen, die notwendig sind, um den Inhalt der Zeile wieder
-herzustellen, bevor sie aktualisiert wurde.
-
-InnoDB benutzt die Informationen im Rollback-Segment, um die
-R�ckg�ngig-Operationen durchzuf�hren, die bei einem Transaktions-Rollback
-notwendig sind. Diese Informationen benutzt es auch daf�r, um fr�here
-Informationen einer Zeile beim Konsistenten Lesen aufzubauen.
-
-R�ckg�ngig-Logs im Rollback-Segment lassen sich in Logs f�r Einf�gen und
-f�r Aktualisieren unterteilen. Einf�ge-R�ckg�ngig-Logs werden nur f�r
-Transaktions-Rollbacks ben�tigt und k�nnen verworfen werden, sobald die
-Transaktion abgeschickt ist (commit). Aktualisierungs-R�ckg�ngig-Logs
-werden auch f�r Konsistentes Lesens benutzt und k�nnen daher erst verworfen
-werden, wenn keine Transaktion mehr vorhanden ist, f�r die InnoDB einen
-Schnappschuss zugewiesen hat, dessen Informationen beim Konsistenten Lesen
-ben�tigt werden k�nnten, um daraus eine fr�here Version der Datenbank-Zeile
-aufzubauen.
-
-Sie m�ssen daran denken, Ihre Transaktionen regelm��ig abzuschicken
-(commit), auch die Transaktionen, die nur Konsistentes Lesens ausf�hren.
-Ansonsten kann InnoDB Daten aus dem Aktualisierungs-R�ckg�ngig-Log nicht
-verwerfen und das Rollback-Segment k�nnte zu Gro� werden und Ihren
-Tabellenplatz (Tablespace) komplett f�llen.
-
-Die physikalische Gr��e eines R�ckg�ngig-Log-Datensatzes im
-Rollback-Segment ist typischerweise kleiner als die entsprechende
-eingef�gte oder aktualisierte Zeile. Sie k�nnen diese Informationen
-benutzen, um den Platzbedarf f�r Ihr Rollback-Segment zu berechnen.
-
-In diesem multiversionierten Schema wird eine Zeile nicht unmittelbar
-physikalisch aus der Datenbank entfernt, wenn Sie sie mit einem
-SQL-Statement l�schen. Erst wenn InnoDB den Datensatz des
-Aktualisierungs-R�ckg�ngig-Logs l�schen kann, der f�r das L�schen
-geschrieben wurde, kann es die entsprechende Zeile und ihre
-Index-Datens�tze auch physikalisch aus der Datenbank entfernen. Diese
-Entfernungsoperation wird Purge genannt und ist recht schnell, wobei sie
-�berschl�gig dieselbe Zeit ben�tigt wie das SQL-Statement, das das L�schen
-ausf�hrte.
-
-
-@node Table and index, File space management, Implementation, InnoDB
-@c German node Tabelle und Index
-@subsection Tabellen- und Index-Strukturen
-
-MySQL speichert seine Daten-W�rterbuch-Informationen �ber Tabellen in
-@file{.frm}-Dateien in den Datenbank-Verzeichnissen. Jedoch hat auch jede
-Tabelle vom Typ InnoDB ihren eigenen Eintrag, in InnoDB-internen
-Daten-W�rterb�chern innerhalb des Tabellenplatzes (Tablespace). Wenn MySQL
-eine Tabelle oder Datenbank l�scht, muss er sowohl eine oder mehrere
-@file{.frm}-Datei(en) als auch die entsprechenden Eintr�ge im
-InnoDB-Daten-W�rterbuch l�schen. Das ist der Grund, warum Sie
-InnoDB-Tabellen nicht einfach zwischen Datenbanken verschieben k�nnen,
-indem Sie die @file{.frm}-Dateien verschieben und warum @code{DROP
-DATABASE} bei InnoDB-Tabellen in MySQL-Versionen bis 3.23.43 nicht
-funktionierte.
-
-Jede InnoDB-Tabelle hat einen speziellen Index, der Cluster-Index genannt
-wird, in dem die Daten der Zeilen gespeichert sind. Wenn Sie auf Ihre
-Tabelle einen @code{PRIMARY KEY} definieren, ist der Index des
-Prim�rschl�ssels der Cluster-Index.
-
-Wenn Sie f�r Ihre Tabelle keinen Prim�rschl�ssel definieren, erzeugt InnoDB
-intern einen Cluster-Index, bei dem die Zeilen nach der Zeilen-Kennung (ID)
-geordnet sind, die InnoDB Zeilen in einer solchen Tabelle zuweist. Die
-Zeilen-Kennung ist ein 6 Byte gro�es Feld, das monoton erh�ht wird, wenn
-neue Zeilen eingef�gt werden. Daher liegen nach der Zeilen-Kennung
-geordnete Zeile physikalisch in der Einf�ge-Reihenfolge vor.
-
-Der Zugriff auf eine Zeile �ber den Cluster-Index ist schnell, weil die
-Zeilendaten auf derselben Seite sind, auf die die Index-Suche f�hrt. In
-vielen Datenbanken werden die Daten traditionell auf einer anderen Seite
-als derjenigen, wo sich der Index-Datensatz befindet, gespeichert. Wenn die
-Tabelle Gro� ist, spart die Cluster-Index-Architektur im Vergleich zur
-traditionellen L�sung auf Festplatten-Ein- und -Ausgaben.
-
-In InnoDB enthalten die Datens�tze in Nicht-Cluster-Indexen (die wir auch
-sekund�re Indexe nennen) den Prim�rschl�sselwert f�r die Zeile. InnoDB
-benutzt diesen Prim�rschl�sselwert, um vom Cluster-Index aus nach der Zeile
-zu suchen. Beachten Sie, dass die sekund�ren Indexe mehr Platz ben�tigen,
-wenn der Prim�rschl�ssel lang ist.
-
-
-
-@menu
-* InnoDB physical structure::
-* InnoDB Insert buffering::
-* InnoDB Adaptive hash::
-* InnoDB Physical record::
-@end menu
-
-@node InnoDB physical structure, InnoDB Insert buffering, Table and index, Table and index
-@c German node Physikalische Struktur von InnoDB
-@subsubsection Physikalische Struktur eines Indexes
-
-Alle Indexe in InnoDB sind B-B�ume, in denen die Index-Datens�tze in den
-Bl�tter-Seiten des Baums gespeichert sind. Die vorgabem��ige Gr��e einer
-Index-Seite ist 16 KB. Wenn neue Datens�tze eingef�gt werden, versucht
-InnoDB, 1/16 der Seite f�r zuk�nftige Einf�gungen und Aktualisierungen des
-Index-Datensatzes freizuhalten.
-
-Wenn Index-Datens�tze in sequentieller (aufsteigender oder absteigender)
-Reihenfolge eingef�gt werden, sind die resultierenden Index-Seiten ungef�hr
-zu 15/16 gef�llt. Wenn der F�llfaktor einer Index-Seite unter 1/12 f�llt,
-versucht InnoDB, den Index-Baum zusammenzuziehen, um die Seite
-freizugeben.
-
-
-@node InnoDB Insert buffering, InnoDB Adaptive hash, InnoDB physical structure, Table and index
-@c German node Einf�gepuffer von InnoDB
-@subsubsection Einf�gepufferung
-
-H�ufig wird der Prim�rschl�ssel in Datenbank-Applikationen als eindeutiger
-Identifizierer benutzt und neue Zeilen in aufsteigender Reihenfolge des
-Prim�rschl�ssels eingef�gt. Daher erfordern Einf�gungen in den
-Cluster-Index keine wahlfreien (random) Lesezugriffe auf die Platte.
-
-Sekund�re Indexe auf der anderen Seite sind �blicherweise nicht eindeutig
-und Einf�gungen in sekund�re Indexe erfolgen in einer relativ wahlfreien
-Reihenfolge. Wenn InnoDB keinen speziellen Mechanismus hierf�r benutzen
-w�rde, w�rden diese viele wahlfreie Festplatten-Ein- und -Ausgaben
-verursachen.
-
-Wenn ein Index-Datensatz in einen nicht eindeutigen sekund�ren Index
-eingef�gt werden soll, pr�ft InnoDB, ob die sekund�re Index-Seite bereits
-im Puffer-Pool ist. Wenn das der Fall ist, f�hrt InnoDB das Einf�gen direkt
-in die Index-Seite durch. Wenn die Index-Seite aber nicht im Puffer-Pool
-gefunden wird, f�gt InnoDB den Datensatz in eine spezielle
-Einf�ge-Puffer-Struktur ein. Der Einf�ge-Puffer wird so klein gehalten,
-dass er komplett in den Puffer-Pool passt, so dass Einf�gungen sehr schnell
-durchgef�hrt werden k�nnen.
-
-Der Einf�ge-Puffer wird periodisch mit den sekund�ren Index-B�umen in der
-Datenbank vermengt. Oft k�nnen mehrere Einf�geoperationen auf derselben
-Seite im Index-Baum zusammengefasst werden, so dass Festplatten-Ein- und
--Ausgaben eingespart werden. Messungen ergaben, dass der Einf�ge-Puffer
-Einf�gungen in eine Tabelle bis zu 15 mal schneller machen kann.
-
-
-@node InnoDB Adaptive hash, InnoDB Physical record, InnoDB Insert buffering, Table and index
-@c German node Anpassungsf�higer Hash in InnoDB
-@subsubsection Anpassungsf�hige Hash-Indexe
-
-Wenn eine Datenbank fast komplette in den Hauptspeicher passt, k�nnen
-Anfragen am schnellsten unter Verwendung von Hash-Indexen ausgef�hrt
-werden. InnoDB hat einen automatischen Mechanismus, der Index-Suchen
-beobachtet, die auf den Indexen durchgef�hrt werden, die f�r eine Tabelle
-definiert wurden. Wenn InnoDB bemerkt, dass Anfragen vom Aufbauen eines
-Hash-Indexes profitieren k�nnten, wird ein solcher Index automatisch
-aufgebaut.
-
-Beachten Sie aber, dass der Hash-Index immer auf der Grundlage eines
-bestehenden B-Baum-Indexes auf die Tabelle aufgebaut wird. InnoDB kann
-einen Hash-Index auf einem Pr�fix beliebiger L�nge des Schl�ssels aufbauen,
-der f�r den B-Baum definiert wurde, abh�ngig vom Suchmuster, das InnoDB auf
-dem Index-Baum beobachtet. Ein Hash-Index kann partiell sein: Es ist nicht
-erforderlich, dass der gesamte Index-Baum im Puffer-Pool
-zwischengespeichert ist. InnoDB baut Hash-Indexe bei Bedarf automatisch f�r
-die Index-Seiten auf, auf die oft zugegriffen wird.
-
-In gewisser Hinsicht kommt InnoDB durch den anpassungsf�higen
-Hash-Index-Mechanismus (wobei sich InnoDB �ppig verf�gbarem Hauptspeicher
-anpasst) der Architektur von Hauptspeicher-Datenbanken nahe.
-
-
-@node InnoDB Physical record, , InnoDB Adaptive hash, Table and index
-@c German node Physikalischer Datensatz in InnoDB
-@subsubsection Physikalische Datensatzstruktur
-
-@itemize @bullet
-@item
-Jeder Index-Datensatz in InnoDB enth�lt einen Header von 6 Bytes. Der
-Header wird benutzt, um nachfolgende Datens�tze zu verkn�pfen, sowie beim
-Sperren auf Zeilenebene.
-@item
-Datens�tze im Cluster-Index enthalten Felder f�r alle benutzerdefinierten
-Spalten. Zus�tzlich gibt es ein 6 Byte gro�es Feld f�r die
-Transaktions-Kennung und ein 7 Byte gro�es Feld f�r den Roll-Zeiger.
-@item
-Wenn der Benutzer keinen Prim�rschl�ssel f�r eine Tabelle definiert hat,
-enth�lt jeder Cluster-Index-Datensatz zus�tzlich ein 6 Byte gro�es
-Zeilenkennungsfeld.
-@item
-Jeder sekund�re Index-Datensatz enth�lt auch alle Felder, die f�r den
-Cluster-Index-Schl�ssel definiert wurden.
-@item
-Ein Datensatz enth�lt auch einen Zeiger zu jedem Feld des Datensatzes. Wenn
-die Gesamtl�nge des Feldes in einem Datensatz kleiner als 128 Bytes ist,
-ist der Zeiger 1 Byte lang, ansonsten 2 Bytes.
-@end itemize
-
-@subsubsection Wie eine Auto-Increment-Spalte in InnoDB funktioniert
-
-Wenn der Benutzer nach einem Datenbankstart zuerst einen Datensatz in eine
-Tabelle @code{T} einf�gt, in der eine Auto-Increment-Spalte definiert
-wurde, und er keinen expliziten Wert f�r die Spalte angibt, f�hrt InnoDB
-@code{SELECT MAX(auto-inc-column) FROM T} aus und weist den um 1
-hochgez�hlten Wert der Spalte und dem Auto-Increment-Z�hler der Tabelle zu.
-Wir sagen dazu, dass der Auto-Increment-Z�hler f�r Tabelle @code{T}
-initialisiert wurde.
-
-InnoDB f�hrt dieselbe Prozedur der Initialisierung des
-Auto-Increment-Z�hlers f�r eine frisch erzeugte Tabelle durch.
-
-Wenn Sie f�r die Auto-Increment-Spalte einen Wert von 0 angeben, beachten
-Sie, dass InnoDB die Zeile so behandelt, als h�tten Sie den Wert nicht
-angegeben.
-
-Wenn nach der Initialisierung des Auto-Increment-Z�hlers der Benutzer eine
-Zeile eingibt, in der er explizit den Spaltenwert angibt, und dieser
-gr��er als der aktuelle Z�hlerwert ist, wird der Z�hler auf den
-angegebenen Spaltenwert gesetzt. Wenn der Benutzer nicht explizit einen
-Wert angibt, z�hlt InnoDB den Z�hler um 1 hoch und weist der Spalte diesen
-neuen Wert zu.
-
-Der Auto-Increment-Mechanismus umgeht beim Zuweisen von Werten vom Z�hler
-Sperren und Transaktionshandhabung. Daher k�nnen L�cken in der
-Nummernfolge entstehen, wenn Sie Transaktionen zur�ckrollen (Rollback), die
-Nummern vom Z�hler erhalten haben.
-
-Das Verhalten von Auto-Increment ist f�r die F�lle undefiniert, in denen
-ein Benutzer der Spalte einen negativen Wert gibt oder wenn der Wert
-gr��er als die gr��te Ganzzahl wird, die im festgelegten Ganzzahl-Typ
-gespeichert werden kann.
-
-
-@node File space management, Error handling, Table and index, InnoDB
-@c German node Verwaltung von Datei-Speicherplatz
-@subsection Verwaltung von Datei-Speicherplatz und Festplatten-Eingaben / -Ausgaben
-
-
-
-@menu
-* InnoDB Disk I/O::
-* InnoDB File space::
-* InnoDB File Defragmenting::
-@end menu
-
-@node InnoDB Disk I/O, InnoDB File space, File space management, File space management
-@c German node Festplatten-Ein- und -Ausgaben bei InnoDB
-@subsubsection Festplatten-Ein- und -Ausgaben
-
-Bei Festplatten-Ein- und -Ausgaben benutzt InnoDB asynchrone Ein- und
-Ausgaben. Unter Windows NT benutzt es die nativen Ein- und Ausgaben, die
-vom Betriebssystem zur Verf�gung gestellt werden. Unter Unix benutzt InnoDB
-simulierte asynchrone Ein- und Ausgaben, die in InnoDB eingebaut sind:
-InnoDB erzeugt eine Reihe von Ein-/Ausgabe-Threads, die sich um Ein- und
-Ausgabeoperationen k�mmern, zum Beispiel Vorw�rts-Lesen (Read-Ahead).
-Zuk�nftig werden wir auch f�r Windows NT simulierte Ein-/Ausgaben
-unterst�tzen sowie f�r die Unix-Versionen, die so etwas besitzen, native
-Ein-/Ausgaben.
-
-Unter Windows NT benutzt InnoDB ungepufferte Ein- und Ausgaben. Das hei�t,
-dass die Festplatten-Seiten, die InnoDB liest oder schreibt, nicht im
-Datei-Cache des Betriebssystems gepuffert werden. Das spart einiges an
-Arbeitsspeicher-Bandbreite.
-
-Ab Version 3.23.41 benutzt InnoDB eine neuartige Datei-Flush-Technik, die
-Doublewrite hei�t. Sie erh�ht die Sicherheit bei Reparaturen nach Absturz,
-wenn ein Betriebssystemabsturz oder ein Stromausfall aufgetreten sind, und
-verbessert auf den meisten Unix-Versionen die Performance, indem die
-Notwendigkeit von Fsync-Operationen verringert wird.
-
-Doublewrite bedeutet, dass InnoDB zuerst in einen zusammenh�ngenden
-Tabellenplatz (Tablespace) namens Doublewrite-Puffer schreibt, bevor Seiten
-in eine Daten-Datei geschrieben werden. Erst nachdem das Schreiben und
-Zur�ckschreiben (Flush) in den Doublewrite-Puffer fertig sind, schreibt
-InnoDB die Seiten an ihre korrekten Positionen in der Daten-Datei. Wenn das
-Betriebssystem mitten in einem Seiten-Schreiben abst�rzt, findet InnoDB bei
-der Wiederherstellung eine gute Kopie der Seite im Doublewrite-Puffer.
-
-Ab Version 3.23.41 k�nnen Sie auch eine Raw-Disk-Partition als Daten-Datei
-benutzen, obwohl das bisher noch nicht getestet wurde. Wenn Sie eine neue
-Daten-Datei erzeugen, m�ssen Sie das Schl�sselwort @code{newraw}
-unmittelbar nach der Daten-Datei-Gr��e in @code{innodb_data_file_path}
-angeben. Die Partition muss gr��er oder gleich der Gr��e sein, die Sie
-angeben. Beachten Sie, dass in InnoDB 1 MB 1024 x 1024 Bytes ist, w�hrend 1
-MB in Festplatten-Spezifikationen �blicherweise 1.000.000 Bytes bedeutet.
-
-@example
-innodb_data_file_path=hdd1:5Gnewraw;hdd2:2Gnewraw
-@end example
-
-Wenn Sie die Datenbank wieder starten, @strong{m�ssen} -sue das
-Schl�sselwort in @code{raw} �ndern. Ansonsten schreibt InnoDB �ber Ihre
-Partition!
-
-@example
-innodb_data_file_path=hdd1:5Graw;hdd2:2Graw
-@end example
-
-Wenn Sie Raw-Disk benutzen, k�nnen Sie unter einigen Unixen ungepufferte
-Ein- und Ausgaben ausf�hren.
-
-Es gibt zwei Vorw�rts-Lesen-(Read-Ahead-)Heuristiken in InnoDB:
-sequentielles Vorw�rts-Lesen und wahlfreies (random) Vorw�rts-Lesen. Beim
-sequentiellen Vorw�rts-Lesen bemerkt InnoDB, dass das Zugriffsschema auf
-ein Segment im Tabellenplatz (Tablespace) sequentiell ist. InnoDB schickt
-dann vorab einen Stapel von Lesevorg�ngen von Datenbankseiten an das
-Ein-/Ausgabesystem. Beim wahlfreien Vorw�rts-Lesen bemerkt InnoDB, dass ein
-bestimmter Bereich im Tabellenplatz (Tablespace) im Zustand des vollst�ndig
-Eingelesenwerdens in den Puffer-Pool zu sein scheint. Dann schickt InnoDB
-die verbleibenden Lesevorg�nge an das Ein-/Ausgabesystem.
-
-
-@node InnoDB File space, InnoDB File Defragmenting, InnoDB Disk I/O, File space management
-@c German node Speicherplatz in InnoDB
-@subsubsection Speicherplatzverwaltung
-
-Die Daten-Dateien, die Sie in der Konfigurationsdatei definieren, formen
-den Tabellenplatz (Tablespace) von InnoDB. Die Dateien werden einfach
-verkettet, um den Tabellenplatz (Tablespace) zu formen, es wird kein
-Striping benutzt. Momentan k�nnen Sie nicht direkt angeben, wo der Platz
-f�r Ihre Tabellen zugewiesen werden soll, ausser wenn Sie folgende Tatsache
-benutzen: InnoDB weist Speicherplatz von einem neu erzeugten Tabellenplatz
-(Tablespace) vom niedrigen Ende ausgehend zu.
-
-Der Tabellenplatz (Tablespace) besteht aus Datenbankseiten, deren
-vorgabem��ige Gr��e 16 KB betr�gt. Diese Seiten werden bis zu einer
-Ausdehnung von 64 aufeinander folgenden Seiten gruppiert. Die 'Dateien'
-innerhalb eines Tabellenplatzes (Tablespace) werden in InnoDB Segmente
-genannt. Der Name des Rollback-Segments ist in gewisser Hinsicht
-irref�hrend, weil dieses tats�chlich viele Segmente im Tabellenplatz
-enth�lt.
-
-F�r jeden Index in InnoDB werden zwei Segmente zugewiesen: eins f�r die
-Nicht-Bl�tter-Knoten (Non-Leaf-Nodes) des B-Baum, das andere f�r die
-Bl�tter-Knoten. Die Idee dahinter ist, f�r die Bl�tter-Knoten, die die
-Daten enthalten, bessere Sequentialit�t zu erzielen.
-
-Wenn ein Segment innerhalb des Tabellenplatzes anw�chst, weist ihm InnoDB
-die ersten 32 Seiten individuell zu. Danach f�ngt InnoDB an, dem Segment
-ganze Ausdehnungen zuzuweisen. InnoDB kann einem gro�en Segment bis zu
-vier Ausdehnungen auf einmal hinzuf�gen, um gute Sequentialit�t f�r die
-Daten sicherzustellen.
-
-Einige Seiten im Tabellenplatz enthalten Bitmaps anderer Seiten. Daher
-k�nnen einige Ausdehnungen in einem InnoDB-Tabellenplatz (Tablespace) nicht
-Segmenten als Ganzes zugewiesen werden, sondern nur als individuelle
-Seiten.
-
-Wenn Sie eine Anfrage @code{SHOW TABLE STATUS FROM ... LIKE ...} ausf�hren,
-um den verf�gbaren freien Platz im Tabellenplatz festzustellen, berichtet
-InnoDB den Platz, der in v�llig freien Ausdehnungen im Tabellenplatz sicher
-benutzt werden kann. InnoDB reserviert immer einige Ausdehnungen f�r
-S�uberungs- und interne Zwecke. Diese Ausdehnungen werden nicht in den
-freien Platz einbezogen.
-
-Wenn Sie Daten aus einer Tabelle l�schen, zieht InnoDB die entsprechenden
-B-Baum-Indexe zusammen. Es h�ngt vom Schema der L�schvorg�nge ab, ob das
-individuelle Seiten oder Ausdehnungen im Tabellenplatz freigibt, so dass
-der freigegebene Platz anderen Benutzern zur Verf�gung steht. Wenn eine
-Tabelle gel�scht wird oder alle Zeilen aus ihr gel�scht werden, gibt das
-garantiert Platz frei f�r andere Benutzer, aber denken Sie daran, dass
-gel�schte Zeile physikalisch nur durch eine Purge-Operation entfernt werden
-k�nnen, nachdem Sie nicht mehr f�r ein Transaktions-Rollback oder f�r
-Konsistentes Lesen ben�tigt werden.
-
-
-@node InnoDB File Defragmenting, , InnoDB File space, File space management
-@c German node Datei-Defragmentierung in InnoDB
-@subsubsection Eine Tabelle defragmentieren
-
-Wenn es wahlfreie (random) Einf�ge- oder L�schvorg�nge in die Indexe einer
-Tabelle gibt, k�nnen die Indexe fragmentiert werden. Unter Fragmentierung
-verstehen wird, dass die physikalische Reihenfolge der Index-Seiten auf der
-Platte der alphabetischen Reihenfolge der Datens�tze auf den Seiten nicht
-nahe kommt oder dass es viele unbenutzte Seiten in den 64-Seiten-Bl�cken
-gibt, die dem Index zugewiesen wurden.
-
-Index-Scans k�nnen beschleunigt werden, wenn Sie von Zeit zu Zeit
-@code{mysqldump} benutzen, um die Tabelle in eine Textdatei zu dumpen, dann
-die Tabelle zu l�schen und sie aus dem Dump neu aufzubauen. Eine weitere
-M�glichkeit zur Defragmentierung besteht darin, den Tabellentyp in
-@code{MyISAM} zu �ndern (@code{ALTER}) und danach wieder in @code{InnoDB}
-zur�ck. Beachten Sie, dass die @code{MyISAM}-Tabelle auf Ihrem
-Betriebssystem in eine einzige Datei passen muss.
-
-Wenn die Einf�gungen in einen Index immer aufsteigend sind und Datens�tze
-nur vom Ende gel�scht werden, garantiert der
-Speicherplatzverwaltungs-Algorithmus von InnoDB, dass keine Fragmentierung
-im Index auftritt.
-
-
-@node Error handling, InnoDB restrictions, File space management, InnoDB
-@c German node Fehlerbehandlung
-@subsection Fehlerbehandlung
-
-Die Fehlerbehandlung in InnoDB ist nicht immer so, wie es die
-ANSI-SQL-Standards festlegen. Nach ANSI-Standard sollte jeder Fehler
-w�hrend eines SQL-Statements ein Rollback des Statements verursachen.
-InnoDB rollt manchmal nur Teile des Statements oder auch die gesamte
-Transaktion zur�ck. Folgende Liste gibt die Fehlerbehandlung von InnoDB an:
-
-@itemize @bullet
-@item
-Wenn es keinen Speicherplatz mehr im Tabellenplatz (Tablespace) gibt,
-bekommen Sie den MySQL-Fehler @code{'Table is full'} und InnoDB rollt das
-SQL-Statement zur�ck.
-@item
-Eine Transaktions-Blockierung oder eine Zeit�berschreitung beim Warten auf
-eine Sperre f�hren dazu, dass InnoDB die gesamte Transaktion zur�ckrollt.
-@item
-Ein Fehler wegen doppelter Schl�sseleintr�ge rollt das Einf�gen dieser
-Zeile zur�ck, selbst in einem Statement wie @code{INSERT INTO ... SELECT
-...}. Das wird sich voraussichtlich �ndern, so dass das SQL-Statement
-zur�ckgerollt wird, wenn Sie die @code{IGNORE}-Option in Ihrem Statement
-nicht angegeben haben.
-@item
-Ein Fehler 'row too long' rollt das SQL-Statement zur�ck.
-@item
-Andere Fehler werden zumeist durch die MySQL-Code-Ebene entdeckt und rollen
-das entsprechende SQL-Statement zur�ck.
-@end itemize
-
-
-@node InnoDB restrictions, InnoDB contact information, Error handling, InnoDB
-@c German node InnoDB-Einschr�nkungen
-@subsection Beschr�nkungen von InnoDB-Tabellen
-
-@itemize @bullet
-
-@item
-@strong{ACHTUNG:} Konvertieren Sie @strong{KEINE} MySQL-Systemtabellen von
-MyISAM in InnoDB-Tabellen! Das wird nicht unterst�tzt. Wenn Sie es dennoch
-tun, startet MySQL nicht mehr, bis Sie die alten Systemtabellen aus einer
-Datensicherung wiederhergestellt haben oder sie mit dem
-mysql_install_db-Skript neu erzeugen.
-
-@item
-@code{SHOW TABLE STATUS} gibt keine genauen Statistiken �ber
-InnoDB-Tabellen, ausser �ber die physikalische Gr��e, die durch die
-Tabelle reserviert wird. Der Zeilenz�hler ist nur eine grobe Sch�tzung, die
-bei der SQL-Optimierung benutzt wird.
-
-@item
-Wenn Sie versuchen, einen eindeutigen Index auf ein Pr�fix einer Spalte zu
-erzeugen, erhalten Sie einen Fehler:
-
-@example
-CREATE TABLE T (A CHAR(20), B INT, UNIQUE (A(5))) TYPE = InnoDB;
-@end example
-
-Wenn Sie einen nicht eindeutigen Index auf ein Spaltenpr�fix erzeugen,
-erzeugt InnoDB einen Index �ber die gesamte Spalte.
-@item
-@code{INSERT DELAYED} wird f�r InnoDB-Tabellen nicht unterst�tzt.
-@item
-Die MySQL-@code{LOCK TABLES}-Operation wei� nichts von InnoDB-Sperren auf
-Zeilenebene, die in bereits fertigen SQL-Statements gesetzt sind. Das
-bedeutet, dass Sie eine Tabellensperre auf eine Tabelle selbst dann
-erhalten k�nnen, wenn es noch Transaktionen anderer Benutzer gibt, die
-Sperren auf Zeilenebene auf dieselbe Tabelle haben. Daher kann es sein,
-dass Ihre Operationen auf die Tabelle warten m�ssen, wenn sie mit diesen
-Sperren anderer Benutzer kollidieren. Auch eine Blockierung ist m�glich.
-Dennoch gef�hrdet das nicht die Transaktionsintegrit�t, weil sich die
-Sperren auf Zeilenebene, die InnoDB setzt, um die Integrit�t k�mmern.
-Zus�tzlich hindert eine Tabellensperren andere Transaktionen daran, weitere
-Sperren auf Zeilenebene (in einem konfliktbehafteten Sperrmodus) auf die
-Tabelle zu erlangen.
-@item
-Sie k�nnen keinen Schl�ssel auf eine @code{BLOB}- oder @code{TEXT}-Spalte
-setzen.
-@item
-Eine Tabelle kann nicht mehr als 1.000 Spalten enthalten.
-@item
-@code{DELETE FROM TABLE} erzeugt die Tabelle nicht neu, sondern l�scht
-statt dessen alle Zeilen, eine nach der anderen, was nicht sehr schnell
-ist. In zuk�nftigen MySQL-Versionen k�nnen Sie @code{TRUNCATE} benutzen,
-was schnell ist.
-@item
-Die vorgabem��ige Datenbank-Seitengr��e in InnoDB betr�gt 16 KB. Indem
-Sie den Code neu kompilieren, k�nnen Sie sie auf Werte zwischen 8 KB und 64
-KB setzen. Die maximale Zeilenl�nge betr�gt etwas weniger als die H�lfte
-der Datenbank-Seite in den InnoDB-Versionen kleiner oder gleich 3.23.40. Ab
-Quelldistribution 3.23.41 d�rfen BLOB- und TEXT-Spalten bis zu 4 GB Gro�
-sein, die gesamte Zeilenl�nge kann auch < 4 GB betragen. InnoDB speichert
-Felder, deren Gr��e kleiner oder gleich 128 Bytes betr�gt, nicht auf
-separaten Seiten. Nachdem InnoDB die Zeile ge�ndert hat, indem lange Felder
-auf separaten Seiten gespeichert werden, muss die restliche Zeilenl�nge
-weniger als die H�lfte einer Datenbank-Seite betragen. Die maximale
-Schl�ssell�nge betr�gt 7.000 Bytes.
-@item
-Auf einigen Betriebssystemen m�ssen Daten-Dateien kleiner als 2 GB sein.
-Die Gesamtgr��e der Log-Dateien muss auf 32-Bit-Computern kleiner als 4 GB
-sein.
-@item
-Die maximale Gr��e des Tabellenplatzes (Tablespace) betr�gt 4 Milliarden
-Datenbank-Seiten. Das ist auch die maximale Gr��e f�r eine Tabelle. Die
-minimale Gr��e des Tabellenplatzes (Tablespace) betr�gt 10 MB.
-@end itemize
-
-
-@node InnoDB contact information, , InnoDB restrictions, InnoDB
-@c German node InnoDB-Kontaktinformationen
-@subsection InnoDB-Kontaktinformationen
-
-Kontaktinformationen von Innobase Oy, Hersteller der InnoDB-Engine:
-Website: @uref{http://www.innodb.com/}.
-E-Mail: @email{Heikki.Tuuri@@innodb.com}
-
-@example
-Telefon: 358-9-6969 3250 (B�ro) 358-40-5617367 (mobil)
-Innobase Oy Inc.
-World Trade Center Helsinki
-Aleksanterinkatu 17
-P.O.Box 800
-00101 Helsinki
-Finnland
-@end example
-
-
-@node BDB, , InnoDB, Table types
-@c German node BDB
-@section BDB- oder Berkeley_db-Tabellen
-
-@cindex Tabellen, @code{BDB}
-@cindex Tabellen, @code{Berkeley DB}
-
-
-@menu
-* BDB overview::
-* BDB install::
-* BDB start::
-* BDB characteristics::
-* BDB TODO::
-* BDB portability::
-* BDB errors::
-@end menu
-
-@node BDB overview, BDB install, BDB, BDB
-@c German node BDB-�berblick
-@subsection �berblick �ber BDB-Tabellen
-
-Unterst�tzung f�r BDB-Tabellen ist in der MySQL-Quelldistribution seit
-Version 3.23.34 enthalten und in der MySQL-Max-Bin�rdistribution aktiviert.
-
-BerkeleyDB, erh�ltlich unter @uref{http://www.sleepycat.com/}, stattet
-MySQL mit einem transaktionalen Tabellen-Handler aus. Wenn Sie
-BerkeleyDB-Tabellen benutzen, haben Ihre Tabellen eine h�here Chance,
-Abst�rze zu �berleben. Zus�tzlich stehen @code{COMMIT} und @code{ROLLBACK}
-f�r Transaktionen zur Verf�gung. Die MySQL-Quelldistribution enth�lt eine
-BDB-Distribution, die eine Reihe kleiner Patches hat, damit sie glatter mit
-MySQL zusammen arbeitet. Sie k�nnen keine nicht gepatchte
-@code{BDB}-Version f�r MySQL verwenden.
-
-Wir bei MySQL AB arbeiten in enger Kooperation mit Sleepycat, um die hohe
-Qualit�t der MySQL-/BDB-Schnittstelle zu halten.
-
-Was den Support f�r BDB-Tabellen angeht, sehen wir uns in der Pflicht,
-unseren Benutzern zu helfen, Probleme zu lokalisieren und Ihnen zu helfen,
-einen reproduzierbaren Testfall f�r jegliche Probleme mit BDB-Tabellen zu
-erstellen. Solche ein Fall wird an Sleepycat weiter geleitet, die sich dann
-an uns wenden, um uns zu helfen, das Problem zu finden und zu beheben. Weil
-das also in zwei Schritten abl�uft, kann es bei jeglichen Problemen mit
-BDB-Tabellen etwas l�nger dauern, diese zu l�sen, als das bei anderen
-Tabellen-Handlern der Fall ist. Weil jedoch der BerkeleyDB-Code selbst auch
-von vielen sonstigen Applikationen benutzt wird, sind hierbei keine gro�en
-Probleme zu erwarten. @xref{Support}.
-
-
-@node BDB install, BDB start, BDB overview, BDB
-@c German node BDB installieren
-@subsection BDB installieren
-
-Wenn Sie eine Bin�rdistribution von MySQL herunter geladen haben, die
-Unterst�tzung f�r BerkeleyDB enth�lt, folgen Sie einfach den Anweisungen
-zur Installation einer Bin�rversion von MySQL. @xref{MySQL binaries}. @xref{mysqld-max, , @code{mysqld-max}}.
-
-Um MySQL mit BerkeleyDB-Unterst�tzung zu kompilieren, laden Sie
-MySQL-Version 3.23.34 oder neuer herunter und konfigurieren Sie
-@code{MySQL} mit der @code{--with-berkeley-db}-Option.
-@c German FIX unwrapped @xref
-@xref{Installing source}.
-
-@example
-cd /pfad/zur/quelle/von/mysql-3.23.34
-./configure --with-berkeley-db
-@end example
-
-Bitte sehen Sie wegen aktuellerer Informationen im Handbuch nach, das mit
-der @code{BDB}-Distribution mitgeliefert wird.
-
-Obwohl BerkeleyDB selbst sehr gut getestet und zuverl�ssig ist, wird die
-MySQL-Schnittstelle noch als Beta-Qualit�t erachtet. Wir verbessern diese
-aktiv und optimieren sie, um sie sehr bald stabil zu bekommen.
-
-
-@node BDB start, BDB characteristics, BDB install, BDB
-@c German node BDB starten
-@subsection BDB-Startoptionen
-
-Wenn Sie mit @code{AUTOCOMMIT=0} fahren, werden Ihre �nderungen in
-@code{BDB}-Tabellen erst aktualisiert, wenn Sie @code{COMMIT} ausf�hren.
-Statt dessen k�nnen Sie @code{ROLLBACK} ausf�hren, um Ihre �nderungen zu
-verwerfen. @xref{COMMIT}.
-
-Wenn Sie mit @code{AUTOCOMMIT=1} fahren (der Vorgabe), werden Ihre
-�nderungen sofort abgeschickt. Sie k�nnen eine ausgedehnte Transaktion mit
-dem SQL-Befehl @code{BEGIN WORK} starten. Danach werden Ihre �nderungen
-solange nicht abgeschickt, bis Sie @code{COMMIT} ausf�hren (oder sich f�r
-@code{ROLLBACK} entscheiden, um Ihre �nderungen zu verwerfen).
-
-Folgende Optionen f�r @code{mysqld} k�nnen benutzt werden, um das Verhalten
-von BDB-Tabellen zu �ndern:
-
-@multitable @columnfractions .30 .70
-@item @strong{Option} @tab @strong{Beschreibung}
-@item @code{--bdb-home=directory}
- @tab Base Verzeichnis f�r BDB-Tabellen. Das sollte dasselbe Verzeichnis sein, das Sie f�r --datadir benutzen.
-@item @code{--bdb-lock-detect=#}
- @tab Berkeley-Sperr-Erkennung. # steht f�r DEFAULT, OLDEST, RANDOM oder YOUNGEST.
-@item @code{--bdb-logdir=Verzeichnis}
- @tab BerkeleyDB-Log-Datei-Verzeichnis.
-@item @code{--bdb-no-sync}
- @tab Flush-Logs nicht synchronisieren.
-@item @code{--bdb-no-recover}
- @tab BerkeleyDB nicht im Wiederherstellungsmodus starten.
-@item @code{--bdb-shared-data}
- @tab BerkeleyDB im Multi-Prozess-Modus starten (@code{DB_PRIVATE} bei der Initialisierung von BerkeleyDB nicht verwenden).
-@item @code{--bdb-tmpdir=verzeichnis}
- @tab Name der tempor�ren Datei von BerkeleyDB.
-@item @code{--skip-bdb}
- @tab BerkeleyDB nicht benutzen.
-@item @code{-O bdb_max_lock=1000}
- @tab Setzt die h�chste Anzahl m�glicher Sperren. @xref{SHOW VARIABLES}.
-@end multitable
-
-Wenn Sie @code{--skip-bdb} benutzen, initialisiert MySQL nicht die
-BerkeleyDB-Bibliothek und spart deshalb viel Speicher. Nat�rlich k�nnen Sie
-@code{BDB}-Tabellen nicht benutzen, wenn Sie diese Option verwenden.
-
-Normalerweise sollten Sie @code{mysqld} ohne @code{--bdb-no-recover}
-starten, wenn Sie vorhaben, BDB-Tabellen zu verwenden. Das kann allerdings
-zu Problemen f�hren, wenn Sie @code{mysqld} starten und die BDB-Log-Dateien
-besch�digt sind. @xref{Starting server}.
-
-Mit @code{bdb_max_lock} k�nnen Sie die maximale Anzahl von Sperren
-festlegen (vorgabem��ig 10.000), die auf einer BDB-Tabelle aktiv sein
-k�nnen. Sie sollten diesen Wert herauf setzen, wenn Sie Fehler vom Typ
-@code{bdb: Lock table is out of available locks} oder @code{Got error 12
-from ...} erhalten, wenn Sie lange Transaktionen ausf�hren oder wenn
-@code{mysqld} viele Zeilen untersuchen muss, um die Anfrage zu berechnen.
-
-Sie k�nnten auch @code{binlog_cache_size} und @code{max_binlog_cache_size}
-�ndern, wenn Sie gro�e, vielzeilige Transaktionen benutzen. @xref{COMMIT}.
-
-
-@node BDB characteristics, BDB TODO, BDB start, BDB
-@c German node BDB-Charakteristiken
-@subsection Kennzeichen von @code{BDB}-Tabellen
-
-@itemize @bullet
-@item
-Um Transaktionen zur�ckrollen zu k�nnen, unterh�lt BDB Log-Dateien. Um
-maximale Performance zu erzielen, sollten Sie diese auf andere Festplatten
-platzieren als Ihre Datenbanken, indem Sie die @code{--bdb_log_dir}-Option
-benutzen.
-@item
-MySQL macht jedes Mal, wenn eine neue BDB-Log-Datei gestartet wird, einen
-Checkpoint und entfernt alle Log-Dateien, die nicht f�r aktuelle
-Transaktionen ben�tigt werden. Sie k�nnen auch jederzeit @code{FLUSH LOGS}
-laufen lassen, um einen Checkpoint f�r die BerkeleyDB-Tabellen anzulegen.
-
-F�r die Wiederherstellung nach Abst�rzen sollten Sie Datensicherungen der
-Tabellen plus das Bin�r-Log von MySQL benutzen. @xref{Backup}.
-
-@strong{Achtung}: Wenn Sie alte Log-Dateien l�schen, die in Benutzung sind,
-ist BDB nicht in der Lage, Wiederherstellungen durchzuf�hren, und Sie
-k�nnten Daten verlieren, wenn etwas schief geht.
-@item
-MySQL erfordert einen @code{PRIMARY KEY} in jeder BDB-Tabelle, um auf
-vorher gelesene Zeilen verweisen zu k�nnen. Wenn Sie keine Prim�rschl�ssel
-anlegen, erzeugt MySQL einen versteckten @code{PRIMARY KEY}. Der versteckte
-Schl�ssel hat eine L�nge von 5 Bytes und wird bei jedem Einf�geversuch um 1
-hochgez�hlt.
-@item
-Wenn alle Spalten, auf die Sie in einer @code{BDB}-Tabelle zugreifen, Teil
-desselben Indexes oder Teil des Prim�rschl�ssels sind, kann MySQL die
-Anfrage ausf�hren, ohne auf die tats�chliche Zeile zugreifen zu m�ssen. Bei
-einer @code{MyISAM}-Tabelle gilt das nur, wenn die Spalten Teil desselben
-Indexes sind.
-@item
-Der @code{PRIMARY KEY} ist schneller als jeder andere Schl�ssel, weil
-@code{PRIMARY KEY} zusammen mit den Zeilendaten gespeichert wird. Weil die
-anderen Schl�ssel als Schl�sseldaten plus @code{PRIMARY KEY} gespeichert
-werden, ist es wichtig, den @code{PRIMARY KEY} so kurz wie m�glich zu
-halten, um Plattenplatz zu sparen und bessere Geschwindigkeit zu erzielen.
-@item
-@code{LOCK TABLES} funktioniert bei @code{BDB}-Tabellen wie bei anderen
-Tabellen. Wenn Sie @code{LOCK TABLE} nicht benutzen, f�hrt MySQL einer
-interne mehrfache Schreibsperre auf die Tabelle aus, um sicherzustellen,
-dass die Tabelle korrekt gesperrt ist, wenn ein anderer Thread eine
-Tabellensperre ausf�hrt.
-@item
-Internes Sperren in @code{BDB}-Tabellen wird auf Seitenebene durchgef�hrt.
-@item
-@code{SELECT COUNT(*) FROM tabelle} ist langsam, weil @code{BDB}-Tabellen
-keinen Z�hler f�r die Anzahl der Zeilen in der Tabelle unterhalten.
-@item
-Scannen ist langsamer als bei @code{MyISAM}-Tabellen, weil Daten in
-BDB-Tabellen in B-B�umen und nicht in separaten Daten-Dateien gespeichert
-werden.
-@item
-Die Applikation muss stets darauf vorbereitet sein, F�lle zu handhaben, bei
-denen jegliche �nderung einer @code{BDB}-Tabelle zu einem automatischen
-Rollback f�hren kann und jegliches Lesen fehlschlagen kann, weil ein
-Blockierungsfehler auftritt.
-@item
-Schl�ssel werden nicht auf vorherige Schl�ssel komprimiert, wie das bei
-ISAM- und MyISAM-Tabellen der Fall ist. Mit anderen Worten ben�tigt die
-Schl�sselinformation etwas mehr Platz bei @code{BDB}-Tabellen im Vergleich
-zu MyISAM-Tabellen, die nicht @code{PACK_KEYS=0} benutzen.
-@item
-Oft gibt es L�cher in der BDB-Tabelle, damit Sie neue Zeilen in der Mitte
-des Schl�sselbaums einf�gen k�nnen. Das macht BDB-Tabellen etwas gr��er
-als MyISAM-Tabellen.
-@item
-Der Optimierer muss n�herungsweise die Anzahl von Zeilen in der Tabelle
-kennen. MySQL l�st dieses Problem, indem Einf�geoperationen gez�hlt werden,
-und unterh�lt diese in einem separaten Segment in jeder BDB-Tabelle. Wenn
-Sie nicht viele @code{DELETE} oder @code{ROLLBACK} ausf�hren, sollte diese
-Zahl ausreichend genau f�r den MySQL-Optimierer sein. Weil MySQL die Zahl
-nur beim Schlie�en speichert, kann sie falsch sein, wenn MySQL unerwartet
-stirbt. Das sollte kein schwerer Fehler sein, selbst wenn die Zahl nicht
-100% korrekt ist. Man kann die Anzahl von Zeilen aktualisieren, indem man
-@code{ANALYZE TABLE} oder @code{OPTIMIZE TABLE} ausf�hrt.
-@c German FIX Unsplit @xref
-@xref{ANALYZE TABLE}. @xref{OPTIMIZE TABLE}.
-@item
-Wenn die Platte bei einer @code{BDB}-Tabelle voll wird, erhalten Sie einen
-Fehler (wahrscheinlich Fehler 28) und die Transaktion sollte zur�ckgerollt
-werden. Das steht im Gegensatz zu @code{MyISAM}- and @code{ISAM}-Tabellen,
-bei denen @code{mysqld} wartet, bis genug Plattenplatz frei ist, bevor
-weiter gemacht wird.
-@end itemize
-
-
-@node BDB TODO, BDB portability, BDB characteristics, BDB
-@c German node BDB-TODO-Liste
-@subsection Was in naher Zukunft bei BDB in Ordnung gebracht werden muss
-
-@itemize @bullet
-@item
-Viele BDB-Tabellen zur gleichen Zeit �ffnen ist sehr langsam. Wenn Sie
-BDB-Tabellen benutzen wollen, sollten Sie einen sehr gro�en Tabellen-Cache
-haben (evtl. gr��er als 256) und beim @code{mysql}-Client
-@code{--no-auto-rehash} benutzen. Das soll partiell in Version 4.0 behoben
-werden.
-@item
-@code{SHOW TABLE STATUS} gibt momentan noch nicht viele Informationen �ber
-BDB-Tabellen aus.
-@item
-Performance optimieren.
-@item
-Es sollten �berhaupt keine Seitensperren mehr benutzt werden, wenn Tabellen
-gescannt werden.
-@end itemize
-
-
-@node BDB portability, BDB errors, BDB TODO, BDB
-@c German node BDB-Portabilit�t
-@subsection Betriebssysteme, die von @strong{BDB} unterst�tzt werden
-
-Wenn Sie MySQL mit Unterst�tzung f�r BDB-Tabellen gebaut haben und
-folgenden Fehler in der Log-Datei sehen, wenn Sie @code{mysqld} starten:
-
-@example
-bdb: architecture lacks fast mutexes: applications cannot be threaded
-Can't init databases
-@end example
-
-Bedeutet das, dass @code{BDB}-Tabellen f�r Ihre Architektur nicht
-unterst�tzt werden. In diesem Fall m�ssen Sie MySQL erneut bauen, ohne
-Unterst�tzung f�r BDB-Tabellen.
-
-HINWEIS: Folgende Liste ist nicht komplett. Sie wird aktualisiert, sobald
-wir mehr Informationen dar�ber haben.
-
-Momentan wissen wir, dass BDB-Tabellen auf folgenden Betriebssystemen
-laufen:
-
-@itemize @bullet
-@item
-Linux 2.x intel
-@item
-Solaris sparc
-@item
-Caldera (SCO) OpenServer
-@item
-Caldera (SCO) UnixWare 7.0.1
-@end itemize
-
-Auf folgenden Betriebssystemen l�uft BDB nicht:
-
-@itemize @bullet
-@item
-Linux 2.x Alpha
-@item
-Mac OS X
-@end itemize
-
-
-@node BDB errors, , BDB portability, BDB
-@c German node BDB-Fehler
-@subsection Fehler, die bei der Benutzung von BDB-Tabellen auftreten k�nnen
-
-@itemize @bullet
-@item
-Wenn Sie folgenden Fehler in der @code{hostname.err}-Log-Datei beim Start
-von @code{mysqld} erhalten:
-
-@example
-bdb: Ignoring log file: .../log.XXXXXXXXXX: unsupported log version #
-@end example
-Bedeutet das, dass die neue @code{BDB}-Version das alte Log-Dateiformat
-nicht unterst�tzt. In diesem Fall m�ssen Sie alle @code{BDB}-Log-Dateien
-aus Ihrem Datenbankverzeichnis l�schen (die Dateien haben das Format
-@code{log.XXXXXXXXXX}) und @code{mysqld} neu starten. Wir empfehlen
-ausserdem, dass Sie @code{mysqldump --opt} auf Ihre alten
-@code{BDB}-Tabellen ausf�hren, die alten Tabellen l�schen und aus dem Dump
-wiederherstellen.
-@item
-Wenn Sie im @code{auto_commit}-Modus fahren und eine Tabelle l�schen, die
-durch einen anderen Thread benutzt wird, erhalten Sie wom�glich folgende
-Fehlermeldungen in der MySQL-Fehlerdatei:
-
-@example
-001119 23:43:56 bdb: Missing log fileid entry
-001119 23:43:56 bdb: txn_abort: Log undo failed for LSN: 1 3644744: Invalid
-@end example
-
-Das ist kein schwerer Fehler, aber wir empfehlen, alle Tabellen zu l�schen,
-wenn Sie nicht im @code{auto_commit}-Modus sind, bis dieses Problem behoben
-ist (die Behebung ist nicht trivial).
-@end itemize
-
-
-@node Clients, Extending MySQL, Table types, Top
-@c German node MySQL-APIs
-@chapter MySQL-APIs
-
-@cindex Client-Werkzeuge
-@cindex APIs
-@cindex @code{mysqlclient}-Bibliothek
-@cindex Puffergr��en, Client
-@cindex Bibliothek, @code{mysqlclient}
-
-
-Dieses Kapitel beschreibt die APIs, die f�r MySQL bereitstehen, wo man sie
-bekommt und wie man sie benutzt. Die C-API ist am ausf�hrlichsten beschrieben,
-da sie vom MySQL-Team stammt und als Basis f�r die meisten anderen APIs
-dient.
-
-
-@menu
-* PHP::
-* Perl::
-* ODBC::
-* C::
-* Cplusplus::
-* Java::
-* Python::
-* Tcl::
-* Eiffel::
-@end menu
-
-@node PHP, Perl, Clients, Clients
-@c German node PHP
-@section MySQL-PHP-API
-
-@cindex PHP-API
-
-PHP ist eine serverseitige Skriptsprache, die in HTML eingebettet werden
-kann und mit der man dynamische Webseiten erstellen kann. PHP unterst�tzt
-eine Vielzahl von Datenbanken. Darunter befindet sich auch MySQL. PHP kann
-als alleinstehendes Programm oder als Teil des Apache Webservers eingesetzt
-werden.
-
-
-Die Distribution und die Dokumentation gibt es unter
-@uref{http://www.php.net/, PHP-Website}.
-
-
-@menu
-* PHP problems::
-@end menu
-
-@node PHP problems, , PHP, PHP
-@c German node PHP-Probleme
-@subsection Allgemeine Probleme mit MySQL und PHP
-
-@itemize @bullet
-@item Error: "Maximum Execution Time Exceeded"
-Dies ist eine PHP-Beschr�nkung. �ndern sie den Wert f�r die maximale
-Ausf�hrungszeit in der @file{php3.ini}-Datei. Es ist ausserdem keine
-schlechte Idee, die Beschr�nkung f�r die maximale Benutzung von RAM von 8
-MB auf 16 MB per Skript zu verdoppeln.
-
-
-@item Error: "Fatal error: Call to unsupported oder undefined function mysql_connect() in .."
-Das bedeutet, dass Ihre PHP-Version nicht mit MySQL-Unterst�tzung
-ausgestattet ist. Sie k�nnen entweder ein dynamisches MySQL-Modul f�r PHP
-kompilieren oder PHP mit seiner eingebautet MySQL-Unterst�tzung neu
-kompilieren. Im PHP-Manual ist dies ausf�hrlich beschrieben.
-
-@item Error: "undefined reference to `uncompress'"
-Die Client-Bibliothek wurde mit der Unterst�tzung f�r ein komprimiertes
-Client-/Server-Protokoll kompiliert. Um den Fehler zu beheben, m�ssen Sie
-@code{-lz} als letztes angeben, wenn Sie gegen @code{-lmysqlclient}
-linken.
-@end itemize
-
-
-@node Perl, ODBC, PHP, Clients
-@c German node Perl
-@section MySQL-Perl-API
-
-@cindex APIs, Perl
-@cindex Perl-API
-
-Dieser Abschnitt dokumentiert die Perl-@code{DBI}-Schnittstelle. Die
-fr�here Schnittstelle hie� @code{mysqlperl}. @code{DBI}/@code{DBD} ist
-jetzt die empfohlene Perl-Schnittstelle. @code{mysqlperl} ist �berfl��ig
-und deshalb hier nicht n�her beschrieben.
-
-
-
-@menu
-* DBI with DBD::
-* Perl DBI Class::
-* DBI-info::
-@end menu
-
-@node DBI with DBD, Perl DBI Class, Perl, Perl
-@c German node DBI mit DBD
-@subsection @code{DBI} mit @code{DBD::mysql}
-
-@cindex @code{DBI}-Schnittstelle
-
-@code{DBI} ist eine allgemeine Schnittstelle f�r viele Datenbanken. Das
-bedeutet, Sie k�nnen ein Skript schreiben, dass viele verschiedene
-Datenbanken unterst�tzt, ohne es zu �ndern. Sie brauchen f�r jeden
-Datenbanktyp einen Datenbank-Treiber (DBD). F�r MySQL hei�t dieser Treiber
-@code{DBD::mysql}. F�r weitere Informationen �ber Perl5 DBI besuchen Sie
-bitte die @code{DBI}-Website und lesen Sie die Dokumentation:
-
-@example
-@uref{http://www.symbolstone.org/technology/perl/DBI/index.html}
-@end example
-F�r weitere Informationen �ber objektorientierte Programmierung (OOP) in
-Perl5 besuchen Sie die OOP-Seite:
-@example
-@uref{http://language.perl.com/info/documentation.html}
-@end example
-
-Beachten Sie, dass Sie, wenn Sie Transaktionen mit Perl einsetzen wollen,
-@code{Msql-Mysql-modules} der Version 1.2216 oder neuer ben�tigen.
-
-Installationsanweisungen f�r MySQL-Perl-Unterst�tzung finden Sie unter
-@ref{Perl}.
-
-
-@node Perl DBI Class, DBI-info, DBI with DBD, Perl
-@c German node Perl-DBI-Klasse
-@subsection Die @code{DBI}-Schnittstelle
-
-@cindex @code{DBI}-Perl-Modul
-
-@noindent
-@strong{Portable DBI-Methoden}
-
-@multitable @columnfractions .3 .7
-@item @code{connect} @tab Errichtet eine Verbindung zum Datenbankserver.
-@item @code{disconnect} @tab Trennt eine Verbindung zum Datenbankserver.
-@item @code{prepare} @tab Bereitet ein SQL-Statement zur Abfrage vor.
-@item @code{execute} @tab F�hrt eine vorbereitetes Statement aus.
-@item @code{do} @tab Bereitet ein SQL-Statement vor und f�hrt es aus.
-@item @code{quote} @tab Quotet eine Zeichenkette oder einen @code{BLOB}-Wert zum Einf�gen.
-@item @code{fetchrow_array} @tab Holt die n�chste Zeile als einen Array aus Feldern.
-@item @code{fetchrow_arrayref} @tab Holt die n�chste Zeile als eine Referenz eines Arrays aus Feldern.
-@item @code{fetchrow_hashref} @tab Holt die n�chste Zeile als eine Referenz einer Hash-Tabelle.
-@item @code{fetchall_arrayref} @tab Holt alle Zeilen als einen Array von Arrays.
-@item @code{finish} @tab Beendet ein Statement und l��t das System Resourcen freigeben.
-@item @code{rows} @tab Gibt die Anzahl der betroffenen Zeilen zur�ck.
-@item @code{data_sources} @tab Gibt einen Array mit den verf�gbaren Daten auf localhost zur�ck.
-@item @code{ChopBlanks} @tab Kontroliert, ob die @code{fetchrow_*}-Methoden Leerzeichen entfernen.
-@item @code{NUM_OF_PARAMS} @tab Die Anzahl der Platzhalter in einem vorbereiteten Statement.
-@item @code{NULLABLE} @tab Welche Spalten @code{NULL} sein k�nnen.
-@item @code{trace} @tab Tracen zum Debuggen ausf�hren.
-@end multitable
-
-@noindent
-@strong{MySQL-spezifische Methoden}
-
-@multitable @columnfractions .3 .7
-@item @code{insertid} @tab Der letzte @code{AUTO_INCREMENT}-Wert.
-@item @code{is_blob} @tab Welche Spalten @code{BLOB}-Werte sind.
-@item @code{is_key} @tab Welche Spalten Schl�ssel sind.
-@item @code{is_num} @tab Welche Spalten numerisch sind.
-@item @code{is_pri_key} @tab Welche Spalten Prim�rschl�ssel sind.
-@item @code{is_not_null} @tab Welche Spalten NICHT @code{NULL} sein k�nnen. Siehe auch @code{NULLABLE}.
-@item @code{length} @tab Maximal m�gliche Spaltengr��e.
-@item @code{max_length} @tab Maximale Spaltengr��e, die im aktuellen Ergebnis enthalten ist.
-@item @code{NAME} @tab Spaltennamen.
-@item @code{NUM_OF_FIELDS} @tab Anzahl der zur�ckgegebenen Felder.
-@item @code{table} @tab Tabellennamen im zur�ckgegebenen Ergebnis.
-@item @code{type} @tab Alle Spaltentypen.
-@end multitable
-
-Die Perl-Methoden werden im Folgenden detaillierter erl�utert. Die
-Variablen f�r die zur�ckgegebenen Werte haben folgende Bedeutung:
-
-@table @code
-@item $dbh
-Datenbank-Handle
-
-@item $sth
-Statement-Handle
-
-@item $rc
-R�ckgabe-Code (oft ein Status)
-
-@item $rv
-R�ckgabewert (oft ein Status)
-@end table
-
-@noindent
-@strong{Portable DBI-Methoden}
-
-@table @code
-
-@findex DBI->connect()
-@findex connect()-DBI-Methode
-@item connect($datenquelle, $benutzername, $passwort)
-Benutzen Sie die @code{connect}-Methode, um eine Verbindung zur Datenbank
-der Datenquelle herzustellen. Der @code{$datenquelle}-Wert sollte mit
-@code{DBI:Treiber_name:} beginnen. Beispielanwendungen von @code{connect}
-mit dem @code{DBD::mysql} Treiber:
-@example
-$dbh = DBI->connect("DBI:mysql:$datenbank", $benutzer, $passwort);
-$dbh = DBI->connect("DBI:mysql:$datenbank:$hostname",
- $benutzer, $passwort);
-$dbh = DBI->connect("DBI:mysql:$datenbank:$hostname:$port",
- $benutzer, $passwort);
-@end example
-Wenn der Benutzername und / oder das Passwort nicht angegeben werden,
-verwendet @code{DBI} die Werte der @code{DBI_USER}- und @code{DBI_PASS}-
-Umgebungsvariablen. Wen Sie keinen Hostnamen angeben, wird @code{'localhost'}
-verwendet. Wenn Sie keine Portnummer angeben, wird der MySQL-Port
-(@value{default_port}) verwendet.
-
-Seit @code{Msql-Mysql-modules}-Version 1.2009 erlaubt der
-@code{$datenquelle}-Wert bestimmte Modifikatoren:
-
-@table @code
-@item mysql_read_default_file=datei
-Liest @file{datei} als eine Optionsdatei. F�r weitere Informationen zu
-Optionsdateien beachten Sie bitte @ref{Option files}.
-
-@item mysql_read_default_group=group_name
-Beim Lesen einer Optionsdatei ist die Standardgruppe normalerweise die
-@code{[client]}-Gruppe. Wenn Sie die @code{mysql_read_default_group}-
-Option angeben, wird die Standardgruppe @code{[gruppenname]}.
-
-@item mysql_compression=1
-Aktiviert die Kompression w�hrend der Kommunikation zwischen Client und
-Server (ab Version 3.22.3).
-
-@item mysql_socket=/pfad/zur/socket
-Gibt den Pfad des Unix-Sockets an, der zum Verbinden mit dem
-Server verwendet wird (MySQL-Version 3.21.15 oder neuer).
-@end table
-
-Sie k�nnen mehrere Modifikatoren angeben, dabei muss jedem ein Semikolon
-vorangestellt sein.
-
-Wenn Sie zum Beispiel vermeiden wollen, dass sie Benutzername und Passwort
-im @code{DBI}-Skript angeben m�ssen, k�nnen Sie sie aus der
-@file{~/.my.cnf}-Optionsdatei nehmen. Ihr @code{connect}-Aufruf sieht
-folgenderma�en aus:
-
-@example
-$dbh = DBI->connect("DBI:mysql:$datenbank"
- . ";mysql_read_default_file=$ENV@{HOME@}/.my.cnf",
- $benutzer, $passwort);
-@end example
-
-Dieser Aufruf liest die Optionen f�r die @code{[client]}-Gruppe aus der
-Optionsdatei. Wenn Sie dasselbe f�r die @code{[perl]}-Gruppe tun wollen,
-k�nnte Ihr Code so aussehen:
-
-@example
-$dbh = DBI->connect("DBI:mysql:$Datenbank"
- . ";mysql_read_default_file=$ENV@{HOME@}/.my.cnf"
- . ";mysql_read_default_group=perl",
- $benutzer, $passwort);
-@end example
-
-@findex DBI->disconnect
-@findex disconnect-DBI-Methode
-@item disconnect
-Die @code{disconnect}-Methode beendet die Verbindung mit der Datenbank.
-Dies wird typischerweise kurz vor dem Ende eines Scripts ausgef�hrt.
-Beispiel:
-@example
-$rc = $dbh->disconnect;
-@end example
-
-@findex DBI->prepare()
-@findex prepare()-DBI-Methode
-@item prepare($statement)
-Bereitet ein SQL-Statement zum Ausf�hren durch den Datenbankserver vor und
-gibt ein "Statement-Handle" @code{($sth)} zur�ck, mit der Sie die
-@code{execute}-Methode aufrufen.
-Normalerweise werden Sie @code{SELECT}-Statements (und
-@code{SELECT}-�hnliche Statements so wie @code{SHOW}, @code{DESCRIBE} und
-@code{EXPLAIN}) mit der Bedeutung von @code{prepare} und @code{execute}
-verwenden.
-Beispiel:
-@example
-$sth = $dbh->prepare($statement)
- or die "$statement: $dbh->errstr kann nicht vorbereitet werden\n";
-@end example
-
-@findex DBI->execute
-@findex execute-DBI-Methode
-@item execute
-Die @code{execute}-Methode f�hrt ein vorbereitetes Statement aus. Bei
-Nicht-@code{SELECT}-Statements gibt @code{execute} die Anzahl der
-betroffenen Zeilen zur�ck. Wenn Zeilen betroffen sind, gibt @code{execute}
-@code{"0E0"} zur�ck, was in Perl als 0 und true erkannt wird. Wenn ein
-Fehler auftritt, gibt @code{execute} @code{undef} zur�ck. Bei
-@code{SELECT}-Statements beginnt @code{execute} die SQL-Anfrage in der
-Datenbank; Sie m�ssen eine der @code{fetch_*}-Methoden nutzen, die weiter
-unten beschrieben sind, um Daten erhalten. Beispiel:
-@example
-$rv = $sth->execute
- or die "Die Query: $sth->errstr kann nicht ausgef�hrt werden.";
-@end example
-
-@findex DBI->do()
-@findex do()-DBI-Methode
-@item do($statement)
-Die @code{do}-Methode bereitet ein Statement vor, f�hrt es aus und gibt die
-Anzahl der betroffenen Zeilen zur�ck. Wenn Zeilen betroffen sind, gibt
-@code{execute} @code{"0E0"} zur�ck, was in Perl als 0 und true erkannt
-wird. Diese Methode wird normalerweise verwendet, um
-Nicht-@code{SELECT}-Statements zu bearbeiten, die (z. B. wegen
-Treiber-Beschr�nkungen) nicht vorbereitet werden k�nnen, oder die nicht
-mehr als einmal vorbereitet werden m�ssen (INSERTS, DELETE usw.). Beispiel:
-@example
-$rv = $dbh->do($statement)
- or die "$statement: $dbh- >errstr kann nicht vorbereitet werden\n";
-@end example
-
-Im Allgemeinen ist die @code{do}-Methode VIEL schneller (und vorzuziehen)
-als die @code{prepare}/@code{execute}-Methoden, die ohne Parameter
-aufgerufen werden.
-
-@findex DBI->quote()
-@findex quote()-DBI-Methode
-@cindex Zeichenketten quoten
-@cindex Zeichenketten, quoten
-@item quote($string)
-Die @code{quote}-Methode wird verwendet, um Sonderzeichen zu "escapen", die
-in Zeichenketten enthalten sein k�nnen, und um notwendige �u�ere
-Anf�hrungszeichen hinzuzuf�gen. Beispiel:
-@example
-$sql = $dbh->quote($string)
-@end example
-
-@findex DBI->fetchrow_array
-@findex fetchrow_array-DBI-Methode
-@item fetchrow_array
-Die Methode holt die n�chste Datenzeile und gibt sie als ein Array mit den
-Feldwerten zur�ck. Beispiel:
-@example
-while(@@row = $sth->fetchrow_array) @{
- print qw($row[0]\t$row[1]\t$row[2]\n);
-@}
-@end example
-
-@findex DBI->fetchrow_arrayref
-@findex fetchrow_arrayref-DBI-Methode
-@item fetchrow_arrayref
-Die Methode holt die n�chste Datenzeile und gibt sie als eine Referenz auf
-ein Array mit den Feldwerten zur�ck. Beispiel:
-@example
-while($row_ref = $sth->fetchrow_arrayref) @{
- print qw($row_ref->[0]\t$row_ref->[1]\t$row_ref->[2]\n);
-@}
-@end example
-
-@findex DBI->fetchrow_hashref
-@findex fetchrow_hashref-DBI-Methode
-@item fetchrow_hashref
-Diese Methode holt eine Datenzeile und gibt eine Referenz auf einen Hash
-zur�ck, der Name-/Wert-Paare enth�lt. Die Methode ist lange nicht so
-performant wie das Verwenden von Referenzen auf ein Array, wie weiter oben
-beschrieben ist. Beispiel:
-@example
-while($hash_ref = $sth->fetchrow_hashref) @{
- print qw($hash_ref->@{vorname@}\t$hash_ref->@{nachname@}\t\
- $hash_ref- > title@}\n);
-@}
-@end example
-
-@findex DBI->fetchall_arrayref
-@findex fetchall_arrayref-DBI-Methode
-@item fetchall_arrayref
-Diese Methode gibt alle Zeilen eines Ergebnisses einer SQL-Anfrage zur�ck.
-Sie gibt eine Referenz auf ein Array mit Referenzen auf Arrays mit den
-Werten der einzelnen Zeilen zur�ck. Sie k�nnen mit zwei verschachtelten
-Schleifen auf die Werte zugreifen. Beispiel:
-@example
-my $table = $sth->fetchall_arrayref
- or die "$sth->errstr\n";
-my($i, $j);
-for $i ( 0 .. $#@{$table@} ) @{
- f�r $j ( 0 .. $#@{$table->[$i]@} ) @{
- print "$table->[$i][$j]\t";
- @}
- print "\n";
-@}
-@end example
-
-@findex DBI->finish
-@findex finish-DBI-Methode
-@item finish
-Bewirkt, dass keine weiteren Daten von dem SQL-Anfrageergebnis geholt
-werden. Sie k�nnen diese Methode aufrufen, um Systemressourcen freizugeben.
-Beispiel:
-@example
-s$rc = $sth->finish;
-@end example
-
-@findex DBI->rows
-@findex rows-DBI-Methode
-@item rows
-Gibt die Anzahl der ver�nderten Zeilen (die aktualisiert oder gel�scht
-wurden) des letzten Befehls zur�ck. Dies wird normalerweise nach
-Nicht-@code{SELECT}-@code{execute}-Statements verwendet. Beispiel:
-@example
-$rv = $sth->rows;
-@end example
-
-@findex DBI->@{NULLABLE@}
-@findex NULLABLE-DBI-Methode
-@item NULLABLE
-Gibt eine Referenz auf ein Array mit Boole'schen Werten zur�ck; f�r jedes
-Element TRUE kann die Spalte @code{NULL}-Werte enthalten. Beispiel:
-@example
-$null_possible = $sth->@{NULLABLE@};
-@end example
-
-@findex DBI->@{NUM_OF_FIELDS@}
-@findex NUM_OF_FIELDS-DBI-Methode
-@item NUM_OF_FIELDS
-Dieses Attribut enth�lt die Anzahl der Zeilen, die eine @code{SELECT}- oder
-@code{SHOW FIELDS}-SQL-Anfrage zur�ckgibt. Sie k�nnen es verwenden, um zu
-pr�fen, ob eine Anfrage ein Ergebnis zur�ckgegeben hat: 0 weist auf eine
-Nicht-@code{SELECT}-Anfrage hin, wie @code{INSERT}, @code{DELETE} oder
-@code{UPDATE}. Beispiel:
-@example
-$nr_of_fields = $sth->@{NUM_OF_FIELDS@};
-@end example
-
-@findex DBI->datasource()
-@findex datasource()-DBI-Methode
-@item datasource($Treiber_name)
-Diese Methode gibt einen Array zur�ck, der die Namen der verf�gbaren
-Datenbanken auf @code{'localhost'} enth�lt. Beispiel:
-@example
-@@dbs = DBI->datasource("mysql");
-@end example
-
-@findex DBI->@{ChopBlanks@}
-@findex ChopBlanks-DBI-Methode
-@item ChopBlanks
-Dieses Attribut gibt an, ob die @code{fetchrow_*}-Methoden vor- und
-nachstehende Leerzeichen entfernen. Beispiel:
-@example
-$sth->@{'ChopBlanks'@} =1;
-@end example
-
-@findex DBI->trace
-@findex trace-DBI-Methode
-@item trace($trace_ebene)
-@itemx trace($trace_ebene, $trace_dateiname)
-@code{trace} aktiviert oder deaktiviert "Tracing".
-Wenn @code{DBI} als eine Klassenmethode aufgerufen wird, steuert es das
-"Tracing" mit allen Datenbankverbindungen. Wenn es als Datenbank- oder
-Statement-Handle-Methode aufgerufen wird, steuert es nur die verwendete
-Verbindung (und deren sp�tere Ableitungen). Wenn Sie @code{$trace_ebene}
-auf 2 setzen, bewirkt es detaillierte Informationen. Der Wert 0 stellt
-"Tracing" ab. Die Ausgabe des "Tracing" wird vorgabem��ig nach "standard
-error" geleitet. Wenn @code{$trace_dateiname} angegeben ist, wird die
-Ausgabe f�r @emph{alle} "getraceten" Verbindungen an das Ende dieser Datei
-geschrieben. Beispiel:
-@example
-DBI->trace(2); # alles tracen
-DBI->trace(2,"/tmp/dbi.out"); # alles nach /tmp/dbi.out tracen
-$dth->trace(2); # diese Datenbankverbindung tracen
-$sth->trace(2); # dieses Statement-Handle tracen.
-@end example
-
-@tindex @code{DBI_TRACE}-Umgebungsvariable
-@tindex Umgebungsvariable, @code{DBI_TRACE}
-Sie k�nnen @code{DBI}-Tracing auch anschalten, indem Sie die
-@code{DBI_TRACE}-Umgebungsvariable setzen. Wenn Sie sie auf einen
-numerischen Wert setzen, ist das dasselbe, wie @code{DBI->(wert)}
-aufzurufen. Wenn Sie sie auf einen Pfadnamen setzen, ist das dasselbe, wie
-@code{DBI->(2,wert)} aufzurufen.
-
-@end table
-
-@noindent
-@strong{MySQL-spezifische Methoden}
-
-Die unten stehenden Methoden sind MySQL-spezifisch und nicht Teil des
-@code{DBI}-Standards. Mehrere von ihnen sind veraltet:
-@code{is_blob}, @code{is_key}, @code{is_num}, @code{is_pri_key},
-@code{is_not_null}, @code{length}, @code{max_length} und @code{table}.
-Wo immer es @code{DBI}-Standard-Alternativen gibt, ist das unten angemerkt:
-
-@table @code
-@findex DBI->@{insertid@}
-@findex insertid-DBI-Methode
-@tindex AUTO_INCREMENT, Benutzung bei DBI
-@item insertid
-Wenn Sie das @code{AUTO_INCREMENT}-Feature von MySQL benutzen, werden neue,
-automatisch heraufgez�hlte Werte hier gespeichert. Beispiel:
-@example
-$new_id = $sth->@{insertid@};
-@end example
-
-Alternativ k�nnen Sie @code{$dbh->@{'mysql_insertid'@}} verwenden.
-
-@findex DBI->@{is_blob@}
-@findex is_blob-DBI-Methode
-@item is_blob
-Gibt eine Referenz auf einen Array mit Boole'schen Werten zur�ck; f�r jedes
-Element des Arrays bedeutet der Wert TRUE, dass die entsprechende Spalte
-ein @code{BLOB} ist. Beispiel:
-@example
-$keys = $sth->@{is_blob@};
-@end example
-
-@findex DBI->@{is_key@}
-@findex is_key-DBI-Methode
-@item is_key
-Gibt eine Referenz auf einen Array mit Boole'schen Werten zur�ck; f�r jedes
-Element des Arrays bedeutet der Wert TRUE, dass die entsprechende Spalte
-ein Schl�ssel ist. Beispiel:
-@example
-$keys = $sth->@{is_key@};
-@end example
-
-@findex DBI->@{is_num@}
-@findex is_num DBI-Methode
-@item is_num
-Gibt eine Referenz auf einen Array mit Boole'schen Werten zur�ck; f�r jedes
-Element des Arrays bedeutet der Wert TRUE, dass die entsprechende Spalte
-numerische Werte enth�lt. Beispiel:
-@example
-$nums = $sth->@{is_num@};
-@end example
-
-@findex DBI->@{is_pri_key@}
-@findex is_pri_key DBI-Methode
-@item is_pri_key
-Gibt eine Referenz auf einen Array mit Boole'schen Werten zur�ck; f�r jedes
-Element des Arrays bedeutet der Wert TRUE, dass die entsprechende Spalte
-ein Prim�rschl�ssel ist. Beispiel:
-@example
-$pri_keys = $sth->@{is_pri_key@};
-@end example
-
-@findex DBI->@{is_not_null@}
-@findex is_not_null DBI-Methode
-@item is_not_null
-Gibt eine Referenz auf einen Array mit Boole'schen Werten zur�ck; f�r jedes
-Element des Arrays bedeutet der Wert FALSE, dass die entsprechende Spalte
-NULL enthalten kann. Beispiel:
-@example
-$not_nulls = $sth->@{is_not_null@};
-@end example
-
-Das oben beschriebene @code{NULLABLE}-Attribut ist @code{is_not_null} in
-jedem Fall vorzuziehen, da es zum DBI-Standard geh�rt.
-
-@findex DBI->@{length@}
-@findex length-DBI-Methode
-@findex DBI->@{max_length@}
-@findex max_length-DBI-Methode
-@item length
-@itemx max_length
-Beide Methoden geben je einen Array mit Spaltenl�ngen zur�ck. Der
-@code{length}-Array gibt die maximal m�gliche L�nge jeder Spalte an (wie es
-in der Tabellendefinition festgelegt wurde). Der @code{max_length}-Array
-gibt die L�nge des aktuell l�ngsten Wertes in den Spalten an. Beispiel:
-@example
-$lengths = $sth->@{length@};
-$max_lengths = $sth->@{max_length@};
-@end example
-
-@findex DBI->@{NAME@}
-@findex NAME-DBI-Methode
-@item NAME
-Gibt eine Referenz auf ein Array mit den Spaltennamen zur�ck. Beispiel:
-@example
-$names = $sth->@{NAME@};
-@end example
-
-@findex DBI->@{table@}
-@findex table-DBI-Methode
-@item table
-Gibt eine Referenz auf ein Array mit den Tabellennamen zur�ck. Beispiel:
-@example
-$tables = $sth->@{table@};
-@end example
-
-@findex DBI->@{type@}
-@findex type-DBI-Methode
-@item type
-Gibt eine Referenz auf ein Array mit den Spaltentypen zur�ck. Beispiel:
-@example
-$types = $sth->@{type@};
-@end example
-
-@end table
-
-
-@node DBI-info, , Perl DBI Class, Perl
-@c German node DBI-Informationen
-@subsection Weitere @code{DBI}/@code{DBD}-Informationen
-
-@cindex @code{DBI/DBD}
-
-Bitte verwenden Sie den @code{perldoc}-Befehl, um weitere Informationen
-�ber @code{DBI} zu erhalten.
-
-@example
-perldoc DBI
-perldoc DBI::FAQ
-perldoc DBD::mysql
-@end example
-
-Sie k�nnen ausserdem @code{pod2man}, @code{pod2html} usw. verwenden, um in
-andere Formate zu wandeln.
-
-Die neuesten @code{DBI}-Informationen finden Sie auf der @code{DBI} Website:
-@example
-@uref{http://www.symbolstone.org/technology/perl/DBI/index.html}
-@end example
-
-
-@node ODBC, C, Perl, Clients
-@c German node ODBC
-@section MySQL-ODBC-Unterst�tzung
-
-@cindex ODBC
-@cindex Windows
-@cindex MyODBC
-
-
-
-MySQL unterst�tzt ODBC mit Hilfe des @strong{MyODBC}-Programms. Dieses
-Kapitel erl�utert, wie Sie @strong{MyODBC} installieren und benutzen. Hier
-werden Sie au�erdem eine Liste von Programmen finden, die mit
-@strong{MyODBC} zusammenarbeiten.
-
-@menu
-* Installing MyODBC::
-* ODBC administrator::
-* MyODBC connect parameters::
-* ODBC Problems::
-* MyODBC clients::
-* ODBC and last_insert_id::
-* MyODBC bug report::
-@end menu
-
-@node Installing MyODBC, ODBC administrator, ODBC, ODBC
-@c German node MyODBC-Installation
-@subsection Wie Sie MyODBC installieren
-
-@strong{MyODBC} ist ein 32-Bit-ODBC- (2.50) -Level-0- (mit Level-1- und
-Level-2-Features) Treiber f�r die Anbindung an ODBC-f�hige Applikationen an
-MySQL. @strong{MyODBC} funktioniert unter Windows95, Windows98, NT, und
-auf den meisten Unix-Plattformen.
-
-@strong{MyODBC} ist "public domain". Sie finden die neueste Version bei
-@uref{http://www.mysql.com/downloads/api-myodbc.html}.
-
-Wenn Sie ein Problem mit @strong{MyODBC} haben und Ihr Programm auch
-mit OLEDB arbeitet, sollten sie den OLEDB Treiber probieren, den sie im
-"Contrib"-Abschnitt finden. @xref{Contrib}.
-
-Normalerweise m�ssen Sie @strong{MyODBC} nur auf Windows-Maschinen
-installieren. Sie brauchen @strong{MyODBC} f�r Unix nur, wenn sie ein
-Programm wie ColdFusion haben, das auf einer Unix-Maschine l�uft und ODBC
-f�r die Datenbankverbindung nutzt.
-
-Wenn Sie @strong{MyODBC} unter Unix installieren wollen, brauchen Sie noch
-einen @strong{ODBC}-Manager. @strong{MyODBC} arbeitet mit den meisten
-Unix-ODBC-Managern zusammen.
-@c German FIX node doesn't exist, should probably be to Portals?
-@c Eine Liste finden Sie in dem @strong{ODBC}-verwandten Linkabschnitt
-@c auf der MySQL-Seite @xref{N�tzliche Links}.
-
-Um @strong{MyODBC} unter Windows zu installieren, sollten sie die passende
-@strong{MyODBC} Zip-Datei (f�r Windows 95/98 oder NT / Windows 2000)
-herunterladen, es mit @code{WINZIP} oder einem �hnlichen Programm
-entpacken, und die @code{SETUP.EXE}-Datei ausf�hren.
-
-Unter Windows NT kann folgender Fehler w�hrend der Installation auftreten
-(@strong{MyODBC}):
-
-@example
-W�hrend des Kopiervorgangs ist ein Fehler aufgetreten:
-C:\WINDOWS\SYSTEM\MFC30.DLL. Starten Sie Windows neu und beginnen die
-Installation erneut, noch bevor sie ein anderes Programm starten, das ODBC
-verwendet.
-@end example
-
-Das Problem in diesem Fall ist, dass ein anderes Programm ODBC verwendet
-und dass unter Windows zwei Programme nicht gleichzeitig auf eine Datei
-zugreifen k�nnen. Deshalb kann es sein, dass Sie nicht in der Lage sind,
-die ODBC-Treiber mit Microsofts ODBC Setup Programm zu installieren. In den
-meisten F�llen gen�gt es, den @code{Ignorieren}-Knopf zu dr�cken, um die
-restlichen Dateien zu installieren und die Installation abzuschlie�en. Wenn
-das nicht funktioniert, booten Sie Ihren Rechner im Abgesicherten Modus,
-indem sie F8 vor dem Starten von Windows dr�cken und den Abgesicherten
-Modus ausw�hlen. Installieren sie @strong{MyODBC}, und starten Sie wieder
-im normalen Modus.
-
-@itemize @bullet
-@item
-Um eine Verbindung mit einer ODBC-Applikation, die MySQL nicht nativ
-unterst�tzt, von Windows zu Unix herzustellen, m�ssen Sie zun�chst
-@strong{MyODBC} unter Windows installieren.
-@item
-Der Windows-Benutzer muss Zugriffsrechte auf den MySQL-Server der
-Unix-Maschine besitzen. Diese richten Sie mit dem @code{GRANT}-Befehl ein.
-@xref{GRANT,,@code{GRANT}}.
-@item
-Sie m�ssen wie folgt einen ODBC-DSN-Eintrag erstellen:
-
-@itemize @minus
-@item
-�ffnen Sie die Systemsteuerung der Windows-Maschine.
-@item
-Doppelklicken Sie das ODBC-Datenquellen-Symbol.
-@item
-Klicken Sie auf die Registerkarte Benutzer-DSN.
-@item
-Klicken Sie auf Hinzuf�gen.
-@item
-W�hlen Sie MySQL im Fenster "Neue Datenquelle hinzuf�gen" und klicken Sie
-auf den Fertig-Knopf.
-@item
-Das MySQL-Treiber-Standard-Konfigurationsfenster wird nun angezeigt.
-@xref{ODBC administrator}.
-@end itemize
-
-@item
-Starten Sie nun ihre Applikation und w�hlen Sie den ODBC-Treiber mit der
-von ihnen im ODBC angegebenen DSN.
-@end itemize
-
-Bitte beachten Sie, dass weitere Konfigurationsoptionen im MySQL-Fenster
-vorhanden sind (trace, don't prompt on connect usw.). Probieren Sie diese
-aus, wenn Sie Probleme haben.
-
-@node ODBC administrator, MyODBC connect parameters, Installing MyODBC, ODBC
-@c German node ODBC-Administrator
-@subsection Wie Sie die verschiedenen Felder im ODBC-Administrator Programm ausf�llen
-
-@cindex ODBC, Administrator
-
-Es gibt drei M�glichkeiten, den Server unter Windows 95 anzugeben:
-
-@itemize @bullet
-@item
-Verwenden Sie die IP-Adresse des Servers.
-@item
-F�gen Sie der Datei @file{\windows\lmhosts} folgende Informationen an:
-
-@example
-ip hostname
-@end example
-
-Beispiel:
-
-@example
-194.216.84.21 mein_hostname
-@end example
-
-@item
-Konfigurieren Sie DNS:
-@end itemize
-
-Beispiel: Wie Sie das @code{ODBC setup} ausf�llen:
-@example
-Windows DSN Name: test
-Beschreibung: Das ist meine Datenbank
-MySql Datenbank: test
-Server: 194.216.84.21
-User: monty
-Password: mein_passwort
-Port:
-@end example
-
-Der Wert f�r @code{Windows DSN Namen} muss in ihrem Windows-ODBC-Setup
-eindeutig sein.
-
-Sie m�ssen die Werte f�r @code{Server}, @code{User}, @code{Password} oder
-@code{Port} im ODBC-Setup-Fenster nicht angeben. Wenn Sie es jedoch tun,
-werden diese Werte als Standardwerte verwendet, wenn Sie versuchen, eine
-Verbindung aufzubauen. Sie k�nnen die Werte auch zur Laufzeit ihres
-Programms angeben.
-
-Wenn Sie die Portnummer nicht angeben, wird der Standard-Port
-(@value{default_port}) verwendet.
-
-Wenn Sie die Option @code{Optionen aus C:\my.cnf lesen} angeben, werden die
-Gruppen @code{client} und @code{odbc} aus der @file{C:\my.cnf}-Datei
-gelesen. Sie k�nnen alle Optionen verwenden, die f�r @code{mysql_options()}
-g�ltig sind. @xref{mysql_options, , @code{mysql_options}}.
-
-
-@node MyODBC connect parameters, ODBC Problems, ODBC administrator, ODBC
-@c German node MyODBC-Verbindungsparameter
-@subsection Verbindungsparameter f�r MyODBC
-
-Man kann die folgenden Parameter f�r @strong{MyODBC} im
-@code{[Servername]}-Abschnitt in der @code{ODBC.INI}-Datei oder �ber das
-@code{InConnectionString}-Argument im @code{SQLDriverConnect()}-Aufruf
-angeben:
-
-@multitable @columnfractions .2 .2 .6
-@item @strong{Parameter} @tab @strong{Standardwert} @tab @strong{Bedeutung}
-@item user @tab ODBC (unter Windows) @tab Der Benutzername, der verwendet wird, um zu MySQL zu verbinden.
-@item server @tab localhost @tab Der Hostname des MySQL-Servers.
-@item database @tab @tab Die Standarddatenbank
-@item option @tab 0 @tab Eine Ganzzahl, die angibt, wie @strong{MyODBC} arbeiten soll. Siehe unten.
-@item port @tab 3306 @tab Der TCP/IP-Port, der verwendet werden soll, wenn der @code{server} nicht @code{localhost} ist.
-@item stmt @tab @tab Ein Statement, das bei der Verbindung zu @code{MySQL} ausgef�hrt wird.
-@item password @tab @tab Das Passwort f�r die @code{server}-@code{user}-Kombination.
-@item socket @tab @tab Der Socket oder die Windows-Pipe, �ber die verbunden werden soll.
-@end multitable
-
-Die Option "argument" wird verwendet, um @strong{MyODBC} zu sagen, dass der
-Client nicht 100% ODBC-kompatibel ist. Unter Windows setzt man diese Option
-normalerweise im Verbindungsdialog, Sie k�nnen aber auch das
-"option"-Argument verwenden. Die folgenden Optionen sind in derselben
-Reihenfolge wie im @strong{MyODBC}-Verbindungsdialog:
-
-@multitable @columnfractions .1 .9
-@item @strong{Bit} @tab @strong{Bedeutung}
-@item 1 @tab Der Client kann nicht damit umgehen, dass @strong{MyODBC} die wirkliche Breite einer Spalte zur�ckgibt.
-@item 2 @tab Der Client kann nicht damit umgehen, dass MySQL die wirkliche Anzahl an "affected rows" zur�ckgibt. Wenn dieses Bit gesetzt ist, wird MySQL statt dessen 'found rows' zur�ckgeben. Dies wird erst ab MySQL 3.21.14 unterst�tzt.
-@item 4 @tab Erstellt ein Debug-Log in c:\myodbc.log. Das ist dasselbe, als wenn Sie @code{MYSQL_DEBUG=d:t:O,c::\myodbc.log} in Ihre @file{AUTOEXEC.BAT} schreiben.
-@item 8 @tab Entfernt jede Paket-Beschr�nkung f�r Ergebnisse und Parameter.
-@item 16 @tab Nicht auf Eingaben warten, sogar wenn der Treiber dies verlangt.
-@item 32 @tab Einen ODBC 1.0 Treiber simulieren.
-@item 64 @tab Die Angabe 'datenbank' in 'datenbank.tabelle.spalte' ignorieren.
-@item 128 @tab Die Verwendung von ODBC-Manager-Zeigern erzwingen (experimentell).
-@item 256 @tab Die Verwendung des erweiterten 'fetch' verbieten (experimentell).
-@item 512 @tab CHAR-Felder bis zur vollen Spaltenl�nge f�llen.
-@item 1024 @tab SQLDescribeCol() wird voll qualifizierte Spaltennamen zur�ckgeben.
-@item 2048 @tab Verwendet das komprimierte Client-/Server Protokoll.
-@item 4096 @tab Weist den Server an, Leerzeichen nach einem Funktionsnamen und vor @code{'('} zu ignorieren (wird von PowerBuilder ben�tigt). So werden alle Funktionsnamen zu Schl�sselw�rtern!
-@item 8192 @tab �ber "Named Pipes" zu einem @code{mysqld}-Server verbinden, der unter Windows NT l�uft.
-@item 16384 @tab �ndert LONGLONG-Spalten zu INT-Spalten (einige Applikationen k�nnen mit LONGLONG nicht umgehen).
-@item 32768 @tab Gibt 'user' als Tabellenqualifizierer und Tabellen-Besitzer von SQL-Tabellen zur�ck (experimentell).
-@item 65536 @tab Liest die Parameter @code{client} und @code{odbc}-Gruppen aus der @file{my.cnf}-Datei.
-@item 131072 @tab F�gt einige Sicherheits�berpr�fungen hinzu (sollte nicht n�tig sein, aber ...).
-@end multitable
-
-Wenn Sie viele Optionen haben wollen, sollten Sie die obigen Flags
-hinzuf�gen. Zum Beispiel gibt Ihnen die Option 12 (4+8) Debugging und keine
-Paketbeschr�nkungen.
-
-Die Standard-@file{MYODBC.DLL}-Datei wird f�r optimale Performance
-kompiliert. Wenn Sie @strong{MyODBC} debuggen wollen (um zum Beispiel
-"tracing" zu aktivieren), sollten Sie stattdessen @code{MYODBCD.DLL}
-verwenden. Um diese Datei zu installieren, kopieren Sie @file{MYODBCD.DLL}
-einfach �ber die installierte @code{MYODBC.DLL}-Datei.
-
-
-@node ODBC Problems, MyODBC clients, MyODBC connect parameters, ODBC
-@c German node ODBC-Probleme
-@subsection Wie Sie Probleme mit MyODBC berichten
-
-@strong{MyODBC} wurde mit Access, Admndemo.exe, C++-Builder,
-Borland Builder 4, Centura Team Developer (vorher Gupta SQL/Windows),
-ColdFusion (unter Solaris und NT mit Service Pack 5), Crystal Reports,
-DataJunction, Delphi, ERwin, Excel, iHTML, FileMaker Pro, FoxPro, Notes
-4.5/4.6, SBSS, Perl DBD-ODBC, Paradox, Powerbuilder, Powerdesigner 32
-bit, VC++ und Visual Basic getestet.
-
-Wenn Sie weitere Applikationen kennen, die mit @strong{MyODBC}
-zusammenarbeiten, sagen Sie uns bitte unter @email{myodbc@@lists.mysql.com}
-Bescheid!
-
-Mit einigen Programmen k�nnen Fehler wie diese auftreten: @code{Another
-user hat modifies the record that you have modified}. Meistens l�sen Sie
-das folgenderma�en:
-
-@itemize @bullet
-@item
-F�gen Sie der Tabelle einen Prim�rschl�ssel hinzu, wenn noch keiner
-existiert.
-@item
-F�gen Sie eine TIMESTAMP-Spalte hinzu, wenn noch keine existiert.
-@item
-Verwenden Sie ausschlie�lich 'Double Float'-Felder. Manche Programme
-kommen mit 'Single Float'-Feldern nicht klar.
-@end itemize
-
-Wenn das nicht helfen sollte, dann erstellen Sie eine @code{MyODBC}
-'Trace'-Datei und versuchen Sie, die Fehlerquelle so zu erschlie�en.
-
-
-@node MyODBC clients, ODBC and last_insert_id, ODBC Problems, ODBC
-@c German node MyODBC-Clients
-@subsection Programme, die bekannterma�en mit MyODBC zusammenarbeiten
-
-Die meisten Programme sollten mit @strong{MyODBC} zusammenarbeiten. F�r die
-unten aufgef�hrten haben wir es selbst getestet oder haben die Best�tigung
-eines Benutzers, dass es l�uft.
-
-@table @asis
-@item @strong{Programm}
-@strong{Anmerkung}
-@cindex Microsoft Access
-
-@item Access
-Um Access zum Laufen zu bringen:
-@itemize @bullet
-@item
-Wenn Sie Access 2000 verwenden, sollten Sie die neuesten (Version 2.6 oder
-h�her) Microsoft-MDAC (@code{Microsoft Data Access Components}) von
-@uref{http://www.microsoft.com/data} herunterladen. Dies wird folgenden Bug
-in Access beheben: Wenn Sie Daten nach MySQL exportieren, werden Tabellen-
-und Spaltennamen nicht spezifiziert. Ein anderer Weg, diesen Bug zu
-umgehen, ist, MyODBC auf Version 2.50.33 und MySQL auf Version 3.23.x zu
-aktualisieren, welche beide zusammen einen Workaround f�r diesen Bug
-implementiert haben.
-
-Ausserdem sollten Sie das Microsoft-Jet-4.0-Service-Pack 5 (SP5)
-einspielen, welches hier
-@uref{http://support.microsoft.com/support/kb/articles/Q 239/1/14.ASP}
-gefunden werden kann. Dies behebt einige F�lle, in denen Spalten als
-@code{#deleted#} in Access markiert sind.
-
-Beachten Sie, dass Sie, wenn Sie die MySQL-Version 3.22 verwenden, den
-MDAC-Patch einspielen und MyODBC 2.50.32 oder 2.50.34 und h�her benutzen
-m�ssen, um dieses Problem zu umgehen.
-@item
-F�r alle Access-Versionen sollten Sie die MyODBC-Optionen auf @code{Return
-matching rows} setzen. F�r Access 2.0 sollten Sie ausserdem @code{Simulate
-ODBC 1.0} einschalten.
-@item
-Sie sollten einen Timestamp in alle Tabellen einf�gen, die Sie
-aktualisieren wollen. F�r maximale Portablilit�t werden
-@code{TIMESTAMP(14)} oder einfach @code{TIMESTAMP} anstelle von
-@code{TIMESTAMP(X)}-Variationen empfohlen.
-@item
-Sie sollten einen Prim�rschl�ssel in Ihren Tabellen haben. Falls nicht,
-k�nnen neue oder ge�nderte Zeilen als @code{#DELETED#} erscheinen.
-@item
-Verwenden sie ausschlie�lich @code{DOUBLE}-Float-Felder. Access kann nicht
-richtig mit "Single Floats" vergleichen. Die Symptome sind, dass entweder
-neue oder ge�nderte Zeilen als @code{#DELETED#} erscheinen oder Sie keine
-Zeilen finden oder �ndern k�nnen.
-@item
-Wenn Sie eine Tabelle mit MyODBC verbinden, die eine @code{BIGINT}-Spalte hat,
-werden die Ergebnisse als @code{#DELETED} angezeigt. Sie umgehen das Problem
-folgenderma�en:
-@itemize @bullet
-@item
-F�gen Sie eine weitere @code{TIMESTAMP}-"Dummy-Spalte" hinzu, am besten
-@code{TIMESTAMP(14)}.
-@item
-W�hlen Sie @code{'BIGINT Spalten zu INT wandeln'} im Verbindungsdialog des
-ODBC-DSN-Administrators.
-@item
-Entfernen Sie die Tabellenverkn�pfung aus Access und stellen Sie sie wieder
-her.
-@end itemize
-
-Die vorherigen Zeilen werden weiterhin als @code{#DELETED#} angezeigt, aber
-neue/ge�nderte Zeilen werden korrekt dargestellt.
-@item
-Wenn Sie weiterhin den Fehler @code{Ein anderer Benutzer hat Ihre Daten ge�ndert}
-erhalten, nachdem Sie die @code{TIMESTAMP}-Spalte hinzugef�gt haben, k�nnte
-Ihnen der folgende Trick helfen:
-
-Verwenden Sie anstelle von @code{Datenblattansicht} ein Formular mit den
-von Ihnen gew�nschten Feldern und benutzen Sie dann
-@code{Formularblattansicht}. Sie sollten den @code{StandardWert} f�r die
-@code{TIMESTAMP}-Spalte auf @code{NOW()} setzen. Zus�tzlich ist es sicher
-n�tzlich, die @code{TIMESTAMP}-Spalte zu verstecken, damit Ihre Anwender
-nicht erschrecken.
-@item
-Manchmal erstellt Access ung�ltige SQL-Anfragen, die MySQL nicht versteht.
-
-
-W�hlen Sie zur L�sung dieses Problems
-@code{"Abfrage|SQL-spezifisch|Pass-Through"} aus dem Access-Men�.
-@item
-Wenn Sie statt dessen @code{MEMO}-Spalten haben wollen, sollten Sie die
-Spalte mit @code{ALTER TABLE} in @code{TEXT} �ndern.
-@item
-Access kann nicht immer sauber mit @code{DATE}-Spalten umgehen. Wenn Sie ein
-solches Problem haben, �ndern Sie die entsprechenden Spalten in @code{DATETIME}.
-@item
-Wenn Sie in Access eine Spalte @code{BYTE} haben, wird Access versuchen,
-diese in @code{TINYINT} anstelle von @code{TINYINT UNSIGNED} zu
-exportieren. Das f�hrt zu Problemen, wenn Sie Werte in der Spalte haben,
-die gr��er als 127 sind!
-@end itemize
-
-@cindex ADO program
-@item ADO
-Wenn Sie mit der ADO-API und @strong{MyODBC} kodieren, m�ssen Sie auf
-einige vorgabem��ige Eigenschaften achten, die vom MySQL-Server nicht
-unterst�tzt werden. Die Benutzung von @code{CursorLocationProperty} als
-@code{adUseServer} zum Beispiel gibt f�r @code{RecordCountProperty} ein
-Ergebnis von -1 zur�ck. Um den richtigen Wert zu erhalten, m�ssen Sie diese
-Eigenschaft auf @code{adUseClient} setzen, wie im unten stehenden
-Visual-Basic-Code gezeigt:
-
-@example
-Dim myconn As New ADODB.Connection
-Dim myrs As New Recordset
-Dim mySQL As String
-Dim myrows As Long
-
-myconn.Open "DSN=MyODBCsample"
-mySQL = "SELECT * from user"
-myrs.Source = mySQL
-Set myrs.ActiveConnection = myconn
-myrs.CursorLocation = adUseClient
-myrs.Open
-myrows = myrs.RecordCount
-
-myrs.Close
-myconn.Close
-@end example
-
-Ein weiterer Workaround besteht darin, ein @code{SELECT COUNT(*)}-Statement
-f�r eine �hnliche Anfrage zu benutzen, um das korrekte Z�hlen der Zeilen zu
-erreichen.
-
-@item Active server pages (ASP)
-Sie sollten den Option-Flag @code{Return matching rows} benutzen.
-
-@item BDE-Applikationen
-Damit diese funktionieren, sollten Sie die Option-Flags
-@code{Don't optimize column widths} und @code{Return matching rows}
-benutzen.
-
-@cindex Borland Builder 4
-@item Borland Builder 4
-Wenn Sie eine Anfrage starten, k�nnen Sie die Eigenschaft @code{Active}
-oder die Methode @code{Open} benutzen. Beachten Sie, dass @code{Active}
-automatisch mit einer @code{SELECT * FROM ...}-Anfrage startet, was keine
-gute Idee ist, wenn Ihre Tabellen Gro� sind!
-@item ColdFusion (unter Unix)
-Die folgenden Informationen sind der ColdFusion-Dokumentation entnommen:
-
-Lesen Sie folgende Informationen, um den ColdFusion-Server f�r Linux so zu
-konfigurieren, dass er den unixODBC-Treiber bei @strong{MyODBC} f�r
-MySQL-Datenquellen benutzt. Allaire kann best�tigen, dass die
-@strong{MyODBC}-Version 2.50.26 mit MySQL-Version 3.22.27 und ColdFusion
-f�r Linux funktioniert. (Jede neuere Version sollte ebenfalls
-funktionieren.) Sie k�nnen @strong{MyODBC} von
-@uref{http://www.mysql.com/downloads/api-myodbc.html} herunter laden.
-
-@cindex ColdFusion
-Bei ColdFusion Version 4.5.1 k�nnen Sie den ColdFusion Administrator
-benutzen, um die MySQL-Datenquelle hinzuzuf�gen. Der Treiber liegt der
-ColdFusion Version 4.5.1 jedoch nicht bei. Bevor der MySQL-Treiber in der
-Auswahlliste der ODBC-Datenquellen erscheint, m�ssen Sie den
-@strong{MyODBC}-Treiber bauen und nach
-@file{/opt/coldfusion/lib/libmyodbc.so} kopieren.
-
-Das Contrib-Verzeichnis enth�lt das Programm mydsn-xxx.zip, mit dem Sie die
-DSN-Registrierungs-Datei f�r den MyODBC-Treiber auf
-Coldfusion-Applikationen bauen k�nnen.
-
-@cindex DataJunction
-@item DataJunction
-Sie m�ssen es �ndern, damit es @code{VARCHAR} statt @code{ENUM} ausgibt,
-weil es Letzteres in einer Art ausgibt, die MySQL nicht versteht.
-
-@cindex Excel
-@item Excel
-Funktioniert. Einige Tipps:
-@itemize @bullet
-@item
-Wenn Sie Probleme mit Datumsangaben haben, versuchen Sie, sie als
-Zeichenketten mit der @code{CONCAT()}-Funktion abzurufen. Beispiel:
-@example
-select CONCAT(sonnenaufgang), CONCAT(sonnenuntergang)
- from aufgang_untergang;
-@end example
-Werte, die auf diese Art als Zeichenketten abgerufen werden, sollten
-korrekt als Zeitwerte von Excel97 erkannt werden.
-
-Der Zweck von @code{CONCAT()} in diesem Beispiel ist, ODBC auszutricksen,
-so dass es denkt, dass die Spalte vom Typ "Zeichenkette" sei. Ohne
-@code{CONCAT()} wei� ODBC, dass die Spalte vom Typ "Zeit" ist, und Excel
-versteht das nicht.
-
-Beachten Sie, dass das ein Bug in Excel ist, weil es eine Zeichenkette
-automatisch in eine Zeitangabe umwandelt. Das w�re sehr gut, wenn die
-Quelle eine Textdatei w�re, ist aber einfach nur dumm, wenn die Quelle eine
-ODBC-Verbindung ist, die exakte Typen f�r jede Spalte �bermittelt.
-@end itemize
-@cindex Word
-@item Word
-
-Um Daten von MySQL in Word- / Excel-Dokumente abzurufen, m�ssen Sie den
-@code{MyODBC}-Treiber benutzen und das Add-in Microsoft Query hinzuf�gen.
-
-Erzeugen Sie zum Beispiel eine Datenbank mit einer Tabelle, die 2
-Text-Spalten enth�lt:
-
-@itemize @bullet
-@item
-F�gen Sie Zeilen mit dem @code{mysql}-Kommandozeilenwerkzeug ein.
-@item
-Erzeugen Sie eine DSN-Datei mit dem MyODBC-Treiber, die Sie zum Beispiel my
-nennen, f�r die oben genannten Datenbank.
-@item
-�ffnen Sie Word.
-@item
-Erzeugen Sie ein leeres Dokument.
-@item
-�ffnen Sie die Symbolleiste 'Datenbank' und klicken Sie auf die
-Schaltfl�che 'Datenbank einf�gen'.
-@item
-Klicken Sie auf die Schaltfl�che 'Daten abrufen'.
-@item
-Klicken Sie auf die Schaltfl�che 'MS Query'.
-@item
-Erzeugen Sie in MS Query eine neue Datenquelle unter Benutzung der
-DSN-Datei my.
-@item
-W�hlen Sie die neue Anfrage aus.
-@item
-W�hlen Sie die Spalten aus, die Sie haben wollen.
-@item
-Legen Sie bei Bedarf einen Filter fest.
-@item
-Legen Sie bei Bedarf eine Sortierung fest.
-@item
-W�hlen Sie 'Daten an Word zur�ckgeben'.
-@item
-Klicken Sie auf 'Beenden'.
-@item
-Klicken Sie auf 'Daten einf�gen' und w�hlen Sie die Datens�tze aus.
-@item
-Klicken Sie auf 'OK', und Sie sehen die Zeilen in Ihrem Word-Dokument.
-@end itemize
-
-@cindex odbcadmin
-@item odbcadmin
-Test-Programm f�r ODBC.
-@cindex Delphi-Programm
-@item Delphi
-Sie m�ssen BDE-Version 3.2 oder neuer benutzen. Setzen Sie die `Don't
-optimize column width'-Option, wenn Sie sich mit MySQL verbinden.
-
-Hier ist m�glicherweise n�tzlicher Delphi-Code, der sowohl einen
-ODBC-Eintrag als auch einen BDE-Eintrag f�r @strong{MyODBC} setzt (der
-BDE-Eintrag erfordert einen BDE-Alias-Editor, der kostenlos auf einer
-Delphi Super Page in Ihrer N�he herunter geladen werden kann (Dank daf�r an
-Bryan Brunton @email{bryan@@flesherfab.com}:
-
-@example
-fReg:= TRegistry.Create;
- fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True);
- fReg.WriteString('Database', 'Documents');
- fReg.WriteString('Description', ' ');
- fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll');
- fReg.WriteString('Flag', '1');
- fReg.WriteString('Password', '');
- fReg.WriteString('Port', ' ');
- fReg.WriteString('Server', 'xmark');
- fReg.WriteString('User', 'winuser');
- fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True);
- fReg.WriteString('DocumentsFab', 'MySQL');
- fReg.CloseKey;
- fReg.Free;
-
- Memo1.Lines.Add('DATABASE NAME=');
- Memo1.Lines.Add('USER NAME=');
- Memo1.Lines.Add('ODBC DSN=DocumentsFab');
- Memo1.Lines.Add('OPEN MODE=READ/WRITE');
- Memo1.Lines.Add('BATCH COUNT=200');
- Memo1.Lines.Add('LANGTreiber=');
- Memo1.Lines.Add('MAX ROWS=-1');
- Memo1.Lines.Add('SCHEMA CACHE DIR=');
- Memo1.Lines.Add('SCHEMA CACHE SIZE=8');
- Memo1.Lines.Add('SCHEMA CACHE TIME=-1');
- Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT');
- Memo1.Lines.Add('SQLQRYMODE=');
- Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE');
- Memo1.Lines.Add('ENABLE BCD=FALSE');
- Memo1.Lines.Add('ROWSET SIZE=20');
- Memo1.Lines.Add('BLOBS TO CACHE=64');
- Memo1.Lines.Add('BLOB SIZE=32');
-
- AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);
-@end example
-
-@cindex C++-Builder
-@item C++-Builder
-Getestet mit BDE-Version 3.0. Das einzige bekannte Problem ist, dass
-Anfragefelder nicht aktualisiert werden, wenn sich die Tabellenstruktur
-�ndert. BDE scheint jedoch keine Prim�rschl�ssel zu erkennen, sondern nur
-den Index PRIMARY, obwohl das eigentlich kein Problem darstellt.
-
-@item Vision
-Sie sollten den Option-Flag @code{Return matching rows} benutzen.
-
-@cindex Visual Basic
-@item Visual Basic
-Damit Sie eine Tabelle aktualisieren k�nnen, m�ssen Sie f�r die Tabelle
-einen Prim�rschl�ssel definieren.
-
-Visual Basic mit ADO kann keine gro�en Ganzzahlen handhaben. Das hei�t,
-dass einige Anfragen wie @code{SHOW PROCESSLIST} nicht korrekt
-funktionieren. Das l��t sich beheben, indem man die Option
-@code{OPTION=16834} in der ODBC-Verbindungs-Zeichenkette hinzuf�gt oder die
-@code{Change BIGINT columns to INT}-Option im MySQL-Verbindungsbildschirm
-setzt. Eventuell sollten Sie auch die @code{Return matching rows}-Option
-setzen.
-
-@item VisualInterDev
-Wenn Sie den Fehler @code{[Microsoft][ODBC Driver Manager] Driver does not
-support this parameter} erhalten, kann es daran liegen, dass Sie ein
-@code{BIGINT} in Ihrem Ergebnis haben. Versuchen Sie, die @code{Change
-BIGINT columns to INT}-Option im MySQL-Verbindungsbildschirm zu setzen.
-
-@item Visual Objects
-Sie sollten den Option-Flag @code{Don't optimize column widths} setzen.
-@end table
-
-
-@node ODBC and last_insert_id, MyODBC bug report, MyODBC clients, ODBC
-@c German node ODBC und last_insert_id
-@subsection Wie man den Wert einer @code{AUTO_INCREMENT}-Spalte in ODBC erh�lt
-
-@cindex AUTO-INCREMENT, ODBC
-
-Ein h�ufiges Problem ist es, den Wert einer automatisch erzeugten Kennung
-von einem @code{INSERT} zu erhalten. Bei ODBC k�nnen Sie etwas wie
-folgendes tun (unter der Annahme, dass @code{auto} ein
-@code{AUTO_INCREMENT}-Feld ist):
-
-@example
-INSERT INTO foo (auto,text) VALUES(NULL,'text');
-SELECT LAST_INSERT_ID();
-@end example
-
-Oder, wenn Sie die Kennung in eine andere Tabelle einf�gen wollen:
-
-@example
-INSERT INTO foo (auto,text) VALUES(NULL,'text');
-INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text');
-@end example
-
-@xref{Getting unique ID}.
-
-Bei einigen ODBC-Applikationen (zumindest Delphi und Access) kann folgende
-Anfrage benutzt werden, um eine neu eingef�gte Zeile zu finden:
-@example
-SELECT * FROM tabelle WHERE auto IS NULL;
-@end example
-
-
-@node MyODBC bug report, , ODBC and last_insert_id, ODBC
-@c German node MyODBC-Bug-Bericht
-@subsection Probleme mit MyODBC berichten
-
-@cindex berichten, MyODBC-Probleme
-@cindex Probleme, ODBC
-@cindex MyODBC, Probleme berichten
-
-Wenn Sie Probleme mit @strong{MyODBC} bekommen, sollten Sie als erstes eine
-Log-Datei durch den ODBC-Manager anlegen lassen (das Log, das Sie erhalten,
-wenn Sie Logs von ODBCADMIN abfragen) sowie ein @strong{MyODBC}-Log.
-
-Um ein @strong{MyODBC}-Log zu erhalten, tun Sie folgendes:
-
-@enumerate
-@item
-Stellen Sie sicher, dass Sie @code{myodbcd.dll} und nicht @code{myodbc.dll}
-benutzen. Am einfachsten ist es, wenn Sie sich @code{myodbcd.dll} aus der
-MyODBC-Distribution holen und es �ber @code{myodbc.dll} kopieren, die sich
-wahrscheinlich in Ihrem @code{C:\windows\system32}- oder
-@code{C:\winnt\system32}-Verzeichnis befindet.
-
-Denken Sie daran, dass Sie wahrscheinlich die alten myodbc.dll nach dem
-Testen wiederherstellen wollen, weil Sie um einiges schneller ist als
-@code{myodbcd.dll}.
-@item
-Kreuzen Sie `Trace MyODBC' im @strong{MyODBC}-Verbindungs- bzw.
-Konfigurationsfenster an. Das Log wird in die Datei @file{C:\myodbc.log}
-geschrieben.
-
-Wenn Sie zu diesem Fenster zur�ckkehren und feststellen, dass die
-Trace-Option nicht mehr angekreuzt ist, hei�t das, dass Sie nicht den
-@code{myodbcd.dll}-Treiber benutzen (siehe oben).
-@item
-Starten Sie Ihre Applikation und versuchen Sie, eine Fehlfunktion zu
-bekommen.
-@end enumerate
-
-Untersuchen Sie die @code{MyODBC-Trace-Datei}, um herauszufinden, was
-m�glicherweise schief geht. Sie k�nnen die abgesetzten Anfragen finden,
-indem Sie nach der Zeichenkette @code{>mysql_real_query} in der
-@file{myodbc.log}-Datei suchen.
-
-Sie sollten die Anfragen auch zus�tzlich im @code{mysql}-Monitor oder in
-@code{admndemo} laufen lassen, um herauszufinden, ob der Fehler bei MyODBC
-oder bei MySQL liegt.
-
-Wenn Sie herausgefunden haben, was schief l�uft, schicken Sie bitte nur die
-relevanten Zeilen (maximal 40 Zeilen) an @email{myodbc@@lists.mysql.com}.
-Bitte schicken Sie nie die gesamte MyODBC- oder ODBC-Log-Datei!
-
-Wenn Sie nicht herausfinden k�nnen, was schief l�uft, besteht die letzte
-Option darin, eine Archivdatei anzulegen (tar oder zip), die eine
-MyODBC-Trace-Datei, die ODBC-Log-Datei und eine README-Datei enth�lt, die
-das Problem erl�utert. Schicken Sie diese an
-@uref{ftp://support.mysql.com/pub/mysql/secret}. Nur wir bei MySQL AB haben
-Zugriff auf die Dateien, die Sie hochspielen, und wir gehen mit den Daten
-sehr diskret um!
-
-Wenn Sie ein Programm erzeugen k�nnen, das dieses Problem ebenfalls zeigt,
-laden Sie dieses bitte ebenfalls hoch!
-
-Wenn das Programm mit irgend einem anderen SQL-Server funktioniert, sollten
-Sie eine ODBC-Log-Datei anlegen, in der Sie dasselbe in dem anderen
-SQL-Server ausf�hren.
-
-Bedenken Sie, dass wir umso eher das Problem beheben k�nnen, desto mehr
-Informationen Sie uns zur Verf�gung stellen!
-
-
-@node C, Cplusplus, ODBC, Clients
-@c German node C
-@section MySQL-C-API
-
-@cindex C-API, datatypes
-@cindex Datentypen, C-API
-
-
-Der C-API-Code wird mit MySQL ausgeliefert. Er ist in der
-@code{mysqlclient}-Bibliothek enthalten und erlaubt C-Programmen, auf eine
-Datenbank zuzugreifen.
-
-Viele Clients in der MySQL-Quelldistribution sind in C geschrieben. Wenn
-Sie nach Beispielen f�r den Gebrauch der C-API suchen, schauen Sie sich
-diese Clients an. Sie finden Sie im @code{clients}-Verzeichnis in der
-MySQL-Quelldistribution.
-
-Viele andere Client-APIs (alle ausser Java) benutzen die
-@code{mysqlclient}-Bibliothek, um mit dem MySQL-Server zu kommunizieren.
-Das hei�t zum Beispiel, dass Sie viele derselben Umgebungsvariablen nutzen
-k�nnen, die von anderen Client-Programmen benutzt werden, weil sie von der
-Bibliothek referenziert werden. Eine Liste dieser Variablen findet sich
-unter @ref{Client-Side Scripts}.
-
-Der Client hat eine maximale Kommunikationspuffergr��e. Die anf�nglich
-zugewiesene Puffergr��e (16 KB) wird automatisch bis zur maximale Gr��e
-(16 MB) vergr��ert. Weil Puffergr��en nur bei Bedarf vergr��ert werden,
-bedeutet die einfache Erh�hung der maximalen Gr��e nicht per se, dass mehr
-Ressourcen benutzt werden. Die �berpr�fung der Gr��e ist haupts�chlich
-eine Pr�fung auf irrt�mliche Anfragen und Kommunikationspakete.
-
-Der Kommunikationspuffer muss Gro� genug sein, um ein einzelnes
-SQL-Statement aufzunehmen (f�r den Client-Server-Verkehr) und eine Zeile
-zur�ckgegebener Daten (f�r den Server-Client-Verkehr). Der
-Kommunikationspuffer jedes Threads wird dynamisch vergr��ert, um jede
-Anfrage oder Zeile bis zur maximalen Gr��e zu handhaben. Wenn Sie
-beispielsweise @code{BLOB}-Werte haben, die bis zu 16 MB an Daten
-beinhalten, m�ssen Sie eine Kommunikationspuffergrenze von zumindest 16 MB
-haben (sowohl beim Server als auch beim Client). Die vorgabem��ige
-maximale Gr��e beim Client liegt bei 16 MB, aber die vorgabem��ige
-maximale Grenze beim Server liegt bei 1 MB. Das k�nnen Sie vergr��ern,
-indem Sie den Wert des @code{max_allowed_packet}-Parameters setzen, wenn
-der Server gestartet wird. @xref{Server parameters}.
-
-Der MySQL-Server verringert den Kommunikationspuffer auf
-@code{net_buffer_length} Bytes nach jeder Anfrage. Bei Clients wird die
-Gr��e des zugewiesenen Puffers bei einer Verbindung nicht herabgesetzt,
-bis die Verbindung geschlossen wird. Dann wird der Client-Speicher wieder
-freigesetzt.
-
-Zum Programmieren mit Threads siehe @ref{Threaded clients}. Um eine
-Standalone-Applikation herzustellen, die "Server" und "Client" im selben
-Programm beinhaltet (und nicht mit einem externen MySQL-Server
-kommuniziert), siehe @ref{libmysqld}.
-
-
-@menu
-* C API datatypes::
-* C API function overview::
-* C API functions::
-* C Thread functions::
-* C Embedded Server func::
-* C API problems::
-* Building clients::
-* Threaded clients::
-* libmysqld::
-@end menu
-
-@node C API datatypes, C API function overview, C, C
-@c German node C-API-Datentypen
-@subsection C-API-Datentypen
-
-@table @code
-@tindex MYSQL C type
-@item MYSQL
-This structure represents a handle to one Datenbank connection. It is
-used f�r almost all MySQL Funktionen.
-
-@tindex MYSQL_RES C-Typ
-@item MYSQL_RES
-Diese Struktur repr�sentiert das Ergebnis einer Anfrage, die Zeilen
-zur�ckgibt (@code{SELECT}, @code{SHOW}, @code{DESCRIBE}, @code{EXPLAIN}).
-Die von der Anfrage zur�ckgegebene Informationen wird im Weiteren
-@emph{result set} (Ergebnismenge) genannt.
-
-@tindex MYSQL_ROW C-Typ
-@item MYSQL_ROW
-Das ist eine Typ-sichere Repr�sentation einer Zeile von Daten. Momentan ist
-sie als ein Array gez�hlter Byte-Zeichenketten implementiert. (Sie k�nnen
-diese nicht als NULL-begrenzte Zeichenketten behandeln, falls Feldwert
-bin�re Daten enthalten k�nnen, welche solche Werte intern NULL-Bytes
-enthalten k�nnen.) Zeilen werden mit dem Aufruf von
-@code{mysql_fetch_row()} abgeholt.
-
-@tindex MYSQL_FIELD C-Typ
-@item MYSQL_FIELD
-Diese Struktur enth�lt Informationen �ber ein Feld, wie Feldname, Feldtyp
-und Feldgr��e. Seine Elemente werden weiter unten genauer beschrieben. Sie
-erhalten die @code{MYSQL_FIELD}-Strukturen f�r jedes Feld durch den
-wiederholten Aufruf von @code{mysql_fetch_field()}. Feldwerte sind nicht
-Teil dieser Struktur, sondern in der @code{MYSQL_ROW}-Struktur enthalten.
-
-
-@tindex MYSQL_FIELD_OFFSET C-Typ
-@item MYSQL_FIELD_OFFSET
-Das ist eine Typ-sichere Repr�sentation eines Offsets in einer
-MySQL-Feldliste (benutzt von @code{mysql_field_seek()}.) Offsets sind
-Feldnummern innerhalb einer Zeile, beginnend mit 0.
-
-@tindex my_ulonglong C-Typ
-@tindex my_ulonglong-Werte, Ausgabe
-@item my_ulonglong
-Der Typ, der f�r die Anzahl von Zeilen und f�r @code{mysql_affected_rows()},
-@code{mysql_num_rows()}, und @code{mysql_insert_id()} benutzt wird. Dieser
-Typ stellt einen Bereich von @code{0} bis @code{1.84e19} zur Verf�gung.
-
-Auf manchen Systemen funktioniert der Versuch, einen Wert des Typs
-@code{my_ulonglong} auszugeben, nicht. Um einen solchen Wert auszugeben,
-wandeln Sie ihn in @code{unsigned long} um und benutzen Sie ein
-@code{%lu}-Ausgabeformat. Beispiel:
-@example
-printf (Anzahl von Zeilen: %lu\n", (unsigned long) mysql_num_rows(result));
-@end example
-@end table
-
-@noindent
-Die @code{MYSQL_FIELD}-Struktur enth�lt die unten aufgef�hrten Elemente:
-
-@table @code
-@item char * name
-Der Name des Feldes, als NULL-begrenzte Zeichenkette.
-
-@item char * table
-Der Name der Tabelle, die dieses Feld enth�lt, falls es kein berechnetes
-Feld ist. Bei berechneten Feldern ist der @code{table}-Wert eine leere
-Zeichenkette.
-
-@item char * def
-Der Vorgabewert dieses Felds als eine NULL-begrenzte Zeichenkette. Dieser
-wird nur gesetzt, wenn Sie @code{mysql_list_fields()} benutzen.
-
-@item enum enum_field_types-Typ
-Der Typ des Felds. Der @code{type}-Wert kann einer der folgenden sein:
-
-@multitable @columnfractions .3 .55
-@item @strong{Typwert} @tab @strong{Typbedeutung}
-@item @code{FIELD_TYPE_TINY} @tab @code{TINYINT}-Feld
-@item @code{FIELD_TYPE_SHORT} @tab @code{SMALLINT}-Feld
-@item @code{FIELD_TYPE_LONG} @tab @code{INTEGER}-Feld
-@item @code{FIELD_TYPE_INT24} @tab @code{MEDIUMINT}-Feld
-@item @code{FIELD_TYPE_LONGLONG} @tab @code{BIGINT}-Feld
-@item @code{FIELD_TYPE_DECIMAL} @tab @code{DECIMAL}- oder @code{NUMERIC}-Feld
-@item @code{FIELD_TYPE_FLOAT} @tab @code{FLOAT}-Feld
-@item @code{FIELD_TYPE_DOUBLE} @tab @code{DOUBLE}- oder @code{REAL}-Feld
-@item @code{FIELD_TYPE_TIMESTAMP} @tab @code{TIMESTAMP}-Feld
-@item @code{FIELD_TYPE_DATE} @tab @code{DATE}-Feld
-@item @code{FIELD_TYPE_TIME} @tab @code{TIME}-Feld
-@item @code{FIELD_TYPE_DATETIME} @tab @code{DATETIME}-Feld
-@item @code{FIELD_TYPE_YEAR} @tab @code{YEAR}-Feld
-@item @code{FIELD_TYPE_STRING} @tab @code{CHAR}- oder @code{VARCHAR}-Feld
-@item @code{FIELD_TYPE_BLOB} @tab @code{BLOB}- oder @code{TEXT}-Feld (benutzen Sie @code{max_length}, um die maximale L�nge festzulegen)
-@item @code{FIELD_TYPE_SET} @tab @code{SET}-Feld
-@item @code{FIELD_TYPE_ENUM} @tab @code{ENUM}-Feld
-@item @code{FIELD_TYPE_NULL} @tab @code{NULL}-Feld
-@item @code{FIELD_TYPE_CHAR} @tab Veraltet; benutzen Sie statt dessen @code{FIELD_TYPE_TINY}
-@end multitable
-
-Sie k�nnen das @code{IS_NUM()}-Makro benutzen, um zu testen, ob ein Feld
-einen numerischen Typ besitzt oder nicht. �bergeben Sie den
-@code{type}-Wert an @code{IS_NUM()}, und Sie erhalten WAHR (true), wenn das
-Feld numerisch ist:
-
-@example
-if (IS_NUM(field->type))
- printf("Feld ist numerisch\n");
-@end example
-
-@item unsigned int length
-Die Breite des Felds, wie in der Tabellendefinition festgelegt.
-
-@item unsigned int max_length
-Die maximale Breite des Felds f�r die Ergebnismenge (die L�nge des l�ngsten
-Feldwerts f�r die Zeilen, die tats�chlich in der Ergebnismenge enthalten
-sind). Wenn Sie @code{mysql_store_result()} oder @code{mysql_list_fields()}
-benutzen, enth�lt die Variable die maximale L�nge f�r das Feld. Wenn Sie
-@code{mysql_use_result()} benutzen, ist sie 0.
-
-@item unsigned int flags
-Unterschiedliche Bit-Flags f�r das Feld. Der @code{flags}-Wert kann 0 oder
-mehr der folgenden Bits gesetzt haben:
-
-@multitable @columnfractions .3 .55
-@item @strong{Flag-Wert} @tab @strong{Flag-Bedeutung}
-@item @code{NOT_NULL_FLAG} @tab Feld darf nicht @code{NULL} sein
-@item @code{PRI_KEY_FLAG} @tab Feld ist Teil eines Prim�rschl�ssels
-@item @code{UNIQUE_KEY_FLAG} @tab Feld ist Teil eines eindeutigen Schl�ssels
-@item @code{MULTIPLE_KEY_FLAG} @tab Feld ist Teil eines nicht eindeutigen Schl�ssels
-@item @code{UNSIGNED_FLAG} @tab Feld hat das @code{UNSIGNED}-Attribute
-@item @code{ZEROFILL_FLAG} @tab Feld hat das @code{ZEROFILL}-Attribute
-@item @code{BINARY_FLAG} @tab Feld hat das @code{BINARY}-Attribute
-@item @code{AUTO_INCREMENT_FLAG} @tab Feld hat das @code{AUTO_INCREMENT}-Attribut
-@item @code{ENUM_FLAG} @tab Feld ist ein @code{ENUM} (veraltet)
-@item @code{BLOB_FLAG} @tab Feld ist ein @code{BLOB} oder @code{TEXT} (veraltet)
-@item @code{TIMESTAMP_FLAG} @tab Feld ist ein @code{TIMESTAMP} (veraltet)
-@end multitable
-
-Die Benutzung der @code{BLOB_FLAG}-, @code{ENUM_FLAG}- und
-@code{TIMESTAMP_FLAG}-Flags ist veraltet, weil sie den Feldtyp statt eines
-Attributs seines Typs angeben. Statt dessen sollten Sie @code{field->type}
-gegen @code{FIELD_TYPE_BLOB}, @code{FIELD_TYPE_ENUM} oder
-@code{FIELD_TYPE_TIMESTAMP} testen.
-
-@noindent
-Das unten stehende Beispiel zeigt eine typische Benutzung des
-@code{flags}-Werts:
-
-@example
-if (field->flags & NOT_NULL_FLAG)
- printf("Feld darf nicht NULL sein\n");
-@end example
-
-Sie k�nnen aus Bequemlichkeitsgr�nden folgende Makros benutzen, um den
-Bool'schen Status des @code{flags}-Werts zu bestimmen:
-
-@multitable @columnfractions .3 .5
-@item @code{IS_NOT_NULL(flags)} @tab WAHR, wenn der Feldwert als @code{NOT NULL} definiert ist
-@item @code{IS_PRI_KEY(flags)} @tab WAHR, wenn der Feldwert ein Prim�rschl�ssel ist
-@item @code{IS_BLOB(flags)} @tab WAHR, wenn der Feldwert ein @code{BLOB} oder @code{TEXT} ist (veraltet; testen Sie statt dessen @code{field->type})
-@end multitable
-
-@item unsigned int decimals
-Die Anzahl von Dezimalstellen f�r numerische Felder.
-@end table
-
-
-@node C API function overview, C API functions, C API datatypes, C
-@c German node C-API-Funktions�berblick
-@subsection C-API-Funktions�berblick
-
-@cindex C-API, Funktionen
-@cindex Funktionen, C-API
-
-Die in der C-API verf�gbaren Funktionen sind unten aufgef�hrt und im
-n�chsten Abschnitt detaillierter beschrieben.
-@xref{C API functions}.
-
-@multitable @columnfractions .3 .7
-@item @strong{mysql_affected_rows()} @tab
-Gibt die Anzahl von Zeilen zur�ck, die durch die letzte @code{UPDATE}-,
-@code{DELETE}- oder @code{INSERT}-Anfrage ge�ndert, gel�scht bzw.
-hinzugef�gt wurden.
-
-@item @strong{mysql_close()} @tab
-Schlie�t eine Server-Verbindung.
-
-@item @strong{mysql_connect()} @tab
-Stellt die Verbindung mit einem MySQL-Server her. Diese Funktion ist
-veraltet, benutzen Sie statt dessen @code{mysql_real_connect()}.
-
-@item @strong{mysql_change_user()} @tab
-�ndert Benutzer und Datenbank bei einer ge�ffneten Verbindung.
-
-@item @strong{mysql_character_set_name()} @tab
-Gibt den Namen des vorgabem��igen Zeichensatzes f�r die Verbindung zur�ck.
-
-@item @strong{mysql_create_db()} @tab
-Erzeugt eine Datenbank. Diese Funktion ist veraltet, benutzen Sie statt
-dessen den SQL-Befehl @code{CREATE DATABASE}.
-
-@item @strong{mysql_data_seek()} @tab
-Sucht bis zu einer beliebigen Zeile in einer Anfrage-Ergebnismenge.
-
-@item @strong{mysql_debug()} @tab
-Macht ein @code{DBUG_PUSH} mit der angegebenen Zeichenkette.
-
-@item @strong{mysql_drop_db()} @tab
-L�scht eine Datenbank. Diese Funktion ist veraltet, benutzen Sie statt
-dessen den SQL-Befehl @code{DROP DATABASE}.
-
-@item @strong{mysql_dump_debug_info()} @tab
-Veranlasst den Server, Debug-Informationen in die Log-Datei zu schreiben.
-
-@item @strong{mysql_eof()} @tab
-Stellt fest, ob die letzte Zeile der Ergebnismenge gelesen wurde oder
-nicht. Diese Funktion ist veraltet, benutzen Sie statt dessen
-@code{mysql_errno()} oder @code{mysql_error()}.
-
-@item @strong{mysql_errno()} @tab
-Gibt die Fehlernummer der zuletzt aufgerufenen MySQL-Funktion zur�ck.
-
-@item @strong{mysql_error()} @tab
-Gibt die Fehlermeldung der zuletzt aufgerufenen MySQL-Funktion zur�ck.
-
-@item @strong{mysql_real_escape_string()} @tab
-Escapet Sonderzeichen in einer Zeichenkette, die f�r ein SQL-Statement
-benutzt wird, wobei der aktuelle Zeichensatz der Verbindung ber�cksichtigt
-wird.
-
-@item @strong{mysql_escape_string()} @tab
-Escapet Sonderzeichen in einer Zeichenkette, die f�r ein SQL-Statement
-benutzt wird.
-
-@item @strong{mysql_fetch_field()} @tab
-Gibt den Typ des n�chsten Tabellenfelds zur�ck.
-
-@item @strong{mysql_fetch_field_direct()} @tab
-Gibt den Typ eines Tabellenfelds zur�ck, angegeben durch eine Feldnummer.
-
-@item @strong{mysql_fetch_fields()} @tab
-Gibt ein Array aller Feldstrukturen zur�ck.
-
-@item @strong{mysql_fetch_lengths()} @tab
-Gibt die L�nge aller Spalten in der aktuellen Zeile zur�ck.
-
-@item @strong{mysql_fetch_row()} @tab
-Holt die n�chste Zeile aus der Ergebnismenge.
-
-@item @strong{mysql_field_seek()} @tab
-Setzt den Spaltencursor auf eine bestimmte Spalte.
-
-@item @strong{mysql_field_count()} @tab
-Gibt die Anzahl der Ergebnisspalten f�r die letzte Anfrage zur�ck.
-
-@item @strong{mysql_field_tell()} @tab
-Gibt die Position des Feldcursors zur�ck, der f�r das letzte
-@code{mysql_fetch_field()} benutzt wurde.
-
-@item @strong{mysql_free_result()} @tab
-Gibt Speicher frei, der von einer Ergebnismenge benutzt wird.
-
-@item @strong{mysql_get_client_info()} @tab
-Gibt Client-Versionsinformationen zur�ck.
-
-@item @strong{mysql_get_host_info()} @tab
-Gibt eine Zeichenkette zur�ck, die die Verbindung beschreibt.
-
-@item @strong{mysql_get_proto_info()} @tab
-Gibt die Protokollversion zru�ck, die von der Verbindung benutzt wird.
-
-@item @strong{mysql_get_server_info()} @tab
-Gibt die Server-Versionsnummer zur�ck.
-
-@item @strong{mysql_info()} @tab
-Gibt Informationen �ber die zuletzt ausgef�hrte Anfrage zur�ck.
-
-@item @strong{mysql_init()} @tab
-Holt oder initialisiert eine @code{MYSQL}-Struktur.
-
-@item @strong{mysql_insert_id()} @tab
-Gibt die Kennung zur�ck, die f�r eine @code{AUTO_INCREMENT}-Spalte durch
-die letzte Anfrage erzeugt wurde.
-
-@item @strong{mysql_kill()} @tab
-T�tet einen angegebenen Thread.
-
-@item @strong{mysql_list_dbs()} @tab
-Gibt die Datenbanknamen zur�ck, die mit einem einfachen regul�ren Ausdruck
-�bereinstimmen.
-
-@item @strong{mysql_list_fields()} @tab
-Gibt die Feldnamen zur�ck, die mit einem einfachen regul�ren Ausdruck
-�bereinstimmen.
-
-@item @strong{mysql_list_processes()} @tab
-Gibt eine Liste der aktuellen Server-Threads zur�ck.
-
-@item @strong{mysql_list_tables()} @tab
-Gibt Tabellenamen zur�ck, die mit einem einfachen regul�ren Ausdruck
-�bereinstimmen.
-
-@item @strong{mysql_num_fields()} @tab
-Gibt die Anzahl von Spalten in einer Ergebnismenge zur�ck.
-
-@item @strong{mysql_num_rows()} @tab
-Gibt die Anzahl von Zeilen in einer Ergebnismenge zur�ck.
-
-@item @strong{mysql_options()} @tab
-Setzt Verbindungsoptionen f�r @code{mysql_connect()}.
-
-@item @strong{mysql_ping()} @tab
-Pr�ft, ob die Verbindung zum Server funktioniert oder nicht und verbindet
-sich erneut, falls notwendig.
-
-@item @strong{mysql_Anfrage()} @tab
-F�hrt eine SQL-Anfrage aus, die als NULL-begrenzte Zeichenkette angegeben
-wird.
-
-@item @strong{mysql_real_connect()} @tab
-Verbindet sich mit einem MySQL-Server.
-
-@item @strong{mysql_real_query()} @tab
-F�hrt eine SQL-Anfrage aus, die als gez�hlte Zeichenkette angegeben wird.
-
-@item @strong{mysql_reload()} @tab
-Weist den Server an, die Berechtigungstabellen erneut zu laden.
-
-@item @strong{mysql_row_seek()} @tab
-Sucht bis zu einer Zeile in einer Ergebnismenge, indem sie den Wert
-benutzt, der von @code{mysql_row_tell()} zur�ckgegeben wird.
-
-@item @strong{mysql_row_tell()} @tab
-Gibt die Zeilencursorposition zur�ck.
-
-@item @strong{mysql_select_db()} @tab
-W�hlt eine Datenbank aus.
-
-@item @strong{mysql_shutdown()} @tab
-F�hrt den Datenbankserver herunter.
-
-@item @strong{mysql_stat()} @tab
-Gibt den Serverstatus als Zeichenkette zur�ck.
-
-@item @strong{mysql_store_result()} @tab
-Ruft eine komplette Ergebnismenge zum Client ab.
-
-@item @strong{mysql_thread_id()} @tab
-Gibt die aktuelle Thread-Kennung zur�ck.
-
-@item @strong{mysql_thread_safe()} @tab
-Gibt 1 zur�ck, wenn die Clients Thread-sicher kompiliert sind.
-
-@item @strong{mysql_use_result()} @tab
-Initialisiert den zeilenweisen Abruf einer Ergebnismenge.
-@end multitable
-
-Um sich mit dem Server zu verbinden, rufen Sie @code{mysql_init()} auf, um
-einen Verbindungs-Handler zu initialisieren. Rufen Sie dann
-@code{mysql_real_connect()} mit diesem Handler auf (mit Informationen wie
-Hostname, Benutzername und Passwort). Beim Verbinden setzt
-@code{mysql_real_connect()} den @code{reconnect}-Flag (Teil der
-MYSQL-Struktur) auf einen Wert von @code{1}. Dieser Flag legt bei einer
-Anfrage, die wegen einer verloren gegangenen Serververbindung nicht
-ausgef�hrt werden kann, fest, dass ein erneutes Verbinden versucht wird,
-bevor aufgegeben wird. Wenn Sie mit der Verbindung fertig sind, rufen Sie
-@code{mysql_close()} auf, um sie zu beenden.
-
-W�hrend eine Verbindung aktiv ist, kann der Client SQL-Anfragen an den
-Server schicken, indem er @code{mysql_query()} oder
-@code{mysql_real_query()} benutzt. Der Unterschied zwischen beiden ist,
-dass @code{mysql_query()} erwartet, dass die Anfrage als NULL-separierte
-Zeichenkette angegeben wird, w�hrend @code{mysql_real_query()} eine
-gez�hlte Zeichenkette erwartet. Wenn die Zeichenkette Bin�rdaten enth�lt
-(was NULL-Bytes beinhalten kann), m�ssen Sie @code{mysql_real_query()}
-benutzen.
-
-Bei jeder Nicht-@code{SELECT}-Anfrage (wie @code{INSERT}, @code{UPDATE},
-@code{DELETE}) finden Sie heraus, wie viele Zeilen ge�ndert (betroffen)
-wurden, indem Sie @code{mysql_affected_rows()} aufrufen.
-
-Bei @code{SELECT}-Anfragen rufen Sie die ausgew�hlten Zeilen als
-Ergebnismenge ab. (Beachten Sie, dass einige Statements �hnlich wie
-@code{SELECT} sind, weil auch sie Zeilen zur�ckgeben. Das sind @code{SHOW},
-@code{DESCRIBE} und @code{EXPLAIN}. Sie werden auf dieselbe Weise behandelt
-wie @code{SELECT}-Statements.)
-
-Es gibt f�r einen Client zwei M�glichkeiten, Ergebnismengen zu verarbeiten.
-Eine M�glichkeit besteht darin, die gesamte Ergebnismenge auf einmal
-abzurufen, indem @code{mysql_store_result()} aufgerufen wird. Diese
-Funktion holt alle Zeilen vom Server ab, die von der Anfrage zur�ckgegeben
-werden, und speichert sie im Client. Die zweite M�glichkeit besteht darin,
-dass der Client die Ergebnismenge zeilenweise abruft, indem er
-@code{mysql_use_result()} aufruft. Diese Funktion initialisiert den Abruf,
-holt aber keinerlei Zeilen vom Server ab.
-
-In beiden F�llen k�nnen Sie auf Zeilen zugreifen, indem Sie
-@code{mysql_fetch_row()} aufrufen. Bei @code{mysql_store_result()} greift
-@code{mysql_fetch_row()} auf Zeilen zur�ck, die bereits vom Server geholt
-wurden. Bei @code{mysql_use_result()} ruft @code{mysql_fetch_row()} die
-Zeilen direkt vom Server ab. Informationen �ber die Gr��e der Daten in
-jeder Zeile sind durch Aufruf von @code{mysql_fetch_lengths()} verf�gbar.
-
-Wenn Sie mit einer Ergebnismenge fertig sind, rufen Sie
-@code{mysql_free_result()} auf, um den hierf�r benutzten Speicher
-freizugeben.
-
-Die beiden Abrufmechanismen sind komplement�r. Client-Programme sollten
-entscheiden, welcher Ansatz der f�r ihre Erfordernisse geeignetste ist. In
-der Praxis wird f�r Clients h�ufiger @code{mysql_store_result()} verwendet.
-
-Ein Vorteil von @code{mysql_store_result()} ist, dass bereits alle Zeilen
-zum Client geholt wurden. Deshalb k�nnen Sie nicht nur sequentiell auf
-Zeilen zugreifen, sondern sich in der Ergebnismenge vorw�rts und r�ckw�rts
-bewegen, indem Sie @code{mysql_data_seek()} oder @code{mysql_row_seek()}
-benutzen, um die aktuelle Position innerhalb der Ergebnismenge zu �ndern.
-Sie k�nnen auch herausfinden, wie viele Zeilen es gibt, indem Sie
-@code{mysql_num_rows()} aufrufen. Auf der anderen Seite kann der
-Speicherbedarf f�r @code{mysql_store_result()} sehr hoch sein, wenn Sie
-gro�e Ergebnismengen abrufen, so dass Speichermangel eintreten kann.
-
-Ein Vorteil von @code{mysql_use_result()} ist, dass der Client weniger
-Arbeitsspeicher f�r die Ergebnismenge ben�tigt, weil er nur eine Zeile
-zugleich erh�lt (und weil weniger Zuweisungs-Overhead da ist, kann
-@code{mysql_use_result()} schneller sein). Die Nachteile liegen darin, dass
-Sie jede Zeile schnell verarbeiten m�ssen, um zu vermeiden, den Server zu
-blockieren. Ausserdem haben Sie keinen wahlfreien (random) Zugriff auf die
-Zeilen innerhalb einer Ergebnismenge (Sie k�nnen auf die Zeilen nur
-sequentiell zugreifen), und Sie wissen nicht, wie viele Zeilen sich in der
-Ergebnismenge befinden, bis Sie sie alle abgerufen haben. Dar�ber hinaus
-@emph{m�ssen} Sie alle Zeilen abrufen, selbst wenn Sie w�hrend des Abrufs
-feststellen, dass Sie die Information gefunden haben, nach der Sie suchen.
-
-Die API erm�glicht Clients, auf die Anfragen entsprechend zu antworten
-(Zeilen nur wenn n�tig abzurufen), ohne zu wissen, ob die Anfragen ein
-@code{SELECT} ist oder nicht. Das erreichen Sie durch Aufruf von
-@code{mysql_store_result()} nach jedem @code{mysql_query()} (oder
-@code{mysql_real_query()}). Wenn der Ergebnismengenaufruf erfolgreich ist,
-war die Anfrage ein @code{SELECT} und Sie k�nnen die Zeilen lesen. Wenn der
-Ergebnismengenaufruf fehlschl�gt, rufen Sie @code{mysql_field_count()} auf,
-um festzustellen, ob ein Ergebnis erwartet wurde oder nicht. Wenn
-@code{mysql_field_count()} 0 zur�ckgibt, gab die Anfrage keine Daten zur�ck
-(was anzeigt, dass sie kein @code{INSERT}, @code{UPDATE}, @code{DELETE}
-usw. war), und es wurde nicht erwartet, dass sie Zeilen zur�ckgibt. Wenn
-@code{mysql_field_count()} ungleich 0 ist, sollte die Anfrage Zeilen
-zur�ckgegeben haben, tat das aber nicht. Das zeigt an, dass die Anfrage ein
-@code{SELECT} war, das fehlschlug. Sehen Sie in der Beschreibung von
-@code{mysql_field_count()} wegen eines Beispiels nach, wie das gemacht
-wird.
-
-Sowohl @code{mysql_store_result()} als auch @code{mysql_use_result()}
-gestatten Ihnen, Informationen �ber die Felder zu erlangen, aus denen die
-Ergebnismenge besteht (die Anzahl der Felder, ihre Namen, Typen usw.). Sie
-k�nnen sequentiell auf Feldinformationen innerhalb der Zeile zugreifen,
-indem Sie @code{mysql_fetch_field()} wiederholt aufrufen, oder direkt auf
-die Feldnummer innerhalb einer Zeile durch Aufruf von
-@code{mysql_fetch_field_direct()}. Die aktuelle Feldcursorposition kann
-durch den Aufruf von @code{mysql_field_seek()} ge�ndert werden. Wenn Sie
-den Feldcursor setzen, betrifft das nachfolgende Aufrufe von
-@code{mysql_fetch_field()}. Sie erhalten alle Feldinformationen auf einmal,
-wenn Sie @code{mysql_fetch_fields()} aufrufen.
-
-Um Fehler zu erkennen und zu berichten, stellt MySQL den Zugriff auf
-Fehlerinformationen durch die @code{mysql_errno()}- und
-@code{mysql_error()}-Funktionen zur Verf�gung. Diese geben den Fehlercode
-oder die Fehlermeldung f�r die zuletzt aufgerufenen Funktionen zur
-Verf�gung, die erfolgreich sein oder fehlschlagen k�nnen, so dass Sie
-feststellen k�nnen, wann ein Fehler auftrat und welcher es war.
-
-
-@node C API functions, C Thread functions, C API function overview, C
-@c German node C-API-Funktionen
-@subsection C-API-Funktionsbeschreibungen
-
-
-In den unten stehenden Beschreibungen bedeutet ein Parameter oder
-R�ckgabewert von @code{NULL} @code{NULL} im Sinne der
-C-Programmier-Sprache, nicht einen MySQL-@code{NULL}-Wert.
-
-Funktionen, die einen Wert zur�ckgeben, geben allgemein einen Zeiger oder
-eine Ganzzahl zur�ck. Falls nicht anders angegeben geben Funktionen, die
-einen Zeiger zur�ckgeben, einen Nicht-@code{NULL}-Wert zur�ck, um Erfolg
-anzuzeigen, oder einen @code{NULL}-Wert, um einen Fehler anzuzeigen.
-Funktionen, die eine Ganzzahl zur�ckgeben, geben 0 zur�ck, um Erfolg
-anzuzeigen, und Nicht-0, um einen Fehler anzuzeigen. Beachten Sie, dass
-``Nicht-0'' genau das bedeutet. Wenn die Funktionsbeschreibung nichts
-anderes aussagt, testen Sie nicht gegen einen anderen Wert als 0:
-
-@example
-if (ergebnis) /* korrekt */
- ... FEHLER ...
-
-if (ergebnis < 0) /* nicht korrekt */
- ... FEHLER ...
-
-if (ergebnis == -1) /* nicht korrekt */
- ... FEHLER ...
-@end example
-
-Wenn eine Funktion einen Fehler zur�ckgibt, listet der Unterabschnitt
-@strong{Errors} der Funktionsbeschreibung die m�glichen Fehlertypen auf.
-Sie finden heraus, welcher davon auftrat, indem Sie @code{mysql_errno()}
-aufrufen. Eine Zeichenketten-Darstellung des Fehler kann durch Aufruf von
-@code{mysql_error()} erlangt werden.
-
-
-@menu
-* mysql_affected_rows::
-* mysql_close::
-* mysql_connect::
-* mysql_change_user::
-* mysql_character_set_name::
-* mysql_create_db::
-* mysql_data_seek::
-* mysql_debug::
-* mysql_drop_db::
-* mysql_dump_debug_info::
-* mysql_eof::
-* mysql_errno::
-* mysql_error::
-* mysql_escape_string::
-* mysql_fetch_field::
-* mysql_fetch_fields::
-* mysql_fetch_field_direct::
-* mysql_fetch_lengths::
-* mysql_fetch_row::
-* mysql_field_count::
-* mysql_field_seek::
-* mysql_field_tell::
-* mysql_free_result::
-* mysql_get_client_info::
-* mysql_get_host_info::
-* mysql_get_proto_info::
-* mysql_get_server_info::
-* mysql_info::
-* mysql_init::
-* mysql_insert_id::
-* mysql_kill::
-* mysql_list_dbs::
-* mysql_list_fields::
-* mysql_list_processes::
-* mysql_list_tables::
-* mysql_num_fields::
-* mysql_num_rows::
-* mysql_options::
-* mysql_ping::
-* mysql_query::
-* mysql_real_connect::
-* mysql_real_escape_string::
-* mysql_real_query::
-* mysql_reload::
-* mysql_row_seek::
-* mysql_row_tell::
-* mysql_select_db::
-* mysql_shutdown::
-* mysql_stat::
-* mysql_store_result::
-* mysql_thread_id::
-* mysql_use_result::
-@end menu
-
-@node mysql_affected_rows, mysql_close, C API functions, C API functions
-@c German node mysql_affected_rows
-@subsubsection @code{mysql_affected_rows()}
-
-@findex @code{mysql_affected_rows()}
-
-@code{my_ulonglong mysql_affected_rows(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Gibt die Anzahl von Zeilen zur�ck, die durch das letzte @code{UPDATE}
-ge�ndert, durch das letzte @code{DELETE} gel�scht oder durch das letzte
-@code{INSERT} eingef�gt wurden. Kann direkt nach @code{mysql_query()}
-aufgerufen werden, bei @code{UPDATE}-, @code{DELETE}- oder
-@code{INSERT}-Statements. Bei @code{SELECT}-Statements funktioniert
-@code{mysql_affected_rows()} wie @code{mysql_num_rows()}.
-
-@subsubheading R�ckgabewerte
-
-Eine Ganzzahl gr��er als 0 gibt die Anzahl von Zeilen an, die betroffen
-oder abgerufen wurden. 0 gibt an, dass keine Datens�tze bei einem
-@code{UPDATE}-Statement ge�ndert wurden, keine Zeilen der
-@code{WHERE}-Klausel in der Anfrage entsprachen oder dass bislang keine
-Anfrage ausgef�hrt wurde. -1 gibt an, dass die Anfrage einen Fehler
-zur�ckgab oder dass - bei einer @code{SELECT}-Anfrage -
-@code{mysql_affected_rows()} vor @code{mysql_store_result()} aufgerufen
-wurde.
-
-@subsubheading Fehler
-
-Keine.
-
-@subsubheading Beispiel
-
-@example
-mysql_query(&mysql,"UPDATE produkte SET kosten=kosten*1.25 WHERE gruppe=10");
-printf("%ld produkte updated",(long) mysql_affected_rows(&mysql));
-@end example
-
-Wenn man den Flag @code{CLIENT_FOUND_ROWS} angibt, wenn man sich mit
-@code{mysqld} verbindet, gibt @code{mysql_affected_rows()} die Anzahl von
-Zeilen zur�ck, die mit dem @code{WHERE}-Statement bei
-@code{UPDATE}-Statements �bereinstimmten.
-
-Beachten Sie bei der Benutzung des @code{REPLACE}-Befehls, dass
-@code{mysql_affected_rows()} 2 zur�ckgibt, wenn die neue Zeile eine alte
-Zeile ersetzte. Das liegt daran, dass in diesem Fall eine neue Zeile
-eingef�gt und dann das alte Duplikat gel�scht wurde.
-
-
-@node mysql_close, mysql_connect, mysql_affected_rows, C API functions
-@c German node mysql_close
-@subsubsection @code{mysql_close()}
-
-@findex @code{mysql_close()}
-
-@code{void mysql_close(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-Schlie�t eine vorher ge�ffnete Verbindung. @code{mysql_close()} gibt auch
-den Verbindungs-Handle frei, der von @code{mysql} zugewiesen wurde, wenn
-der Handle automatisch mit @code{mysql_init()} oder @code{mysql_connect()}
-zugewiesen wurde.
-
-@subsubheading R�ckgabewerte
-
-Keine.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_connect, mysql_change_user, mysql_close, C API functions
-@c German node mysql_connect
-@subsubsection @code{mysql_connect()}
-
-@findex @code{mysql_connect()}
-
-@code{MYSQL *mysql_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd)}
-
-@subsubheading Beschreibung
-
-Diese Funktion ist veraltet. Sie sollten statt dessen
-@code{mysql_real_connect()} benutzen.
-
-@code{mysql_connect()} versucht, eine Verbindung zu einer
-MySQL-Datenbankmaschine aufzubauen, die auf @code{host} l�uft.
-@code{mysql_connect()} muss erfolgreich beendet werden, bevor Sie irgend
-welche weiteren API-Funktionen aufrufen k�nnen, mit Ausnahme von
-@code{mysql_get_client_info()}.
-
-Die Bedeutung der Parameter ist dieselbe wie die entsprechenden Parameter
-bei @code{mysql_real_connect()}, mit dem Unterschied, dass die
-Verbindungsparameter @code{NULL} sein d�rfen. In diesem Fall weist die
-C-API automatisch Speicher f�r die Verbindungsstruktur zu und gibt diesen
-frei, wenn Sie @code{mysql_close()} aufrufen. Der Nachteil dieses Ansatzes
-besteht darin, dass Sie keine Fehlermeldung abrufen k�nnen, wenn die
-Verbindung fehlschl�gt. (Um Fehlerinformationen von @code{mysql_errno()}
-oder @code{mysql_error()} abrufen zu k�nnen, m�ssen Sie einen g�ltigen
-@code{MYSQL}-Zeiger angeben.)
-
-@subsubheading R�ckgabewerte
-
-Dieselben wie f�r @code{mysql_real_connect()}.
-
-@subsubheading Fehler
-
-Dieselben wie f�r @code{mysql_real_connect()}.
-
-
-@node mysql_change_user, mysql_character_set_name, mysql_connect, C API functions
-@c German node mysql_change_user
-@subsubsection @code{mysql_change_user()}
-
-@findex @code{mysql_change_user()}
-
-@code{my_bool mysql_change_user(MYSQL *mysql, const char *user, const
-char *password, const char *db)}
-
-@subsubheading Beschreibung
-
-�ndert den Benutzer und veranlasst, dass die Datenbank, die mit @code{db}
-angegeben wurde, die vorgabem��ige (aktuelle) Datenbank f�r die Verbindung
-wird, die durch @code{mysql} festgelegt wurde. In nachfolgenden Anfragen
-ist diese Datenbank die Vorgabe f�r Tabellenverweise, bei denen nicht
-explizit eine Datenbank angegeben wird.
-
-Diese Funktion wurde in MySQL-Version 3.23.3 eingef�hrt.
-
-@code{mysql_change_user()} schl�gt fehl, wenn sich der Benutzer nicht
-authentifizieren kann oder wenn er keine Zugriffsrechte auf die Datenbank
-hat. In diesem Fall werden Benutzer und Datenbank nicht ge�ndert.
-
-Der @code{db}-Parameter kann auf @code{NULL} gesetzt werden, wenn Sie keine
-vorgabem��ige Datenbank haben wollen.
-
-@subsubheading R�ckgabewerte
-
-0 f�r Erfolg. Nicht-0, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-Dieselben, die Sie von @code{mysql_real_connect()} erhalten.
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurde in nicht korrekter Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler ist aufgetreten.
-@item ER_UNKNOWN_COM_ERROR
-Der MySQL-Server hat diesen Befehl nicht implementiert (wahrscheinlich ein
-alter Server).
-@item ER_ACCESS_DENIED_ERROR
-Benutzername oder Passwort sind falsch.
-@item ER_BAD_DB_ERROR
-Die Datenbank existiert nicht.
-@item ER_DBACCESS_DENIED_ERROR
-Der Benutzer hat keine Zugriffsrechte auf die Datenbank.
-@item ER_WRONG_DB_NAME
-Der Datenbankname war zu lang.
-@end table
-
-@subsubheading Beispiel
-
-@example
-if (mysql_change_user(&mysql, "benutzer", "passwort", "neue_datenbank"))
-@{
- fprintf(stderr, "�nderung des Benutzers fehlgeschlagen. Fehler: %s\n",
- mysql_error(&mysql));
-@}
-@end example
-
-
-@node mysql_character_set_name, mysql_create_db, mysql_change_user, C API functions
-@c German node mysql_character_set_name
-@subsubsection @code{mysql_character_set_name()}
-
-@findex @code{mysql_character_set_name()}
-
-@code{const char *mysql_character_set_name(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Gibt den vorgabem��igen Zeichensatz f�r die aktuelle Verbindung zur�ck.
-
-@subsubheading R�ckgabewerte
-
-Der vorgabem��ige Zeichensatz
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_create_db, mysql_data_seek, mysql_character_set_name, C API functions
-@c German node mysql_create_db
-@subsubsection @code{mysql_create_db()}
-
-@findex @code{mysql_create_db()}
-
-@code{int mysql_create_db(MYSQL *mysql, const char *db)}
-
-@subsubheading Beschreibung
-Erzeugt die Datenbank, die durch den @code{db}-Parameter angegeben wird.
-
-Diese Funktion ist veraltet. Vorzugsweise sollten Sie @code{mysql_query()}
-benutzen, um statt dessen ein SQL-@code{CREATE DATABASE}-Statement
-abzusetzen.
-
-@subsubheading R�ckgabewerte
-
-0, wenn die Datenbank erfolgreich erzeugt wurde. Nicht-0, wenn ein Fehler
-auftrat.
-
-@subsubheading Fehler
-@table @code
-
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden in nicht korrekter Reihenfolge ausgef�hrt.
-
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-@subsubheading Beispiel
-
-@example
-if(mysql_create_db(&mysql, "meine_datenbank"))
-@{
- fprintf(stderr, "Erzeugung der neuen Datenbank fehlgeschlagen. Fehler: %s\n",
- mysql_error(&mysql));
-@}
-@end example
-
-
-@node mysql_data_seek, mysql_debug, mysql_create_db, C API functions
-@c German node mysql_data_seek
-@subsubsection @code{mysql_data_seek()}
-
-@findex @code{mysql_data_seek()}
-
-@code{void mysql_data_seek(MYSQL_RES *result, unsigned long long offset)}
-
-@subsubheading Beschreibung
-Sucht bis zu einer beliebigen Zeile in einer Anfrageergebnismenge. Das
-setzt voraus, dass die Ergebnismengenstruktur das gesamte Anfrageergebnis
-enth�lt. Daher kann @code{mysql_data_seek()} nur in Verbindung mit
-@code{mysql_store_result()} benutzt werden, nicht in Verbindung mit
-@code{mysql_use_result()}.
-
-Der Offset sollte ein Wert im Bereich von 0 bis
-@code{mysql_num_rows(ergebnis)-1} sein.
-
-@subsubheading R�ckgabewerte
-
-Keine.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_debug, mysql_drop_db, mysql_data_seek, C API functions
-@c German node mysql_debug
-@subsubsection @code{mysql_debug()}
-
-@findex @code{mysql_debug()}
-
-@code{void mysql_debug(char *debug)}
-
-@subsubheading Beschreibung
-F�hrt ein @code{DBUG_PUSH} mit der angegebenen Zeichenkette durch.
-@code{mysql_debug()} benutzt die Debug-Bibliothek von Fred Fish. Um diese
-Funktion benutzen zu k�nnen, m�ssen Sie die Client-Bibliothek so
-kompilieren, dass sie Debuggen unterst�tzt. @xref{Debugging server}.
-@xref{Debugging client}.
-
-@subsubheading R�ckgabewerte
-
-Keine.
-
-@subsubheading Fehler
-
-Keine.
-
-@subsubheading Beispiel
-
-Der unten stehende Aufruf f�hrt dazu, dass die Client-Bibliothek eine
-Trace-Datei in @file{/tmp/client.trace} auf der Client-Maschine erzeugt:
-
-@example
-mysql_debug("d:t:O,/tmp/client.trace");
-@end example
-
-
-@node mysql_drop_db, mysql_dump_debug_info, mysql_debug, C API functions
-@c German node mysql_drop_db
-@subsubsection @code{mysql_drop_db()}
-
-@findex @code{mysql_drop_db()}
-
-@code{int mysql_drop_db(MYSQL *mysql, const char *db)}
-
-@subsubheading Beschreibung
-L�scht die Datenbank, die durch den @code{db}-Parameter angegeben wird.
-
-Diese Funktion ist veraltet. Benutzen Sie vorzugsweise
-@code{mysql_query()}, um statt dessen ein SQL-@code{DROP
-DATABASE}-Statement abzusetzen.
-
-@subsubheading R�ckgabewerte
-
-0, wenn die Datenbank erfolgreich gel�scht wurde. Nicht-0, wenn ein Fehler
-auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-@subsubheading Beispiel
-
-@example
-if(mysql_drop_db(&mysql, "meine_datenbank"))
- fprintf(stderr, "L�schen der Datenbank fehlgeschlagen: Fehler: %s\n",
- mysql_error(&mysql));
-@end example
-
-
-@node mysql_dump_debug_info, mysql_eof, mysql_drop_db, C API functions
-@c German node mysql_dump_debug_info
-@subsubsection @code{mysql_dump_debug_info()}
-
-@findex @code{mysql_dump_debug_info()}
-
-@code{int mysql_dump_debug_info(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Weist den Server an, Debug-Informationen ins Log zu schreiben. Damit das
-funktioniert, muss der verbundene Benutzer die
-@strong{process}-Berechtigung haben.
-
-@subsubheading R�ckgabewerte
-
-0, wenn der Befehl erfolgreich war. Nicht-0, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_eof, mysql_errno, mysql_dump_debug_info, C API functions
-@c German node mysql_eof
-@subsubsection @code{mysql_eof()}
-
-@findex @code{mysql_eof()}
-
-@code{my_bool mysql_eof(MYSQL_RES *result)}
-
-@subsubheading Beschreibung
-
-Diese Funktion ist veraltet. Benutzen Sie statt dessen @code{mysql_errno()}
-oder @code{mysql_error()}.
-
-@code{mysql_eof()} stellt fest, ob die letzte Zeile einer Ergebnismenge
-gelesen wurde oder nicht.
-
-Wenn Sie eine Ergebnismenge durch einen erfolgreichen Aufruf von
-@code{mysql_store_result()} erhalten, erh�lt der Client den gesamten Satz
-in einer Operation. In diesem Fall bedeutet eine @code{NULL}-R�ckgabe von
-@code{mysql_fetch_row()} immer, dass das Ende der Ergebnismenge erreicht
-wurde und es unn�tig ist, @code{mysql_eof()} aufzurufen.
-
-Wenn Sie auf der anderen Seite @code{mysql_use_result()} aufrufen, um den
-Abruf einer Ergebnismenge zu initialisieren, werden die Zeilen des Satzes
-Zeile f�r Zeile vom Server erlangt, indem Sie @code{mysql_fetch_row()}
-wiederholt aufrufen. Weil w�hrend dieses Prozesses ein Verbindungsfehler
-auftreten kann, bedeutet ein @code{NULL}-R�ckgabewert von
-@code{mysql_fetch_row()} nicht notwendigerweise, dass das Ende der
-Ergebnismenge auf normale Weise erreicht wurde. In diesem Fall k�nnen Sie
-@code{mysql_eof()} benutzen, um festzustellen, was passiert ist.
-@code{mysql_eof()} gibt einen Nicht-0-Wert zur�ck, wenn das Ende der
-Ergebnismenge erreicht wurde, und 0, wenn ein Fehler auftrat.
-
-Historisch liegt @code{mysql_eof()} vor den Standard-MySQL-Fehlerfunktionen
-@code{mysql_errno()} und @code{mysql_error()}. Weil diese Fehlerfunktionen
-dieselben Informationen zur Verf�gung stellen, wird ihre Benutzung des des
-veralteten @code{mysql_eof()} empfohlen. (Sie stellen in der Tat sogar mehr
-Informationen zur Verf�gung, weil @code{mysql_eof()} nur einen Bool'schen
-Wert zur�ckgibt, w�hrend die Fehlerfunktionen den Grund angeben, warum der
-Fehler auftrat.)
-
-@subsubheading R�ckgabewerte
-
-0, wenn kein Fehler auftrat. Nicht-0, wenn das Ende der Ergebnismenge
-erreicht wurde.
-
-@subsubheading Fehler
-
-Keine.
-
-@subsubheading Beispiel
-
-Folgendes Beispiel zeigt, wie Sie @code{mysql_eof()} benutzen k�nnen:
-
-@example
-mysql_query(&mysql,"SELECT * FROM tabelle");
-ergebnis = mysql_use_result(&mysql);
-while((zeile = mysql_fetch_row(ergebnis)))
-@{
- // Daten verarbeiten usw.
-@}
-if(!mysql_eof(ergebnis)) // mysql_fetch_row() schlug wegen eines Fehlers fehl
-@{
- fprintf(stderr, "Fehler: %s\n", mysql_error(&mysql));
-@}
-@end example
-
-Sie k�nnen denselben Effekt jedoch auch mit den
-Standard-MySQL-Fehlerfunktionen erreichen:
-
-@example
-mysql_query(&mysql,"SELECT * FROM tabelle");
-result = mysql_use_result(&mysql);
-while((zeile = mysql_fetch_row(ergebnis)))
-@{
- // Daten verarbeiten usw.
-@}
-if(mysql_errno(&mysql)) // mysql_fetch_row() schlug wegen eines Fehlers fehl
-@{
- fprintf(stderr, "Fehler: %s\n", mysql_error(&mysql));
-@}
-@end example
-
-
-@node mysql_errno, mysql_error, mysql_eof, C API functions
-@c German node mysql_errno
-@subsubsection @code{mysql_errno()}
-
-@findex @code{mysql_errno()}
-
-@code{unsigned int mysql_errno(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-F�r die von @code{mysql} angegebene Verbindung gibt @code{mysql_errno()}
-den Fehlercode f�r die zuletzt aufgerufene API-Funktion zur�ck, die
-erfolgreich sein oder fehlschlagen kann. Ein R�ckgabewert von 0 bedeutet,
-dass kein Fehler auftrat. Client-Fehlermeldungsnummern sind in der
-MySQL-@file{errmsg.h}-Header-Datei aufgelistet.
-Server-Fehlermeldungsnummern sind in @file{mysqld_error.h} aufgelistet. In
-der MySQL-Quelldistribution finden Sie eine komplette Liste der
-Fehlermeldungen und Fehlernummern in der Datei
-@file{Docs/mysqld_error.txt}.
-
-@subsubheading R�ckgabewerte
-
-Ein Fehlercode-Wert. 0, wenn kein Fehler auftrat.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_error, mysql_escape_string, mysql_errno, C API functions
-@c German node mysql_error
-@subsubsection @code{mysql_error()}
-
-@findex @code{mysql_error()}
-
-@code{char *mysql_error(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-F�r die von @code{mysql} angegebene Verbindung gibt @code{mysql_error()}
-die Fehlermeldung f�r die zuletzt aufgerufene API-Funktion zur�ck, die
-erfolgreich sein oder fehlschlagen kann. Eine leere Zeichenkette
-(@code{""}) wird zur�ckgegeben, wenn kein Fehler auftrat. Das bedeutet,
-dass folgende zwei Tests �quivalent sind:
-
-@example
-if(mysql_errno(&mysql))
-@{
- // Ein Fehler trat auf
-@}
-
-if(mysql_error(&mysql)[0] != '\0')
-@{
- // Ein Fehler trat auf
-@}
-@end example
-
-Die Sprache der Client-Fehlermeldungen kann durch erneutes Kompilieren der
-MySQL-Client-Bibliothek ge�ndert werden. Sie k�nnen Fehlermeldungen in
-mehreren unterschiedlichen Sprachen ausw�hlen. @xref{Languages}.
-
-@subsubheading R�ckgabewerte
-
-Eine Zeichenkette, die den Fehler beschreibt. Eine leere Zeichenkette, wenn
-kein Fehler auftrat.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_escape_string, mysql_fetch_field, mysql_error, C API functions
-@c German node mysql_escape_string
-@subsubsection @code{mysql_escape_string()}
-
-@findex @code{mysql_escape_string()}
-
-Statt dessen sollten Sie @code{mysql_real_escape_string()} benutzen!
-
-Das ist identisch mit @code{mysql_real_escape_string()}, ausser dass die
-Verbindung als erstes Argument genommen wird.
-@code{mysql_real_escape_string()} escapet die Zeichenkette gem�� dem
-aktuellen Zeichensatz, wohingegen @code{mysql_escape_string()} die aktuelle
-Zeichensatzeinstellung ignoriert.
-
-
-@node mysql_fetch_field, mysql_fetch_fields, mysql_escape_string, C API functions
-@c German node mysql_fetch_field
-@subsubsection @code{mysql_fetch_field()}
-
-@findex @code{mysql_fetch_field()}
-
-@code{MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)}
-
-@subsubheading Beschreibung
-
-Gibt die Definition einer Spalte der Ergebnismenge als
-@code{MYSQL_FIELD}-Struktur zur�ck. Rufen Sie diese Funktion wiederholt
-auf, um Informationen �ber alle Spalten in der Ergebnismenge zu erhalten.
-@code{mysql_fetch_field()} gibt @code{NULL} zur�ck, wenn es keine weiteren
-Felder mehr gibt.
-
-@code{mysql_fetch_field()} wird zur�ckgesetzt, so dass sie Informationen
-�ber das erste Feld zur�ckgibt, und zwar jedes Mal, wenn Sie eine neue
-@code{SELECT}-Anfrage ausf�hren. Das von @code{mysql_fetch_field()}
-zur�ckgegebene Feld wird auch durch Aufrufe von @code{mysql_field_seek()}
-betroffen.
-
-Wenn Sie @code{mysql_query()} aufgerufen haben, um ein @code{SELECT} auf
-eine Tabelle auszuf�hren, aber nicht @code{mysql_store_result()} aufgerufen
-haben, gibt MySQL die vorgabem��ige BLOB-L�nge (8 KB) zur�ck, wenn Sie
-@code{mysql_fetch_field()} aufrufen, um nach der L�nge eines
-@code{BLOB}-Felds zu fragen. (Die Gr��e von 8 KB wird gew�hlt, weil MySQL
-die maximale L�nge des @code{BLOB} nicht kennt. Das wird irgendwann einmal
-konfigurierbar gemacht.) Nachdem Sie die Ergebnismenge erst einmal
-abgerufen haben, enth�lt @code{field->max_length} die L�nge des l�ngsten
-Werts dieser Spalte in der bestimmten Anfrage.
-
-@subsubheading R�ckgabewerte
-
-Die @code{MYSQL_FIELD}-Struktur der aktuellen Spalte. @code{NULL}, wenn
-keine Spalten mehr �brig sind.
-
-@subsubheading Fehler
-
-Keine.
-
-@subsubheading Beispiel
-
-@example
-MYSQL_FIELD *field;
-
-while((field = mysql_fetch_field(ergebnis)))
-@{
- printf("Feldname %s\n", field->name);
-@}
-@end example
-
-
-@node mysql_fetch_fields, mysql_fetch_field_direct, mysql_fetch_field, C API functions
-@c German node mysql_fetch_fields
-@subsubsection @code{mysql_fetch_fields()}
-
-@findex @code{mysql_fetch_fields()}
-
-@code{MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)}
-
-@subsubheading Beschreibung
-
-Gibt ein Array aller @code{MYSQL_FIELD}-Strukturen f�r eine Ergebnismenge
-zur�ck. Jede Struktur stellt Felddefinitionen f�r eine Spalte der
-Ergebnismenge zur Verf�gung.
-
-@subsubheading R�ckgabewerte
-
-Ein Array von @code{MYSQL_FIELD}-Strukturen f�r alle Spalten einer
-Ergebnismenge.
-
-@subsubheading Fehler
-
-Keine.
-
-@subsubheading Beispiel
-
-@example
-unsigned int num_fields;
-unsigned int i;
-MYSQL_FIELD *fields;
-
-num_fields = mysql_num_fields(ergebnis);
-fields = mysql_fetch_fields(ergebnis);
-for(i = 0; i < num_fields; i++)
-@{
- printf("Feld %u ist %s\n", i, fields[i].name);
-@}
-@end example
-
-
-@node mysql_fetch_field_direct, mysql_fetch_lengths, mysql_fetch_fields, C API functions
-@c German node mysql_fetch_field_direct
-@subsubsection @code{mysql_fetch_field_direct()}
-
-@findex @code{mysql_fetch_field_direct()}
-
-@code{MYSQL_FIELD *mysql_fetch_field_direct(MYSQL_RES *result, unsigned int feldnr)}
-
-@subsubheading Beschreibung
-
-Mit der Angabe einer Feldnummer @code{feldnr} f�r eine Spalte innerhalb
-einer Ergebnismenge gibt sie die Felddefinition dieser Spalte als
-@code{MYSQL_FIELD}-Struktur zur�ck. Sie k�nnen diese Funktion verwenden, um
-die Definition f�r eine beliebige Spalte abzurufen. Der Wert von
-@code{feldnr} sollte im Bereich von 0 bis
-@code{mysql_num_fields(ergebnis)-1} liegen.
-
-@subsubheading R�ckgabewerte
-
-Die @code{MYSQL_FIELD}-Struktur f�r die angegebene Spalte.
-
-@subsubheading Fehler
-
-Keine.
-
-@subsubheading Beispiel
-
-@example
-unsigned int num_fields;
-unsigned int i;
-MYSQL_FIELD *field;
-
-num_fields = mysql_num_fields(ergebnis);
-for(i = 0; i < num_fields; i++)
-@{
- field = mysql_fetch_field_direct(ergebnis, i);
- printf("Feld %u ist %s\n", i, field->name);
-@}
-@end example
-
-
-@node mysql_fetch_lengths, mysql_fetch_row, mysql_fetch_field_direct, C API functions
-@c German node mysql_fetch_lengths
-@subsubsection @code{mysql_fetch_lengths()}
-
-@findex @code{mysql_fetch_lengths()}
-
-@code{unsigned long *mysql_fetch_lengths(MYSQL_RES *result)}
-
-@subsubheading Beschreibung
-
-Gibt die L�nge der Spalten der aktuellen Zeile innerhalb der Ergebnismenge
-zur�ck. Wenn Sie vorhaben, Feldwerte zu kopieren, sind diese
-L�ngeninformationen auch n�tzlich f�r Optimierungen, weil Sie vermeiden
-k�nnen, @code{strlen()} aufzurufen. Wenn die Ergebnismenge Bin�rdaten
-enth�lt, kommt hinzu, dass Sie diese Funktion benutzen @emph{m�ssen}, um
-die Gr��e der Daten zu bestimmen, weil @code{strlen()} falsche Ergebnisse
-f�r Felder zur�ckgibt, die NULL-Zeichen enthalten.
-
-Die L�nge leerer Spalten und von Spalten, die @code{NULL}-Werte enthalten,
-ist 0. Um zu sehen, wie man diese beiden F�lle auseinander h�lt, sehen Sie
-in der Beschreibung von @code{mysql_fetch_row()} nach.
-
-@subsubheading R�ckgabewerte
-
-Ein Array vorzeichenloser langer Ganzzahlen (long integer), die die Gr��e
-jeder Spalte darstellen (ohne irgend welche begrenzenden NULL-Zeichen).
-@code{NULL}, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@code{mysql_fetch_lengths()} ist nur f�r die aktuelle Zeile der
-Ergebnismenge g�ltig. Sie gibt @code{NULL} zur�ck, wenn Sie sie vor
-@code{mysql_fetch_row()} oder nach dem Abruf aller Zeilen im Ergebnis
-aufrufen.
-
-@subsubheading Beispiel
-
-@example
-MYSQL_ROW zeile;
-unsigned long *laengen;
-unsigned int anzahl_felder;
-unsigned int i;
-
-zeile = mysql_fetch_row(ergebnis);
-if (zeile)
-@{
- anzahl_felder = mysql_num_fields(ergebnis);
- laengen = mysql_fetch_lengths(ergebnis);
- for(i = 0; i < anzahl_felder; i++)
- @{
- printf("Spalte %u ist %lu Bytes lang.\n", i, lengths[i]);
- @}
-@}
-@end example
-
-
-@node mysql_fetch_row, mysql_field_count, mysql_fetch_lengths, C API functions
-@c German node mysql_fetch_row
-@subsubsection @code{mysql_fetch_row()}
-
-@findex @code{mysql_fetch_row()}
-
-@code{MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)}
-
-@subsubheading Beschreibung
-
-Ruft die n�chste Zeile einer Ergebnismenge ab. Wenn sie nach
-@code{mysql_store_result()} benutzt wird, gibt @code{mysql_fetch_row()}
-@code{NULL} zur�ck, wenn es keine weiteren Zeilen zum Abruf mehr gibt. Wenn
-sie nach @code{mysql_use_result()} benutzt wird, gibt
-@code{mysql_fetch_row()} @code{NULL} zur�ck, wenn es keine Zeilen mehr zum
-Abruf gibt oder wenn ein Fehler auftrat.
-
-Die Anzahl von Werten in der Zeile wird durch
-@code{mysql_num_fields(ergebnis)} gegeben. Wenn @code{zeile} den
-R�ckgabewert eines Aufrufs von @code{mysql_fetch_row()} enth�lt, wird auf
-Zeiger auf die Werte als @code{zeile[0]} bis
-@code{zeile[mysql_num_fields(ergebnis)-1]} zugegriffen. @code{NULL}-Werte
-in der Zeile werden durch @code{NULL}-Zeiger angezeigt.
-
-Die L�ngen der Feldwerte in der Zeile k�nnen durch Aufruf von
-@code{mysql_fetch_lengths()} bestimmt werden. Leere Felder und Felder, die
-@code{NULL} enthalten, haben beide die L�nge 0. Sie k�nnen diese
-auseinanderhalten, indem Sie den Zeiger f�r den Feldwert �berpr�fen. Wenn
-der Zeiger @code{NULL} ist, ist das Feld @code{NULL}, ansonsten ist das
-Feld leer.
-
-@subsubheading R�ckgabewerte
-
-Eine @code{MYSQL_ROW}-Struktur f�r die n�chste Zeile. @code{NULL}, wenn
-keine weiteren Zeilen abzurufen sind oder wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-@subsubheading Beispiel
-
-@example
-MYSQL_ROW zeile;
-unsigned int anzahl_felder;
-unsigned int i;
-
-anzahl_felder = mysql_num_fields(ergebnis);
-while ((zeile = mysql_fetch_row(ergebnis)))
-@{
- unsigned long *laengen;
- laengen = mysql_fetch_lengths(ergebnis);
- for(i = 0; i < anzahl_felder; i++)
- @{
- printf("[%.*s] ", (int) laengen[i], zeile[i] ? zeile[i] : "NULL");
- @}
- printf("\n");
-@}
-@end example
-
-
-@node mysql_field_count, mysql_field_seek, mysql_fetch_row, C API functions
-@c German node mysql_field_count
-@subsubsection @code{mysql_field_count()}
-
-@findex @code{mysql_field_count()}
-
-@code{unsigned int mysql_field_count(MYSQL *mysql)}
-
-Wenn Sie eine Version von MySQL vor Version 3.22.24 benutzen, sollten Sie
-statt dessen @code{unsigned int mysql_num_fields(MYSQL *mysql)} benutzen.
-
-@subsubheading Beschreibung
-
-Gibt die Anzahl von Spalten der letzten Anfrage auf der Verbindung zur�ck.
-
-Normalerweise wird diese Funktion benutzt, wenn @code{mysql_store_result()}
-@code{NULL} zur�ckgab (und Sie daher keinen Ergebnismengen-Zeiger haben).
-In diesem Fall k�nnen Sie @code{mysql_field_count()} aufrufen, um
-festzustellen, ob @code{mysql_store_result()} ein leeres Ergebnis h�tte
-zur�ckgeben sollen oder nicht. Das gestattet dem Client-Programm, die
-richtigen Aktionen zu ergreifen, ohne wissen zu m�ssen, ob die Anfrage ein
-@code{SELECT} war oder nicht (oder ein @code{SELECT}-�hnliches Statement).
-Das unten stehende Beispiel zeigt, wie man das machen kann.
-
-@xref{NULL mysql_store_result, , @code{NULL mysql_store_result()}}.
-
-@subsubheading R�ckgabewerte
-
-Eine vorzeichenlose Ganzzahl, die die Anzahl von Feldern in einer
-Ergebnismenge darstellt.
-
-@subsubheading Fehler
-
-Keine.
-
-@subsubheading Beispiel
-
-@example
-MYSQL_RES *result;
-unsigned int anzahl_felder;
-unsigned int anzahl_zeilen;
-
-if (mysql_query(&mysql,anfrage))
-@{
- // FEHLER
-@}
-else // Anfrage war erfolgreich, zur�ckgegebene Daten verarbeiten
-@{
- ergebnis = mysql_store_result(&mysql);
- if (ergebnis) // Es gibt Zeilen
- @{
- anzahl_felder = mysql_num_fields(ergebnis);
- // Zeilen abrufen, dann mysql_free_result(result) aufrufen
- @}
- else // mysql_store_result() gab nichts zur�ck, h�tte es etwas zur�ckgeben sollen?
- @{
- if(mysql_field_count(&mysql) == 0)
- @{
- // Anfrage gibt keine Daten zur�ck
- // (Anfrage war kein SELECT)
- anzahl_zeilen = mysql_affected_rows(&mysql);
- @}
- else // mysql_store_result() h�tte Daten zur�ckgeben sollen
- @{
- fprintf(stderr, "Fehler: %s\n", mysql_error(&mysql));
- @}
- @}
-@}
-@end example
-
-Eine Alternative besteht darin, den @code{mysql_field_count(&mysql)}-Aufruf
-durch @code{mysql_errno(&mysql)} zu ersetzen. In diesem Fall �berpr�fen Sie
-direkt auf einen Fehler von @code{mysql_store_result()}, statt aus dem Wert
-von @code{mysql_field_count()} zu schlussfolgern, ob das Statement ein
-@code{SELECT} war oder nicht.
-
-
-@node mysql_field_seek, mysql_field_tell, mysql_field_count, C API functions
-@c German node mysql_field_seek
-@subsubsection @code{mysql_field_seek()}
-
-@findex @code{mysql_field_seek()}
-
-@code{MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset)}
-
-@subsubheading Beschreibung
-
-Setzt den Feldcursor auf den angegebenen Offset. Der n�chste Aufruf von
-@code{mysql_fetch_field()} ruf die Felddefinition der Spalte ab, die mit
-diesem Offset verkn�pft ist.
-
-Um bis zum Anfang einer Zeile zu suchen, geben Sie einen @code{offset}-Wert
-von 0 an.
-
-@subsubheading R�ckgabewerte
-
-Der vorherige Wert des Feldcursors.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_field_tell, mysql_free_result, mysql_field_seek, C API functions
-@c German node mysql_field_tell
-@subsubsection @code{mysql_field_tell()}
-
-@findex @code{mysql_field_tell()}
-
-@code{MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *result)}
-
-@subsubheading Beschreibung
-
-Gibt die Position des Feldcursors f�r die letzte @code{mysql_fetch_field()}
-zur�ck. Dieser Wert kann als Argument f�r @code{mysql_field_seek()} benutzt
-werden.
-
-@subsubheading R�ckgabewerte
-
-Der aktuelle Offset des Feldcursors.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_free_result, mysql_get_client_info, mysql_field_tell, C API functions
-@c German node mysql_free_result
-@subsubsection @code{mysql_free_result()}
-
-@findex @code{mysql_free_result()}
-
-@code{void mysql_free_result(MYSQL_RES *result)}
-
-@subsubheading Beschreibung
-
-Gibt den Speicher frei, der f�r eine Ergebnismenge von
-@code{mysql_store_result()}, @code{mysql_use_result()},
-@code{mysql_list_dbs()} usw. zugewiesen wurde. Wenn Sie mit einer
-Ergebnismenge fertig sind, m�ssen Sie den von ihr benutzten Speicher durch
-Aufruf von @code{mysql_free_result()} freigeben.
-
-@subsubheading R�ckgabewerte
-
-Keine.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_get_client_info, mysql_get_host_info, mysql_free_result, C API functions
-@c German node mysql_get_client_info
-@subsubsection @code{mysql_get_client_info()}
-
-@findex @code{mysql_get_client_info()}
-
-@code{char *mysql_get_client_info(void)}
-
-@subsubheading Beschreibung
-
-Returns a string that represents the client Bibliothek version.
-
-@subsubheading R�ckgabewerte
-
-A character string that represents the MySQL-Client Bibliothek version.
-
-@subsubheading Fehler
-Keine.
-
-
-@node mysql_get_host_info, mysql_get_proto_info, mysql_get_client_info, C API functions
-@c German node mysql_get_host_info
-@subsubsection @code{mysql_get_host_info()}
-
-@findex @code{mysql_get_host_info()}
-
-@code{char *mysql_get_host_info(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Gibt eine Zeichenkette zur�ck, die den Typ der benutzten Verbindung
-beschreibt, inklusive des Server-Hostnamens.
-
-@subsubheading R�ckgabewerte
-
-Eine Zeichenkette, die den Server-Hostnamen und den Verbindungstyp
-bezeichnet.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_get_proto_info, mysql_get_server_info, mysql_get_host_info, C API functions
-@c German node mysql_get_proto_info
-@subsubsection @code{mysql_get_proto_info()}
-
-@findex @code{mysql_get_proto_info()}
-
-@code{unsigned int mysql_get_proto_info(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Gibt die Protokollversion zur�ck, die von der aktuellen Verbindung benutzt
-wird.
-
-@subsubheading R�ckgabewerte
-
-Eine vorzeichenlose Ganzzahl, die die Protokollversion bezeichnet, die von
-der aktuellen Verbindung benutzt wird.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_get_server_info, mysql_info, mysql_get_proto_info, C API functions
-@c German node mysql_get_server_info
-@subsubsection @code{mysql_get_server_info()}
-
-@findex @code{mysql_get_server_info()}
-
-@code{char *mysql_get_server_info(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Gibt eine Zeichenkette zur�ck, die die Server-Versionsnummer bezeichnet.
-
-@subsubheading R�ckgabewerte
-
-Eine Zeichenkette, die die Server-Versionsnummer bezeichnet.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_info, mysql_init, mysql_get_server_info, C API functions
-@c German node mysql_info
-@subsubsection @code{mysql_info()}
-
-@findex @code{mysql_info()}
-
-@code{char *mysql_info(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Ruft eine Zeichenkette ab, die Informationen �ber die zuletzt ausgef�hrte
-Anfrage zur�ckgibt, aber nur f�r die unten aufgef�hrten Statements. Bei
-anderen Statements gibt @code{mysql_info()} @code{NULL} zur�ck. Das Format
-der Zeichenkette variiert in Abh�ngigkeit vom Anfragetyp, wie unten
-beschrieben. Die Nummern dienen nur der Veranschaulichung; die Zeichenkette
-enth�lt die der Anfrage entsprechenden Werte.
-
-@table @code
-@item INSERT INTO ... SELECT ...
-Zeichenkettenformat: @code{Records: 100 Duplicates: 0 Warnings: 0}
-@item INSERT INTO ... VALUES (...),(...),(...)...
-Zeichenkettenformat: @code{Records: 3 Duplicates: 0 Warnings: 0}
-@item LOAD DATA INFILE ...
-Zeichenkettenformat: @code{Records: 1 Deleted: 0 Skipped: 0 Warnings: 0}
-@item ALTER TABLE
-Zeichenkettenformat: @code{Records: 3 Duplicates: 0 Warnings: 0}
-@item UPDATE
-Zeichenkettenformat: @code{Rows matched: 40 Changed: 40 Warnings: 0}
-@end table
-
-Beachten Sie, dass @code{mysql_info()} einen Nicht-@code{NULL}-Wert f�r das
-@code{INSERT ... VALUES}-Statement nur dann zur�ckgibt, wenn im Statement
-mehrfache Wertlisten angegeben sind.
-
-@subsubheading R�ckgabewerte
-
-Eine Zeichenkette, die zus�tzliche Informationen �ber die zuletzt
-ausgef�hrte Anfrage bereitstellt. @code{NULL}, wenn f�r die Anfrage keine
-Information verf�gbar ist.
-
-@subsubheading Fehler
-Keine.
-
-
-@node mysql_init, mysql_insert_id, mysql_info, C API functions
-@c German node mysql_init
-@subsubsection @code{mysql_init()}
-
-@findex @code{mysql_init()}
-
-@code{MYSQL *mysql_init(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Alloziert oder initialisiert ein @code{MYSQL}-Objekt, das f�r
-@code{mysql_real_connect()} geeignet ist. Wenn @code{mysql} ein
-@code{NULL}-Zeiger ist, alloziert, initialisiert und gibt diese Funktion
-ein neues Objekt zur�ck. Ansonsten wird das Objekt initialisiert und die
-Adresse des Objekts zur�ckgegeben. Wenn @code{mysql_init()} ein neues
-Objekt alloziert, wird es freigegeben, wenn @code{mysql_close()} aufgerufen
-wird, um die Verbindung zu schlie�en.
-
-@subsubheading R�ckgabewerte
-
-Ein initialisiertes @code{MYSQL*}-Handle. @code{NULL}, wenn der Speicher
-nicht ausreichte, um ein neues Objekt zu allozieren.
-
-@subsubheading Fehler
-
-Im Falle von ungen�gendem Speicher wird @code{NULL} zur�ckgegeben.
-
-
-@node mysql_insert_id, mysql_kill, mysql_init, C API functions
-@c German node mysql_insert_id
-@subsubsection @code{mysql_insert_id()}
-
-@findex @code{mysql_insert_id()}
-
-@code{my_ulonglong mysql_insert_id(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Gibt die Kennung zur�ck, die f�r eine @code{AUTO_INCREMENT}-Spalte durch
-die vorherige Anfrage erzeugt wurde. Benutzen Sie diese Funktion, nachdem
-Sie eine @code{INSERT}-Anfrage f�r eine Tabelle durchgef�hrt haben, die ein
-@code{AUTO_INCREMENT}-Feld enth�lt.
-
-Beachten Sie, dass @code{mysql_insert_id()} @code{0} zur�ckgibt, wenn die
-vorherige Anfrage keinen @code{AUTO_INCREMENT}-Wert erzeugt hat. Wenn Sie
-den Wert f�r sp�tere Benutzung speichern wollen, stellen Sie sicher, dass
-Sie @code{mysql_insert_id()} unmittelbar nach der Anfrage aufrufen, die den
-Wert erzeugt.
-
-@code{mysql_insert_id()} wird nach @code{INSERT}- und
-@code{UPDATE}-Statements aktualisiert, die einen @code{AUTO_INCREMENT}-Wert
-erzeugen oder einen Spaltenwert auf @code{LAST_INSERT_ID(ausdruck)} setzen.
-@xref{Miscellaneous functions}.
-
-Beachten Sie auch, dass der Wert der SQL-@code{LAST_INSERT_ID()}-Funktion
-immer den aktuellsten erzeugten @code{AUTO_INCREMENT}-Wert enth�lt, und
-zwischen Anfragen nicht zur�ckgesetzt wird, weil der Wert dieser Funktion
-im Server gewartet wird.
-
-@subsubheading R�ckgabewerte
-
-Der Wert des @code{AUTO_INCREMENT}-Felds, das durch die vorherige Anfrage
-aktualisiert wurde. Gibt 0 zur�ck, wenn es keine vorherige Anfrage auf der
-Verbindung gab oder wenn die Anfrage keinen @code{AUTO_INCREMENT}-Wert
-aktualisierte.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_kill, mysql_list_dbs, mysql_insert_id, C API functions
-@c German node mysql_kill
-@subsubsection @code{mysql_kill()}
-
-@findex @code{mysql_kill()}
-
-@code{int mysql_kill(MYSQL *mysql, unsigned long pid)}
-
-@subsubheading Beschreibung
-
-Bittet den Server, den Thread zu t�ten, der durch @code{pid} angegeben
-wurde.
-
-@subsubheading R�ckgabewerte
-
-0 f�r Erfolg. Nicht-0, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_list_dbs, mysql_list_fields, mysql_kill, C API functions
-@c German node mysql_list_dbs
-@subsubsection @code{mysql_list_dbs()}
-
-@findex @code{mysql_list_dbs()}
-
-@code{MYSQL_RES *mysql_list_dbs(MYSQL *mysql, const char *wild)}
-
-@subsubheading Beschreibung
-
-Gibt eine Ergebnismenge zur�ck, die aus den Datenbanknamen auf dem Server
-besteht, die mit dem einfachen regul�ren Ausdruck �bereinstimmen, der durch
-den @code{wild}-Parameter angegeben wird. @code{wild} darf die
-Platzhalterzeichen @samp{%} oder @samp{_} enthalten oder ein
-@code{NULL}-Zeiger sein, der mit allen Datenbanken �bereinstimmt. Der
-Aufruf von @code{mysql_list_dbs()} ist �hnlich der Ausf�hrung der Anfrage
-@code{SHOW DATABASES [LIKE wild]}.
-
-Sie m�ssen die Ergebnismenge mit @code{mysql_free_result()} freigeben.
-
-@subsubheading R�ckgabewerte
-
-Eine @code{MYSQL_RES}-Ergebnismenge bei Erfolg. @code{NULL}, wenn ein
-Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_OUT_OF_MEMORY
-Kein Speicher mehr.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_list_fields, mysql_list_processes, mysql_list_dbs, C API functions
-@c German node mysql_list_fields
-@subsubsection @code{mysql_list_fields()}
-
-@findex @code{mysql_list_fields()}
-
-@code{MYSQL_RES *mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)}
-
-@subsubheading Beschreibung
-
-Gibt eine Ergebnismenge zur�ck, die aus Feldnamen in der angegebenen
-Tabelle bestehen, die mit einem einfachen regul�ren Ausdruck
-�bereinstimmen, der durch den @code{wild}-Parameter angegeben wird.
-@code{wild} darf die Platzhalterzeichen @samp{%} oder @samp{_} enthalten
-oder ein @code{NULL}-Zeiger sein, der mit allen Datenbanken �bereinstimmt.
-Der Aufruf von @code{mysql_list_fields()} ist �hnlich der Ausf�hrung der
-Anfrage @code{SHOW COLUMNS FROM tabelle [LIKE wild]}.
-
-Beachten Sie, dass empfohlen wird, @code{SHOW COLUMNS FROM tabelle} statt
-@code{mysql_list_fields()} zu benutzen.
-
-Sie m�ssen die Ergebnismenge mit @code{mysql_free_result()} freigeben.
-
-@subsubheading R�ckgabewerte
-
-Eine @code{MYSQL_RES}-Ergebnismenge bei Erfolg. @code{NULL}, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_list_processes, mysql_list_tables, mysql_list_fields, C API functions
-@c German node mysql_list_processes
-@subsubsection @code{mysql_list_processes()}
-
-@findex @code{mysql_list_processes()}
-
-@code{MYSQL_RES *mysql_list_processes(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Gibt eine Ergebnismenge zur�ck, die die aktuellen Server-Threads
-beschreibt. Das ist dieselbe Art von Information, die von @code{mysqladmin
-processlist} oder einer @code{SHOW PROCESSLIST}-Anfrage zur Verf�gung
-gestellt wird.
-
-Sie m�ssen die Ergebnismenge mit @code{mysql_free_result()} freigeben.
-
-@subsubheading R�ckgabewerte
-
-Eine @code{MYSQL_RES}-Ergebnismenge bei Erfolg. @code{NULL}, wenn ein
-Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_list_tables, mysql_num_fields, mysql_list_processes, C API functions
-@c German node mysql_list_tables
-@subsubsection @code{mysql_list_tables()}
-
-@findex @code{mysql_list_tables()}
-
-@code{MYSQL_RES *mysql_list_tables(MYSQL *mysql, const char *wild)}
-
-@subsubheading Beschreibung
-
-Gibt eine Ergebnismenge zur�ck, die aus Tabellennamen in der aktuellen
-Datenbank besteht, die mit einem einfachen regul�ren Ausdruck
-�bereinstimmen, der durch den @code{wild}-Parameter angegeben wird.
-@code{wild} darf die Platzhalterzeichen @samp{%} oder @samp{_} enthalten
-oder ein @code{NULL}-Zeiger sein, der mit allen Tabellen �bereinstimmt. Der
-Aufruf von @code{mysql_list_tables()} ist �hnlich der Ausf�hrung der
-Anfrage @code{SHOW tables [LIKE wild]}.
-
-Sie m�ssen die Ergebnismenge mit @code{mysql_free_result()} freigeben.
-
-@subsubheading R�ckgabewerte
-
-Eine @code{MYSQL_RES}-Ergebnismenge bei Erfolg. @code{NULL}, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_num_fields, mysql_num_rows, mysql_list_tables, C API functions
-@c German node mysql_num_fields
-@subsubsection @code{mysql_num_fields()}
-
-@findex @code{mysql_num_fields()}
-@findex @code{mysql_field_count()}
-
-@code{unsigned int mysql_num_fields(MYSQL_RES *result)}
-
-oder
-
-@code{unsigned int mysql_num_fields(MYSQL *mysql)}
-
-Die zweite Form funktioniert nicht bei MySQL-Version 3.22.24 oder neuer. Um
-ein @code{MYSQL*}-Argument zu �bergeben, m�ssen Sie statt dessen
-@code{unsigned int mysql_field_count(MYSQL *mysql)} benutzen.
-
-@subsubheading Beschreibung
-
-Gibt die Anzahl von Spalten in einer Ergebnismenge zur�ck.
-
-Beachten Sie, dass Sie die Anzahl von Spalten entweder durch einen Zeiger
-auf die Ergebnismenge oder auf ein Verbindungs-Handle erhalten. Das
-Verbindungs-Handle benutzen Sie, wenn @code{mysql_store_result()} oder
-@code{mysql_use_result()} @code{NULL} zur�ckgibt (und Sie daher keinen
-Ergebnismengen-Zeiger haben). In diesem Fall k�nnen Sie
-@code{mysql_field_count()} aufrufen, um festzustellen, ob
-@code{mysql_store_result()} eine leere Ergebnismenge produziert haben
-sollte oder nicht. Das erlaubt dem Client-Programm, die korrekten Aktionen
-vorzunehmen, ohne wissen zu m�ssen, ob die Anfrage ein @code{SELECT}- (oder
-@code{SELECT}-�hnliches) Statement war oder nicht. Das unten stehende
-Beispiel zeigt, wie das gemacht wird.
-
-@xref{NULL mysql_store_result, , @code{NULL mysql_store_result()}}.
-
-@subsubheading R�ckgabewerte
-
-Eine vorzeichenlose Ganzzahl, die die Anzahl von Feldern in einer
-Ergebnismenge darstellt.
-
-@subsubheading Fehler
-
-Keine.
-
-@subsubheading Beispiel
-
-@example
-MYSQL_RES *ergebnis;
-unsigned int anzahl_felder;
-unsigned int anzahl_zeilen;
-
-if (mysql_query(&mysql,anfrage_zeichenkette))
-@{
- // FEHLER
-@}
-else // Anfrage erfolgreich, zur�ckgegebene Daten verarbeiten
-@{
- ergebnis = mysql_store_result(&mysql);
- if (ergebnis) // Es gibt Zeilen
- @{
- anzahl_felder = mysql_num_fields(ergebnis);
- // Zeilen abrufen, dann mysql_free_result(ergebnis) aufrufen
- @}
- else // mysql_store_result() gab nichts zur�ck, h�tte es das tun sollen?
- @{
- if (mysql_errno(&mysql))
- @{
- fprintf(stderr, "Fehler: %s\n", mysql_error(&mysql));
- @}
- else if (mysql_field_count(&mysql) == 0)
- @{
- // Anfrage gibt keine Daten zur�ck
- // (war kein SELECT)
- anzahl_zeilen = mysql_affected_rows(&mysql);
- @}
- @}
-@}
-@end example
-
-Eine Alternative (wenn Sie WISSEN, dass Ihre Anfrage eine Ergebnismenge
-h�tte zur�ckgeben sollen) ist es, den @code{mysql_errno(&mysql)}-Aufruf
-durch eine Pr�fung zu ersetzen, ob @code{mysql_field_count(&mysql)} gleich
-0 ist. Das passiert nur, wenn etwas schief lief.
-
-
-@node mysql_num_rows, mysql_options, mysql_num_fields, C API functions
-@c German node mysql_num_rows
-@subsubsection @code{mysql_num_rows()}
-
-@findex @code{mysql_num_rows()}
-
-@code{my_ulonglong mysql_num_rows(MYSQL_RES *result)}
-
-@subsubheading Beschreibung
-
-Gibt die Anzahl von Zeilen in der Ergebnismenge zur�ck.
-
-Die Benutzung von @code{mysql_num_rows()} h�ngt davon ab, ob Sie
-@code{mysql_store_result()} oder @code{mysql_use_result()} benutzen, um die
-Ergebnismenge zur�ckzugeben.. Wenn Sie @code{mysql_store_result()}
-benutzen, kann @code{mysql_num_rows()} unmittelbar aufgerufen werden. Wenn
-Sie @code{mysql_use_result()} benutzen, gibt @code{mysql_num_rows()} nicht
-den richtigen Wert zur�ck, bis alle Zeilen in der Ergebnismenge abgerufen
-wurden.
-
-@subsubheading R�ckgabewerte
-
-Die Anzahl von Zeilen in der Ergebnismenge.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_options, mysql_ping, mysql_num_rows, C API functions
-@c German node mysql_options
-@subsubsection @code{mysql_options()}
-
-@findex @code{mysql_options()}
-
-@code{int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg)}
-
-@subsubheading Beschreibung
-
-Kann benutzt werden, um zus�tzliche Optionen zu setzen und das Verhalten
-einer Verbindung zu beeinflussen. Diese Funktion kann mehrfach aufgerufen
-werden, um mehrere Optionen zu setzen.
-
-@code{mysql_options()} sollte nach @code{mysql_init()} und vor
-@code{mysql_connect()} oder @code{mysql_real_connect()} aufgerufen werden.
-
-Das @code{option}-Argument ist die Option, die Sie setzen wollen. Das
-@code{arg}-Argument ist der Wert f�r die Option. Wenn die Option eine
-Ganzzahl ist, sollte @code{arg} auf den Wert der Ganzzahl zeigen.
-
-M�gliche Optionswerte:
-
-@multitable @columnfractions .25 .25 .5
-@item @strong{Option} @tab @strong{Argumenttyp} @tab @strong{Funktion}
-@item @code{MYSQL_OPT_CONNECT_TIMEOUT} @tab @code{unsigned int *} @tab Verbindungszeit�berschreitung (Timeout) in Sekunden.
-@item @code{MYSQL_OPT_COMPRESS} @tab Unbenutzt @tab Das komprimierte Client-/Server-Protokoll verwenden.
-@item @code{MYSQL_OPT_NAMED_PIPE} @tab Unbenutzt @tab Named Pipes benutzen, um sich mit einem MySQL-Server unter NT zu verbinden.
-@item @code{MYSQL_INIT_COMMAND} @tab @code{char *} @tab Befehl, der beim Verbinden mit dem MySQL-Server ausgef�hrt werden soll. Wird beim erneuten Verbinden automatisch wieder ausgef�hrt.
-@item @code{MYSQL_READ_DEFAULT_FILE} @tab @code{char *} @tab Optionen aus der benannten Optionsdatei einlesen anstelle von @file{my.cnf}.
-@item @code{MYSQL_READ_DEFAULT_GROUP} @tab @code{char *} @tab Optionen aus der benannten Gruppe von @file{my.cnf} oder der Datei einlesen, die durch @code{MYSQL_READ_DEFAULT_FILE} angegeben wurde.
-@end multitable
-
-Beachten Sie, dass die Gruppe @code{client} immer gelesen wird, wenn Sie
-@code{MYSQL_READ_DEFAULT_FILE} oder @code{MYSQL_READ_DEFAULT_GROUP}
-benutzen.
-
-Die angegebene Gruppe in der Optionsdatei kann folgende Optionen enthalten:
-
-@multitable @columnfractions .3 .7
-@item @code{connect_timeout} @tab Zeit�berschreitung (Timeout) f�r die
-Verbindung in Sekunden. Unter Linux wird dieser Wert zus�tzlich f�r die
-Wartezeit auf die erste Antwort vom Server benutzt.
-@item @code{compress} @tab Das komprimierte Client-/Server-Protokoll
-benutzen.
-@item @code{database} @tab Mit dieser Datenbank verbinden, wenn im
-Verbindungsbefehl keine Datenbank angegeben wurde.
-@item @code{debug} @tab Debug-Optionen.
-@item @code{host} @tab Vorgabem��iger Hostname.
-@item @code{init-commund} @tab Befehl, der bei der Verbindung zum
-MySQL-Server ausgef�hrt wird. Wird automatisch beim erneuten Verbinden
-erneut ausgef�hrt.
-@item @code{interactive-timeout} @tab Dasselbe wie die Angabe von
-@code{CLIENT_INTERACTIVE} f�r @code{mysql_real_connect()}.
-@xref{mysql_real_connect}.
-@item @code{password} @tab Vorgabem��iges Passwort.
-@item @code{pipe} @tab Named Pipes benutzen, um sich mit einem MySQL-Server unter NT zu verbinden.
-@item @code{port} @tab Vorgabem��ige Port-Nummer.
-@item @code{return-found-rows} @tab Weist @code{mysql_info()} an, gefundene
-Zeilen anstelle von aktualisierten Zeilen zur�ckzugeben, wenn @code{UPDATE}
-benutzt wird.
-@item @code{socket} @tab Vorgabem��ige Socket-Nummer.
-@item
-@item @code{user} @tab Vorgabem��iger Benutzer.
-@end multitable
-
-Beachten Sie, dass @code{timeout} durch @code{connect_timeout} ersetzt
-wurde. Dennoch wird @code{timeout} noch f�r eine Weile funktionieren.
-
-Weitere Informationen �ber Optionsdateien finden Sie unter
-@ref{Option files}.
-
-@subsubheading R�ckgabewerte
-
-0 bei Erfolg. Nicht-0, wenn Sie eine unbekannte Option verwenden.
-
-@subsubheading Beispiel
-
-@example
-MYSQL mysql;
-
-mysql_init(&mysql);
-mysql_options(&mysql,MYSQL_OPT_COMPRESS,0);
-mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"odbc");
-if (!mysql_real_connect(&mysql,"host","benutzer","passwort","datenbank",0,NULL,0))
-@{
- fprintf(stderr, "Keine Verbindung zur Datenbank: Fehler: %s\n",
- mysql_error(&mysql));
-@}
-@end example
-
-Im obigen Beispiel wird der Client angewiesen, das komprimierte
-Client-/Server-Protokoll zu benutzen und zus�tzliche Optionen aus dem
-@code{odbc}-Abschnitt in @code{my.cnf} zu lesen.
-
-
-@node mysql_ping, mysql_query, mysql_options, C API functions
-@c German node mysql_ping
-@subsubsection @code{mysql_ping()}
-
-@findex @code{mysql_ping()}
-
-@code{int mysql_ping(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Pr�ft, ob die Verbindung zum Server funktioniert oder nicht. Wenn diese weg
-ist, wird automatisch eine erneute Verbindung versucht.
-
-Diese Funktion kann von Clients benutzt werden, die f�r lange Zeit im
-Leerlauf laufen, um zu pr�fen, ob der Server die Verbindung geschlossen
-hat, und sich bei Bedarf erneut zu verbinden.
-
-@subsubheading R�ckgabewerte
-
-0, wenn der Server da ist. Nicht-0, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_query, mysql_real_connect, mysql_ping, C API functions
-@c German node mysql_query
-@subsubsection @code{mysql_query()}
-
-@findex @code{mysql_query()}
-
-@code{int mysql_query(MYSQL *mysql, const char *anfrage)}
-
-@subsubheading Beschreibung
-F�hrt die SQL-Anfrage aus, auf die durch die NULL-begrenzte Zeichenkette
-@code{anfrage} gezeigt wird. Die Anfrage muss aus einem einzelnen
-SQL-Statement bestehen. Sie d�rfen kein Semikolon (@samp{;}) oder @code{\g}
-zum Statement hinzuf�gen.
-
-@code{mysql_query()} kann nicht f�r Anfragen benutzt werden, die Bin�rdaten
-enthalten. Hierf�r sollten Sie statt dessen @code{mysql_real_query()}
-benutzen. (Bin�rdaten k�nnen das @samp{\0}-Zeichen enthalten, was
-@code{mysql_query()} als Ende der Anfrage-Zeichenkette interpretiert.)
-
-Wenn Sie wissen wollen, ob die Anfrage eine Ergebnismenge zur�ckgeben
-sollte oder nicht, k�nnen Sie @code{mysql_field_count()} benutzen, um
-hierauf zu pr�fen. @xref{mysql_field_count, , @code{mysql_field_count}}.
-
-@subsubheading R�ckgabewerte
-
-0, wenn die Anfrage erfolgreich war. Nicht-0, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_real_connect, mysql_real_escape_string, mysql_query, C API functions
-@c German node mysql_real_connect
-@subsubsection @code{mysql_real_connect()}
-
-@findex @code{mysql_real_connect()}
-
-@code{MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,
- const char *user, const char *passwd, const char *db,
- unsigned int port, const char *unix_socket,
- unsigned int client_flag)}
-
-@subsubheading Beschreibung
-
-@code{mysql_real_connect()} versucht, eine Verbindung zu einer
-MySQL-Datenbankmaschine aufzubauen, die auf @code{host} l�uft.
-@code{mysql_real_connect()} muss erfolgreich verlaufen sein, bevor Sie
-irgend eine andere API-Funktion ausf�hren k�nnen, mit Ausnahme von
-@code{mysql_get_client_info()}.
-
-Die Parameter werden wie folgt angegeben:
-
-@itemize @bullet
-@item
-Der erste Parameter sollte die Adresse einer existierenden
-@code{MYSQL}-Struktur sein. Vor dem Aufruf von @code{mysql_real_connect()}
-m�ssen Sie @code{mysql_init()} aufrufen, um die @code{MYSQL}-Struktur zu
-initialisieren. Sie k�nnen viele der Verbindungsoptionen mit dem
-@code{mysql_options()}-Aufruf �ndern. @xref{mysql_options}.
-
-@item
-Der Wert von @code{host} kann entweder ein Hostname oder eine IP-Adresse
-sein. Wenn @code{host} @code{NULL} oder die Zeichenkette @code{"localhost"}
-ist, wird eine Verbindung zum lokalen Host angenommen. Wenn das
-Betriebssystem Sockets (Unix) oder Named Pipes (Windows NT) unterst�tzt,
-werden diese statt TCP/IP benutzt, um sich mit dem Server zu verbinden.
-
-@item
-Der @code{user}-Parameter enth�lt die MySQL-Login-Benutzerkennung. Wenn
-@code{user} @code{NULL} ist, wird der aktuelle Benutzer angenommen. Unter
-Unix ist das der aktuelle Login-Name. Unter Windows-ODBC muss der aktuelle
-Benutzername explizit angegeben werden. @xref{ODBC administrator}.
-
-@item
-Der @code{passwd}-Parameter enth�lt das Passwort f�r @code{user}. Wenn
-@code{passwd} @code{NULL} ist, werden nur Eintr�ge in der
-@code{user}-Tabelle f�r Benutzer auf �bereinstimmung �berpr�ft, die ein
-leeres Passwort-Feld haben. Das erlaubt dem Datenbank-Administrator, das
-MySQL-Berechtigungssystem so einzurichten, dass Benutzer unterschiedliche
-Berechtigungen haben, je nachdem, ob sie ein Passwort angegeben haben oder
-nicht.
-
-HINWEIS: Versuchen Sie nicht, dass Passwort zu verschl�sseln, bevor Sie
-@code{mysql_real_connect()} aufrufen. Die Passwortverschl�sselung wird
-automatisch durch die Client-API gehandhabt.
-
-@item
-@code{db} ist der Datenbankname. Wenn @code{db} nicht @code{NULL} ist,
-wird die vorgabem��ige Datenbank f�r die Verbindung auf diesen Wert
-gesetzt.
-
-@item
-Wenn @code{port} nicht 0 ist, wird dieser Wert als Port-Nummer f�r die
-TCP/IP-Verbindung benutzt. Beachten Sie, dass der @code{host}-Parameter den
-Verbindungstyp festlegt.
-
-@item
-Wenn @code{unix_socket} nicht @code{NULL} ist, legt die Zeichenkette den
-Socket oder die Named Pipe fest, die benutzt werden sollen. Beachten Sie,
-dass der @code{host}-Parameter den Verbindungstyp festlegt.
-
-@item
-Der Wert von @code{client_flag} ist �blicherweise 0, kann aber unter sehr
-speziellen Umst�nden auf eine Kombination folgender Flags gesetzt werden:
-
-@multitable @columnfractions .25 .7
-@item @strong{Flag-Name} @tab @strong{Flag-Bedeutung}
-@item @code{CLIENT_COMPRESS} @tab Komprimiertes Protokoll benutzen.
-@item @code{CLIENT_FOUND_ROWS} @tab Die Anzahl gefundener
-(�bereinstimmender) Zeilen zur�ckgeben, nicht die Anzahl betroffener
-Zeilen.
-@item @code{CLIENT_IGNORE_SPACE} @tab Leerzeichen nach Funktionsnamen
-zulassen. Macht alle Funktionsnamen zu reservierten W�rter.
-@item @code{CLIENT_INTERACTIVE} @tab @code{interactive_timeout} Sekunden
-zulassen (anstelle von @code{wait_timeout} Sekunden) von Inaktivit�t, bevor
-die Verbindung geschlossen wird.
-@item @code{CLIENT_NO_SCHEMA} @tab Die
-@code{datenbank.tabelle.spalte}-Syntax nicht zulassen. Das ist f�r ODBC.
-Der Flag veranlasst den Parser, einen Fehler zu erzeugen, wenn Sie diese
-Syntax benutzen, was f�r die Fehlersuche in einigen ODBC-Programmen
-hilfreich ist.
-@item @code{CLIENT_ODBC} @tab Der Client ist ein ODBC-Client. Das
-�ndert
-@item @code{CLIENT_SSL} @tab SSL benutzen (verschl�sseltes Protokoll).
-@end multitable
-@end itemize
-
-@subsubheading R�ckgabewerte
-
-Ein @code{MYSQL*}-Verbindungs-Handle, wenn die Verbindung erfolgreich war,
-@code{NULL}, wenn die Verbindung nicht erfolgreich war. Bei einer
-erfolgreichen Verbindung ist der R�ckgabewert derselbe wie der Wert des
-ersten Parameters, es sei denn, Sie �bergeben f�r diesen Parameter
-@code{NULL}.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_CONN_HOST_ERROR
-Verbindung zum MySQL-Server fehlgeschlagen.
-
-@item CR_CONNECTION_ERROR
-Verbindung zum lokalen MySQL-Server fehlgeschlagen.
-
-@item CR_IPSOCK_ERROR
-IP-Socket konnte nicht erzeugt werden.
-
-@item CR_OUT_OF_MEMORY
-Kein Speicher mehr.
-
-@item CR_SOCKET_CREATE_ERROR
-Unix-Socket konnte nicht erzeugt werden.
-
-@item CR_UNKNOWN_HOST
-IP-Adresse f�r den Hostnamen konnte nicht gefunden werden.
-
-@item CR_VERSION_ERROR
-Eine Protokollunvertr�glichkeit resultierte aus dem Versuch, sich mit einer
-Client-Bibliothek mit einem Server zu verbinden, die eine andere
-Protokollversion benutzt. Das kann passieren, wenn Sie eine sehr alte
-Client-Bibliothek benutzen und sich mit einem neuen Server verbinden, der
-nicht mit der @code{--old-protocol}-Option gestartet wurde.
-
-@item CR_NAMEDPIPEOPEN_ERROR
-Named Pipe unter Windows konnte nicht erzeugt werden.
-
-@item CR_NAMEDPIPEWAIT_ERROR
-Fehler beim Warten auf eine Named Pipe unter Windows.
-
-@item CR_NAMEDPIPESETSTATE_ERROR
-Pipe-Handler unter Windows konnte nicht erlangt werden.
-
-@item CR_SERVER_LOST
-Wenn @code{connect_timeout} > 0 ist und die Verbindung zum Server l�nger
-als @code{connect_timeout} ben�tigte, oder wenn der Server w�hrend der
-Ausf�hrung von @code{init-command} starb.
-
-@end table
-
-@subsubheading Beispiel
-
-@example
-MYSQL mysql;
-
-mysql_init(&mysql);
-mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"your_prog_name");
-if (!mysql_real_connect(&mysql,"host","benutzer","passwort","datenbank",0,NULL,0))
-@{
- fprintf(stderr, "Verbindung zur Datenbank fehlgeschlagen: Fehler: %s\n",
- mysql_error(&mysql));
-@}
-@end example
-
-Wenn Sie @code{mysql_options()} benutzen, liest die MySQL-Bibliothek die
-@code{[client]}- und @code{ihr_programm_name}-Abschnitte in der
-@code{my.cnf}-Datei. Das stellt sicher, dass Ihr Programm funktioniert,
-selbst wenn jemand MySQL auf Nicht-Standard-Weise eingerichtet hat.
-
-Beachten Sie, dass @code{mysql_real_connect()} beim Verbinden den
-@code{reconnect}-Flag (Teil der MySQL-Struktur) auf einen Wert von @code{1}
-setzt. Dieser Flag gibt an, dass ein erneuter Verbindungsversuch zum Server
-gemacht wird, bevor aufgegeben wird, wenn eine Anfrage wegen einer verloren
-gegangenen Verbindung nicht ausgef�hrt werden kann.
-
-
-@node mysql_real_escape_string, mysql_real_query, mysql_real_connect, C API functions
-@c German node mysql_real_escape_string
-@subsubsection @code{mysql_real_escape_string()}
-
-@findex @code{mysql_real_escape_string()}
-
-@code{unsigned int mysql_real_escape_string(MYSQL *mysql, char *nach, const char *von, unsigned int laenge)}
-
-@subsubheading Beschreibung
-
-Diese Funktion wird benutzt, um eine zul�ssige SQL-Zeichenkette zu
-erzeugen, die Sie in einem SQL-Statement benutzen k�nnen.
-@xref{String syntax}.
-
-Die Zeichenkette in @code{von} wird in eine escapete SQL-Zeichenkette
-kodiert, wobei der aktuelle Zeichensatz der Verbindung ber�cksichtigt wird.
-Das Ergebnis wird in @code{nach} platziert und ein Null-Byte am Ende
-angef�gt. Kodierte Zeichen sind @code{NUL} (ASCII 0), @samp{\n}, @samp{\r},
-@samp{\}, @samp{'}, @samp{"} und Control-Z (@pxref{Literals}).
-
-Die Zeichenkette, auf die von @code{von} gezeigt wird, muss @code{laenge}
-Bytes lang sein. Sie m�ssen den @code{nach}-Puffer so zuweisen, dass er
-mindestens @code{laenge*2+1} Bytes lang ist. (Im schlimmsten Fall muss
-jedes Zeichen mit zwei Bytes kodiert werden, und Sie brauchen Platz f�r das
-Null-Byte am Ende.) Wenn @code{mysql_escape_string()} zur�ckgibt, sind die
-Inhalte von @code{nach} eine Null-begrenzte Zeichenkette. Der R�ckgabewert
-ist die L�nge der kodierten Zeichenkette, ohne das Null-Zeichen am Ende.
-
-@subsubheading Beispiel
-
-@example
-char anfrage[1000],*end;
-
-end = strmov(anfrage,"INSERT INTO tabelle values(");
-*end++ = '\'';
-end += mysql_real_escape_string(&mysql, end,"Was is'n das?",12);
-*end++ = '\'';
-*end++ = ',';
-*end++ = '\'';
-end += mysql_real_escape_string(&mysql, end,"Bin�rdaten: \0\r\n",17);
-*end++ = '\'';
-*end++ = ')';
-
-if (mysql_real_query(&mysql,anfrage,(unsigned int) (end - anfrage)))
-@{
- fprintf(stderr, "Einf�gen der Zeile fehlgeschlagen, Fehler: %s\n",
- mysql_error(&mysql));
-@}
-@end example
-
-Die im Beispiel benutzte @code{strmov()}-Funktion ist in der
-@code{mysqlclient}-Bibliothek enthalten und funktioniert wie
-@code{strcpy()}, gibt aber einen Zeiger auf Null am Ende des ersten
-Parameters zur�ck.
-
-@subsubheading R�ckgabewerte
-
-Die L�nge des Wertes in @code{nach}, ohne das Null-Zeichen am Ende.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_real_query, mysql_reload, mysql_real_escape_string, C API functions
-@c German node mysql_real_query
-@subsubsection @code{mysql_real_query()}
-
-@findex @code{mysql_real_query()}
-
-@code{int mysql_real_query(MYSQL *mysql, const char *anfrage, unsigned int laenge)}
-
-@subsubheading Beschreibung
-
-F�hrt die SQL-Anfrage aus, auf die von @code{anfrage} gezeigt wird, was
-eine @code{laenge} Bytes lange Zeichenkette sein sollte. Die0 Anfrage muss
-aus einem einzelnen SQL-Statement bestehen. Sie d�rfen kein Semikolon
-(@samp{;}) oder @code{\g} zum Statement hinzuf�gen.
-
-Sie @emph{m�ssen} @code{mysql_real_query()} statt @code{mysql_query()} f�r
-Anfragen benutzen, die Bin�rdaten enthalten, weil Bin�rdaten das
-@samp{\0}-Zeichen enthalten k�nnen. Ausserdem ist @code{mysql_real_query()}
-schneller als @code{mysql_query()}, weil es in der Anfragezeichenkette
-nicht @code{strlen()} aufruft.
-
-Wenn Sie wissen wollen, ob die Anfrage eine Ergebnismenge zur�ckgeben
-sollte oder nicht, k�nnen Sie hierf�r @code{mysql_field_count()} benutzen.
-@xref{mysql_field_count, @code{mysql_field_count}}.
-
-@subsubheading R�ckgabewerte
-
-0, wenn die Anfrage erfolgreich war. Nicht-0, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_reload, mysql_row_seek, mysql_real_query, C API functions
-@c German node mysql_reload
-@subsubsection @code{mysql_reload()}
-
-@findex @code{mysql_reload()}
-
-@code{int mysql_reload(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Weist den MySQL-Server an, die Berechtigungstabellen neu zu laden. Der
-verbundene Benutzer muss die @strong{reload}-Berechtigung haben.
-
-Diese Funktion ist veraltet. Vorzugsweise sollten Sie @code{mysql_query()}
-benutzen, um statt dessen ein SQL-@code{FLUSH PRIVILEGES}-Statement
-auszuf�hren.
-
-@subsubheading R�ckgabewerte
-
-0 bei Erfolg. Nicht-0, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_row_seek, mysql_row_tell, mysql_reload, C API functions
-@c German node mysql_row_seek
-@subsubsection @code{mysql_row_seek()}
-
-@findex @code{mysql_row_seek()}
-
-@code{MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *ergebnis, MYSQL_ROW_OFFSET offset)}
-
-@subsubheading Beschreibung
-Setzt den Zeilencursor auf eine beliebige Zeile in einer
-Anfrageergebnismenge. Daf�r ist erforderlich, dass die
-Ergebnismengenstruktur das gesamte Ergebnis der Anfrage enth�lt, so dass
-@code{mysql_row_seek()} nur in Verbindung mit @code{mysql_store_result()}
-benutzt werden kann, nicht mit @code{mysql_use_result()}.
-
-Der Offset sollte ein Wert sein, der von einem Aufruf von
-@code{mysql_row_tell()} oder @code{mysql_row_seek()} zur�ckgegeben wird.
-Dieser Wert ist nicht einfach eine Zeilennummer; wenn Sie eine Zeile
-innerhalb einer Ergebnismenge mittels einer Zeilennummer suchen wollen,
-benutzen Sie statt dessen @code{mysql_data_seek()}.
-
-@subsubheading R�ckgabewerte
-
-Der vorherige Wert des Zeilencursors. Dieser Wert kann an einen
-nachfolgenden Aufruf von @code{mysql_row_seek()} �bergeben werden.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_row_tell, mysql_select_db, mysql_row_seek, C API functions
-@c German node mysql_row_tell
-@subsubsection @code{mysql_row_tell()}
-
-@findex @code{mysql_row_tell()}
-
-@code{MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *ergebnis)}
-
-@subsubheading Beschreibung
-
-Gibt die aktuelle Position des Zeilencursors f�r das letzte
-@code{mysql_fetch_row()} zur�ck. Dieser Wert kann als Argument f�r
-@code{mysql_row_seek()} benutzt werden.
-
-Sie sollten @code{mysql_row_tell()} nur nach @code{mysql_store_result()},
-nicht nach @code{mysql_use_result()} benutzen.
-
-@subsubheading R�ckgabewerte
-
-Der aktuelle Offset des Zeilencursors.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_select_db, mysql_shutdown, mysql_row_tell, C API functions
-@c German node mysql_select_db
-@subsubsection @code{mysql_select_db()}
-
-@findex @code{mysql_select_db()}
-
-@code{int mysql_select_db(MYSQL *mysql, const char *db)}
-
-@subsubheading Beschreibung
-
-F�hrt dazu, dass die Datenbank, die durch @code{db} angegeben wird, die
-vorgabem��ige (aktuelle) Datenbank auf der von @code{mysql} angegebenen
-Verbindung wird. Bei nachfolgenden Anfragen ist diese Datenbank die Vorgabe
-f�r Tabellenverweise, die nicht explizit einen Datenbank-Spezifizierer
-enthalten.
-
-@code{mysql_select_db()} schl�gt fehl, wenn der verbundene Benutzer keine
-Zugriffsrechte auf die Datenbank hat.
-
-@subsubheading R�ckgabewerte
-
-0 bei Erfolg. Nicht-0, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_shutdown, mysql_stat, mysql_select_db, C API functions
-@c German node mysql_shutdown
-@subsubsection @code{mysql_shutdown()}
-
-@findex @code{mysql_shutdown()}
-
-@code{int mysql_shutdown(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-F�hrt dazu, dass der Datenbankserver herunter f�hrt. Der verbundene
-Benutzer muss die @strong{shutdown}-Berechtigung haben.
-
-@subsubheading R�ckgabewerte
-
-0 bei Erfolg. Nicht-0, wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_stat, mysql_store_result, mysql_shutdown, C API functions
-@c German node mysql_stat
-@subsubsection @code{mysql_stat()}
-
-@findex @code{mysql_stat()}
-
-@code{char *mysql_stat(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Gibt eine Zeichenkette zur�ck, die Informationen enth�lt, die �hnlich denen
-sind, die vom @code{mysqladmin status}-Befehl zur Verf�gung gestellt
-werden. Das schlie�t die Betriebszeit (Uptime) in Sekunden und die Anzahl
-laufender Threads, Anfragen (Questions), Neuladen (Reloads) und offener
-Tabellen ein.
-
-@subsubheading R�ckgabewerte
-
-Eine Zeichenkette, die den Serverstatus beschreibt. @code{NULL}, wenn ein
-Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_store_result, mysql_thread_id, mysql_stat, C API functions
-@c German node mysql_store_result
-@subsubsection @code{mysql_store_result()}
-
-@findex @code{mysql_store_result()}
-
-@code{MYSQL_RES *mysql_store_result(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Sie m�ssen @code{mysql_store_result()} oder @code{mysql_use_result()} f�r
-jede Anfrage aufrufen, die erfolgreich Daten abruft (@code{SELECT},
-@code{SHOW}, @code{DESCRIBE}, @code{EXPLAIN}).
-
-F�r andere Anfragen m�ssen Sie @code{mysql_store_result()} oder
-@code{mysql_use_result()} nicht aufrufen, es schadet aber auch nicht, noch
-f�hrt es zu wahrnehmbaren Performance-St�rungen, wenn Sie
-@code{mysql_store_result()} in jedem Fall aufrufen. Sie k�nnen feststellen,
-ob die Anfrage keine Ergebnismenge hatte, wenn Sie pr�fen, ob
-@code{mysql_store_result()} 0 zur�ckgibt (mehr dar�ber sp�ter).
-
-Wenn Sie wissen wollen, ob die Anfrage eine Ergebnismenge zur�ckgeben
-sollte oder nicht, k�nnen Sie hierf�r @code{mysql_field_count()} benutzen.
-@xref{mysql_field_count, @code{mysql_field_count}}.
-
-@code{mysql_store_result()} liest das gesamte Ergebnis einer Anfrage zum
-Client ein, weist eine @code{MYSQL_RES}-Struktur zu und platziert das
-Ergebnis in diese Struktur.
-
-@code{mysql_store_results()} gibt einen NULL-Zeiger zur�ck, wenn die
-Anfrage keine Ergebnismenge zur�ckgab (wenn die Anfrage zum Beispiel ein
-@code{INSERT}-Statement war).
-
-@code{mysql_store_results()} gibt auch einen NULL-Zeiger zur�ck, wenn das
-Lesen der Ergebnismenge fehlschlug. Sie k�nnen pr�fen, ob Sie einen Fehler
-erhielten, wenn @code{mysql_error()} keinen NULL-Zeiger zur�ckgibt, wenn
-@code{mysql_errno()} ungleich 0 zur�ckgibt oder wenn
-@code{mysql_field_count()} ungleich 0 zur�ckgibt.
-
-Eine leere Ergebnismenge wird zur�ckgegeben, wenn keine Zeilen
-zur�ckgegeben werden. (Eine leere Ergebnismenge unterscheidet sich als
-R�ckgabewert von einem NULL-Zeiger.)
-
-Nachdem Sie erst einmal @code{mysql_store_result()} aufgerufen und ein
-Ergebnis erhalten haben, das kein NULL-Zeiger ist, k�nnen Sie
-@code{mysql_num_rows()} aufrufen, um herauszufinden, wie viele Zeilen es in
-der Ergebnismenge gibt.
-
-Sie k�nnen @code{mysql_fetch_row()} aufrufen, um Zeilen aus der
-Ergebnismenge zu holen, oder @code{mysql_row_seek()} und
-@code{mysql_row_tell()}, um die aktuelle Zeilenposition innerhalb der
-Ergebnismenge zu erhalten oder zu setzen.
-
-Sie m�ssen @code{mysql_free_result()} aufrufen, wenn Sie mit der
-Ergebnismenge fertig sind.
-
-@xref{NULL mysql_store_result, , @code{NULL mysql_store_result()}}.
-
-@subsubheading R�ckgabewerte
-
-Eine @code{MYSQL_RES}-Ergebnisstruktur mit den Ergebnissen. @code{NULL},
-wenn ein Fehler auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_OUT_OF_MEMORY
-Kein Speicher mehr.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-
-@node mysql_thread_id, mysql_use_result, mysql_store_result, C API functions
-@c German node mysql_thread_id
-@subsubsection @code{mysql_thread_id()}
-
-@findex @code{mysql_thread_id()}
-
-@code{unsigned long mysql_thread_id(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Gibt die Thread-Kennung der aktuellen Verbindung zur�ck. Der Wert kann als
-Argument f�r @code{mysql_kill()} benutzt werden, um den Thread zu t�ten.
-
-Wenn die Verbindung verloren ging und Sie sich mit @code{mysql_ping()}
-erneut verbinden, �ndert sich die Thread-Kennung. Das hei�t, dass Sie
-nicht die Thread-Kennung holen und f�r sp�tere Benutzung speichern sollten.
-Sie sollten sie holen, wenn Sie sie ben�tigen.
-
-@subsubheading R�ckgabewerte
-
-Die Thread-Kennung der aktuellen Verbindung.
-
-@subsubheading Fehler
-
-Keine.
-
-
-@node mysql_use_result, , mysql_thread_id, C API functions
-@c German node mysql_use_result
-@subsubsection @code{mysql_use_result()}
-
-@findex @code{mysql_use_result()}
-
-@code{MYSQL_RES *mysql_use_result(MYSQL *mysql)}
-
-@subsubheading Beschreibung
-
-Sie m�ssen @code{mysql_store_result()} oder @code{mysql_use_result()} f�r
-jede Anfrage aufrufen, die erfolgreich Daten abruft (@code{SELECT},
-@code{SHOW}, @code{DESCRIBE}, @code{EXPLAIN}).
-
-@code{mysql_use_result()} initiiert einen Ergebnismengen-Abruf, aber liest
-die Ergebnismenge nicht tats�chlich in den Client wie
-@code{mysql_store_result()}. Statt dessen muss jede Zeile individuell
-abgerufen werden, indem Aufrufe von @code{mysql_fetch_row()} durchgef�hrt
-werden. Das liest das Ergebnis einer Anfrage direkt vom Server, ohne es in
-einer tempor�ren Tabelle oder einem lokalen Puffer zu speichern, was
-manchmal schneller ist und viel weniger Speicher benutzt als
-@code{mysql_store_result()}. Dem Client wird nur Speicher f�r die aktuelle
-Zeile zugewiesen sowie ein Kommunikationspuffer, der bis zu
-@code{max_allowed_packet} Bytes Gro� werden kann.
-
-Auf der anderen Seite sollten Sie @code{mysql_use_result()} nicht benutzen,
-wenn Sie viele Verarbeitungen f�r jede Zeile auf der Client-Seite
-durchf�hren oder wenn die Ausgabe auf den Bildschirm geschickt wird, auf
-dem der Benutzer @code{^S} (stop scroll) eingeben kann. Das bindet den
-Server und verhindert, dass andere Threads irgend welche Tabellen
-aktualisieren k�nnen, von denen gerade Daten geholt werden.
-
-Wenn Sie @code{mysql_use_result()} benutzen, m�ssen Sie
-@code{mysql_fetch_row()} ausf�hren, bis ein @code{NULL}-Wert zur�ckgegeben
-wird, denn ansonsten werden die nicht geholten Zeilen als Teil der
-Ergebnismenge bei Ihrer n�chsten Anfrage zur�ckgegeben. Die C-API gibt den
-Fehler @code{Commands out of sync; You can't run this command now} aus,
-wenn Sie das vergessen!
-
-Sie k�nnen @code{mysql_data_seek()}, @code{mysql_row_seek()},
-@code{mysql_row_tell()}, @code{mysql_num_rows()} oder
-@code{mysql_affected_rows()} nicht bei einem Ergebnis verwenden, das von
-@code{mysql_use_result()} zur�ckgegeben wird. Ausserdem d�rfen Sie keine
-anderen Anfragen absetzen, bis @code{mysql_use_result()} beendet ist.
-(Nachdem Sie alle Zeilen abgeholt haben, wird @code{mysql_num_rows()}
-jedoch exakt die Anzahl der geholten Zeilen zur�ckgeben.)
-
-Sie m�ssen @code{mysql_free_result()} aufrufen, wenn Sie mit der
-Ergebnismenge fertig sind.
-
-@subsubheading R�ckgabewerte
-
-Eine @code{MYSQL_RES}-Ergebnisstruktur. @code{NULL}, wenn ein Fehler
-auftrat.
-
-@subsubheading Fehler
-
-@table @code
-@item CR_COMMANDS_OUT_OF_SYNC
-Befehle wurden nicht in der korrekten Reihenfolge ausgef�hrt.
-@item CR_OUT_OF_MEMORY
-Kein Speicher mehr.
-@item CR_SERVER_GONE_ERROR
-Der MySQL-Server ist weg.
-@item CR_SERVER_LOST
-Die Verbindung zum Server ging w�hrend der Anfrage verloren.
-@item CR_UNKNOWN_ERROR
-Ein unbekannter Fehler trat auf.
-@end table
-
-@node C Thread functions, C Embedded Server func, C API functions, C
-@c German node C-Thread-Funktionen
-@subsection C-Threaded-Funktionsbeschreibungen
-
-Sie ben�tigen folgende Funktionen, wenn Sie einen threaded Client erstellen
-wollen. @xref{Threaded clients}.
-
-
-@menu
-* my_init::
-* mysql_thread_init::
-* mysql_thread_end::
-* mysql_thread_safe::
-@end menu
-
-@node my_init, mysql_thread_init, C Thread functions, C Thread functions
-@c German node my_init()
-@subsubsection @code{my_init()}
-
-@findex @code{my_init()}
-
-@subsubheading Beschreibung
-
-Diese Funktion muss einmal im Programm aufgerufen werden, bevor Sie irgend
-eine MySQL-Funktion aufrufen. Sie initialisiert einige globale Variablen,
-die MySQL braucht. Wenn Sie eine Thread-sichere Client-Bibliothek benutzen,
-wird diese ebenfalls @code{mysql_thread_init()} f�r diesen Thread aufrufen.
-
-Diese Funktion wird automatisch von @code{mysql_init()},
-@code{mysql_server_init()} und @code{mysql_connect()} aufgerufen.
-
-@subsubheading R�ckgabewerte
-
-Keine.
-
-@node mysql_thread_init, mysql_thread_end, my_init, C Thread functions
-@c German node mysql_thread_init()
-@subsubsection @code{mysql_thread_init()}
-
-@findex @code{mysql_thread_init()}
-
-@subsubheading Beschreibung
-
-Diese Funktion muss f�r jeden erzeugten Thread aufgerufen werden, um
-Thread-spezifische Variablen zu initialisieren.
-
-Diese Funktion wird automatisch von @code{my_init()} und
-@code{mysql_connect()} aufgerufen.
-
-@subsubheading R�ckgabewerte
-
-Keine.
-
-@node mysql_thread_end, mysql_thread_safe, mysql_thread_init, C Thread functions
-@c German node mysql_thread_end()
-@subsubsection @code{mysql_thread_end()}
-
-@findex @code{mysql_thread_end()}
-
-@subsubheading Beschreibung
-
-Diese Funktion muss vor dem Aufruf von @code{pthread_exit()} aufgerufen
-werden, um den von @code{mysql_thread_init()} zugewiesenen Speicher
-freizusetzen.
-
-Beachten Sie, dass diese Funktion @strong{nicht automatisch} von der
-Client-Bibliothek aufgerufen wird. Sie muss explizit aufgerufen werden, um
-Speicherlecks zu vermeiden.
-
-@subsubheading R�ckgabewerte
-
-Keine.
-
-@node mysql_thread_safe, , mysql_thread_end, C Thread functions
-@c Arjen note: new @node 2002-04-19, please translate text!
-@subsubsection @code{mysql_thread_safe()}
-
-@findex @code{mysql_thread_safe()}
-
-@code{unsigned int mysql_thread_safe(void)}
-
-@subsubheading Description
-
-This function indicates whether the client is compiled as thread safe.
-
-@subsubheading Return Values
-
-1 is the client is thread safe, 0 otherwise.
-
-@node C Embedded Server func, C API problems, C Thread functions, C
-@c German node C-Embedded-Server-Funktionen
-@subsection C-Embedded-Server-Funktionsbeschreibungen
-
-Sie m�ssen folgende Funktionen benutzen, wenn Sie wollen, dass Ihre
-Applikation gegen die eingebettete MySQL-Server-Bibliothek gelinkt werden
-kann. @xref{libmysqld}.
-
-Wenn das Programm mit @code{-lmysqlclient} anstelle von @code{-lmysqld}
-gelinkt wird, tun diese Funktionen nicht. Das erm�glicht die Auswahl
-zwischen der Benutzung des eingebetteten MySQL-Servers und eines
-Standalone-Servers, ohne irgend welchen Code zu ver�ndern.
-
-
-@menu
-* mysql_server_init::
-* mysql_server_end::
-@end menu
-
-@node mysql_server_init, mysql_server_end, C Embedded Server func, C Embedded Server func
-@c German node mysql_server_init()
-@subsubsection @code{mysql_server_init()}
-
-@findex @code{mysql_server_init()}
-
-@code{void mysql_server_init(int argc, const char **argv, const char **groups)}
-
-@subsubheading Beschreibung
-
-Diese Funktion @strong{muss} einmal im Programm aufgerufen werden, bevor
-irgend eine andere MySQL-Funktion aufgerufen wird. Sie startet den Server
-und initialisiert jegliche Subsysteme (@code{mysys}, InnoDB usw.), die der
-Server benutzt. Wenn diese Funktion nicht aufgerufen wird, st�rzt das
-Programm ab.
-
-Die @code{argc}- und @code{argv}-Argumente sind analog zu den Argumenten
-f�r @code{main()}. Das erste Element von @code{argv} wird ignoriert (es
-enth�lt typischerweise den Programmnamen). Aus Bequemlichkeitsgr�nden kann
-@code{argc} @code{0} sein, wenn es keine Kommandozeilenargumente f�r den
-Server gibt.
-
-Die @code{NULL}-begrenzte Liste von Zeichenketten in @code{groups} w�hlt
-aus, welche Gruppen in den Optionsdateien aktiv sind.
-@xref{Option files}. Aus Bequemlichkeitsgr�nden kann @code{groups}
-@code{NULL} sein. In diesem Fall ist die @code{[server]}-Gruppe aktiv.
-
-@subsubheading Beispiel
-
-@example
-#include <mysql.h>
-#include <stdlib.h>
-
-static char *server_args[] = @{
- "Mein Programm", /* Diese Zeichenkette ist unbenutzt */
- "--datadir=.",
- "--set-variable=key_buffer_size=32M"
-@};
-static char *server_groups[] = @{
- "server",
- "Dieser_Programm_SERVER",
- (char *)NULL
-@};
-
-int main(void) @{
- mysql_server_init(sizeof(server_args) / sizeof(char *),
- server_args, server_groups);
-
- /* Hier k�nnen Sie irgend welche MySQL-API-Funktionen benutzen */
-
- mysql_server_end();
-
- return EXIT_SUCCESS;
-@}
-@end example
-
-@subsubheading R�ckgabewerte
-
-Keine.
-
-@node mysql_server_end, , mysql_server_init, C Embedded Server func
-@c German node mysql_server_end()
-@subsubsection @code{mysql_server_end()}
-
-@findex @code{mysql_server_end()}
-
-@subsubheading Beschreibung
-
-Diese Funktion @strong{muss} einmal im Programm nach allen anderen
-MySQL-Funktionen aufgerufen werden. Sie f�hrt den eingebetteten Server
-herunter.
-
-@subsubheading R�ckgabewerte
-
-Keine.
-
-@node C API problems, Building clients, C Embedded Server func, C
-@c German node C-API-Probleme
-@subsection H�ufige Fragen und Probleme bei der Benutzung der C-API
-
-@tindex @code{mysql_query()}
-@tindex @code{mysql_store_result()}
-
-
-
-@menu
-* NULL mysql_store_result::
-* Query results::
-* Getting unique ID::
-* C API linking problems::
-@end menu
-
-@node NULL mysql_store_result, Query results, C API problems, C API problems
-@c German node NULL mysql_store_result
-@subsubsection Warum gibt @code{mysql_store_result()} manchmal @code{NULL} zur�ck, nachdem @code{mysql_query()} Erfolg zur�ckgegeben hat?
-
-@code{mysql_store_result()} kann @code{NULL} zur�ckgeben, auch nach einem
-erfolgreichen Aufruf von @code{mysql_query()}. Wenn das passiert, bedeutet
-das, dass eine der folgenden Bedingungen eingetreten ist:
-
-@itemize @bullet
-@item
-Es gab einen @code{malloc()}-Fehler (zum Beispiel, wenn die Ergebnismenge
-zu Gro� war).
-
-@item
-Die Daten konnten nicht gelesen werden (ein Fehler mit der Verbindung trat
-auf).
-
-@item
-Die Anfrage gab keine Daten zur�ck (sie war zum Beispiel ein @code{INSERT},
-@code{UPDATE} oder @code{DELETE}).
-@end itemize
-
-Sie k�nnen jederzeit pr�fen, ob das Statement eine leere Ergebnismenge
-geliefert haben sollte oder nicht, indem Sie @code{mysql_field_count()}
-aufrufen. Wenn @code{mysql_field_count()} 0 zur�ckliefert, ist das Ergebnis
-leer und die letzte Anfrage war ein Statement, die keine R�ckgabewerte
-liefert (zum Beispiel ein @code{INSERT} oder ein @code{DELETE}). Wenn
-@code{mysql_field_count()} einen Nicht-0-Wert zur�ckgibt, h�tte das
-Statement ein nicht leeres Ergebnis zur�ckliefern sollen. Sehen Sie in der
-Beschreibung von @code{mysql_field_count()}-Funktion wegen eines Beispiels
-nach.
-
-Sie k�nnen durch Aufruf von @code{mysql_error()} oder @code{mysql_errno()}
-auf einen Fehler �berpr�fen.
-
-@cindex Anfragen, C-API-Ergebnisse
-
-
-@node Query results, Getting unique ID, NULL mysql_store_result, C API problems
-@c German node Anfrageergebnisse
-@subsubsection Welche Ergebnisse kann ich von einer Anfrage bekommen?
-
-Zus�tzlich zur Ergebnismenge, die von einer Anfrage zur�ckgegeben wird,
-k�nnen Sie auch folgende Informationen bekommen:
-
-@itemize @bullet
-@item
-@code{mysql_affected_rows()} gibt die Anzahl von Zeilen zur�ck, die durch
-die letzte Anfrage betroffen wurden, wenn Sie ein @code{INSERT},
-@code{UPDATE} oder @code{DELETE} ausf�hren. Eine Ausnahme besteht darin,
-wenn @code{DELETE} ohne eine @code{WHERE}-Klausel benutzt wird. In diesem
-Fall wird die Tabelle leer neu erzeugt, was viel schneller ist! Daher gibt
-@code{mysql_affected_rows()} 0 f�r die Anzahl betroffener Datens�tze
-zur�ck.
-
-@item
-@code{mysql_num_rows()} gibt die Anzahl von Zeilen in einer Ergebnismenge
-zur�ck. Bei @code{mysql_store_result()} kann @code{mysql_num_rows()}
-aufgerufen werden, sobald @code{mysql_store_result()} etwas zur�ckgibt. Bei
-@code{mysql_use_result()} kann @code{mysql_num_rows()} erst aufgerufen
-werden, nachdem Sie alle Zeilen mit @code{mysql_fetch_row()} geholt haben.
-
-@item
-@code{mysql_insert_id()} gibt die Kennung zur�ck, die von der letzten
-Anfrage erzeugt wurde, die eine Zeile in eine Tabelle mit einem
-@code{AUTO_INCREMENT}-Index einf�gte. @xref{mysql_insert_id, ,
-@code{mysql_insert_id()}}.
-
-@item
-Einige Anfragen (@code{LOAD DATA INFILE ...}, @code{INSERT INTO ... SELECT
-...}, @code{UPDATE}) geben zus�tzliche Informationen zur�ck. Das Ergebnis
-wird von @code{mysql_info()} zur�ckgegeben. Siehe die Beschreibung f�r
-@code{mysql_info()} hinsichtlich des Formats der Zeichenkette, die diese
-Funktion zur�ckgibt. @code{mysql_info()} gibt einen @code{NULL}-Zeiger
-zur�ck, wenn es keine zus�tzlichen Informationen gibt.
-@end itemize
-
-
-@node Getting unique ID, C API linking problems, Query results, C API problems
-@c German node Eindeutige Kennung erhalten
-@subsubsection Wie erhalte ich die eindeutige Kennung f�r die letzte eingef�gte Zeile?
-
-@cindex eindeutige Kennung
-@cindex letzte Zeile, eindeutige Kennung
-@cindex Kennung, eindeutige
-@cindex Tabellen, eindeutige Kennung f�r die letzte Zeile
-
-Wenn Sie einen Datensatz in eine Tabelle einf�gen, der eine Spalte enth�lt,
-die das @code{AUTO_INCREMENT}-Attribut hat, erhalten Sie die letzte
-erzeugte Kennung durch Aufruf der @code{mysql_insert_id()}-Funktion.
-
-Sie k�nnen die Kennung auch dadurch abrufen, dass Sie die
-@code{LAST_INSERT_ID()}-Funktion in einer Anfrage-Zeichenkette verwenden,
-die Sie an @code{mysql_query()} �bergeben.
-
-Sie k�nnen �berpr�fen, ob ein @code{AUTO_INCREMENT}-Index benutzt wird,
-wenn Sie folgenden Code ausf�hren. Er pr�ft auch, ob die Anfrage ein
-@code{INSERT} mit einem @code{AUTO_INCREMENT}-Index war:
-
-@example
-if (mysql_error(&mysql)[0] == 0 &&
- mysql_num_fields(ergebnis) == 0 &&
- mysql_insert_id(&mysql) != 0)
-@{
- used_id = mysql_insert_id(&mysql);
-@}
-@end example
-
-Die letzte erzeugte Kennung wird im Server auf der Grundlage der jeweiligen
-Verbindung gewartet. Sie wird nicht durch andere Clients ge�ndert. Sie wird
-nicht einmal ge�ndert, wenn Sie eine andere @code{AUTO_INCREMENT}-Spalte
-mit einem nicht magischen Wert aktualisieren (einem Wert, der nicht
-@code{NULL} und nicht @code{0} ist).
-
-Wenn Sie die Kennung benutzen wollen, die f�r eine Tabelle erzeugt wurde,
-um sie in eine zweite Tabelle einzuf�gen, k�nnen Sie SQL-Statements wie
-folgt benutzen:
-
-@example
-INSERT INTO foo (auto,text)
- VALUES(NULL,'text'); # Kennung durch Einf�gen von NULL erzeugen
-INSERT INTO foo2 (id,text)
- VALUES(LAST_INSERT_ID(),'text'); # Kennung in zweiter Tabelle benutzen
-@end example
-
-
-@node C API linking problems, , Getting unique ID, C API problems
-@c German node C-API-Linking-Probleme
-@subsubsection Probleme beim Linken mit der C-API
-
-@cindex Linken, Probleme
-@cindex C-API, Link-Probleme
-
-Wenn Sie mit der C-API linken, k�nnen auf manchen Systemen folgende Fehler
-auftreten:
-
-@example
-gcc -g -o client test.o -L/usr/local/lib/mysql -lmysqlclient -lsocket -lnsl
-
-Undefined first referenced
- symbol in file
-floor /usr/local/lib/mysql/libmysqlclient.a(password.o)
-ld: fatal: Symbol referencing errors. No output written to client
-@end example
-
-Wenn das auf Ihrem System passiert, m�ssen Sie die math-Bibliothek
-einschlie�en, indem Sie @code{-lm} am Ende der Kompilier- / Link-Zeile
-hinzuf�gen.
-
-
-@node Building clients, Threaded clients, C API problems, C
-@c German node Clients bauen
-@subsection Client-Programme bauen
-
-@cindex Client-Programme, bauen
-@cindex linken
-@cindex bauen, Client-Programme
-@cindex Programme, Client
-
-Wenn Sie MySQL-Clients kompilieren, die Sie selbst geschrieben oder von
-Dritten erhalten haben, m�ssen diese mit der @code{-lmysqlclient
--lz}-Option f�r den Link-Befehl gelinkt werden. Eventuell sollten Sie auch
-eine @code{-L}-Option verwenden, um dem Linker mitzuteilen, wo sich die
-Bibliothek befindet. Wenn zum Beispiel die Bibliothek in
-@file{/usr/local/mysql/lib} installiert ist, benutzen Sie
-@code{-L/usr/local/mysql/lib -lmysqlclient -lz} f�r den Link-Befehl.
-
-F�r Clients, die MySQL-Header-Dateien benutzen, m�ssen Sie eventuell eine
-@code{-I}-Option angeben, wenn Sie sie kompilieren (zum Beispiel
-@code{-I/usr/local/mysql/include}), so dass der Kompiler die Header-Dateien
-finden kann.
-
-
-@node Threaded clients, libmysqld, Building clients, C
-@c German node Threaded Clients
-@subsection Wie man einen threaded Client herstellt
-
-@cindex Clients, Threaded
-@cindex Threaded Clients
-
-Die Client-Bibliothek ist fast Thread-sicher. Das gr��te Problem besteht
-darin, dass die Subroutinen in @file{net.c}, die von Sockets lesen, nicht
-Interrupt-sicher sind. Das wurde mit dem Hintergedanken gemacht, dass Sie
-eventuell Ihre eigenen Alarme haben m�chten, die ein langes Lesen vom
-Server unterbrechen k�nnen. Wenn Sie Interrupt-Handler f�r den
-@code{SIGPIPE}-Interrupt installieren, sollte die Socket-Handhabung
-Thread-sicher sein.
-
-In den �lteren Bin�rdistributionen wurden die Client-Bibliotheken
-normalerweise nicht mit der Thread-sicheren Option kompiliert (die
-Windows-Bin�rdateien sind vorgabem��ig Thread-sicher kompiliert). Neuere
-Bin�rdistributionen sollten sowohl eine normale als auch eine
-Thread-sichere Client-Bibliothek haben.
-
-Um einen threaded Client zu erhalten, bei dem Sie den Client durch andere
-Threads unterbrechen (interrupt) und Zeit�berschreitungen (Timeouts) setzen
-k�nnen, wenn Sie mit dem MySQL-Server kommunizieren, sollten Sie die
-@code{-lmysys}-, @code{-lstring}-, und @code{-ldbug}-Bibliotheken und den
-@code{net_serv.o}-Code benutzen, den der Server benutzt.
-
-Wenn Sie keine Unterbrechungen (Interrupts) oder Zeit�berschreitungen
-(Timeouts) ben�tigen, k�nnen Sie einfach eine Thread-sicher
-Client-Bibliothek @code{(mysqlclient_r)} kompilieren und diese benutzen.
-@xref{C,,MySQL-C-API}. In diesem Fall m�ssen Sie sich nicht um die
-@code{net_serv.o}-Objektdatei oder die anderen MySQL-Bibliotheken k�mmern.
-
-Wenn Sie einen threaded Client benutzen und Unterbrechungen (Interrupts)
-und Zeit�berschreitungen (Timeouts) benutzen wollen, k�nnen Sie in
-umfangreicher Weise die Routinen in der @file{thr_alarm.c}-Datei benutzen.
-Wenn Sie Routinen aus der @code{mysys}-Bibliothek benutzen, m�ssen Sie
-lediglich daran denken, @code{my_init()} zuerst aufzurufen!
-@xref{C Thread functions}.
-
-Alle Funktionen ausser @code{mysql_real_connect()} sind vorgabem��ig
-Thread-sicher. Die folgenden Hinweise beschreiben, wie man eine
-Thread-sichere Client-Bibliothek kompiliert und sie auf Thread-sichere
-Weise benutzt. (Die unten stehenden Hinweise f�r
-@code{mysql_real_connect()} beziehen sich in der Tat auch auf
-@code{mysql_connect()}. Weil aber @code{mysql_connect()} veraltet ist,
-sollten Sie in jedem Fall @code{mysql_real_connect()} benutzen.)
-
-Um @code{mysql_real_connect()} Thread-sicher zu machen, m�ssen Sie die
-Client-Bibliothek mit diesem Befehl neu kompilieren:
-
-@example
-shell> ./configure --enable-thread-safe-client
-@end example
-
-Das erzeugt eine Thread-sichere Client-Bibliothek @code{libmysqlclient_r}.
-@code{--enable-thread-safe-client}. Diese Bibliothek ist pro Verbindung
-Thread-sicher. Sie k�nnen zwei Threads dieselbe Verbindung benutzen lassen,
-solange Sie folgendes tun:
-
-@itemize @bullet
-@item
-Zwei Threads k�nnen zur gleichen Zeit keine Anfrage an MySQL �ber dieselbe
-Verbindung schicken. Insbesondere m�ssen Sie sicherstellen, dass zwischen
-einem @code{mysql_query()} und einem @code{mysql_store_result()} kein
-anderer Thread dieselbe Verbindung benutzt.
-@item
-Viele Threads k�nnen auf unterschiedliche Ergebnismengen zugreifen, die mit
-@code{mysql_store_result()} abgerufen wurden.
-@item
-Wenn Sie @code{mysql_use_result} benutzen, m�ssen Sie sicherstellen, dass
-kein anderer Thread irgend etwas �ber dieselbe Verbindung anfragt, bis die
-Ergebnismenge geschlossen wurde. F�r threaded Clients, die dieselbe
-Verbindung benutzen, ist es jedoch am besten, @code{mysql_use_result()} zu
-benutzen.
-@item
-
-Wenn Sie mehrfache Threads �ber dieselbe Verbindung benutzen wollen, m�ssen
-Sie eine mutex-Sperre um Ihre @code{mysql_query()}- und
-@code{mysql_store_result()}-Aufruf-Kombination haben. Sobald
-@code{mysql_store_result()} fertig ist, kann die Sperre aufgehoben werden
-und andere Threads k�nnen �ber dieselbe Verbindung anfragen.
-@item
-Wenn Sie mit POSIX-Threads programmieren, k�nnen Sie
-@code{pthread_mutex_lock()} und @code{pthread_mutex_unlock()} benutzen, um
-eine mutex-Sperre aufzubauen und aufzuheben.
-@end itemize
-
-Sie m�ssen folgendes wissen, wenn Sie einen Thread haben, der
-MySQL-Funktionen aufruft, dieser Thread aber keine Verbindung zur
-MySQL-Datenbank aufgebaut hat:
-
-Wenn Sie @code{mysql_init()} oder @code{mysql_connect()} aufrufen, erzeugt
-MySQL eine Thread-spezifische Variable f�r diesen Thread, die von der
-Debug-Bibliothek benutzt wird (unter anderem).
-
-Wenn Sie in einem Thread-Aufruf eine MySQL-Funktion haben, bevor ein Thread
-@code{mysql_init()} oder @code{mysql_connect()} aufgerufen hat, hat der
-Thread nicht notwendigerweise Thread-spezifische Variablen zur Hand, und
-Sie werden wahrscheinlich fr�her oder sp�ter einen Coredump erhalten.
-
-Damit alles reibungslos funktioniert, m�ssen Sie folgendes tun:
-
-@enumerate
-@item
-Rufen Sie bei Programmbeginn @code{my_init()} auf, wenn Ihr Programm
-irgend welche MySQL-Funktion vor dem Aufruf von @code{mysql_real_connect()}
-benutzt.
-@item
-Rufen Sie @code{mysql_thread_init()} im Thread-Handler auf, bevor Sie
-irgend welche MySQL-Funktionen aufrufen.
-@item
-Rufen Sie im Thread @code{mysql_thread_end()} auf, bevor Sie
-@code{pthread_exit()} aufrufen. Das gibt Speicher frei, der von
-MySQL-Thread-spezifischen Variablen benutzt wird.
-@end enumerate
-
-Eventuell erhalten Sie Fehler wegen undefinierter Symbole, wenn Sie Ihren
-Client mit @code{mysqlclient_r} linken. In den meisten F�llen liegt das
-daran, dass Sie die Thread-Bibliotheken nicht auf der Link- /
-Kompilierzeile eingeschlossen haben.
-
-@node libmysqld, , Threaded clients, C
-@c German node libmysqld
-@subsection libmysqld, die eingebettete MySQL-Server-Bibliothek
-
-@cindex libmysqld
-@cindex eingebettete MySQL-Server-Bibliothek
-
-
-@menu
-* libmysqld overview::
-* libmysqld compiling::
-* libmysqld example::
-* libmysqld licensing::
-@end menu
-
-@node libmysqld overview, libmysqld compiling, libmysqld, libmysqld
-@c German node libmysqld �berblick
-@subsubsection �berblick �ber die eingebettete MySQL-Server-Bibliothek
-
-Die eingebettete MySQL-Server-Bibliothek erm�glicht es, einen MySQL-Server
-mit allen Features innerhalb einer Client-Applikation laufen zu lassen. Die
-haupts�chlichen Vorteile sind erh�hte Geschwindigkeit und einfachere
-Verwaltung eingebetteter Applikationen.
-
-@node libmysqld compiling, libmysqld example, libmysqld overview, libmysqld
-@c German node libmysqld kompilieren
-@subsubsection Programme mit @code{libmysqld} kompilieren
-
-Momentan m�ssen alle unterst�tzten Bibliotheken explizit aufgelistet
-werden, wenn Sie mit @code{-lmysqld} linken. In Zukunft wird
-@code{mysql_config --libmysqld-libs} die Bibliotheken benennen, um das zu
-erleichtern. Dar�ber hinaus werden alle unterst�tzten Bibliotheken
-wahrscheinlich in libmysqld eingeschlossen werden, um dies noch weiter zu
-vereinfachen.
-
-Die korrekten Flags zum Kompilieren und Linken eines threaded Programms
-m�ssen benutzt werden, selbst wenn Sie nicht direkt irgend welche
-Thread-Funktionen in Ihrem Code aufrufen.
-
-@node libmysqld example, libmysqld licensing, libmysqld compiling, libmysqld
-@c German node libmysqld Beispiel
-@subsubsection Ein einfaches Embedded-Server-Beispiel
-
-Dieses Beispiel-Programm und makefile sollten ohne �nderungen auf einem
-Linux- oder FreeBSD-System funktionieren. Bei anderen Betriebssystemen sind
-kleinere �nderungen notwendig. Dieses Beispiel ist so angelegt, dass
-gen�gend Details dargestellt werden, um die Problematik zu verstehen, ohne
-zu viel "Verwirrendes" einzubringen, das Teil einer echten Applikation ist.
-
-Um das Beispiel auszuprobieren, erzeugen Sie ein @file{example}-Verzeichnis
-auf derselben Ebene wie das mysql-4.0-Quell-Verzeichnis. Speichern Sie die
-@file{example.c}-Quelle und das @file{GNUmakefile} im Verzeichnis und
-lassen Sie GNU-@file{make} innerhalb des @file{example}-Verzeichnisses
-laufen.
-
-@file{example.c}
-@example
-/*
- * Ein einfacher Beispiel-Client, der die eingebettete
- * MySQL-Server-Bibliothek benutzt
- */
-
-#include <mysql.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-enum on_error @{ E_okay, E_warn, E_fail @};
-
-static void die(MYSQL *db, char *fmt, ...);
-MYSQL *db_connect(const char *dbname);
-void db_disconnect(MYSQL *db);
-void db_do_Anfrage(MYSQL *db, const char *query, enum on_error on_error);
-
-const char *server_groups[] = @{ "test_client_SERVER", "server", NULL @};
-
-int
-main(int argc, char **argv)
-@{
- MYSQL *one, *two;
-
- /* Das muss vor allen weiteren mysql-Funktionen aufgerufen werden.
- *
- * Sie k�nnen mysql_server_init(0, NULL, NULL) benutzen,
- * was den Server initialisiert und die Gruppen
- * groups = @{ "server", NULL @} benutzt.
- *
- * In Ihre $HOME/.my.cnf-Datei sollten Sie folgendes eintragen:
-
-[test_client_SERVER]
-language = /pfad/zur/quelle/von/mysql/sql/share/english
-
- * Nat�rlich k�nnen Sie auch argc und argv �ndern,
- * bevor Sie sie an diese Funktion �bergeben.
- * Oder erzeugen Sie neue auf jede Art, die Sie wollen.
- * Alle Argumente in argv (ausser argv[0], was der Programmname ist)
- * m�ssen allerdings g�ltige Optionen f�r den MySQL-Server sein.
- * Wenn Sie diesen Client gegen die normale mysqlclient-
- * Bibliothek linken, ist diese Funktion nur ein Stumpf, der nichts tut.
- */
- mysql_server_init(argc, argv, server_groups);
-
- one = db_connect("test");
- two = db_connect(NULL);
-
- db_do_query(one, "show table status", E_fail);
- db_do_query(two, "show databases", E_fail);
-
- mysql_close(two);
- mysql_close(one);
-
- /* Folgendes muss nach allen anderen mysql-Funktionen aufgerufen werden */
- mysql_server_end();
-
- exit(EXIT_SUCCESS);
-@}
-
-void
-die(MYSQL *db, char *fmt, ...)
-@{
- va_list ap;
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
- putc('\n', stderr);
- if (db)
- db_disconnect(db);
- exit(EXIT_FAILURE);
-@}
-
-MYSQL *
-db_connect(const char *dbname)
-@{
- MYSQL *db = mysql_init(NULL);
- if (!db)
- die(db, "mysql_init fehlgeschlagen: kein Speicher mehr");
- mysql_options(db, MYSQL_READ_DEFAULT_GROUP, "simple");
- if (!mysql_real_connect(db, NULL, NULL, NULL, dbname, 0, NULL, 0))
- die(db, "mysql_real_connect fehlgeschlagen: %s", mysql_error(db));
-
- return db;
-@}
-
-void
-db_disconnect(MYSQL *db)
-@{
- mysql_close(db);
-@}
-
-/*
- * show_query: Dieser Code ist aus mysql.cc. Diese Funktion
- * ist daf�r gedacht, intern f�r db_do_query() benutzt zu werden.
- */
-static char *
-show_query(MYSQL *db)
-@{
- MYSQL_RES *res;
- MYSQL_FIELD *field;
- MYSQL_ROW row;
- char sep[256], *psep = sep;
- char *is_num = 0;
- char *err = 0;
- unsigned int length = 1; /* anfangs "|" */
- unsigned int off;
-
- if (!(res = mysql_store_result(db)))
- return mysql_error(db);
-
- if (!(is_num = malloc(mysql_num_fields(res))))
- @{
- err = "Kein Speicher mehr";
- goto err;
- @}
-
- /* set up */
- *psep++ = '+';
- while ((field = mysql_fetch_field(res)))
- @{
- unsigned int len = strlen(field->name);
- if (len < field->max_length)
- len = field->max_length;
- if (len < 2 && !IS_NOT_NULL(field->flags))
- len = 2; /* \N */
- field->max_length = len + 1; /* die API verbiegen ... */
- len += 2; length += len + 1; /* " " davor, " |" danach */
- if (length >= 255)
- @{
- err = "Zeile zu lang";
- goto err;
- @}
- memset(psep, '-', len); psep += len;
- *psep++ = '+';
- *psep = '\0';
- @}
-
- /* Spalten�berschriften */
- puts(sep);
- mysql_field_seek(res,0);
- fputc('|',stdout);
- f�r (off=0; (field = mysql_fetch_field(res)) ; off++)
- @{
- printf(" %-*s|",field->max_length, field->name);
- is_num[off]= IS_NUM(field->type);
- @}
- fputc('\n',stdout);
- puts(sep);
-
- /* Zeilen */
- while ((row = mysql_fetch_row(res)))
- @{
- (void) fputs("|",stdout);
- mysql_field_seek(res,0);
- for (off=0 ; off < mysql_num_fields(res); off++)
- @{
- field = mysql_fetch_field(res);
- printf(is_num[off] ? "%*s |" : " %-*s|",
- field->max_length, row[off] ? (char*) row[off] : "NULL");
- @}
- (void) fputc('\n',stdout);
- @}
- puts(sep);
-
-err:
- if (is_num)
- free(is_num);
- mysql_free_result(res);
-
- return err;
-@}
-
-void
-db_do_query(MYSQL *db, const char *query, enum on_error on_error)
-@{
- char *err = 0;
- if (mysql_query(db, query) != 0)
- goto err;
-
- if (mysql_field_count(db) > 0)
- @{
- if ((err = show_query(db)))
- goto err;
- @}
- else if (mysql_affected_rows(db))
- printf("Betroffene Zeilen: %lld [%s]\n", mysql_affected_rows(db), query);
-
- return;
-
-err:
- switch (on_error) @{
- case E_okay:
- break;
- case E_warn:
- fprintf(stderr, "db_do_query fehlgeschlagen: %s [%s]\n",
- err ? err : mysql_error(db), query);
- break;
- case E_fail:
- die(db, "db_do_query fehlgeschlagen: %s [%s]",
- err ? err : mysql_error(db), query);
- break;
- @}
-@}
-@end example
-
-@file{GNUmakefile}
-@example
-# Platzieren Sie diese in Ihr mysql-Quell-Verzeichnis
-m := ../mysql-4.0
-
-CC := cc
-CPPFLAGS := -I$m/include -D_thread_SAFE -D_REENTRANT
-CFLAGS := -g -W -Wall
-LDFLAGS := -static
-LDLIBS = $(embed_libs) -lz -lm -lcrypt
-
-ifneq (,$(shell grep FreeBSD /COPYRIGHT 2>/dev/null))
-# FreeBSD
-LDFLAGS += -pThread
-else
-# Linux wird angenommen
-LDLIBS += -lpThread
-endif
-
-
-# Standard-Bibliotheken
-
-embed_libs := \
- $m/libmysqld/.libs/libmysqld.a \
- $m/isam/libnisam.a \
- $m/myisam/libmyisam.a \
- $m/heap/libheap.a \
- $m/merge/libmerge.a \
- $m/myisammrg/libmyisammrg.a
-
-
-# Optional gebaute Bibliotheken
-
-ifneq (,$(shell test -r $m/innobase/usr/libusr.a && echo "yes"))
-embed_libs += \
- $m/innobase/usr/libusr.a \
- $m/innobase/odbc/libodbc.a \
- $m/innobase/srv/libsrv.a \
- $m/innobase/que/libque.a \
- $m/innobase/srv/libsrv.a \
- $m/innobase/dict/libdict.a \
- $m/innobase/ibuf/libibuf.a \
- $m/innobase/row/librow.a \
- $m/innobase/pars/libpars.a \
- $m/innobase/btr/libbtr.a \
- $m/innobase/trx/libtrx.a \
- $m/innobase/read/libread.a \
- $m/innobase/usr/libusr.a \
- $m/innobase/buf/libbuf.a \
- $m/innobase/ibuf/libibuf.a \
- $m/innobase/eval/libeval.a \
- $m/innobase/log/liblog.a \
- $m/innobase/fsp/libfsp.a \
- $m/innobase/fut/libfut.a \
- $m/innobase/fil/libfil.a \
- $m/innobase/lock/liblock.a \
- $m/innobase/mtr/libmtr.a \
- $m/innobase/page/libpage.a \
- $m/innobase/rem/librem.a \
- $m/innobase/thr/libthr.a \
- $m/innobase/com/libcom.a \
- $m/innobase/sync/libsync.a \
- $m/innobase/data/libdata.a \
- $m/innobase/mach/libmach.a \
- $m/innobase/ha/libha.a \
- $m/innobase/dyn/libdyn.a \
- $m/innobase/mem/libmem.a \
- $m/innobase/sync/libsync.a \
- $m/innobase/ut/libut.a \
- $m/innobase/os/libos.a \
- $m/innobase/ut/libut.a
-endif
-
-ifneq (,$(shell test -r $m/bdb/build_unix/libdb.a && echo "yes"))
-embed_libs += $m/bdb/build_unix/libdb.a
-endif
-
-
-# Unterst�tzte Bibliotheken
-
-embed_libs += \
- $m/mysys/libmysys.a \
- $m/strings/libmystrings.a \
- $m/dbug/libdbug.a \
- $m/regex/libregex.a
-
-
-# Optional gebaute unterst�tzte Bibliotheken
-
-ifneq (,$(shell test -r $m/readline/libreadline.a && echo "yes"))
-embed_libs += $m/readline/libreadline.a
-endif
-
-# Das funktioniert bei einfachen Ein-Datei-Test-Programmen
-sources := $(wildcard *.c)
-objects := $(patsubst %c,%o,$(sources))
-targets := $(basename $(sources))
-
-all: $(targets)
-
-clean:
- rm -f $(targets) $(objects) *.core
-@end example
-
-@node libmysqld licensing, , libmysqld example, libmysqld
-@c German node libmysqld Lizensierung
-@subsubsection Lizensierung des eingebetteten Servers
-
-Der MySQL-Quelltext wird von der GNU-GPL-Lizenz abgedeckt
-(@pxref{GPL license}). Eine Folge davon ist, dass jegliches Programm, das
-durch Linken mit @code{libmysqld} den MySQL-Quelltext enth�lt, als freie
-Software (unter einer mit der GPL kompatiblen Lizenz) ver�ffentlicht werden
-muss.
-
-Wir ermutigen jeden, freie Software durch Ver�ffentlichung von Code unter
-der GPL oder einer kompatiblen Lizenz zu f�rdern. F�r diejenigen, die dazu
-nicht in der Lage sind, ist eine weitere Option, den MySQL-Code von MySQL
-AB unter einer lockereren Lizenz zu erwerben. Wegen Details betreffs dieses
-Themas siehe unter @ref{Lizenzpolitik}.
-
-@node Cplusplus, Java, C, Clients
-@c German node Cplusplus
-@section MySQL-C++-APIs
-
-
-
-@cindex C++-APIs
-
-Zwei APIs sind im
-MySQL-@uref{http://www.mysql.com/Downloads/Contrib/,Contrib-Verzeichnis}
-verf�gbar.
-
-
-@menu
-* Borland C++::
-@end menu
-
-@node Borland C++, , Cplusplus, Cplusplus
-@c German node Borland C++
-@subsection Borland C++
-
-@cindex Borland C++-Kompiler
-
-Sie k�nnen den MySQL-Windows-Quellcode mit Borlund C++ 5.02 kompilieren.
-(Der Windows-Quellcode beinhaltet nur Projekte f�r Microsoft VC++, f�r
-Borland C++ m�ssen Sie die Projektdateien selbst erstellen).
-
-Ein bekanntes Problem bei Borland C++ ist, dass es eine andere
-Strukturanordnung benutzt als VC++. Das bedeutet, dass Sie Probleme
-bekommen, wenn Sie versuchen, die vorgabem��igen
-@code{libmysql.dll}-Bibliotheken (die mit VC++ kompiliert wurden) mit
-Borland C++ zu verwenden. Sie k�nnen eins der folgenden Dinge tun, um
-dieses Problem zu vermeiden:
-
-@itemize @bullet
-@item
-Sie k�nnen statische MySQL-Bibliotheken f�r Borland C++ verwenden, die Sie
-unter @uref{http://www.mysql.com/downloads/os-win32.html} finden.
-@item
-Rufen Sie @code{mysql_init()} nur mit @code{NULL} als Argument auf, kein
-vorher zugewiesenes (pr�-alloziertes) MySQL-Strukt.
-@end itemize
-
-
-@node Java, Python, Cplusplus, Clients
-@c German node Java
-@section MySQL Java Connectivity (JDBC)
-
-@cindex Java-Connectivity
-@cindex JDBC
-
-Es gibt 2 unterst�tzte JDBC-Treiber f�r MySQL (den mm-Treiber und den
-Reisin JDBC-Treiber). Sie finden den mm-Treiber unter
-@uref{http://mmmysql.sourceforge.net/} oder
-@uref{http://www.mysql.com/Downloads/Contrib/} und den Reisin-Treiber unter
-@uref{http://www.caucho.com/Projekte/jdbc-mysql/index.xtp}. Wegen der
-Dokumentation sehen Sie sich irgend eine JDBC-Dokumentation durch sowie die
-eigene Dokumentation der Treiber wegen MySQL-spezifischer Features.
-
-
-@node Python, Tcl, Java, Clients
-@c German node Python
-@section MySQL-Python-APIs
-
-@cindex Python-APIs
-
-Das
-MySQL-@uref{http://www.mysql.com/Downloads/Contrib/,Contrib-Verzeichnis}
-enth�lt eine Python-Schnittstelle, die von Joseph Skinner geschrieben
-wurde.
-
-Sie k�nnen auch die Python-Schnittstelle zu iODBC benutzen, um auf einen
-MySQL-Server zuzugreifen.
-@uref{http://starship.skyport.net/~lemburg/,mxODBC}
-
-
-@node Tcl, Eiffel, Python, Clients
-@c German node Tcl
-@section MySQL-Tcl-APIs
-
-@cindex Tcl-APIs
-
-@uref{http://www.binevolve.com/~tdarugar/tcl-sql/, Tcl bei binevolve}.
-Das
-@uref{http://www.mysql.com/Downloads/Contrib,Contrib-Verzeichnis} enth�lt
-eine Tcl-Schnittstelle, die auf msqltcl 1.50 basiert.
-
-
-@node Eiffel, , Tcl, Clients
-@c German node Eiffel
-@section MySQL-Eiffel-Wrapper
-
-@cindex Eiffel-Wrapper
-@cindex Wrapper, Eiffel
-
-Das
-MySQL-@uref{http://www.mysql.com/Downloads/Contrib/,Contrib-Verzeichnis}
-enth�lt einen Eiffel-Wrapper, der von Michael Ravits geschrieben wurde.
-
-
-@node Extending MySQL, Problems, Clients, Top
-@c German node MySQL erweitern
-@chapter MySQL erweitern
-
-
-
-@menu
-* MySQL internals::
-* Adding procedures::
-* MySQL-Interna::
-@end menu
-
-@node MySQL internals, Adding procedures, Extending MySQL, Extending MySQL
-@c German node Hinzuf�gen von Funktionen
-@section Hinzuf�gen neuer Funktionen zu MySQL
-
-@cindex Funktionen, neue
-@cindex hinzuf�gen, neue Funktionen
-@cindex benutzerdefinierte Funktionen, hinzuf�gen
-@cindex UDFs, Definition
-@cindex Funktionen, benutzerdefinierte
-
-Es gibt zwei M�glichkeiten, MySQL neue Funktionen hinzuzuf�gen:
-
-@itemize @bullet
-@item
-Sie k�nnen die Funktion �ber die benutzerdefinierbare Funktions-
-(UDF-) Schnittstelle hinzuf�gen. Benutzerdefinierbare Funktionen werden
-dynamisch mittels @code{CREATE FUNCTION} und @code{DROP
-FUNCTION}-Statements hinzugef�gt bzw. gel�scht.
-@xref{CREATE FUNCTION, ,@code{CREATE FUNCTION}}.
-
-@item
-Sie k�nnen die Funktion als native (eingebaute) MySQL-Funktion hinzuf�gen.
-Native Funktionen werden in den @code{mysqld}-Server kompiliert und stehen
-dann dauerhaft zur Verf�gung.
-@end itemize
-
-Jede Methode hat Vorteile und Nachteile:
-
-@itemize @bullet
-@item
-Wenn Sie eine benutzerdefinierte Funktion schreiben, m�ssen Sie die
-Objekt-Datei zus�tzlich zum Server selbst installieren. Wenn Sie Ihre
-Funktion in den Server einkompilieren, brauchen Sie das nicht zu tun.
-@item
-Sie k�nnen der bin�ren MySQL-Distribution benutzerdefinierte Funktionen
-hinzuf�gen. Native Funktionen erfordern, dass Sie eine Quelldistribution
-ver�ndern.
-@item
-Wenn Sie Ihre MySQL-Distribution aktualisieren, k�nnen Sie weiterhin Ihre
-vorher installierten benutzerdefinierten Funktionen benutzen. Bei nativen
-Funktionen m�ssen Sie Ihre �nderungen jedes Mal wiederholen, wenn Sie
-aktualisieren.
-@end itemize
-
-Gleich welche Methode Sie zum Hinzuf�gen neuer Funktionen verwenden, k�nnen
-Sie diese genau wie die nativen Funktionen, z. B. @code{ABS()} oder
-@code{SOUNDEX()}, benutzen.
-
-
-
-@menu
-* CREATE FUNCTION::
-* Adding UDF::
-* Adding native function::
-@end menu
-
-@node CREATE FUNCTION, Adding UDF, MySQL internals, MySQL internals
-@c German node CREATE FUNCTION
-@subsection @code{CREATE FUNCTION / DROP FUNCTION}-Syntax
-
-@findex CREATE FUNCTION
-@findex DROP FUNCTION
-@findex UDF-Funktionen
-@findex benutzerdefinierte Funktionen
-@findex Funktionen, benutzerdefinierte
-
-@example
-CREATE [AGGREGATE] FUNCTION funktion RETURNS @{STRING|REAL|INTEGER@}
- SONAME gemeinsame_bibliothek
-
-DROP FUNCTION funktion
-@end example
-
-Eine benutzerdefinierte Funktion (UDF) ist eine M�glichkeit, MySQL durch
-eine neue Funktion zu erweitern, die wie die nativen (eingebauten)
-MySQL-Funktionen, z. B. @code{ABS()} und @code{CONCAT()}, funktioniert.
-
-@code{AGGREGATE} ist eine neue Option f�r MySQL-Version 3.23. Eine
-@code{AGGREGATE}-Funktion funktioniert genau wie eine native MySQL-
-@code{GROUP}-Funktion wie @code{SUM} oder @code{COUNT()}.
-
-@code{CREATE FUNCTION} speichert den Funktionnamen, -typ und die gemeinsam
-genutzte Bibliothek in der @code{mysql.func}-Systemtabelle. Sie ben�tigen
-die @strong{insert}- und @strong{delete}-Berechtigungen f�r die
-@code{mysql}-Datenbank, um Funktionen zu erzeugen und zu l�schen.
-
-Alle aktiven Funktionen werden jedes Mal wieder geladen, wenn der Server
-startet, es sei denn, Sie starten ihn mit der
-@code{--skip-grant-tables}-Option. In diesem Fall wird die
-UDF-Initialisierung �bersprungen, so dass UDFs nicht verf�gbar sind. (Eine
-aktive Funktion ist eine, die mit @code{CREATE FUNCTION} geladen und nicht
-mit @code{DROP FUNCTION} entfernt wurde.)
-
-Wegen weiterer Anleitungen zum Schreiben benutzerdefinierte Funktionen
-siehe @ref{MySQL internals}. Damit der UDF-Mechanismus
-funktioniert, m�ssen Funktionen in C oder C++ geschrieben sein. Ihr
-Betriebssystem muss dynamisches Laden unterst�tzen und Sie m�ssen
-@code{mysqld} dynamisch (nicht statisch) kompiliert haben.
-
-Beachten Sie, dass Sie f�r das Funktionieren von @code{AGGREGATE} eine
-@code{mysql.func}-Tabelle ben�tigen, die die Spalte @code{typ} enth�lt.
-Wenn das nicht der Fall ist, sollten Sie das Skript
-@code{mysql_fix_privilege_tables} laufen lassen, um diesen Mangel zu
-beheben.
-
-
-@node Adding UDF, Adding native function, CREATE FUNCTION, MySQL internals
-@c German node UDF hinzuf�gen
-@subsection Hinzuf�gen einer neuen benutzerdefinierten Funktion
-
-@cindex hinzuf�gen, benutzerdefinierte Funktionen
-@cindex benutzerdefinierte Funktionen, hinzuf�gen
-@cindex Funktionen, benutzerdefinierte, hinzuf�gen
-
-
-
-Damit der UDF-Mechanismus funktioniert, m�ssen Funktionen in C oder C++
-geschrieben sein. Ihr Betriebssystem muss dynamisches Laden unterst�tzen
-und Sie m�ssen @code{mysqld} dynamisch (nicht statisch) kompiliert
-haben. Die MySQL-Quelldistribution enth�lt eine Datei
-@file{sql/udf_example.cc}, die 5 neue Funktionen definiert. Sehen Sie in
-dieser Datei nach, wie die UDF-Aufruf-Konventionen funktionieren.
-
-Damit @code{mysqld} UDF-Funktionen benutzen kann, sollten Sie MySQL mit
-@code{--with-mysqld-ldflags=-rdynamic} konfigurieren. Der Grund liegt
-darin, dass Sie auf vielen Plattformen (inklusive Linux) eine dynamische
-Bibliothek (mit @code{dlopen()}) von einem statisch gelinkten Programm
-laden k�nnen, was Sie erhalten w�rden, wenn Sie
-@code{--with-mysqld-ldflags=-all-static} benutzen. Wenn Sie eine UDF
-benutzen wollen, die auf Symbole von @code{mysqld} zugreifen muss (wie das
-@code{methaPhone}-Beispiel in @file{sql/udf_example.cc}, das
-@code{default_charset_info} benutzt), m�ssen Sie das Programm mit
-@code{-rdynamic} benutzen (siehe @code{man dlopen}).
-
-F�r jede Funktion, die Sie in SQL-Statements benutzen wollen, sollten Sie
-die entsprechenden C- (oder C++-) Funktionen benutzen. In den unten
-stehenden Ausf�hrungen wird ``xxx'' als Beispiel-Funktionsname benutzt. Um
-zwischen SQL- und C-/C++-Benutzung zu unterscheiden, kennzeichnet
-@code{XXX()} (Gro�schreibung) einen SQL-Funktionsaufruf und @code{xxx()}
-(Kleinschreibung) einen C-/C++-Funktionsaufruf.
-
-The C-/C++-Funktionen, die Sie f�r die Implementierung der Schnittstelle
-f�r @code{XXX()} schreiben, sind:
-
-@table @asis
-@item @code{xxx()} (required)
-Die Hauptfunktion. Hier wird das Funktionsergebnis berechnet. Der
-Zusammenhang zwischen dem SQL-Typ und dem R�ckgabe-Typ Ihrer
-C-/C++-Funktion ist unten dargestellt:
-
-@multitable @columnfractions .2 .8
-@item @strong{SQL-Typ} @tab @strong{C-/C++-Typ}
-@item @code{STRING} @tab @code{char *}
-@item @code{INTEGER} @tab @code{long long}
-@item @code{REAL} @tab @code{double}
-@end multitable
-
-@item @code{xxx_init()} (optional)
-Die Initialisierungsfunktion f�r @code{xxx()}. Sie kann f�r folgendes
-benutzt werden:
-
-@itemize @bullet
-@item
-Um die Anzahl von Argumenten f�r @code{XXX()} zu pr�fen.
-@item
-Um zu pr�fen, ob die Argumente vom erforderlichen Typ sind oder,
-alternativ, MySQL mitzuteilen, den Argumenttyp zu erzwingen, den Sie beim
-Aufruf der Hauptfunktion brauchen.
-@item
-Um jeglichen Speicher zuzuweisen, der von der Hauptfunktion ben�tigt wird.
-@item
-Um die maximale L�nge des Ergebnisses anzugeben.
-@item
-Um (f�r @code{REAL}-Funktionen) die maximale Anzahl von Dezimalstellen
-anzugeben.
-@item
-Um festzulegen, ob das Ergebnis @code{NULL} sein darf oder nicht.
-@end itemize
-
-@item @code{xxx_deinit()} (optional)
-Die Deinitialisierungsfunktion f�r @code{xxx()}. Sie sollte jeglichen
-Speicher freigeben (deallozieren), der durch die Initialisierungsfunktion
-zugewiesen wurde.
-@end table
-
-Wenn ein SQL-Statement @code{XXX()} aufruft, ruft MySQL die
-Initialisierungsfunktion @code{xxx_init()} auf, damit diese die notwendige
-Einrichtung vornehmen kann wie Argumente pr�fen oder Speicherzuweisung.
-Wenn @code{xxx_init()} einen Fehler zur�ckgibt, wird das SQL-Statement mit
-einer Fehlermeldung abgebrochen, die Haupt- und
-Deinitialisierungsfunktionen werden nicht aufgerufen. Ansonsten wird die
-Hauptfunktion @code{xxx()} f�r jede Zeile aufgerufen. Nachdem alle Zeilen
-abgearbeitet sind, wird die Deinitialisierungsfunktion @code{xxx_deinit()}
-aufgerufen, damit sie die erforderlichen Aufr�umarbeiten ausf�hren kann.
-
-Alle Funktionen m�ssen Thread-sicher sein (nicht nur die Hauptfunktion,
-sondern auch die Initialisierungs- und Deinitialisierungsfunktionen). Das
-hei�t, dass Sie keinerlei globale oder statische Variablen zuweisen
-d�rfen, die sich �ndern! Wenn Sie Speicher brauchen, sollten Sie ihn in
-@code{xxx_init()} zuweisen und in @code{xxx_deinit()} freigeben.
-
-
-@menu
-* UDF calling::
-* UDF arguments::
-* UDF return values::
-* UDF compiling::
-@end menu
-
-@node UDF calling, UDF arguments, Adding UDF, Adding UDF
-@c German node UDF-Aufruf-Sequenzen
-@subsubsection UDF-Aufruf-Sequenzen
-
-@cindex Sequenzen aufrufen, UDF
-
-Die Hauptfunktion sollte wie unten dargestellt deklariert werden. Beachten
-Sie, dass sich der R�ckgabetyp und der Parameter unterscheiden, abh�ngig
-davon, wie Sie die SQL-Funktion @code{XXX()} deklarieren, damit sie
-@code{STRING}, @code{INTEGER} oder @code{REAL} im @code{CREATE
-FUNCTION}-Statement zur�ckgibt:
-
-@noindent
-Bei @code{STRING}-Funktionen:
-
-@example
-char *xxx(UDF_INIT *initid, UDF_ARGS *args,
- char *result, unsigned long *length,
- char *is_null, char *error);
-@end example
-
-@noindent
-Bei @code{INTEGER}-Funktionen:
-
-@example
-long long xxx(UDF_INIT *initid, UDF_ARGS *args,
- char *is_null, char *error);
-@end example
-
-@noindent
-Bei @code{REAL}-Funktionen:
-
-@example
-double xxx(UDF_INIT *initid, UDF_ARGS *args,
- char *is_null, char *error);
-@end example
-
-Die Initialisierungs- und Deinitialisierungsfunktionen werden wie folgt
-deklariert:
-
-@example
-my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
-
-void xxx_deinit(UDF_INIT *initid);
-@end example
-
-Der @code{initid}-Parameter wird an alle drei Funktionen �bergeben. Er
-zeigt auf eine @code{UDF_INIT}-Struktur, die benutzt wird, um Informationen
-zwischen den Funktionen zu �bermitteln. Die
-@code{UDF_INIT}-Strukturmitglieder sind unten aufgelistet. Die
-Initialisierungsfunktion sollte alle Mitglieder ausf�llen, die sie �ndern
-will. (Um f�r ein Mitglied den Vorgabewert zu verwenden, lassen Sie es
-unver�ndert.)
-
-@table @code
-@item my_bool maybe_null
-@code{xxx_init()} sollte @code{maybe_null} auf @code{1} setzen, wenn
-@code{xxx()} @code{NULL} zur�ckgeben kann. Der Vorgabewert ist @code{1},
-wenn irgend eins der Argumente als @code{maybe_null} deklariert ist.
-
-@item unsigned int Dezimalstellen
-Anzahl von Dezimalstellen. Der Vorgabewert ist die maximale Anzahl von
-Dezimalstellen in den Argumenten, die an die Hauptfunktion �bergeben
-werden. (Wenn der Funktion beispielsweise die Argumente @code{1.34},
-@code{1.345} und @code{1.3} �bergeben werden, w�re der Vorgabewert 3, weil
-@code{1.345} 3 Dezimalstellen hat.
-
-@item unsigned int max_length
-Die maximale L�nge des Zeichenkettenergebnisses. Der Vorgabewert ist
-unterschiedlich, abh�ngig vom Ergebnistyp der Funktion. Bei
-Zeichenketten-Funktionen ist die Vorgabe die L�nge des l�ngsten Arguments.
-Bei Ganzzahl-Funktionen ist die Vorgabe 21 Ziffern. Bei REAL-Funktionen ist
-die Vorgabe 13 plus die Anzahl von Dezimalstellen, die von
-@code{initid->Dezimalstellen} angezeigt werden. (Bei numerischen Funktionen
-enth�lt die L�nge jedes Vorzeichen- oder Dezimalpunkt-Zeichen.)
-
-Wenn Sie einen Blob zur�ckgeben wollen, k�nnen Sie diesen auf 65 KB oder
-16MB setzen. Der Speicher wird nicht zugewiesen, aber dazu verwendet, um zu
-entscheiden, welcher Spaltentyp benutzt werden soll, falls es notwendig
-werden sollte, Daten tempor�r zu speichern.
-
-@item char *ptr
-Ein Zeiger, den die Funktion f�r eigene Zwecke verwenden kann.
-Beispielsweise k�nnen Funktionen @code{initid->ptr} benutzen, um
-Informationen �ber den zugewiesenen Speicher zwischen den Funktionen zu
-kommunizieren. Beispiel, um in @code{xxx_init()} Speicher zuzuweisen und
-ihn diesem Zeiger zuzuordnen:
-
-@example
-initid->ptr = allocated_memory;
-@end example
-
-In @code{xxx()} und @code{xxx_deinit()} verweisen Sie auf
-@code{initid->ptr}, um Speicher zu verwenden oder freizugeben.
-@end table
-
-
-@node UDF arguments, UDF return values, UDF calling, Adding UDF
-@c German node UDF-Argumente
-@subsubsection Verarbeitung von Argumenten
-
-@cindex Verarbeitung von Argumenten
-@cindex Verarbeitung, Argumente
-
-Der @code{args}-Parameter zeigt auf eine @code{UDF_ARGS}-Struktur, die
-unten aufgelistete Mitglieder hat:
-
-@table @code
-@item unsigned int arg_count
-Die Anzahl von Argumenten. Pr�fen Sie diesen Wert in der
-Initialisierungsfunktion, wenn Sie wollen, dass Ihre Funktion mit einer
-bestimmten Anzahl von Argumenten aufgerufen wird. Beispiel:
-
-@example
-if (args->arg_count != 2)
-@{
- strcpy(message,"XXX() benoetigt zwei Argumente");
- return 1;
-@}
-@end example
-
-
-@item enum Item_result *arg_type
-Die Typen f�r jedes Argument. Die m�glichen Typenwerte sind
-@code{STRING_RESULT}, @code{INT_RESULT} und @code{REAL_RESULT}.
-
-Um sicherzustellen, dass die Argumente vom angegebenen Typ sind und einen
-Fehler zur�ckgeben, falls nicht, pr�fen Sie das @code{arg_type}-Array in
-der Initialisierungsfunktion. Beispiel:
-
-@example
-if (args->arg_type[0] != STRING_RESULT ||
- args->arg_type[1] != INT_RESULT)
-@{
- strcpy(message,"XXX() erfordert eine Zeichenkette und eine Ganzzahl");
- return 1;
-@}
-@end example
-
-Als Alternative dazu, dass Ihre Funktionsargumente von bestimmten Typen
-sein m�ssen, k�nnen Sie die Initialisierungsfunktion benutzen, um die
-@code{arg_type}-Elemente auf die Typen zu setzen, die Sie wollen. Das
-veranlasst MySQL, die Typen der Argumente bei jedem Aufruf von @code{xxx()}
-zu erzwingen. Um beispielsweise zu erzwingen, dass die ersten zwei
-Argumente Zeichenkette und Ganzzahl sind, geben Sie in @code{xxx_init()}
-folgendes ein:
-
-@example
-args->arg_type[0] = STRING_RESULT;
-args->arg_type[1] = INT_RESULT;
-@end example
-
-@item char **args
-@code{args->args} kommuniziert der Initialisierungsfunktion Informationen
-�ber die allgemeine Natur der Argumente, mit der Ihre Funktion aufgerufen
-wurde. Bei einem Konstanten-Argument @code{i} zeigt @code{args->args[i]}
-auf den Argumentwert. (Siehe unten wegen Anleitungen, wie auf diesen Wert
-korrekt zugegriffen wird.) Bei einem Nicht-Konstanten-Argument ist
-@code{args->args[i]} @code{0}. Ein Konstanten-Argument ist ein Ausdruck,
-der nur Konstanten wie @code{3} oder @code{4*7-2} oder @code{SIN(3.14)}
-benutzt. Ein Nicht-Konstanten-Argument ist ein Ausdruck, der auf Werte
-verweist, die sich von Zeile zu Zeile �ndern k�nnen, wie Spaltennamen oder
-Funktionen, die mit Nicht-Konstanten-Argumenten aufgerufen werden.
-
-Bei jedem Aufruf der Hauptfunktion enth�lt @code{args->args} die
-tats�chlichen Argumente, die f�r die Zeile �bergeben werden, die momentan
-verarbeitet wird.
-
-Funktionen k�nnen auf ein Argument @code{i} wie folgt verweisen:
-
-@itemize @bullet
-@item
-Ein Argument des Typs @code{STRING_RESULT} wird als ein Zeichenkettenzeiger
-plus einer L�nge angegeben, um die Handhabung von Bin�rdaten oder Daten
-beliebiger L�nge zu erlauben. Die Zeichenketten-Inhalte sind als
-@code{args->args[i]} und die Zeichenkettenl�nge als @code{args->lengths[i]}
-verf�gbar. Sie sollten nicht davon ausgehen, dass Zeichenketten
-null-terminiert sind.
-
-@item
-Bei einem Argument des Typs @code{INT_RESULT} m�ssen Sie
-@code{args->args[i]} zu einem @code{long long}-Wert machen (cast):
-
-@example
-long long int_val;
-int_val = *((long long*) args->args[i]);
-@end example
-
-@item
-Bei einem Argument des Typs @code{REAL_RESULT} m�ssen Sie
-@code{args->args[i]} zu einem @code{double}-Wert machen (cast):
-
-@example
-double real_val;
-real_val = *((double*) args->args[i]);
-@end example
-@end itemize
-
-@item unsigned long *lengths
-Bei der Initialisierungsfunktion gibt das @code{lengths}-Array die maximale
-Zeichenkettenl�nge jedes Arguments an. Bei jedem Aufruf der Hauptfunktion
-enth�lt @code{lengths} die tats�chlichen L�ngen jeglicher
-Zeichenketten-Argumente, die f�r die momentan verarbeitete Zeile �bergeben
-werden. Bei Argumenten des Typs @code{INT_RESULT} oder @code{REAL_RESULT}
-enth�lt @code{lengths} immer noch die maximale L�nge des Arguments (wie bei
-der Initialisierungsfunktion).
-@end table
-
-
-@node UDF return values, UDF compiling, UDF arguments, Adding UDF
-@c German node UDF-R�ckgabewerte
-@subsubsection R�ckgabewerte und Fehlerbehandlung
-
-@cindex UDFs, R�ckgabewerte
-@cindex R�ckgabewerte, UDFs
-@cindex Fehler, Handhabung in UDFs
-@cindex Handhabung, Fehler
-
-Die Initialisierungsfunktion sollte @code{0} zur�ckgeben, wenn kein Fehler
-auftrat, ansonsten @code{1}. Wenn ein Fehler auftritt, sollte
-@code{xxx_init()} eine null-terminierte Fehlermeldung im
-@code{message}-Parameter enthalten. Die Meldung wird an den Client
-�bergeben. Der Meldungspuffer ist @code{MYSQL_ERRMSG_SIZE} Zeichen lang,
-aber Sie sollten versuchen, die Meldung kleiner als 80 Zeichen zu halten,
-damit sie auf die Anzeigebreite eines Standard-Terminals passt.
-
-Der R�ckgabewert der Hauptfunktion @code{xxx()} ist der Funktionswert, bei
-@code{long long}- und @code{double}-Funktionen. Eine Zeichenkettenfunktion
-sollte einen Zeiger auf das Ergebnis und die L�nge der Zeichenkette in den
-@code{length}-Argumenten zur�ckgeben.
-
-Setzen Sie diese auf die Inhalte und L�nge des R�ckgabewerts. Beispiel:
-
-@example
-memcpy(result, "ergebnis_zeichenkette", 13);
-*length = 13;
-@end example
-
-Der @code{result}-Puffer, der an die Berechnungsfunktionen �bergeben wird,
-ist 255 Byte Gro�. Wenn Ihr Ergebnis dort hinein passt, m�ssen Sie sich um
-die Speicherzuweisung f�r Ergebnisse nicht k�mmern.
-
-Wenn Ihre Zeichenketten-Funktion eine Zeichenkette zur�ckgeben muss, die
-l�nger als 255 Bytes ist, m�ssen Sie den Platz daf�r mit @code{malloc()} in
-Ihrer @code{xxx_init()}-Funktion oder Ihrer @code{xxx()}-Funktion zuweisen
-und in Ihrer @code{xxx_deinit()}-Funktion freigeben. Sie k�nnen den
-zugewiesenen Speicher im @code{ptr}-Slot in der @code{UDF_INIT}-Struktur
-f�r erneute Benutzung durch zuk�nftige @code{xxx()}-Aufrufe speichern.
-@xref{UDF calling}.
-
-Um einen R�ckgabewert von @code{NULL} in der Hauptfunktion anzuzeigen,
-setzen Sie @code{is_null} auf @code{1}:
-
-@example
-*is_null = 1;
-@end example
-
-Um eine Fehlerr�ckgabe in der Hauptfunktion anzuzeigen, setzen Sie den
-@code{error}-Parameter auf @code{1}:
-
-@example
-*error = 1;
-@end example
-
-Wenn @code{xxx()} @code{*error} f�r beliebige Zeilen auf @code{1} setzt,
-ist der Funktionswert der aktuellen Zeile @code{NULL}, was auch f�r
-nachfolgende Zeilen gilt, die von dem Statement verarbeitet werden, in dem
-@code{XXX()} aufgerufen wurde. (@code{xxx()} wird f�r nachfolgende Zeilen
-nicht einmal aufgerufen.) @strong{HINWEIS:} In MySQL-Versionen vor 3.22.10
-sollten Sie sowohl @code{*error} als auch und @code{*is_null} setzen:
-
-@example
-*error = 1;
-*is_null = 1;
-@end example
-
-
-@node UDF compiling, , UDF return values, Adding UDF
-@c German node UDF kompilieren
-@subsubsection Kompilieren und Installieren benutzerdefinierter Funktionen
-
-@cindex Kompilieren, benutzerdefinierte Funktionen
-@cindex UDFs, kompilieren
-@cindex installieren, benutzerdefinierte Funktionen
-
-Dateien, die UDFs implementieren, m�ssen auf dem Host kompiliert und
-installiert werden, auf dem der Server l�uft. Dieser Prozess wird unten am
-Beispiel der UDF-Datei @file{udf_example.cc} beschrieben, die in der
-MySQL-Quelldistribution enthalten ist. Diese Datei enth�lt folgende
-Funktionen:
-
-@itemize @bullet
-@item
-@code{metaphon()} gibt eine metaphon-Zeichenkette des
-Zeichenkettenarguments zur�ck. Das ist etwas wie eine Soundex-Zeichenkette,
-nur etwas besser f�r englisch angepasst.
-@item
-@code{myfunc_double()} gibt die Summe der ASCII-Werte der Zeichen in ihren
-Argumenten zur�ck, geteilt durch die Summe der L�ngen ihrer Argumente.
-@item
-@code{myfunc_int()} gibt die Summe der L�ngen ihrer Argumente zur�ck.
-@item
-@code{sequence([const int])} gibt eine Sequenz zur�ck, die mit der
-angegebenen Zahl startet oder mit 1, wenn keine Zahl angegeben wurde.
-@item
-@code{lookup()} gibt die IP-Nummer f�r einen Hostnamen zur�ck.
-@item
-@code{reverse_lookup()} gibt den Hostnamen f�r eine IP-Nummer zur�ck. Die
-Funktion kann mit einer Zeichenkette @code{"xxx.xxx.xxx.xxx"} oder mit vier
-Zahlen aufgerufen werden.
-@end itemize
-
-Eine dynamisch ladbare Datei sollte als gemeinsam nutzbare Objektdatei
-kompiliert werden, etwa mit folgendem Befehl:
-
-@example
-shell> gcc -shared -o udf_example.so myfunc.cc
-@end example
-
-Die korrekten Kompiler-Optionen f�r Ihr System finden Sie leicht heraus,
-wenn Sie diesen Befehl im @file{sql}-Verzeichnis Ihres MySQL-Quellbaums
-laufen lassen:
-
-@example
-shell> make udf_example.o
-@end example
-
-Sie sollten einen Kompilierbefehl laufen lassen, der dem �hnelt, was
-@code{make} anzeigt, ausser dass Sie die @code{-c}-Option kurz vor dem
-Zeilenende entfernen und @code{-o udf_example.so} am Zeilenende hinzuf�gen
-sollten. (Auf manchen Systemen k�nnen Sie @code{-c} im Befehl lassen.)
-
-Wenn Sie ein gemeinsam genutztes Objekt kompiliert haben, das UDFs enth�lt,
-m�ssen Sie es danach installieren und MySQL dar�ber informieren. Wenn Sie
-ein gemeinsam genutztes Objekt von @file{udf_example.cc} kompilieren, wird
-eine Datei etwa mit dem Namen @file{udf_example.so} erzeugt (der exakte
-Name variiert von Plattform zu Plattform). Kopieren Sie diese Datei in ein
-Verzeichnis, das von @code{ld} durchsucht wird, wie @file{/usr/lib}. Auf
-vielen Systemen k�nnen Sie die @code{LD_LIBRARY}- oder
-@code{LD_LIBRARY_PATH}-Umgebungsvariable so setzen, dass sie auf das
-Verzeichnis zeigt, wo Sie Ihre UDF-Funktionsdateien haben. Das
-@code{dlopen}-Handbuch sagt Ihnen, welche Variable Sie auf Ihrem System
-setzen sollten. Sie sollten diese auf @code{mysql.server} oder
-@code{safe_mysqld} setzen und @code{mysqld} neu starten.
-
-Nachdem die Bibliothek installiert ist, unterrichten Sie @code{mysqld} �ber
-die neuen Funktionen mit diesen Befehlen:
-
-@example
-mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "udf_example.so";
-mysql> CREATE FUNCTION myfunc_double RETURNS REAL SONAME "udf_example.so";
-mysql> CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "udf_example.so";
-mysql> CREATE FUNCTION lookup RETURNS STRING SONAME "udf_example.so";
-mysql> CREATE FUNCTION reverse_lookup RETURNS STRING SONAME "udf_example.so";
-mysql> CREATE AGGREGATE FUNCTION avgcost RETURNS REAL SONAME "udf_example.so";
-@end example
-
-Funktionen k�nnen mit @code{DROP FUNCTION} gel�scht werden:
-
-@example
-mysql> DROP FUNCTION metaphon;
-mysql> DROP FUNCTION myfunc_double;
-mysql> DROP FUNCTION myfunc_int;
-mysql> DROP FUNCTION lookup;
-mysql> DROP FUNCTION reverse_lookup;
-mysql> DROP FUNCTION avgcost;
-@end example
-
-Die @code{CREATE FUNCTION}- und @code{DROP FUNCTION}-Statements
-aktualisieren die Systemtabelle @code{func} in der @code{mysql}-Datenbank.
-Der Funktionsname, -typ und gemeinsam genutzte Bibliothek werden in der
-Tabelle gespeichert. Sie ben�tigen die @strong{insert}- und
-@strong{delete}-Berechtigungen f�r die @code{mysql}-Datenbank, um
-Funktionen zu erzeugen und zu l�schen.
-
-Sie sollten @code{CREATE FUNCTION} nicht benutzen, um eine Funktion
-hinzuzuf�gen, die bereits erzeugt wurde. Wenn Sie eine Funktion erneut
-installieren wollen, sollten Sie sie zuerst mit @code{DROP FUNCTION}
-entfernen und dann mit @code{CREATE FUNCTION} erneut installieren. Sie
-m�ssen so etwas zum Beispiel tun, wenn Sie eine neue Version Ihrer Funktion
-kompilieren, damit @code{mysqld} die neue Version erh�lt. Ansonsten w�rde
-der Server mit der alten Version weitermachen.
-
-Aktive Funktionen werden jedes Mal neu geladen, wenn der Server startet, es
-sei denn, Sie starten @code{mysqld} mit der
-@code{--skip-grant-tables}-Option. In diesem Fall wird die
-UDF-Initialisierung �bersprungen und UDFs sind nicht verf�gbar. (Eine
-aktive Funktion ist eine, die mit @code{CREATE FUNCTION} geladen und nicht
-mit @code{DROP FUNCTION} entfernt wurde.)
-
-
-@node Adding native function, , Adding UDF, MySQL internals
-@c German node Native Funktion hinzuf�gen
-@subsection Hinzuf�gen einer neuen nativen Function
-
-@cindex hinzuf�gen, native Funktionen
-@cindex native Funktionen, hinzuf�gen
-@cindex Funktionen, native, hinzuf�gen
-
-Die Prozedur zum Hinzuf�gen einer neuen nativen Funktion wird hier
-beschrieben. Beachten Sie, dass Sie einer Bin�rdistribution keine nativen
-Funktionen hinzuf�gen k�nnen, weil die Prozedur die �nderung des
-MySQL-Quelltextes beinhaltet. Sie m�ssen MySQL selbst aus einer
-Quelldistribution kompilieren. Beachten Sie auch, dass Sie die Prozedur
-wiederholen m�ssen, wenn Sie auf eine andere Version von MySQL
-aktualisieren (beispielsweise wenn eine neue Version herauskommt).
-
-Um eine neue native MySQL-Funktion hinzuzuf�gen, gehen Sie wie folgt vor:
-
-@enumerate
-@item
-F�gen Sie @file{lex.h} eine neue Zeile hinzu, die den Funktionsnamen im
-@code{sql_functions[]}-Array definiert.
-@item
-Wenn der Funktionsprototyp einfach ist (nur keins, eins, zwei oder drei
-Argumente entgegennimmt), sollten Sie in lex.h SYM(FUNC_ARG#) angeben
-(wobei # die Anzahl von Argumenten ist), als zweites Argument im
-@code{sql_functions[]}-Array, und eine Funktion hinzuf�gen, die ein
-Funktionsobjekt in @file{item_create.cc} erzeugt. Sehen Sie sich als
-Beispiel hierf�r @code{"ABS"} und @code{create_funcs_abs()} an.
-
-Wenn der Funktionsprototyp kompliziert ist (zum Beispiel eine variable
-Anzahl von Argumenten entgegennimmt), sollten Sie zwei Zeile zu
-@file{sql_yacc.yy} hinzuf�gen. Eine gibt das Pr�prozessorsymbol an, das
-@code{yacc} definieren soll (das sollte am Anfang der Datei stehen).
-Definieren Sie dann die Funktionsparameter und f�gen Sie ein ``item'' mit
-diesen Parametern zur @code{simple_expression}-Parsing-Regel hinzu. Sehen
-Sie sich als Beispiel alle Vorkommen von @code{ATAN} in @file{sql_yacc.yy}
-an, um zu sehen, wie das gemacht wird.
-@item
-Deklarieren Sie in @file{item_func.h} eine Klasse, die von
-@code{Item_num_func} oder @code{Item_str_func} erbt, je nachdem, ob Ihre
-Funktion eine Zahl oder eine Zeichenkette zur�ckgibt.
-@item
-F�gen Sie in @file{item_func.cc} eine der folgenden Deklarationen hinzu, je
-nachdem, ob Sie eine numerische oder eine Zeichenketten-Funktion
-definieren:
-@example
-double Item_func_newname::val()
-longlong Item_func_newname::val_int()
-String *Item_func_newname::Str(String *str)
-@end example
-
-Wenn Sie Ihr Objekt von irgend einem der Standard-Items erben (wie von
-@code{Item_num_func}, m�ssen Sie wahrscheinlich eine der oben genannten
-Funktionen definieren und das Elternobjekt sich um die anderen Funktionen
-k�mmern lassen. Beispielsweise definiert die @code{Item_str_func}-Klasse
-eine @code{val()}-Funktion, die @code{atof()} auf dem Wert ausf�hrt, der
-von @code{::str()} zur�ckgegeben wurde.
-
-@item
-Sie m�ssen wahrscheinlich auch die folgende Objektfunktion definieren:
-@example
-void Item_func_newname::fix_length_und_dec()
-@end example
-Diese Funktion sollte zumindest @code{max_length} basierend auf den
-angegebenen Argumenten berechnen. @code{max_length} ist die maximale Anzahl
-von Zeichen, die die Funktion zur�ckgeben kann. Diese Funktion sollte auch
-@code{maybe_null = 0} setzen, wenn die Hauptfunktion keinen
-@code{NULL}-Wert zur�ckgeben kann. Die Funktion kann pr�fen, ob irgend eins
-der Funktionsargumente @code{NULL} zur�ckgeben kann, indem die Argumente
-der @code{maybe_null}-Variable gepr�ft werden. Sehen Sie sich als typisches
-Beispiel, wie das gemacht wird, @code{Item_func_mod::fix_length_and_dec}
-an.
-@end enumerate
-
-Alle Funktionen m�ssen Thread-sicher sein (mit anderen Worten: Benutzen Sie
-keine globalen oder statischen Variablen in den Funktionen, ohne sie mit
-mutexes zu sch�tzen).
-
-Wenn Sie von @code{::val()}, @code{::val_int()} oder @code{::str()}
-@code{NULL} zur�ckgeben wollen, sollten Sie @code{null_value} auf 1 setzen
-und 0 zur�ckgeben.
-
-Bei @code{::str()}-Objektfunktionen gibt es einige zus�tzliche
-�berlegungen, auf die man achten sollte:
-
-@itemize @bullet
-@item
-Das @code{String *str}-Argument stellt einen Zeichenketten-Puffer zur
-Verf�gung, der benutzt werden kann, um das Ergebnis zu speichern. (Weitere
-Informationen �ber den @code{String}-Typ finden Sie durch einen Blick in
-die @file{sql_string.h}-Datei.)
-@item
-Die @code{::str()}-Funktion sollte die Zeichenkette zur�ckgeben, die das
-Ergebnis enth�lt, oder @code{(char*) 0}, wenn das Ergebnis @code{NULL} ist.
-@item
-Alle aktuellen Zeichenketten-Funktionen versuchen, die Zuweisung jeglichen
-Speichers zu vermeiden, ausser wenn das absolut notwendig ist!
-@end itemize
-
-
-@node Adding procedures, MySQL-Interna, MySQL internals, Extending MySQL
-@c German node Hinzuf�gen von Prozeduren
-@section Hinzuf�gen neuer Prozeduren zu MySQL
-
-@cindex Prozeduren, hinzuf�gen
-@cindex hinzuf�gen, Prozeduren
-@cindex neue Prozeduren, hinzuf�gen
-
-In MySQL k�nnen Sie eine Prozedur in C++ definieren, die auf Daten in einer
-Anfrage zugreifen und diese �ndern kann, bevor sie an den Client geschickt
-werden. Die �nderung kann Zeile f�r Zeile oder auf @code{GROUP BY}-Ebene
-geschehen.
-
-Wir haben eine Beispiel-Prozedur in MySQL-Version 3.23 erzeugt, um zu
-zeigen, was getan werden kann.
-
-Zus�tzlich empfehlen wir, dass Sie einen Blick auf 'mylua' werfen, das Sie
-im Contrib-Verzeichnis finden. @xref{Contrib}. Hiermit k�nnen Sie die
-LUA-Sprache benutzen, um eine Prozedur zur Laufzeit in @code{mysqld} zu
-laden.
-
-
-
-@menu
-* procedure analyse::
-* Writing a procedure::
-@end menu
-
-@node procedure analyse, Writing a procedure, Adding procedures, Adding procedures
-@c German node Prozeduranalyse
-@subsection Prozeduranalyse
-
-@code{analyse([max Elemente,[max memory]])}
-
-Diese Prozedur ist in @file{sql/sql_analyse.cc} definiert. Sie untersucht
-das Ergebnis Ihrer Anfrage und gibt eine Analyse des Ergebnisses zur�ck:
-
-@itemize @bullet
-@item
-@code{max elements} (Vorgabe 256) ist die maximale Anzahl unterschiedlicher
-Werte, die @code{analyse} pro Spalte findet. Dieses wird von @code{analyse}
-benutzt, um zu pr�fen, ob der optimale Spaltentyp vom Typ @code{ENUM} sein
-sollte.
-@item
-@code{max memory} (Vorgabe 8.192) ist der maximale Speicher, den
-@code{analyse} pro Spalte zuweisen sollte, wenn Sie versuchen, alle
-unterschiedlichen (distinct) Werte zu finden.
-@end itemize
-
-@example
-SELECT ... FROM ... WHERE ... Prozeduranalyse([max elements,[max memory]])
-@end example
-
-
-@node Writing a procedure, , procedure analyse, Adding procedures
-@c German node Eine Prozedur schreiben
-@subsection Eine Prozedur schreiben
-
-Im Moment ist die einzige Dokumentation hierf�r der Quelltext.
-
-Sie finden alle Informationen �ber Prozeduren, wenn Sie folgende Dateien
-untersuchen:
-
-@itemize @bullet
-@item @file{sql/sql_analyse.cc}
-@item @file{sql/procedure.h}
-@item @file{sql/procedure.cc}
-@item @file{sql/sql_select.cc}
-@end itemize
-
-
-@node MySQL-Interna, , Adding procedures, Extending MySQL
-@c German node <no English equivalent>
-@section MySQL-Interna
-
-@cindex Interna
-@cindex Thread
-
-Dieses Kapitel beschreibt viele Dinge, die Sie wissen m�ssen, wenn Sie am
-MySQL-Code arbeiten. Wenn Sie an der MySQL-Entwicklung mitarbeiten wollen,
-Zugriff auf den messerscharfen Code von Zwischenversionen haben wollen,
-oder einfach nur �ber die Entwicklung auf dem Laufenden bleiben wollen,
-folgen Sie den Anweisungen unter @xref{Installing source}.
-Wenn Sie an MySQL-Interna interessiert sind, sollten Sie auch
-@email{internals@@lists.mysql.com} abonnieren. Das ist eine Liste mit
-relativ geringem Verkehr, verglichen mit @email{mysql@@lists.mysql.com}.
-
-
-
-@menu
-* MySQL-Thread::
-* MySQL-Test-Suite::
-@end menu
-
-@node MySQL-Thread, MySQL-Test-Suite, MySQL-Interna, MySQL-Interna
-@c German node <no English equivalent>
-@subsection MySQL-Thread
-
-Der MySQL-Server erzeugt folgenden Thread:
-
-@itemize @bullet
-
-@item
-Der TCP/IP-Verbindungs-Thread erledigt alle Verbindungsanfragen und erzeugt
-einen neuen dedizierten Thread, um die Verarbeitung von Authentifizierung
-und SQL-Anfragen f�r jede Verbindung zu handhaben.
-
-@item
-Unter Windows NT gibt es einen Named-Pipe-Handler-Thread, der dasselbe tut
-wie der TCP/IP-Verbindungs-Thread, auf Named-Pipe-Verbindungsanforderungen.
-
-@item
-Der Signal-Thread handhabt alle Signale. Dieser Thread handhabt
-normalerweise auch Alarme und Aufrufe von @code{process_alarm()}, um
-Zeit�berschreitungen auf Verbindungen zu erzwingen, die zu lange im
-Leerlauf waren.
-
-@item
-Wenn @code{mysqld} mit @code{-DUSE_ALARM_THREAD} kompiliert wird, wird ein
-dedizierter Thread erzeugt, der Alarme handhabt. Das ist nur n�tzlich auf
-manchen Systemen, auf denen es Probleme mit @code{sigwait()} gibt, oder
-wenn man den @code{thr_alarm()}-Code in seiner Applikation ohne einen
-dedizierten Signal-Handhabungs-Thread benutzen will.
-
-@item
-Wenn man die @code{--flush_time=#}-Option benutzt, wird ein dedizierter
-Thread erzeugt, der alle Tabellen im angegebenen Intervall auf Platte
-zur�ckschreibt.
-
-@item
-Jede Verbindung hat ihren eigenen Thread.
-
-@item
-Jede unterschiedliche Tabelle, auf der man @code{INSERT DELAYED} benutzt,
-erh�lt ihren eigenen Thread.
-
-@item
-Wenn Sie @code{--master-host} benutzen, wird ein Slave-Replikations-Thread
-gestartet, der Aktualisierungen vom Master liest und anwendet.
-@end itemize
-
-@code{mysqladmin processlist} zeigt nur die Verbindungs-, @code{INSERT
-DELAYED}- und Replikations-Threads.
-
-
-@node MySQL-Test-Suite, , MySQL-Thread, MySQL-Interna
-@c German node <no English equivalent>
-@subsection MySQL-Test-Suite
-
-@cindex mysqltest, MySQL-Test-Suite
-@cindex mysqld testen, mysqltest
-
-Bis vor Kurzem basierte unsere vollumf�ngliche Haupt-Test-Suite auf
-propriet�ren Kundendaten und war deshalb nicht �ffentlich verf�gbar. Der
-einzige �ffentlich verf�gbare Teil unseres Testprozesses bestand aus dem
-@code{Crash-me}-Test, einem Perl-DBI/DBD-Benchmark, der im
-@code{sql-bench}-Verzeichnis liegt, und verschiedenen Tests im
-@code{tests}-Verzeichnis. Das Fehlen einer standardisierten, �ffentlich
-verf�gbaren Test-Suite machte es unseren Benutzern und auch Entwicklern
-schwer, Regressionstests auf den MySQL-Code durchzuf�hren. Um das Problem
-anzugehen, haben wir ein neues Testsystem geschaffen, das ab Version
-3.23.29 den Quell- und Bin�rdistributionen beiliegt.
-
-Der aktuelle Satz von Testf�llen testet nicht alles in MySQL, sollte aber
-die offensichtlichsten Bugs im SQL-Verarbeitungscode offen legen, sowie
-Betriebssystem- und Bibliotheks-Probleme, und er testet recht gr�ndlich die
-Replikation. Unser letztliches Ziel ist es, dass die Tests 100% des Codes
-abdecken. Beitr�ge zu unserer Test-Suite sind herzlich willkommen,
-besonders Tests, die die Funktionalit�t untersuchen, die f�r Ihr System
-kritisch ist, weil das sicherstellt, dass alle zuk�nftigen MySQL-Releases
-mit Ihren Applikationen funktionieren.
-
-
-
-@menu
-* mysqltest laufen lassen::
-* MySQL-Tests erweitern::
-* mysqltest-Bugs berichten::
-@end menu
-
-@node mysqltest laufen lassen, MySQL-Tests erweitern, MySQL-Test-Suite, MySQL-Test-Suite
-@c German node <no English equivalent>
-@subsubsection Die MySQL-Test-Suite laufen lassen
-
-Das Testsystem besteht aus einem Test-Sprachinterpreter (@code{mysqltest}),
-einem Shell-Skript, um alle Tests laufen zu lassen
-tests(@code{mysql-test-run}), den eigentlichen Testf�llen, die in einer
-speziellen Testsprache geschrieben sind, und ihren erwarteten Ergebnissen.
-Um die Test-Suite nach dem Bauen auf Ihrem System laufen zu lassen, geben
-Sie @code{make test} oder @code{mysql-test/mysql-test-run} von der Wurzel
-der Quellinstallation aus ein. Wenn Sie eine Bin�rdistribution installiert
-haben, wechseln Sie (@code{cd}) zur Wurzel der Installation (zum Beispiel
-@code{/usr/local/mysql}) und geben @code{scripts/mysql-test-run} ein. Alle
-Tests sollten erfolgreich durchlaufen. Wenn nicht, sollten Sie versuchen,
-den Grund herauszufinden, und das Problem zu berichten, wenn es ein Bug in
-MySQL ist. @xref{mysqltest-Bugs berichten}.
-
-Wenn eine Kopie von @code{mysqld} auf Ihrer Maschine l�uft, wo Sie die
-Test-Suite laufen lassen wollen, m�ssen Sie ihn nicht anhalten, solange er
-nicht die Ports @code{9306} und @code{9307} benutzt. Wenn einer dieser
-Ports belegt ist, sollten Sie @code{mysql-test-run} editieren und die Werte
-des Master- und / oder Slave-Ports auf verf�gbare Ports �ndern.
-
-Sie k�nnen einen einzelnen Testfall mit @code{mysql-test/mysql-test-run
-test_name} laufen lassen.
-
-Wenn ein Test fehlschl�gt, sollten Sie versuchen, @code{mysql-test-run} mit
-der @code{--force}-Option laufen zu lassen, um zu pr�fen, ob irgend ein
-weiterer Test fehlschl�gt.
-
-
-@node MySQL-Tests erweitern, mysqltest-Bugs berichten, mysqltest laufen lassen, MySQL-Test-Suite
-@c German node <no English equivalent>
-@subsubsection Die MySQL-Test-Suite erweitern
-
-Sie k�nnen die @code{mysqltest}-Sprache benutzen, um Ihre eigenen Testf�lle
-zu schreiben. Leider gibt es noch keine komplette Dokumentation daf�r - das
-soll in K�rze aber der Fall sein. Sie k�nnen sich jedoch die aktuellen
-Testf�lle ansehen und sie als Beispiel benutzen. Folgende Punkte sollen
-Ihnen beim Start helfen:
-
-@itemize @bullet
-@item
-Die Tests liegen in @code{mysql-test/t/*.test}
-
-@item
-Ein Testfall besteht aus @code{;}-begrenzten Statements und ist �hnlich der
-Eingabe in den @code{mysql}-Kommandozeilen-Client. Ein Statement ist
-vorgabem��ig eine Anfrage, die an den MySQL-Server geschickt werden soll,
-es sei denn, es wird als interner Befehl erkannt (zum Beispiel
-@code{sleep}).
-
-@item
-Alle Anfragen, die Ergebnisse produzieren, zum Beispiel @code{SELECT},
-@code{SHOW}, @code{EXPLAIN} usw., m�ssen mit
-@code{@@/pfad/zu/ergebnis/datei} beginnen. Die Datei muss die erwarteten
-Ergebnisse enthalten. Eine einfache Art, die Ergebnisdatei zu erzeugen,
-ist, @code{mysqltest -r < t/test-case-name.test} vom
-@code{mysql-test}-Verzeichnis aus laufen zu lassen und dann die erzeugten
-Ergebnisdateien zu editieren und sie - falls n�tig - an die erwartete
-Ausgabe anzupassen. Seien Sie in diesem Fall sehr vorsichtig, keine
-unsichtbaren Zeichen hinzuzuf�gen oder zu l�schen - stellen Sie sicher,
-dass Sie nur den Text �ndern und / oder Zeilen l�schen. Wenn Sie eine Zeile
-einf�gen m�ssen, achten Sie darauf, dass die Felder mit einem harten
-Tabulator-Zeichen getrennt sind und dass es ein hartes Tabulator-Zeichen am
-Zeilenende gibt. Gegebenfalls sollten Sie @code{od -c} benutzen, um sich zu
-vergewissern, dass Ihr Texteditor beim Editieren nichts durcheinander
-gebracht hat. Wir hoffen nat�rlich, dass Sie die Ausgabe von
-@code{mysqltest -r} nie editieren m�ssen, weil das nur der Fall ist, wenn
-Sie einen Bug finden.
-
-@item
-Um mit unserer Einrichtung konsistent zu sein, sollten Sie Ihre
-Ergebnisdateien ins @code{mysql-test/r}-Verzeichnis stellen und sie
-@code{test_name.result} nennen. Wenn der Test mehr als ein Ergebnis
-erzeugt, sollten Sie @code{test_name.a.result}, @code{test_name.b.result}
-usw. verwenden.
-
-@item
-Wenn ein Statement einen Fehler zur�ckgibt, sollten Sie die Zeile vor dem
-Statement mit @code{--error fehler_nummer} kennzeichnen. Die Fehlernummer
-kann eine Auflistung m�glicher Fehlerzahlen sein, getrennt durch
-@code{','}.
-
-@item
-Wenn Sie einen Replikations-Testfall schreiben, sollten Sie in die erste
-Zeile der Testdatei @code{source include/master-slave.inc;} schreiben. Um
-zwischen Master und Slave umzuschalten, benutzen Sie @code{connection
-master;} und @code{connection slave;}. Wenn Sie etwas auf einer
-abwechselnden Verbindung machen m�ssen, k�nnen Sie @code{connection
-master1;} f�r den Master und @code{connection slave1;} f�r den Slave
-eingeben.
-
-@item
-Wenn Sie etwas in einer Schleife ausf�hren m�ssen, k�nnen Sie zum Beispiel
-folgendes tun:
-@example
-let $1=1000;
-while ($1)
-@{
- # machen Sie Ihre Anfragen hier
- dec $1;
-@}
-@end example
-
-@item
-Um zwischen Anfragen zu schlafen, benutzen Sie den @code{sleep}-Befehl. Er
-unterst�tzt Bruchteile von Sekunden, daher k�nnen Sie zum Beispiel
-@code{sleep 1.3;} ausf�hren, um 1,3 Sekunden zu schlafen.
-
-@item
-Um den Slave f�r Ihren Testfall mit zus�tzlichen Optionen laufen zu lassen,
-geben Sie diese im Kommandozeilenformat in
-@code{mysql-test/t/test_name-slave.opt} ein. F�r den Master geben Sie sie
-in @code{mysql-test/t/test_name-master.opt} ein.
-
-@item
-Wenn Sie eine Frage zur Test-Suite haben oder einen Testfall beisteuern
-wollen, schicken Sie eine E-Mail an @email{Interna@@lists.mysql.com}. Weil
-die Liste keine Dateianh�nge akzeptiert, sollten Sie alle relevanten
-Dateien per FTP an @url{ftp://support.mysql.com/pub/mysql/Incoming}
-schicken.
-
-@end itemize
-
-
-@node mysqltest-Bugs berichten, , MySQL-Tests erweitern, MySQL-Test-Suite
-@c German node <no English equivalent>
-@subsubsection Bugs in der MySQL-Test-Suite berichten
-
-Wenn Ihre MySQL-Version die Test-Suite nicht fehlerfrei durchl�uft, sollten
-Sie folgendes tun:
-
-@itemize @bullet
-@item
-Schicken Sie keinen Bug-Bericht, bevor Sie so weit wie m�glich
-herausgefunden haben, was schief ging! Benutzen Sie f�r den Bug-Bericht
-bitte das @code{mysqlbug}-Skript, so dass wir Informationen �ber Ihr System
-und die @code{MySQL}-Version erhalten. @xref{Bug reports}.
-@item
-Stellen Sie sicher, dass die Ausgabe von @code{mysql-test-run} beiliegt,
-sowie alle Inhalte aller @code{.reject}-Dateien im
-@code{mysql-test/r}-Verzeichnis.
-@item
-Wenn ein Test in der Test-Suite fehlschl�gt, pr�fen Sie, ob der Test auch
-fehlschl�gt, wenn er allein laufen gelassen wird:
-
-@example
-cd mysql-test
-mysql-test-run --local test-name
-@end example
-
-Wenn das fehlschl�gt, sollten Sie MySQL mit @code{--with-debug}
-konfigurieren und @code{mysql-test-run} mit der @code{--debug}-Option
-laufen lassen. Wenn auch das fehlschl�gt, schicken Sie dei Trace-Datei
-@file{var/tmp/master.trace} an ftp://support.mysql.com/pub/mysql/secret, so
-dass wir sie untersuchen k�nnen. Denken Sie bitte daran, eine volle
-Beschreibung Ihres Systems beizuf�gen sowie die Version Ihrer
-mysqld-Bin�rdatei und wie Sie sie kompiliert haben.
-
-@item
-Versuchen Sie auch, @code{mysql-test-run} mit der @code{--force}-Option
-laufen zu lassen, um zu sehen, ob auch andere Tests fehlschlagen.
-
-@item
-Wenn Sie MySQL selbst kompiliert haben, sehen Sie im Handbuch nach, wie
-MySQL auf Ihrer Plattform kompiliert wird, oder benutzen Sie vorzugsweise
-eine der Bin�rdateien, die wir f�r Sie kompiliert haben und die Sie unter
-@uref{http://www.mysql.com/downloads/} finden. Alle unsere
-Standard-Bin�rdateien sollten die Test-Suite fehlerfrei durchlaufen!
-
-@item
-Wenn Sie einen Fehler wie @code{Result length mismatch} oder @code{Result
-content mismatch} erhalten, hei�t das, dass die Ausgabe des Tests nicht
-genau mit der erwarteten Ausgabe �bereinstimmt. Das k�nnte ein Bug in MySQL
-sein, k�nnte aber auch hei�en, dass Ihre mysqld-Version unter bestimmten
-Umst�nden leicht abweichende Ausgaben erzeugt.
-
-Fehlgeschlagene Testergebnisse werden in eine Datei mit demselben Namen wie
-die Ergebnisdatei, mit der Endung @code{.reject}, gestellt. Wenn Ihr
-Testfall fehlschl�gt, sollten Sie ein DIFF beider Dateien vornehmen. Wenn
-Sie nicht erkennen k�nnen, in welcher Hinsicht sie sich unterscheiden,
-untersuchen Sie beide mit @code{od -c} und pr�fen Sie auch ihre L�ngen.
-
-@item
-Wenn ein Testfall v�llig fehlschl�gt, sollten Sie die Log-Dateien im
-@code{mysql-test/var/log}-Verzeichnis nach Hinweisen untersuchen, was
-schief ging.
-
-@item
-Wenn Sie MySQL mit Debugging kompiliert haben, k�nnen Sie versuchen, das zu
-debuggen, indem Sie @code{mysql-test-run} mit den @code{--gdb}- und / oder
-@code{--debug}-Optionen laufen lassen.
-@xref{Making trace files}.
-
-Wenn Sie MySQL nicht f�r Debugging kompiliert haben, sollten Sie das besser
-tun. Geben Sie einfach die @code{--with-debug}-Option f�r @code{configure}
-an! @xref{Installing source}.
-@end itemize
-
-
-
-
-@node Problems, Benutzer, Extending MySQL, Top
-@c German node Probleme
-@appendix Probleme und h�ufige Fehler
-
-@cindex Probleme, h�ufige Fehler
-@cindex Fehler, h�ufige
-
-
-Dieses Kapitel listet einige gebr�uchliche Probleme und Fehlermeldungen
-auf, denen Benutzer in die Arme laufen. Sie lernen herauszufinden, was das
-Problem ist und wie Sie es l�sen. Hier finden sich auch korrekte L�sungen
-einiger h�ufiger Probleme.
-
-
-@menu
-* What is crashing::
-* Common errors::
-* Installation Issues::
-* Administration Issues::
-* Query Issues::
-* Table Definition Issues::
-@end menu
-
-@node What is crashing, Common errors, Problems, Problems
-@c German node Was ist ein Absturz
-@appendixsec Wie man feststellt, was Probleme verursacht
-
-Wenn Sie Probleme bekommen, sollten Sie als erstes herausfinden, welches
-Programm oder Hardware-Teil die Probleme verursacht:
-
-@itemize @bullet
-@item
-Wenn Sie eins der folgenden Symptome beobachten, gibt es wahrscheinlich ein
-Hardware- (Speicher, Hauptplatine, Prozessor oder Festplatte) oder
-Kernel-Problem:
-@itemize @minus
-@item
-Die Tastatur funktioniert nicht. Normalerweise k�nnen Sie das durch Dr�cken
-der Feststelltaste (Caps Lock) �berpr�fen. Wenn sich die Anzeigeleuchte
-beim Dr�cken nicht an- und ausschaltet, m�ssen Sie Ihre Tastatur ersetzen.
-(Bevor Sie das tun, sollten Sie Ihren Computer neu starten und alle
-Kabelverbindungen zur Tastatur �berpr�fen.)
-@item
-Der Mauszeiger bewegt sich nicht.
-@item
-Die Maschine antwortet auf entfernte Ping-Versuche nicht.
-@item
-Andere Programme, die mit MySQL nichts zu tun haben, funktionieren nicht
-korrekt.
-@item
-Wenn Ihr System unerwartet neu startet (ein fehlerhaftes Programm auf
-Benutzerebene sollte NIE in der Lage sein, Ihr System zum Absturz zu
-bringen).
-@end itemize
-
-In solchen F�llen sollten Sie zun�chst alle Kabel �berpr�fen und
-Diagnoseprogramme laufen lassen, um Ihre Hardware zu untersuchen! Sie
-sollten auch pr�fen, ob Patches, Aktualisierungen oder Service-Packs f�r
-Ihre Betriebssystem verf�gbar sind, die Ihre Probleme m�glicherweise l�sen.
-Pr�fen Sie auch, ob Ihre Bibliotheken (wie glibc) aktuell sind.
-
-Es ist immer eine gute Idee, eine Maschine mit ECC-Speicher zu benutzen, um
-Speicherprobleme fr�hzeitig zu erkennen!
-@item
-Wenn Ihre Tastatur gesperrt ist, k�nnen Sie das eventuell beheben, indem
-Sie sich von einer anderen Maschine aus verbinden und @code{kbd_mode -a}
-ausf�hren.
-
-@item
-Untersuchen Sie Ihre System-Log-Datei (/var/log/messages oder �hnliches)
-nach Gr�nden f�r Ihre Probleme. Wenn Sie glauben, dass das Problem an MySQL
-liegt, sollten Sie auch die Log-Dateien von MySQL �berpr�fen.
-@xref{Update log}.
-
-@item
-Wenn Sie nicht glauben, ein Hardware-Problem zu haben, sollten Sie
-herausfinden, welches Programm die Probleme verursacht.
-
-Probieren Sie @code{top}, @code{ps}, @code{taskmanager} oder ein �hnliches
-Programm, um zu pr�fen, welches Programm die gesamte Prozessorzeit
-konsumiert oder die Maschine blockiert.
-
-@item
-Pr�fen Sie mit @code{top}, @code{df} oder einem �hnlichen Programm, wenn
-Sie keinen freien Arbeitsspeicher, Festplattenspeicher, verf�gbare
-Datei-Handler oder eine andere kritische Ressource mehr haben.
-
-@item
-Wenn das Problem an einem aus dem Ruder gelaufenen Prozess liegt, k�nnen
-Sie versuchen, diesen zu killen. Wenn er nicht sterben will, gibt es
-wahrscheinlich einen Bug im Betriebssystem.
-@end itemize
-
-Wenn Sie alle anderen M�glichkeiten untersucht und ausgeschlossen haben und
-zur Schlussfolgerung gekommen sind, dass die Probleme durch den
-MySQL-Server oder ein MySQL-Client-Programm verursacht werden, ist es an
-der Zeit, einen Bug-Bericht f�r die Mailing-Liste oder unser Support-Team
-zu schreiben. Machen Sie im Bug-Bericht eine sehr detaillierte
-Beschreibung, wie sich Ihr System verh�lt und was Sie vermuten, was
-passiert. Sie sollten auch angeben, warum Sie denken, dass MySQL die
-Probleme verursacht. Ziehen Sie alle Situationen in diesem Kapitel in
-Betracht. Geben Sie genau an, welche Probleme wie auftauchen, wenn Sie Ihr
-System untersuchen. Benutzen Sie Kopieren und Einf�gen, wenn Sie Ausgaben
-und / oder Fehlermeldungen von Programmen oder aus Log-Dateien beif�gen!
-
-Versuchen Sie detailliert zu beschreiben, welches Programm nicht
-funktioniert, und alle Symptome, die Sie sehen! In der Vergangenheit haben
-wir viele Bug-Berichte erhalten, in denen schlicht steht, dass "das System
-nicht funktioniert". Daraus k�nnen wir nat�rlich keinerlei Informationen
-ziehen, wie das Problem gel�st werden k�nnte.
-
-Wenn ein Programm fehlschl�gt, ist es immer n�tzlich, folgendes zu wissen:
-
-@itemize @bullet
-@item
-Hat das fragliche Programm einen Segmentation-Fehler verursacht (Core
-Dump)?
-@item
-Nimmt das Programm sich die gesamte Prozessorleistung? �berpr�fen Sie das
-mit @code{top}. Lassen Sie das Programm eine Weile laufen, denn vielleicht
-evaluiert es gerade nur etwas Schwieriges.
-@item
-Wenn der @code{mysqld}-Server Probleme verursacht, k�nnen Sie dann
-@code{mysqladmin -u root ping} oder @code{mysqladmin -u root processlist}
-ausf�hren?
-@item
-Was sagt ein Client-Programm (zum Beispiel @code{mysql}), wenn Sie
-versuchen, sich mit dem MySQL-Server zu verbinden? Bricht der Client
-zusammen? Erhalten Sie von diesem Programm irgend welche Ausgaben?
-@end itemize
-
-Wenn Sie einen Bug-Bericht senden, sollten Sie immer den Angaben folgen,
-die in diesem Handbuch beschrieben sind. @xref{Asking questions}.
-
-
-@node Common errors, Installation Issues, What is crashing, Problems
-@c German node H�ufige Fehler
-@appendixsec Einige gebr�uchliche Fehler bei der Benutzung von MySQL
-
-@cindex errors, Auflistung
-
-
-
-Dieser Abschnitt listet einige Fehler auf, die Benutzer h�ufig erhalten.
-Hier finden Sie Beschreibungen dieser Fehler und wie man die Probleme l�st.
-
-
-@menu
-* Error Access denied::
-* Gone away::
-* Can not connect to server::
-* Blocked host::
-* Too many connections::
-* Non-transactional tables::
-* Out of memory::
-* Packet too large::
-* Communication errors::
-* Full table::
-* Cannot create::
-* Commands out of sync::
-* Ignoring user::
-* Cannot find table::
-* Cannot initialize character set::
-* Not enough file handles::
-@end menu
-
-@node Error Access denied, Gone away, Common errors, Common errors
-@c German node Zugriff-verweigert-Fehler
-@appendixsubsec @code{Access denied}-Fehler
-
-@cindex Fehler, Zugriff verweigert
-@cindex Probleme, Zugriff-verweigert-Fehler
-@cindex access denied
-
-@xref{Privileges}, insbesondere @xref{Access denied}.
-
-
-@node Gone away, Can not connect to server, Error Access denied, Common errors
-@c German node Weg gegangen
-@appendixsubsec @code{MySQL server has gone away}-Fehler
-
-Dieser Abschnitt behandelt auch den verwandten @code{Lost connection to
-server during query}-Fehler.
-
-Der h�ufigste Grund f�r den @code{MySQL server has gone away}-Fehler ist
-eine Zeit�berschreitung, nach der der Server die Verbindung schloss.
-Vorgabem��ig schlie�t der Server die Verbindung nach 8 Stunden, wenn
-nichts passiert ist. Sie k�nnen diesen Wert mit der
-@code{wait_timeout}-Variablen �ndern, die beim Start von @code{mysqld}
-gesetzt wird.
-
-Ein weiterer h�ufiger Grund f�r den @code{MySQL server has gone
-away}-Fehler ist das Absetzen eines ``close'' auf Ihre MySQL-Verbindung mit
-dem anschlie�enden Versuch, auf der geschlossenen Verbindung eine Anfrage
-abzusetzen.
-
-Sie k�nnen �berpr�fen, ob der MySQL-Server gestorben ist, indem Sie
-@code{mysqladmin version} ausf�hren und die Uptime untersuchen.
-
-Wenn Sie ein Skript haben, m�ssen Sie die Anfrage lediglich noch einmal f�r
-den Client absetzen, um eine automatische Neuverbindung zu machen.
-
-Normalerweise k�nnen Sie folgende Fehler-Codes f�r diesen Fall abfragen
-(die Betriebssystem-abh�ngig sind):
-
-@multitable @columnfractions .3 .7
-@item @code{CR_SERVER_GONE_ERROR} @tab Der Client konnte keine Anfrage an
-den Server schicken.
-@item @code{CR_SERVER_LOST} @tab Der Client erhielt beim Schreiben zum
-Server keinen Fehler, bekam aber keine vollst�ndige (oder �berhaupt keine)
-Antwort.
-@end multitable
-
-Sie erhalten diese Fehler auch, wenn Sie eine Anfrage zum Server schicken,
-die falsch oder zu Gro� ist. Wenn @code{mysqld} ein Paket erh�lt, das zu
-Gro� oder nicht in Ordnung ist, nimmt er hat, dass etwas mit dem Client
-schief ging und schlie�t die Verbindung. Wenn Sie gro�e Anfragen brauchen
-(beispielsweise wenn Sie mit @code{BLOB}-Spalten arbeiten), k�nnen Sie die
-Anfragebeschr�nkung erh�hen, indem Sie @code{mysqld} mit der @code{-O
-max_allowed_packet=#}-Option starten (Vorgabe 1 MB). Der zus�tzliche
-Speicher wird bei Bedarf zugewiesen, daher benutzt @code{mysqld} nur dann
-mehr Speicher, wenn Sie eine gro�e Anfrage ausf�hren oder wenn
-@code{mysqld} ein gro�es Ergebnis zur�ckgeben muss!
-
-
-@node Can not connect to server, Blocked host, Gone away, Common errors
-@c German node Keine Verbindung zum Server
-@appendixsubsec @code{Can't connect to [local] MySQL server}-Fehler
-
-Ein MySQL-Client unter Unix kann sich auf zwei unterschiedliche Arten mit
-dem @code{mysqld}-Server verbinden: Unix-Sockets, die sich durch eine Datei
-im Dateisystem verbinden (Vorgabe @file{/tmp/mysqld.sock}) oder �ber
-TCP/IP, was sich �ber eine Portnummer verbindet. Unix-Sockets sind
-schneller als TCP/IP, k�nnen aber nur benutzt werden, wenn man sich zu
-einem Server auf demselben Computer verbindet. Unix-Sockets werden benutzt,
-wenn Sie keinen Hostnamen oder den speziellen Hostnamen @code{localhost}
-angeben.
-
-Unter Windows k�nnen Sie sich nur mit TCP/IP verbinden, wenn der
-@code{mysqld}-Server unter Windows 95 / 98 l�uft. Wenn er unter Windows NT
-l�uft, k�nnen Sie sich auch mit Named Pipes verbinden. Der Name der Named
-Pipe ist MySQL. Wenn Sie bei der Verbindung zu @code{mysqld} keinen
-Hostnamen angeben, versucht ein MySQL-Client zuerst, sich �ber die Named
-Pipe zu verbinden. Erst wenn das fehlschl�gt, versucht er, sich �ber den
-TCP/IP-Port zu verbinden. Sie k�nnen die Benutzung von Named Pipes unter
-Windows erzwingen, indem Sie @code{.} als Hostnamen benutzen.
-
-Der Fehler (2002) @code{Can't connect to ...} bedeutet normalerweise, dass
-auf dem System kein MySQL-Server l�uft oder dass Sie eine falsche
-Socket-Datei oder einen falschen TCP/IP-Port bei der Verbindung mit dem
-@code{mysqld}-Server benutzen.
-
-Pr�fen Sie zuerst mit @code{ps} oder dem Task-Manager unter Windows, ob es
-einen laufenden Prozess namens @code{mysqld} auf Ihrem Server gibt! Wenn es
-keinen @code{mysqld}-Prozess gibt, sollten Sie einen starten. @xref{Starting server}.
-
-Wenn ein @code{mysqld}-Prozess l�uft, k�nnen Sie den Server mit diesen
-unterschiedlichen Verbindungen �berpr�fen (die Portnummer und
-Socket-Pfadnamen k�nnen auf Ihrem System nat�rlich anders sein):
-
-@example
-shell> mysqladmin version
-shell> mysqladmin variables
-shell> mysqladmin -h `hostname` version variables
-shell> mysqladmin -h `hostname` --port=3306 version
-shell> mysqladmin -h 'ip_ihres_hosts' version
-shell> mysqladmin --socket=/tmp/mysql.sock version
-@end example
-
-Beachten Sie die Benutzung umgedrehter Anf�hrungszeichen statt normaler
-Anf�hrungszeichen beim @code{hostname}-Befehl. Diese verursachen, dass die
-Ausgabe durch @code{hostname} (das hei�t des aktuellen Hostnamens) im
-@code{mysqladmin}-Befehl ersetzt wird.
-
-Hier sind einige Gr�nde f�r das Auftreten des @code{Can't connect to local
-MySQL server}-Fehlers:
-
-@itemize @bullet
-@item
-@code{mysqld} l�uft nicht.
-@item
-Sie fahren auf einem System, das MIT-pThread verwendet. Wenn Sie auf einem
-System fahren, das keine nativen Threads hat, benutzt @code{mysqld} das
-MIT-pThread-Paket. @xref{Which OS}. Nicht alle
-MIT-pThread-Versionen unterst�tzen jedoch Unix-Sockets. Auf einem System
-ohne Socket-Unterst�tzung m�ssen Sie den Hostnamen immer explizit angeben,
-wenn Sie sich mit dem Server verbinden. Benutzen Sie diesen Befehl, um die
-Verbindung zum Server zu �berpr�fen:
-@example
-shell> mysqladmin -h `hostname` version
-@end example
-@item
-Jemand hat den Unix-Socket entfernt, den @code{mysqld} benutzt (Vorgabe
-@file{/tmp/mysqld.sock}). Vielleicht gibt es einen @code{cron}-Job, der den
-MySQL-Socket entfernt (beispielsweise ein Job, der alte Dateien aus dem
-@file{/tmp}-Verzeichnis entfernt). Sie k�nnen @code{mysqladmin version}
-laufen lassen und �berpr�fen, dass der Socket, den @code{mysqladmin}
-versucht zu benutzen, tats�chlich existiert. Die Probleml�sung besteht in
-diesem Fall darin, den @code{cron}-Job so zu �ndern, dass er nicht
-@file{mysqld.sock} entfernt oder den Socket an andere Stelle zu platzieren.
-@xref{Problems with mysql.sock}.
-@item
-Sie haben den @code{mysqld}-Server mit der
-@code{--socket=/pfad/zu/socket}-Option gestartet. Wenn Sie den
-Socket-Pfadnamen zum Server �ndern, m�ssen Sie auch die MySQL-Clients
-dar�ber unterrichten. Das k�nnen Sie tun, indem Sie den Socket-Pfad als
-Argument an den Client �bergeben. @xref{Problems with mysql.sock}.
-@item
-Sie benutzen Linux und ein Thread ist gestorben (Core Dump). In diesem Fall
-m�ssen Sie den anderen @code{mysqld}-Thread killen (beispielsweise mit dem
-@code{mysql_zap}-Skript), bevor Sie einen neuen MySQL-Server starten
-k�nnen. @xref{Crashing}.
-@item
-Eventuell haben Sie keine Lese- und Schreibberechtigungen entweder f�r das
-Verzeichnis, in dem die Socket-Datei liegt, oder keine Berechtigung f�r die
-Socket-Datei selbst. In diesem Fall k�nnen Sie entweder die Berechtigung
-f�r die Datei und / oder das Verzeichnis �ndern oder @code{mysqld} neu
-starten, so dass er ein Verzeichnis benutzt, auf das Sie Zugriff haben.
-@end itemize
-
-Wenn Sie die Fehlermeldung @code{Can't connect to MySQL server on
-ein_hostname} erhalten, k�nnen Sie folgendes probieren, um den Grund des
-Problems herauszufinden:
-
-@itemize @bullet
-@item
-�berpr�fen Sie, ob der Server hochgefahren ist, indem Sie @code{telnet
-ihr_hostname tcp-ip-port-nummer} ausf�hren und einige Male die Eingabetaste
-(@code{RETURN}) dr�cken. Wenn es auf diesem Port einen laufenden
-MySQL-Server gibt, sollten Sie eine Antwort erhalten, die die
-Versionsnummer des Server enth�lt. Wenn Sie einen Fehler wie @code{telnet:
-Unable to connect to remote host: Connection refused} erhalten, gibt es auf
-diesem Port keinen laufenden Server.
-@item
-Versuchen Sie, sich mit dem @code{mysqld}-Daemon auf der lokalen Maschine
-zu verbinden und pr�fen Sie den TCP/IP-Port, den @code{mysqld} laut
-Konfiguration benutzen soll (Variable @code{port}), mit @code{mysqladmin
-variables}.
-@item
-Pr�fen Sie, ob Ihr @code{mysqld}-Server nicht gestartet wurde, indem Sie
-die @code{--skip-networking}-Option verwenden.
-@end itemize
-
-
-@node Blocked host, Too many connections, Can not connect to server, Common errors
-@c German node Blockierter Host
-@appendixsubsec @code{Host '...' is blocked}-Fehler
-
-Wenn Sie einen Fehler wie folgt erhalten:
-
-@example
-Host 'hostname' is blocked because of too many connection errors.
-Unblock with 'mysqladmin flush-hosts'
-@end example
-
-Bedeutet das, dass @code{mysqld} zu viele (@code{max_connect_errors})
-Verbindungsanforderungen vom Host @code{'hostname'} erhalten hat, die
-mittendrin unterbrochen wurden. Nach @code{max_connect_errors}
-fehlgeschlagenen Anfragen nimmt @code{mysqld} an, dass etwas nicht stimmt
-(wie ein Angriff eines Crackers) und blockiert weitere
-Verbindungsanforderungen von der Site, bis jemand @code{mysqladmin
-flush-hosts} ausf�hrt.
-
-Vorgabem��ig blockiert @code{mysqld} einen Host nach 10
-Verbindungsfehlern. Das k�nnen Sie leicht durch Starten des Servers wie
-folgt �ndern:
-
-@example
-shell> safe_mysqld -O max_connect_errors=10000 &
-@end example
-
-Beachten Sie, dass Sie bei dieser Fehlermeldung f�r einen gegebenen Host
-zun�chst pr�fen sollten, ob etwas mit den TCP/IP-Verbindungen von diesem
-Host aus nicht stimmt. Wenn Ihre TCP/IP-Verbindungen nicht funktionieren,
-n�tzt es Ihnen nichts, den Wert der @code{max_connect_errors}-Variablen
-heraufzusetzen!
-
-
-@node Too many connections, Non-transactional tables, Blocked host, Common errors
-@c German node Zu viele Verbindungen
-@appendixsubsec @code{Too many connections}-Fehler
-
-Wenn Sie beim Verbindungsversuch den Fehler @code{Too many connections}
-erhalten, hei�t das, dass es bereits @code{max_connections} Clients gibt,
-die mit dem @code{mysqld}-Server verbunden sind.
-
-Wenn Sie mehr Verbindungen als die Vorgabe (100) ben�tigen, k�nnen Sie
-@code{mysqld} mit einem gr��eren Wert f�r die
-@code{max_connections}-Variable neu starten.
-
-Beachten Sie, dass @code{mysqld} tats�chlich (@code{max_connections}+1)
-Clients f�r Verbindungen zul��t. Die letzte Verbindung wird f�r einen
-Benutzer mit der @strong{process}-Berechtigung reserviert. Wenn Sie keinem
-normalen Benutzer diese Berechtigung geben (diese sollte sie nie
-ben�tigen), kann sich ein Administrator mit dieser Berechtigung einloggen
-und @code{SHOW PROCESSLIST} benutzen, um herauszufinden, was schief geht.
-@xref{SHOW}.
-
-Die maximale Anzahl von Verbindungen ist davon abh�ngig, wie gut die
-Thread-Bibliothek auf der Plattform ist. Linux oder Solaris sollten in der
-Lage sein, 500 bis 1000 gleichzeitige Verbindungen zu unterst�tzen, abh�ngig
-davon, wie viel Arbeitsspeicher Sie haben und was Ihre Clients ausf�hren.
-
-
-@node Non-transactional tables, Out of memory, Too many connections, Common errors
-@c German node Nicht transaktionale Tabellen
-@appendixsubsec @code{Some non-transactional changed tables couldn't be rolled back}-Fehler
-
-@cindex Nicht transaktionale Tabellen
-
-Wenn Sie den Fehler @code{Warning: Some non-transactional changed tables
-couldn't be rolled back} erhalten, wenn Sie ein @code{ROLLBACK} versuchen,
-bedeutet das, dass einige der bei der Transaktion benutzten Tabellen keine
-Transaktionen unterst�tzen. Diese nicht transkationalen Tabellen werden vom
-@code{ROLLBACK}-Statement nicht betroffen.
-
-Der typischste Fall, bei dem dieser Fehler auftritt, ist, wenn Sie versucht
-haben, eine Tabelle von einem Typ zu erzeugen, der von Ihrer
-@code{mysqld}-Bin�rdatei nicht unterst�tzt wird. Wenn @code{mysqld} einen
-Tabellentyp nicht unterst�tzt (oder wenn der Tabellentyp durch die
-Startoption ausgeschaltet ist), wird statt dessen ein Tabellentyp erzeugt,
-der dem angeforderten am n�chsten entspricht (wahrscheinlich
-@code{MyISAM}.
-
-Sie k�nnen den Tabellentyp f�r eine Tabelle wie folgt �berpr�fen:
-
-@code{SHOW TABLE STATUS LIKE 'tabelle'}. @xref{SHOW TABLE STATUS}.
-
-Sie k�nnen die Erweiterungen, die Ihre @code{mysqld}-Bin�rdatei
-unterst�tzt, wie folgt �berpr�fen:
-
-@code{show variables like 'have_%'}. @xref{SHOW VARIABLES}.
-
-
-@node Out of memory, Packet too large, Non-transactional tables, Common errors
-@c German node Kein Speicher verf�gbar
-@appendixsubsec @code{No free memory}-Fehler
-
-Wenn Sie eine Anfrage ausf�hren und etwas wie folgenden Fehler erhalten:
-
-@example
-mysql: No free memory at line 42, 'malloc.c'
-mysql: needed 8136 byte (8k), memory in use: 12481367 Bytes (12189k)
-ERROR 2008: MySQL client ran No free memory
-@end example
-
-Beachten Sie, dass sich dieser Fehler auf den MySQL-Client @code{mysql}
-bezieht. Der Grund f�r diesen Fehler ist einfach, dass der Client nicht
-genug freien Speicher hat, um das gesamte Ergebnis zu speichern.
-
-Um das Problem zu beheben, pr�fen Sie zun�chst, ob Ihre Anfrage korrekt
-ist. Sollte sie vern�nftigerweise so viele Zeilen zur�ckgeben? Wenn das der
-Fall ist, k�nnen Sie @code{mysql --quick} benutzen, was
-@code{mysql_use_result()} benutzt, um die Ergebnismenge abzurufen.
-Hierdurch wird Last vom Client auf den Server verlagert.
-
-
-@node Packet too large, Communication errors, Out of memory, Common errors
-@c German node Paket zu Gro�
-@appendixsubsec @code{Packet too large}-Fehler
-
-Wenn ein MySQL-Client oder der @code{mysqld}-Server ein Paket erh�lt, das
-gr��er als @code{max_allowed_packet} Bytes ist, gibt er einen @code{Packet
-too large}-Fehler aus und schlie�t die Verbindung.
-
-Wenn Sie den @code{mysql}-Client benutzen, m�ssen Sie einen gr��eren
-Puffer angeben, indem Sie den Client mit @code{mysql
---set-variable=max_allowed_packet=8M} starten.
-
-Wenn Sie andere Clients benutzen, die die Angabe der maximalen Paketgr��e
-nicht zulassen (wie @code{DBI}), m�ssen Sie die Paketgr��e beim Start des
-Servers setzen. Sie k�nnen eine Kommandozeilenoption f�r @code{mysqld}
-benutzen, um @code{max_allowed_packet} auf eine h�here Gr��e zu setzen.
-Wenn Sie zum Beispiel beabsichtigen, die volle L�nge eines @code{BLOB} in
-eine Tabelle zu speichern, m�ssen Sie den Server mit der
-@code{--set-variable=max_allowed_packet=16M}-Option starten.
-
-Sie k�nnen merkw�rdige Probleme mit gro�en Paketen erhalten, wenn Sie
-gro�e Blobs benutzen, aber @code{mysqld} keinen Zugriff auf genug Speicher
-gegeben haben, um die Anfrage zu handhaben. Wenn Sie vermuten, dass das der
-Fall ist, versuchen Sie, am Anfang des @code{safe_mysqld}-Skripts
-@code{ulimit -d 256000} hinzuzuf�gen, und starten Sie @code{mysqld} neu.
-
-@node Communication errors, Full table, Packet too large, Common errors
-@c German node Kommunikationsfehler
-@appendixsubsec Kommunikationsfehler / Abgebrochene Verbindung
-
-@cindex Abgebrochene Clients
-@cindex Abgebrochene Verbindung
-@cindex Verbindung, abgebrochen
-
-Ab @code{MySQL 3.23.40} erhalten Sie den @code{Aborted connection}-Fehler
-nur dann, wenn Sie @code{mysqld} mit @code{--warnings} starten.
-
-Wenn Sie Fehler wie den folgenden in Ihrer Fehler-Log-Datei entdecken:
-
-@example
-010301 14:38:23 Aborted connection 854 to db: 'Benutzer' user: 'josh'
-@end example
-
-@xref{Error log}.
-
-Bedeutet das, dass eins der folgenden Dinge passiert ist:
-
-@itemize @bullet
-@item
-Das Client-Programm rief vor dem Beenden nicht @code{mysql_close()} auf.
-@item
-Der Client schlief l�nger als @code{wait_timeout} oder
-@code{interactive_timeout}, ohne Anfragen auszuf�hren.
-@c German FIX unsplit @xref
-@xref{SHOW VARIABLES}.
-@item
-Das Client-Programm wurde abrupt w�hrend einer �bertragung beendet.
-@end itemize
-
-Wenn das oben Genannte passiert, wird die Servervariable
-@code{Aborted_clients} heraufgez�hlt.
-
-Die Servervariable @code{Aborted_connects} wird in folgenden F�llen
-heraufgez�hlt:
-
-@itemize @bullet
-@item
-Wenn ein Verbindungspaket nicht die richtigen Informationen enth�lt.
-@item
-Wenn der Benutzer keine Berechtigung hat, sich mit einer Datenbank zu
-verbinden.
-@item
-Wenn ein Benutzer ein falsches Passwort angegeben hat.
-@item
-Wenn es l�nger als @code{connect_timeout} Sekunden dauert, um ein
-Verbindungspaket zu erhalten.
-@end itemize
-
-Beachten Sie, dass obiges auch anzeigen k�nnte, dass jemand versucht, in
-Ihre Datenbank einzubrechen!
-
-@xref{SHOW VARIABLES}.
-
-Andere Gr�nde f�r Probleme mit abgebrochenen Clients / abgebrochenen
-Verbindungen:
-@itemize @bullet
-@item
-Benutzung des Duplex-Ethernet-Protokolls, sowohl Halb- als auch
-Voll-Duplex, unter Linux. Viele Linux-Ethernet-Treiber haben diesen Bug.
-Sie k�nnen auf diesen Bug �berpr�fen, indem Sie eine sehr gro�e Datei via
-FTP zwischen diesen beiden Maschinen �bertragen. Wenn ein Transfer nach dem
-Schema schnelle �bertragung - Pause - schnelle �bertragung - Pause l�uft,
-haben Sie ein Linux-Duplex-Syndrom. Die einzige L�sung besteht darin, Halb-
-und Vollduplex auf Hubs und Switches auszuschalten.
-@item
-Probleme mit der Thread-Bibliothek, was Unterbrechungen bei Lesevorg�ngen
-verursacht.
-@item
-Schlecht konfiguriertes TCP/IP.
-@item
-Fehlerhafte Ethernets, Hubs, Switches, Kabel usw. Das kann nur durch
-Austausch von Hardware sauber diagnostiziert werden.
-@item
-@code{max_allowed_packet} ist zu klein oder Anfragen erfordern mehr
-Speicher, als Sie f�r @code{mysqld} zugewiesen haben.
-@c German FIX unwrapped @xref
-@xref{Packet too large}.
-@end itemize
-
-
-@node Full table, Cannot create, Communication errors, Common errors
-@c German node Tabelle voll
-@appendixsubsec @code{The table is full}-Fehler
-
-@cindex Tabelle ist voll
-
-Der Fehler tritt in �lteren MySQL-Versionen auf, wenn eine
-Hauptspeicher-basierende tempor�re Tabelle gr��er als
-@code{tmp_table_size} Bytes wird. Um dieses Problem zu vermeiden, k�nnen
-Sie die @code{-O tmp_table_size=#}-Option f�r @code{mysqld} benutzen, um
-die Gr��e der tempor�ren Tabelle zu erh�hen, oder die SQL-Option
-@code{SQL_BIG_TABLES} verwenden, bevor Sie die problematische Anfrage
-abschicken. @xref{SET OPTION, , @code{SET OPTION}}.
-
-Sie k�nnen auch @code{mysqld} mit der @code{--big-tables}-Option starten.
-Das ist genau dasselbe, wie @code{SQL_BIG_TABLES} f�r alle Anfragen zu
-benutzen.
-
-In MySQL-Version 3.23 werden Hauptspeicher-basierende tempor�re Tabellen
-automatisch in Festplatten-basierende @code{MyISAM}-Tabellen umgewandelt,
-wenn die Tabelle gr��er als @code{tmp_table_size} wird.
-
-
-@node Cannot create, Commands out of sync, Full table, Common errors
-@c German node Kann nicht erzeugen
-@appendixsubsec @code{Can't create/write to file}-Fehler
-
-@cindex can't create/write to file
-
-Wenn Sie f�r einige Anfragen Fehler folgenden Typs erhalten:
-
-@example
-Can't create/write to file '\\sqla3fe_0.ism'.
-@end example
-
-Bedeutet das, dass MySQL keine tempor�re Datei f�r die Ergebnismenge im
-angegebenen tempor�ren Verzeichnis erzeugen kann. (Der obige Fehler ist
-eine typische Fehlermeldung unter Windows; die Unix-Fehlermeldung ist
-�hnlich.) Das Problem l��t sich beheben, indem Sie @code{mysqld} mit
-@code{--tmpdir=pfad} starten oder folgendes in Ihrer Optionsdatei erg�nzen:
-
-@example
-[mysqld]
-tmpdir=C:/temp
-@end example
-
-Unter der Annahme, dass das @file{c:\\temp}-Verzeichnis existiert.
-@xref{Option files}.
-
-�berpr�fen Sie auch den Fehler-Code, den Sie bei @code{perror} erhalten.
-Ein Grund kann ein Fehler wegen fehlenden Festplattenspeichers sein:
-
-@example
-shell> perror 28
-Error code 28: No space left on device
-@end example
-
-
-@node Commands out of sync, Ignoring user, Cannot create, Common errors
-@c German node Befehl nicht synchronisiert
-@appendixsubsec @code{Command out of sync}-Fehler in Client
-
-@cindex Befehle nicht synchronisiert
-
-Wenn Sie den Fehler @code{command out of sync; You can't run this command
-now} in Ihrem Client-Code erhalten, rufen Sie Client-Funktionen in der
-falschen Reihenfolge auf!
-
-Das kann zum Beispiel passieren, wenn Sie @code{mysql_use_result()}
-benutzen und versuchen, eine neue Anfrage auszuf�hren, bevor Sie
-@code{mysql_free_result()} aufgerufen haben. Der Fehler passiert ebenfalls,
-wenn Sie versuchen, zwei Anfragen auszuf�hren, die Daten zur�ckgeben, ohne
-zwischendrin @code{mysql_use_result()} oder @code{mysql_store_result()}
-aufzurufen.
-
-
-@node Ignoring user, Cannot find table, Commands out of sync, Common errors
-@c German node Benutzer ignoriert
-@appendixsubsec @code{User ignored}-Fehler
-
-Wenn Sie folgenden Fehler erhalten:
-
-@code{Found wrong password for user: 'benutzer@@ein_host'; User ignored}
-
-Bedeutet das, dass @code{mysqld} beim Start oder nach dem Neuladen der
-Berechtigungstabellen einen Eintrag in der @code{user}-Tabelle mit einem
-ung�ltigen Passwort gefunden hat. Als Ergebnis wird der Eintrag vom
-Berechtigungssystem einfach ignoriert.
-
-M�gliche Gr�nde und Problembehebung:
-
-@itemize @bullet
-@item
-Sie lassen eine neue Version von @code{mysqld} mit einer alten
-@code{user}-Tabelle laufen. Das k�nnen Sie pr�fen, indem Sie
-@code{mysqlshow mysql user} eingeben, um zu sehen, ob das Passwortfeld
-k�rzer als 16 Zeichen ist. Wenn das der Fall ist, k�nnen Sie diesen Zustand
-beheben, indem Sie das @code{scripts/add_long_password}-Skript laufen
-lassen.
-
-@item
-Der Benutzer hat ein altes Passwort (8 Zeichen lang) und Sie haben
-@code{mysqld} nicht mit der @code{--old-protocol}-Option gestartet.
-
-@item
-@findex PASSWORD()
-Sie haben in der @code{user}-Tabelle ein Passwort eingegeben, ohne die
-@code{PASSWORD()}-Funktion zu benutzen. Benutzen Sie @code{mysql}, um den
-Benutzer in der @code{user}-Tabelle mit einem neuen Passwort zu
-aktualisieren. Stellen Sie sicher, dass Sie die @code{PASSWORD()}-Funktion
-benutzen:
-
-@example
-mysql> update user set password=PASSWORD('ihr_passwort')
- where user='XXX';
-@end example
-@end itemize
-
-
-@node Cannot find table, Cannot initialize character set, Ignoring user, Common errors
-@c German node Tabelle nicht gefunden
-@appendixsubsec @code{Table 'xxx' doesn't exist}-Fehler
-
-Wenn Sie den Fehler @code{Table 'xxx' doesn't exist} oder @code{Can't find
-file: 'xxx' (errno: 2)} erhalten, bedeutet das, dass in der aktuellen
-Datenbank keine Tabelle mit dem Namen @code{xxx} existiert.
-
-Beachten Sie, dass Datenbank- und Tabellennamen @strong{abh�ngig von der
-verwendeten Gro�-/Kleinschreibung} sind, weil MySQL Verzeichnisse und
-Dateien benutzt, um Datenbanken und Tabellen zu speichern! (Unter Windows
-sind Datenbank- und Tabellennamen unabh�ngig von der Schreibweise, aber
-alle Verweise auf eine gegebene Tabelle innerhalb einer Anfrage m�ssen
-dieselbe Schreibweise benutzen!)
-
-Sie finden heraus, welche Tabellen sich in der aktuellen Datenbank
-befinden, indem Sie @code{SHOW TABLES} eingeben. @xref{SHOW, ,
-@code{SHOW}}.
-
-
-@node Cannot initialize character set, Not enough file handles, Cannot find table, Common errors
-@c German node Zeichensatz kann nicht initialisiert werden
-@appendixsubsec @code{Can@'t initialize charset xxx}-Fehler.
-
-@cindex Multibyte-Zeichens�tze
-
-Wenn Sie folgenden Fehler erhalten:
-
-@example
-MySQL Connection Failed: Can't initialize charset xxx
-@end example
-
-Bedeutet das eins der folgenden Dinge:
-
-@itemize @bullet
-@item
-Der Zeichensatz ist ein Multi-Byte-Zeichensatz und Ihr Client unterst�tzt
-diesen Zeichensatz nicht.
-
-In diesem Fall m�ssen Sie Ihren Client neu kompilieren und die
-@code{--with-charset=xxx}- oder die @code{--with-extra-charsets=xxx}-Option
-angeben. @xref{configure options}.
-
-Alle Standard-MySQL-Bin�rdistributionen werden mit
-@code{--with-extra-character-sets=complex} kompiliert, was die
-Unterst�tzung f�r alle Multi-Byte-Zeichens�tze aktiviert.
-@xref{Character sets}.
-
-@item
-Der Zeichensatz ist ein einfacher Zeichensatz, der nicht in @code{mysqld}
-kompiliert wurde, und die Zeichensatz-Definitionsdateien sind nicht an der
-Stelle, an der der Client sie erwartet.
-
-In diesem Fall m�ssen Sie:
-
-@itemize @bullet
-@item
-Den Client mit Unterst�tzung f�r den Zeichensatz neu kompilieren.
-@xref{configure options}.
-@item
-Dem Client angeben, wo die Zeichensatz-Definitionsdateien sind. Bei vielen
-Clients k�nnen Sie das mit der
-@code{--character-sets-dir=pfad-to-charset-dir}-Option machen.
-@item
-Die Zeichensatz-Definitionsdatei in den Pfad kopieren, wo der Client sie zu
-finden erwartet.
-@end itemize
-@end itemize
-
-
-@node Not enough file handles, , Cannot initialize character set, Common errors
-@c German node Nicht genug Datei-Handles
-@appendixsubsec File Not Found
-
-Wenn Sie den Fehler @code{ERROR '...' not found (errno: 23)}, @code{Can't
-open file: ... (errno: 24)} oder irgend einen anderen Fehler mit
-@code{errno 23} oder @code{errno 24} erhalten, bedeutet das, dass Sie MySQL
-nicht genug Datei-Deskriptoren zugewiesen haben. Sie k�nnen das
-@code{perror}-Dienstprogramm benutzen, um eine Beschreibung dessen zu
-erhalten, was die Fehlernummer bedeutet:
-
-@example
-shell> perror 23
-File table overflow
-shell> perror 24
-Too many open files
-shell> perror 11
-Resource temporarily unavailable
-@end example
-
-Das Problem hierbei ist, dass @code{mysqld} versucht, zu viele Dateien
-gleichzeitig offen zu halten. Sie k�nnen entweder @code{mysqld}
-veranlassen, nicht so viele Dateien auf einmal zu �ffnen, oder die Anzahl
-von Datei-Deskriptoren heraufsetzen, �ber die @code{mysqld} verf�gen kann.
-
-Um @code{mysqld} anzuweisen, weniger Dateien zugleich offen zu halten,
-k�nnen Sie den Tabellen-Cache kleiner machen, indem Sie die @code{-O
-table_cache=32}-Option f�r @code{safe_mysqld} benutzen (der Vorgabewert ist
-64). Wenn Sie den Wert von @code{max_connections} verringern, reduziert
-auch das die Anzahl offener Dateien (der Vorgabewert ist 90).
-
-@tindex ulimit
-Um die Anzahl von Datei-Deskriptoren, die @code{mysqld} zur Verf�gung
-stehen, zu �ndern, k�nnen Sie die @code{--open-files-limit=#}-Option f�r
-@code{safe_mysqld} oder die @code{-O open-files-limit=#}-Option f�r
-@code{mysqld} benutzen. @xref{SHOW VARIABLES}. Die einfachste Art, das zu
-tun, besteht darin, eine Option zu Ihrer Optionsdatei hinzuzuf�gen.
-@xref{Option files}. Wenn Sie eine alte @code{mysqld}-Version haben, die
-das nicht unterst�tzt, k�nnen Sie das @code{safe_mysqld}-Skript editieren.
-Es gibt dort eine auskommentierte Zeile @code{ulimit -n 256}. Entfernen Sie
-das @code{'#'}-Zeichen, um diese Zeile zu aktivieren, und �ndern Sie die
-Anzahl 256, um die Anzahl verf�gbarer Datei-Deskriptoren zu beeinflussen.
-
-Mit @code{ulimit} (und @code{open-files-limit}) kann man die Anzahl von
-Datei-Deskriptoren heraufsetzen, aber nur bis zu der Grenze, die das
-Betriebssystem vorgibt. Dar�ber hinaus gibt es eine 'harte' Grenze, die nur
-�berschrieben werden kann, wenn Sie @code{safe_mysqld} oder @code{mysqld}
-als Root starten (denken Sie daran, dass Sie in diesem Fall auch die
-@code{--user=..}-Option benutzen m�ssen). Wenn Sie die
-Betriebssystem-Grenze hinsichtlich der Anzahl von Datei-Deskriptoren, die
-f�r jeden Prozess verf�gbar sind, heraufsetzen m�ssen, schauen Sie in der
-Dokumentation Ihres Betriebssystems nach.
-
-Beachten Sie, dass @code{ulimit} nicht funktioniert, wenn Sie die
-@code{tcsh}-Shell laufen lassen! @code{tcsh} berichtet auch nicht korrekte
-Werte, wenn Sie die aktuellen Grenzen abfragen! In diesem Fall sollten Sie
-@code{safe_mysqld} mit @code{sh} starten!
-
-
-@node Installation Issues, Administration Issues, Common errors, Problems
-@c German node Installationsprobleme
-@appendixsec Installationsbezogene Themen
-
-
-
-@menu
-* Link errors::
-* Changing MySQL user::
-* File permissions ::
-@end menu
-
-@node Link errors, Changing MySQL user, Installation Issues, Installation Issues
-@c German node Link-Fehler
-@appendixsubsec Probleme beim Linken mit der MySQL-Client-Bibliothek
-
-@cindex linken, Fehler
-@cindex Fehler, linken
-@cindex Probleme, linken
-
-Wenn Sie Ihr Programm linken und Fehler f�r unreferenzierte Symbole
-erhalten, die mit @code{mysql_} beginnen, wie folgende:
-
-@example
-/tmp/ccFKsdPa.o: In function `main':
-/tmp/ccFKsdPa.o(.text+0xb): undefined reference to `mysql_init'
-/tmp/ccFKsdPa.o(.text+0x31): undefined reference to `mysql_real_connect'
-/tmp/ccFKsdPa.o(.text+0x57): undefined reference to `mysql_real_connect'
-/tmp/ccFKsdPa.o(.text+0x69): undefined reference to `mysql_error'
-/tmp/ccFKsdPa.o(.text+0x9a): undefined reference to `mysql_close'
-@end example
-
-Sollten Sie das durch Hinzuf�gen von
-@code{-Lpath-to-the-mysql-library-lmysqlclient} als @strong{LETZTES} in
-Ihrer Link-Zeile beheben k�nnen.
-
-Wenn Sie @code{undefined reference}-Fehler bei der @code{uncompress}- oder
-@code{compress}-Funktion erhalten, f�gen Sie @code{-lz} als
-@strong{LETZTES} zu Ihrer Link-Zeile hinzu und versuchen Sie es noch
-einmal!
-
-Wenn Sie @code{undefined reference}-Fehler bei Funktionen erhalten, die es
-auf Ihrem System geben sollte, wie @code{connect}, sehen Sie in der
-Handbuch-Seite (ManPage) f�r die fragliche Funktion nach, welche
-Bibliotheken Sie zur Link-Zeile hinzuf�gen sollten!
-
-Wenn Sie @code{undefined reference}-Fehler bei Funktionen erhalten, die es
-auf Ihrem System nicht gibt, wie folgenden:
-
-@example
-mf_format.o(.text+0x201): undefined reference to `__lxstat'
-@end example
-
-Hei�t das �blicherweise, dass Ihre Bibliothek auf einem System kompiliert
-wurde, das nicht 100% kompatibel zu Ihrem System ist. In diesem Fall
-sollten Sie die letzte MySQL-Quelldistribution herunter laden und sie
-selbst kompilieren. @xref{Installing source}.
-
-Wenn Sie versuchen, ein Programm laufen zu lassen und Fehler f�r
-unreferenzierte Symbole erhalten, die mit @code{mysql_} anfangen, oder den
-Fehler, dass die @code{mysqlclient}-Bibliothek nicht gefunden werden kann,
-hei�t das, dass Ihr System die gemeinsam genutzte
-@code{libmysqlclient.so}-Bibliothek nicht findet.
-
-Das Problem beheben Sie, indem Sie Ihr System anweisen, dort nach gemeinsam
-genutzten Bibliotheken zu suchen, wo sich die Bibliothek befindet, mit
-einer der folgenden Methoden:
-
-@itemize @bullet
-@item
-F�gen Sie den Pfad zum Verzeichnis, in dem Sie @code{libmysqlclient.so}
-haben, der @code{LD_LIBRARY_PATH}-Umgebungsvariablen hinzu.
-@item
-F�gen Sie den Pfad zum Verzeichnis, in dem Sie @code{libmysqlclient.so}
-haben, der @code{LD_LIBRARY}-Umgebungsvariablen hinzu.
-@item
-Kopieren Sie @code{libmysqlclient.so} an eine Stelle, die von Ihrem System
-durchsucht wird, wie @file{/lib}, und aktualisieren Sie die Informationen
-�ber gemeinsam genutzte Bibliotheken, indem Sie @code{ldconfig} ausf�hren.
-@end itemize
-
-Eine weitere M�glichkeit, dieses Problem zu l�sen, besteht darin, Ihr
-Programm statisch mit @code{-static} zu linken oder die dynamischen
-MySQL-Bibliotheken zu entfernen, bevor Sie Ihren Code linken. Im letzteren
-Fall sollten Sie sicherstellen, dass keine anderen Programme die
-dynamischen Bibliotheken benutzen!
-
-
-@node Changing MySQL user, File permissions , Link errors, Installation Issues
-@c German node �nderung des MySQL-Benutzers
-@appendixsubsec Wie man MySQL als normaler Benutzer laufen l��t
-
-@cindex starten, @code{mysqld}
-@cindex @code{mysqld}, starten
-
-Der MySQL-Server @code{mysqld} kann von jedem beliebigen Benutzer gestartet
-werden und unter diesem laufen. Damit @code{mysqld} als Unix-Benutzer
-@code{benutzername} l�uft, m�ssen Sie folgendes tun:
-
-@enumerate
-@item
-Halten Sie den Server an, falls er l�uft (benutzen Sie @code{mysqladmin
-shutdown}).
-
-@item
-�ndern Sie die Datenbankverzeichnisse und Dateien so, dass
-@code{benutzername} die Berechtigungen zum Lesen und Schreiben von Dateien
-darin hat (das m�ssen Sie eventuell als Unix-@code{root}-Benutzer machen):
-
-@example
-shell> chown -R benutzername /pfad/zu/mysql/datadir
-@end example
-
-Wenn Verzeichnisse oder Dateien im MySQL-Daten-Verzeichnis symbolische
-Links sind, m�ssen Sie auch diesen Verkn�pfungen folgen und die
-Verzeichnisse und Dateien, auf die sie zeigen, �ndern. @code{chown -R} kann
-SymLinks f�r Sie folgen.
-
-@item
-Starten Sie den Server als Benutzer @code{benutzername} oder, wenn Sie
-MySQL-Version 3.22 oder sp�ter benutzen, starten Sie @code{mysqld} als
-Unix-@code{root}-Benutzer und benutzen Sie die
-@code{--user=benutzername}-Option. @code{mysqld} schaltet um und l�uft dann
-unter Unix-Benutzer @code{benutzername}, bevor er irgend welche
-Verbindungen annimmt.
-
-@item
-Um den Server automatisch beim Hochfahren des Systems unter dem angegebenen
-Benutzernamen zu starten, f�gen Sie zur @code{[mysqld]}-Gruppe der
-@file{/etc/my.cnf}-Optionendatei oder der @file{my.cnf}-Optionendatei im
-Datenverzeichnis des Servers eine @code{user}-Zeile hinzu, die den
-Benutzernamen angibt. Beispiel:
-
-@example
-[mysqld]
-user=benutzername
-@end example
-@end enumerate
-
-Nunmehr sollte Ihr @code{mysqld}-Prozess korrekt unter dem Unix-Benutzer
-@code{benutzername} laufen. Dennoch hat sich eins nicht ge�ndert: Die
-Inhalte der Berechtigungstabellen. Vorgabem��ig (direkt nach dem
-Laufenlassen des Skripts @code{mysql_install_db}, das die
-Berechtigungstabellen installiert), ist der MySQL-Benutzer @code{root} der
-einzige Benutzer mit Zugriffsrechten auf die @code{mysql}-Datenbank. Er ist
-auch der einzige, der Datenbanken erzeugen und l�schen kann. Wenn Sie diese
-Berechtigungen nicht ge�ndert haben, sind sie noch g�ltig. Das sollte Sie
-nicht davon abhalten, auf MySQL als der MySQL-@code{root}-Benutzer
-zuzugreifen, wenn Sie als ein anderer Unix-Benutzer als @code{root}
-eingeloggt sind. Geben Sie einfach f�r Client-Programme die @code{-u
-root}-Option an.
-
-Beachten Sie, dass der Zugriff auf MySQL als @code{root} (indem Sie
-@code{-u root} auf der Kommandozeile eingeben) @emph{nichts} damit zu tun
-hat, dass Sie MySQL als Unix-@code{root}-Benutzer laufen lassen oder als
-irgend ein anderer Unix-Benutzer. Die Zugriffsberechtigungen und
-Benutzernamen von MySQL sind komplett unterschiedlich von den
-Unix-Benutzernamen. Die einzige Verbindung mit Unix-Benutzernamen besteht
-darin, dass ein Client versuchen wird, sich mit Ihrem Unix-Login-Namen als
-MySQL-Benutzernamen zu verbinden, wenn Sie beim Aufruf eines
-Client-Programms keine @code{-u}-Option angeben.
-
-Wenn Ihre Unix-Box selbst nicht abgesichert ist, sollten Sie zumindest ein
-Passwort f�r den MySQL-@code{root}-Benutzer in den Berechtigungstabellen
-angeben. Ansonsten kann jeder beliebige Benutzer mit einem Konto auf der
-Maschine @code{mysql -u root datenbank} eingeben und tun, was er will.
-
-
-@node File permissions, , Changing MySQL user, Installation Issues
-@c German node Dateirechte
-@appendixsubsec Probleme mit Dateirechten
-
-@cindex Dateien, Rechte
-@cindex Fehlermeldungen, can't find file
-@cindex Dateien, Nachricht not found
-
-Wenn Sie Probleme mit Dateirechten haben, wenn @code{mysql} zum Beispiel
-folgende Fehlermeldung beim Erzeugen einer Tabelle ausgibt:
-
-@example
-Error: Can't find file: 'pfad/mit/dateiname.frm' (Errcode: 13)
-@end example
-
-@tindex UMASK-Umgebungsvariable
-@tindex Umgebungsvariable, UMASK
-Kann es sein, dass die Umgebungsvariable @code{UMASK} falsch gesetzt ist,
-wenn @code{mysqld} startet. Der vorgabem��ige umask-Wert ist @code{0660}.
-Sie k�nnen dieses Verhalten �ndern, indem Sie @code{safe_mysqld} wie folgt
-starten:
-
-@example
-shell> UMASK=384 # = 600 in oktal
-shell> export UMASK
-shell> /pfad/zu/safe_mysqld &
-@end example
-
-@tindex UMASK_DIR-Umgebungsvariable
-@tindex Umgebungsvariable, UMASK_DIR
-Vorgabem��ig erzeugt MySQL Datenbank- und @code{RAID}-Verzeichnisse mit
-dem Berechtigungstyp 0700. Dieses Verhalten k�nnen Sie durch Setzen der
-@code{UMASK_DIR}-Variablen �ndern. Wenn Sie diese setzen, werden neue
-Verzeichnisse mit kombiniertem @code{UMASK} und @code{UMASK_DIR} erzeugt.
-Wenn Sie zum Beispiel Gruppenzugriff auf alle neuen Verzeichnisse geben
-wollen, k�nnen Sie folgendes tun:
-
-@example
-shell> UMASK_DIR=504 # = 770 in oktal
-shell> export UMASK_DIR
-shell> /pfad/zu/safe_mysqld &
-@end example
-
-Ab MySQL-Version 3.23.25 nimmt MySQL an, dass die Werte f�r @code{UMASK}
-und @code{UMASK_DIR} in oktal angegeben sind, wenn sie mit einer 0
-anfangen.
-
-@xref{Environment variables}.
-
-
-@node Administration Issues, Query Issues, Installation Issues, Problems
-@c German node Administrationsprobleme
-@appendixsec Administrationsbezogene Themen
-
-
-
-@menu
-* Crashing::
-* Resetting permissions::
-* Full disk::
-* Temporary files::
-* Problems with mysql.sock::
-* Timezone problems::
-@end menu
-
-@node Crashing, Resetting permissions, Administration Issues, Administration Issues
-@c German node Abst�rze
-@appendixsubsec Was zu tun ist, wenn MySQL andauernd abst�rzt
-
-@cindex Absturz, wiederholter
-
-Alle MySQL-Versionen werden auf vielen Plattformen getestet, bevor sie
-herausgegeben werden. Das hei�t nicht, dass es keinerlei Bugs in MySQL
-gibt, aber es hei�t, dass, wenn es Bugs gibt, diese sehr wenige und schwer
-zu finden sind. Wenn Sie ein Problem haben, ist es immer hilfreich
-herauszufinden, was Ihr System zum Absturz bringt, weil Sie dann viel
-bessere Chancen haben, es schnell zu beheben.
-
-Zun�chst sollten Sie versuchen herauszufinden, ob das Problem darin
-besteht, dass Ihr @code{mysqld}-Daemon stirbt, oder ob Sie ein Problem mit
-Ihrem Client haben. Sie k�nnen herausfinden, seit wann Ihr
-@code{mysqld}-Server hochgefahren ist, indem Sie @code{mysqladmin version}
-ausf�hren. Wenn @code{mysqld} gestorben ist, finden Sie den Grund hierf�r
-wom�glich in der Datei @file{mysql-daten-verzeichnis/`hostname`.err}.
-@xref{Error log}.
-
-Viele Abst�rze von MySQL werden durch besch�digte Index- oder Daten-Dateien
-verursacht. MySQL aktualisiert die Daten auf Platte mit dem @code{write()}
-Systemaufruf, nach jedem SQL-Statement und bevor der Client �ber das
-Ergebnis unterrichtet wird. (Das gilt nicht, wenn Sie mit
-@code{delayed_key_writes} fahren, denn in diesem Fall werden nur die Daten
-geschrieben.) Das bedeutet, dass die Daten sicher sind, selbst wenn
-@code{mysqld} abst�rzt, weil das Betriebssystem sicherstellt, dass die
-nicht von MySQL zur�ckgeschriebenen Daten (flush) auf Platte
-zur�ckgeschrieben werden. Sie k�nnen MySQL zwingen, alles nach jedem
-SQL-Befehl auf Platte zur�ckzusynchronisieren, indem Sie @code{mysqld} mit
-@code{--flush} starten.
-
-Das Gesagte bedeutet, dass Sie normalerweise keine besch�digten Tabellen
-erhalten sollten, ausser in folgenden F�llen:
-
-@itemize @bullet
-@item
-Jemand oder etwas killte @code{mysqld} oder die Maschine mitten w�hrend
-einer Aktualisierung.
-@item
-Sie haben einen Bug in @code{mysqld} gefunden, der dazu f�hrte, dass er
-mitten w�hrend einer Aktualisierung starb.
-@item
-Jemand manipuliert die Daten- / Index-Dateien ausserhalb von
-@strong{mysqld}, ohne die Tabelle korrekt zu sperren.
-@item
-Wenn Sie viele @code{mysqld}-Server auf denselben Daten auf einem System
-laufen lassen, das Dateisystem-Sperren nicht gut unterst�tzt (das wird
-normalerweise vom @code{lockd}-Daemon gehandhabt) oder wenn Sie mehrere
-Server mit @code{--skip-locking} fahren.
-@item
-Wenn Sie eine besch�digte Index- / Daten-Datei haben, die sehr falsche
-Daten enth�lt, die @code{mysqld} durcheinander brachten.
-@item
-Sie haben einen Bug im Datenspeicher-Code gefunden. Das ist nicht sehr
-wahrscheinlich, aber zumindest m�glich. In diesem Fall k�nnen Sie
-versuchen, den Dateityp auf einen anderen Datenbank-Handler umzustellen,
-indem Sie @code{ALTER TABLE} auf eine reparierte Kopie der Tabelle
-anwenden!
-@end itemize
-
-Weil es sehr schwierig ist herauszufinden, warum etwas abst�rzt, versuchen
-Sie zuerst herauszufinden, ob Dinge, die bei anderen funktionieren, bei
-Ihnen abst�rzen, oder ob das nicht der Fall ist. Versuchen Sie bitte
-folgendes:
-
-@itemize @bullet
-@item
-Fahren Sie den @code{mysqld}-Daemon mit @code{mysqladmin shutdown} herunter
-und f�hren Sie @code{myisamchk --silent --force */*.MYI} auf alle Tabellen
-aus. Starten Sie den @code{mysqld}-Daemon erneut. Das stellt sicher, dass
-Sie von einem sauberen Ausgangszustand aus fahren.
-@xref{MySQL Database Administration}.
-
-@item
-Benutzen Sie @code{mysqld --log} und versuchen Sie den Informationen im Log
-zu entnehmen, ob eine bestimmte Anfrage den Server killt oder nicht. Etwa
-95% aller Bugs beziehen sich auf eine bestimmte Anfrage! Normalerweise ist
-das eine der letzten Anfragen in der Log-Datei, direkt bevor MySQL neu
-startete. @xref{Query log}. Wenn Sie MySQL wiederholt mit einer
-der Anfragen killen, selbst wenn Sie alle Tabellen direkt vor der
-Ausf�hrung der Anfrage �berpr�ft haben, haben Sie den Bug eingegrenzt und
-sollten daf�r einen Bug-Bericht schreiben! @xref{Bug reports}.
-
-@item
-Versuchen Sie, einen Testfall herzustellen, den wir zur Reproduzierung des
-Problems verwenden k�nnen. @xref{Reproduceable test case}.
-
-@item
-Versuchen Sie, die beigef�gten mysql-test test und MySQL-Benchmarks laufen
-zu lassen. @xref{MySQL-Test-Suite}. Sie k�nnen MySQL recht gut pr�fen. Sie
-k�nnen den Benchmarks auch selbst Code hinzuf�gen, der Ihre Applikation
-simuliert! Die Benchmarks finden sich im @file{bench}-Verzeichnis in der
-Quelldistribution oder bei einer Bin�rdistribution im
-@file{sql-bench}-Verzeichnis unter Ihrem MySQL-Installationsverzeichnis.
-
-@item
-Probieren Sie @code{fork_test.pl} und @code{fork2_test.pl}.
-
-@item
-Wenn Sie MySQL zum Debuggen konfigurieren, ist es wesentlich einfacher,
-Informationen �ber m�gliche Fehler zu erhalten, wenn etwas schief geht.
-Konfigurieren Sie MySQL mit der @code{--with-debug}-Option oder mit der
-@code{--with-debug=full}-Option f�r @code{configure} neu und kompilieren
-Sie neu. @xref{Debugging server}.
-
-@item
-Wenn MySQL zum Debuggen konfiguriert wird, wird ein sicherer
-Speicher-Zuweiser (Memory Allocator) hinzugef�gt, der einige Fehler finden
-kann. Ausserdem erfolgen etliche Ausgaben �ber das, was gerade geschieht.
-
-@item
-Haben Sie die neuesten Patches f�r Ihr Betriebssystem installiert?
-
-@item
-Benutzen Sie die @code{--skip-locking}-Option f�r @code{mysqld}. Auf
-manchen Systemen arbeitet der @code{lockd}-Sperrmanager nicht korrekt. Die
-@code{--skip-locking}-Option weist @code{mysqld} an, keine externen Sperren
-zu benutzen. (Das hei�t, dass Sie nicht zwei @code{mysqld}-Server auf
-denselben Daten laufen lassen k�nnen und dass Sie vorsichtig sein m�ssen,
-wenn Sie @code{myisamchk} benutzen, aber es kann aufschlussreich sein, die
-Option testweise zu benutzen.)
-
-@item
-Haben Sie @code{mysqladmin -u root processlist} ausprobiert, wenn
-@code{mysqld} zu laufen scheint, aber nicht antwortet? Manchmal ist
-@code{mysqld} nicht komat�s, obwohl es so aussieht. Das Problem kann darin
-bestehen, dass alle Verbindungen in Benutzung sind, oder es kann ein
-internes Sperrproblem vorliegen. @code{mysqladmin processlist} ist
-�blicherweise in der Lage, in solchen F�llen eine Verbindung aufzubauen und
-kann n�tzliche Informationen �ber die momentane Anzahl von Verbindungen und
-ihren Status liefern.
-
-@item
-Lassen Sie den Befehl @code{mysqladmin -i 5 status} oder @code{mysqladmin
--i 5 -r status} in einem separaten Fenster laufen, um statistische
-Informationen auszugeben, w�hrend Sie Ihre anderen Anfragen laufen lassen.
-
-@item
-Versuchen Sie folgendes:
-@enumerate
-@item
-Starten Sie @code{mysqld} von @code{gdb} aus (oder in einem anderen
-Debugger).
-@xref{Using gdb on mysqld}.
-
-@item
-Lassen Sie Ihre Test-Skripts laufen.
-
-@item
-Geben Sie die Ablaufverfolgung (Backtrace) und die lokalen Variablen der
-untersten 3 Ebenen aus. In gdb k�nnen Sie das mit folgenden Befehle tun,
-wenn @code{mysqld} innerhalb von gdb abgest�rzt ist:
-
-@example
-backtrace
-info local
-up
-info local
-up
-info local
-@end example
-
-Mit gdb k�nnen Sie auch untersuchen, welchen Thread es gibt (mit @code{info
-thread} und zu einem speziellen Thread umschalten (mit @code{thread #},
-wobei @code{#} die Thread-Kennung ist).
-@end enumerate
-
-@item
-Versuchen Sie, Ihre Applikation mit einem Perl-Skript zu simulieren, um
-MySQL zu zwingen, abzust�rzen oder fehlerhaftes Verhalten an den Tag zu
-legen.
-
-@item
-Senden Sie einen normalen Bug-Bericht. @xref{Bug reports}. Geben Sie mehr
-Details an als �blich. Weil MySQL bei vielen Leuten funktioniert, kann es
-sein, dass der Absturz das Ergebnis von etwas ist, das nur auf Ihrem
-Computer existiert (beispielsweise ein Fehler, der aus Ihren besonderen
-Systembibliotheken resultiert).
-
-@item
-Wenn Sie ein Problem mit Tabellen haben, die Zeilen dynamischer L�nge
-enthalten, und Sie nicht @code{BLOB/TEXT}-Spalten benutzen (sondern nur
-@code{VARCHAR}-Spalten), k�nnen Sie versuchen, alle @code{VARCHAR}- in
-@code{CHAR}-Spalten umzuwandeln, indem Sie @code{ALTER TABLE} verwenden.
-Das erzwingt, dass MySQL Zeilen fester L�nge verwendet. Zeilen fester L�nge
-ben�tigen etwas mehr Platz, sind aber fehlertoleranter gegen�ber
-Besch�digungen!
-
-Der aktuelle Code mit dynamischen Zeilen ist bei MySQL AB seit mindestens
-drei Jahren ohne jedes Problem in Benutzung, aber naturgem�� sind Zeilen
-dynamischer L�nge fehleranf�lliger. Daher kann es eine gute Idee sein, das
-oben Gesagte auszuprobieren.
-@end itemize
-
-
-@node Resetting permissions, Full disk, Crashing, Administration Issues
-@c German node Berechtigungen zur�cksetzen
-@appendixsubsec Wie ein vergessenes Passwort zur�ckgesetzt wird
-
-@cindex Passw�rter, vergessen
-@cindex Passw�rter, zur�cksetzen
-@cindex Root-Benutzer, Passwort zur�cksetzen
-
-Wenn Sie das @code{root}-Benutzerpasswort f�r MySQL vergessen haben, k�nnen
-Sie es mit folgender Prozedur wiederherstellen:
-
-@enumerate
-@item
-Fahren Sie den @code{mysqld}-Server durch Senden von @code{kill} (nicht
-@code{kill -9}) an den @code{mysqld}-Server herunter. Die Prozess-Kennung
-(PID) wird in einer @code{.pid}-Datei gespeichert, die sich normalerweise
-im MySQL-Datenbank-Verzeichnis befindet:
-
-@example
-kill `cat /mysql-daten-verzeichnis/hostname.pid`
-@end example
-
-Hierf�r m�ssen Sie entweder der Unix-@code{root}-Benutzer sein oder
-derselbe Benutzer, unter dem der Server l�uft.
-
-@item
-Starten Sie @code{mysqld} mit der @code{--skip-grant-tables}-Option neu.
-@item
-Verbinden Sie sich mit dem @code{mysqld}-Server mit @code{mysql -h hostname
-mysql} und �ndern Sie das Passwort mit einem @code{GRANT}-Befehl.
-@xref{GRANT,,@code{GRANT}}. Sie k�nnen dasselbe auch mit @code{mysqladmin
--h hostname -u benutzer password 'neues_passwort'} machen.
-
-@item
-Laden Sie die Berechtigungstabellen neu mit @code{mysqladmin -h hostname
-flush-privileges} oder mit dem SQL-Befehl @code{FLUSH PRIVILEGES}.
-@end enumerate
-
-Beachten Sie, dass nach dem Start von @code{mysqld} mit
-@code{--skip-grant-tables} jede Benutzung von @code{GRANT}-Befehlen zu
-einem @code{Unknown command}-Fehler f�hrt, bis Sie @code{FLUSH PRIVILEGES}
-ausgef�hrt haben.
-
-
-@node Full disk, Temporary files, Resetting permissions, Administration Issues
-@c German node Platte voll
-@appendixsubsec Wie MySQL mit vollen Festplatten umgeht
-
-@cindex volle Festplatte
-@cindex Festplatte voll
-
-@noindent
-Wenn etwas hinsichtlich der Festplatte passiert, tut MySQL folgendes:
-
-@itemize @bullet
-@item
-Er pr�ft einmal pro Minute, um festzustellen, ob es genug Platz gibt, um
-die aktuelle Zeile zu schreiben oder nicht. Wenn genug Platz vorhanden ist,
-wird fortgefahren, als sei nichts geschehen.
-@item
-Alle 6 Minuten schreibt er einen Eintrag in die Log-Datei mit einer Warnung
-wegen voller Festplatte.
-@end itemize
-
-@noindent
-Um das Problem abzumildern, k�nnen Sie folgende Aktionen unternehmen:
-
-@itemize @bullet
-@item
-Um einfach weiterzumachen, m�ssen Sie lediglich genug Festplattenplatz
-freigeben, damit alle Datens�tze eingef�gt werden k�nnen.
-@item
-Um den Thread abzubrechen, m�ssen Sie @code{mysqladmin kill} an den Thread
-senden. Der Thread wird beim n�chsten Mal, wenn er die Festplatte pr�ft (in
-1 Minute) abgebrochen.
-@item
-Beachten Sie, dass eventuell ein anderer Thread auf die Tabelle wartet, die
-den Zustand ``Platte voll'' verursachte. Wenn Sie mehrere ``gesperrte''
-Threads haben, kann es sein, dass Sie einen Thread killen, der wegen
-``Platte voll'' wartet, dass daf�r aber ein anderer Thread weitermacht.
-@end itemize
-
-Ausnahmen zum obigen Verhalten treten bei der Benutzung von @code{REPAIR}
-oder @code{OPTIMIZE} auf, oder wenn die Indexe nach einem @code{LOAD DATA
-INFILE}- oder einem @code{ALTER TABLE}-Statement im Stapel erzeugt werden.
-
-Alle obigen Befehle benutzen eventuell gro�e tempor�re Dateien, die - sich
-selbst �berlassen - f�r den Rest des Systems gro�e Probleme verursachen
-k�nnen. Wenn MySQL ein ``Platte voll'' erh�lt, w�hrend irgend eine der
-obigen Operationen ausgef�hrt wird, entfernt er die gro�en tempor�ren
-Dateien und markiert die Tabelle als besch�digt (ausser bei @code{ALTER
-TABLE}, wobei die alte Tabelle unver�ndert gelassen wird).
-
-
-@node Temporary files, Problems with mysql.sock, Full disk, Administration Issues
-@c German node Tempor�re Dateien
-@appendixsubsec Wohin MySQL tempor�re Dateien speichert
-
-MySQL benutzt den Wert der @code{TMPDIR}-Umgebungsvariablen als Pfadnamen
-des Verzeichnisses, in dem tempor�re Dateien gespeichert werden. Wenn Sie
-@code{TMPDIR} nicht gesetzt haben, benutzt MySQL die System-Vorgabe, die
-normalerweise @file{/tmp} oder @file{/usr/tmp} ist. Wenn das Dateisystem,
-das Ihr Verzeichnis f�r tempor�re Dateien enth�lt, zu klein ist, sollten
-Sie @code{safe_mysqld} editieren, um @code{TMPDIR} so zu setzen, dass sie
-auf ein Verzeichnis in einem Dateisystem zeigt, wo Sie genug Platz haben!
-Sie k�nnen das tempor�re Verzeichnis auch mit der @code{--tmpdir}-Option
-f�r @code{mysqld} setzen.
-
-MySQL erzeugt alle tempor�ren Dateien als versteckte Dateien. Das stellt
-sicher, dass die tempor�ren Dateien entfernt werden, wenn @code{mysqld}
-beendet wird. Der Nachteil versteckter Dateien ist, dass Sie eine gro�e
-tempor�re Datei nicht sehen, die das Dateisystem auff�llt, in dem sich das
-Verzeichnis f�r tempor�re Dateien befindet.
-
-Zum Sortieren (@code{ORDER BY} oder @code{GROUP BY}) benutzt MySQL
-normalerweise ein oder zwei tempor�re Dateien. Der maximal ben�tigte
-Speicherplatz ist:
-
-@example
-(laenge_dessen_was_sortiert_wird + groesse_von(datenbank_zeiger)) *
-anzahl_uebereinstimmender_zeilen * 2
-@end example
-
-@code{groesse_von(datenbank_zeiger)} ist �blicherweise 4, kann in Zukunft
-aber f�r wirklich gro�e Tabellen anwachsen.
-
-Bei einigen @code{SELECT}-Anfragen erzeugt MySQL zus�tzliche tempor�re
-SQL-Tabellen. Diese sind nicht versteckt und haben Namen der Form
-@file{SQL_*}.
-
-@code{ALTER TABLE} erzeugt eine tempor�re Tabelle im selben Verzeichnis, in
-dem sich die Original-Tabelle befindet.
-
-
-@node Problems with mysql.sock, Timezone problems, Temporary files, Administration Issues
-@c German node Probleme mit mysql.sock
-@appendixsubsec Wie Sie die MySQL-Socket-Datei @file{/tmp/mysql.sock} sch�tzen oder �ndern
-
-@cindex @code{mysql.sock}, sch�tzen
-@cindex l�schen, @code{mysql.sock}
-
-Wenn Sie Probleme damit haben, dass jeder beliebige den
-MySQL-Kommunikations-Socket @file{/tmp/mysql.sock} l�schen kann, k�nnen Sie
-unter den meisten Versionen von Unix Ihr @file{/tmp}-Dateisystem sch�tzen,
-indem Sie darauf das @code{sticky} Bit setzen. Loggen Sie sich als
-@code{root} ein und tun Sie folgendes:
-
-@example
-shell> chmod +t /tmp
-@end example
-
-Das sch�tzt Ihr @file{/tmp}-Dateisystem, so dass Dateien nur von ihren
-Besitzern oder dem Superuser (@code{root}) gel�scht werden k�nnen.
-
-Sie k�nnen �berpr�fen, ob das @code{sticky} Bit gesetzt ist, indem Sie
-@code{ls -ld /tmp} ausf�hren. Wenn das letzte Berechtigungsbit @code{t}
-ist, ist das Bit gesetzt.
-
-@cindex Speicherort des Sockets �ndern
-
-Sie k�nnen den Speicherort �ndern, den MySQL benutzt, um die Socket-Datei
-Socket-Datei abzulegen, indem Sie eine der folgenden Prozeduren ausf�hren:
-
-@itemize @bullet
-@item
-Geben Sie den Pfad in einer globalen oder lokalen Optionsdatei an.
-Beispielsweise k�nnen Sie in @code{/etc/my.cnf} eintragen:
-
-@example
-[client]
-socket=pfad-fuer-socket-datei
-
-[mysqld]
-socket=pfad-fuer-socket-datei
-@end example
-@xref{Option files}.
-@item
-Geben Sie den Pfad auf der Kommandozeile f�r @code{safe_mysqld} und die
-meisten Clients mit der @code{--socket=pfad-fuer-socket-datei}-Option an.
-@item
-Geben Sie den Pfad zum Socket in der
-@code{MYSQL_UNIX_PORT}-Umgebungsvariablen an.
-variable.
-@item
-Definieren Sie den Pfad mit der @code{configure}-Option
-@code{--with-unix-socket-path=pfad-fuer-socket-datei}.
-@xref{configure options}.
-@end itemize
-
-Mit folgendem Befehl k�nnen Sie testen, ob der Socket funktioniert:
-
-@example
-shell> mysqladmin --socket=/pfad/zu/socket version
-@end example
-
-@node Timezone problems, , Problems with mysql.sock, Administration Issues
-@c German node Zeitzonen-Probleme
-@appendixsubsec Zeitzonen-Probleme
-
-@cindex Zeitzonen-Probleme
-@cindex Probleme, Zeitzone
-
-@tindex TZ-Umgebungsvariable
-@tindex Umgebungsvariable, TZ
-
-Wenn es Probleme damit gibt, dass @code{SELECT NOW()} Werte in GMT
-(Greenwich Mean Time) zur�ckgibt und nicht in Ihrer lokalen Zeit, m�ssen
-Sie die @code{TZ}-Umgebungsvariable auf Ihre aktuelle Zeitzone setzen. Das
-sollte f�r die Umgebung gemacht werden, in der der Server l�uft, zum
-Beispiel in @code{safe_mysqld} oder @code{mysql.server}.
-@xref{Environment variables}.
-
-
-@node Query Issues, Table Definition Issues, Administration Issues, Problems
-@c German node Anfragenprobleme
-@appendixsec Anfragenbezogene Themen
-
-
-
-@menu
-* Case sensitivity::
-* Using DATE::
-* Problems with NULL::
-* Problems with alias::
-* Deleting from related tables::
-* No matching rows::
-@end menu
-
-@node Case sensitivity, Using DATE, Query Issues, Query Issues
-@c German node Gro�-/Kleinschreibung
-@appendixsubsec Gro�-/Kleinschreibung beim Suchen
-
-@cindex Gro�-/Kleinschreibung, beim Suchen
-@cindex Suchen und Gro�-/Kleinschreibung
-@cindex chinesisch
-@cindex Big5, chinesische Zeichensatz-Kodierung
-
-Vorgabem��ig sind MySQL-Suchen unabh�ngig von der verwendeten
-Gro�-/Kleinschreibung (obwohl es einige Zeichens�tze gibt, die nie
-unabh�ngig von der verwendeten Gro�-/Kleinschreibung sind, wie
-@code{tschechisch}). Wenn Sie daher mit @code{spalten_name LIKE 'a%'}
-suchen, erhalten Sie alle Spaltenwerte, die mit @code{A} oder @code{a}
-anfangen. Wenn Sie die Suche abh�ngig von der verwendeten
-Gro�-/Kleinschreibung machen wollen, verwenden Sie etwas wie
-@code{INSTR(spalten_name, "A")=1}, um ein Pr�fix zu �berpr�fen, oder
-benutzen Sie @code{STRCMP(spalten_name, "A") = 0}, wenn der Spaltenwert
-exakt @code{"A"} sein muss.
-
-Einfache Vergleichsoperationen (@code{>=, >, = , < , <=}, Sortieren und
-Gruppieren) basieren auf dem ``Sortierwert'' jedes Zeichens. Buchstaben mit
-demselben Sortierwert (wie E, e und �) werden als dasselbe Zeichen
-behandelt!
-
-In �lteren MySQL-Versionen wurden @code{LIKE}-Vergleiche mit dem
-Gro�schreibungswert jedes Zeichens durchgef�hrt (E == e, aber E <> �). In
-neueren MySQL-Versionen funktioniert @code{LIKE} genau wie die anderen
-Vergleichsoperatoren.
-
-Wenn Sie wollen, dass eine Spalte immer abh�ngig von der verwendeten
-Gro�-/Kleinschreibung behandelt wird, deklarieren Sie sie als
-@code{BINARY}. @xref{CREATE TABLE, , @code{CREATE TABLE}}.
-
-Wenn Sie chinesische Daten in der so genannten Big5-Kodierung verwenden,
-sollten Sie alle Zeichenspalten @code{BINARY} machen. Das funktioniert,
-weil die Sortierreihenfolge von Big5-Zeichen auf der Reihenfolge von
-ASCII-Codes basiert.
-
-
-@node Using DATE, Problems with NULL, Case sensitivity, Query Issues
-@c German node Benutzung von DATE
-@appendixsubsec Probleme bei der Benutzung von @code{DATE}-Spalten
-
-@findex DATE
-
-@cindex DATE-Spalten, Probleme
-@cindex Probleme, @code{DATE}-Spalten
-
-Das Format eines @code{DATE}-Werts ist @code{'YYYY-MM-DD'}. Gem�� ANSI-SQL
-ist kein anderes Format zul�ssig. Sie sollten dieses Format in
-@code{UPDATE}-Ausdr�cken und in der WHERE-Klausel von
-@code{SELECT}-Statements benutzen. Beispiel:
-
-@example
-mysql> SELECT * FROM tabelle WHERE date >= '1997-05-05';
-@end example
-
-Aus Gr�nden der Annehmlichkeit konvertiert MySQL automatisch ein Datum in
-eine Zahl, wenn das Datum in einem numerischen Zusammenhang benutzt wird
-(und umgekehrt). MySQL unterst�tzt ausserdem ein ``entspanntes''
-Zeichenkettenformat beim Aktualisieren und in einer @code{WHERE}-Klausel,
-die ein Datum mit einer @code{TIMESTAMP}-, @code{DATE}- oder einer
-@code{DATETIME}-Spalte vergleicht. (Entspannt hei�t hierbei, dass jedes
-beliebige Satzzeichen als Trennzeichen zwischen Bestandteilen benutzt
-werden darf. Beispielsweise sind @code{'1998-08-15'} und
-@code{'1998#08#15'} �quivalent.) MySQL kann auch eine Zeichenkette
-umwandeln, die keine Trennzeichen enth�lt (wie @code{'19980815'}),
-vorausgesetzt, dass diese als Datum einen Sinn ergibt.
-
-Das spezielle Datum @code{'0000-00-00'} kann als @code{'0000-00-00'}
-gespeichert und abgerufen werden. Wenn man ein @code{'0000-00-00'}-Datum
-�ber @strong{MyODBC} benutzt, wird es automatisch in @code{NULL}
-umgewandelt (@strong{MyODBC}-Version 2.50.12 und h�her), weil ODBC diese
-Art von Datum nicht handhaben kann.
-
-Weil MySQL die oben genannten Umwandlungen durchf�hrt, funktionieren
-folgende Statements:
-
-@example
-mysql> INSERT INTO tabelle (idate) VALUES (19970505);
-mysql> INSERT INTO tabelle (idate) VALUES ('19970505');
-mysql> INSERT INTO tabelle (idate) VALUES ('97-05-05');
-mysql> INSERT INTO tabelle (idate) VALUES ('1997.05.05');
-mysql> INSERT INTO tabelle (idate) VALUES ('1997 05 05');
-mysql> INSERT INTO tabelle (idate) VALUES ('0000-00-00');
-
-mysql> SELECT idate FROM tabelle WHERE idate >= '1997-05-05';
-mysql> SELECT idate FROM tabelle WHERE idate >= 19970505;
-mysql> SELECT mod(idate,100) FROM tabelle WHERE idate >= 19970505;
-mysql> SELECT idate FROM tabelle WHERE idate >= '19970505';
-@end example
-
-@noindent
-Folgendes jedoch funktioniert nicht:
-
-@example
-mysql> SELECT idate FROM tabelle WHERE STRCMP(idate,'19970505')=0;
-@end example
-
-@code{STRCMP()} ist eine Zeichenkettenfunktion, daher wird @code{idate} in
-eine Zeichenkette umgewandelt und ein Zeichenkettenvergleich durchgef�hrt.
-MySQL wandelt @code{'19970505'} nicht in ein Datum um und f�hrt einen
-Datumsvergleich durch.
-
-Beachten Sie, dass MySQL nicht pr�ft, ob ein Datum korrekt ist oder nicht.
-Wenn Sie ein falsches Datum wie @code{'1998-2-31'} speichern, wird das
-falsche Datum gespeichert. Wenn das Datum in keinen vern�nftigen Wert
-umgewandelt werden kann, wird @code{0} im @code{DATE}-Feld gespeichert. Das
-ist haupts�chlich eine Sache der Geschwindigkeit, und wir sind der Meinung,
-dass es Sache der Applikation und nicht des Servers ist, Datumsangaben zu
-�berpr�fen.
-
-
-@node Problems with NULL, Problems with alias, Using DATE, Query Issues
-@c German node Probleme mit NULL
-@appendixsubsec Probleme mit @code{NULL}-Werten
-
-@cindex @code{NULL}-Werte im Vergleich mit leeren Werten
-
-@tindex NULL
-
-Das Konzept des @code{NULL}-Wert ist eine h�ufige Quelle der Verwirrung f�r
-SQL-Anf�nger. Diese denken h�ufig, @code{NULL} sei dasselbe wie eine leere
-Zeichenkette @code{''}. Das ist nicht der Fall! So sind zum Beispiel
-folgende Statements grundverschieden:
-
-@example
-mysql> INSERT INTO meine_tabelle (Telefon) VALUES (NULL);
-mysql> INSERT INTO meine_tabelle (Telefon) VALUES ("");
-@end example
-
-Beide Statements f�gen einen Wert in die @code{Telefon}-Spalte ein, aber
-das erste f�gt einen @code{NULL}-Wert und das zweite eine leere
-Zeichenkette ein. Die Bedeutung des ersten ist etwa ``Telefonnummer
-unbekannt'' und des zweiten ``Keine Telefonnummer''.
-
-In SQL ist der @code{NULL}-Wert im Vergleich mit jedem anderen Wert immer
-UNWAHR (false), selbst im Vergleich mit @code{NULL}. Ein Ausdruck, der
-@code{NULL} enth�lt, erzeugt immer einen @code{NULL}-Wert, ausser wenn es
-in der Dokumentation der Operatoren und Funktionen, die im Ausdruck
-beteiligt sind, anders angegeben ist. Alle Spalten im folgenden Beispiel
-geben @code{NULL} zur�ck:
-
-@example
-mysql> SELECT NULL,1+NULL,CONCAT('unsichtbar',NULL);
-@end example
-
-Wenn Sie nach Spaltenwerten suchen, die @code{NULL} sind, k�nnen Sie nicht
-@code{=NULL} benutzen. Folgendes Statement gibt keine Zeilen zur�ck, weil
-@code{ausdruck = NULL} f�r jeden beliebigen Ausdruck UNWAHR (false) ist:
-
-@example
-mysql> SELECT * FROM meine_tabelle WHERE Telefon = NULL;
-@end example
-
-Um nach @code{NULL}-Werten zu suchen, m�ssen Sie @code{IS NULL} benutzen.
-Folgende Beispiele zeigen, wie Sie die @code{NULL}-Telefonnummer und die
-leere Telefonnummer finden:
-
-@example
-mysql> SELECT * FROM meine_tabelle WHERE Telefon IS NULL;
-mysql> SELECT * FROM meine_tabelle WHERE Telefon = "";
-@end example
-
-In MySQL k�nnen Sie - wie bei vielen anderen SQL-Servern - keine Spalten
-indexieren, die @code{NULL}-Werte enthalten d�rfen. Sie m�ssen solche
-Spalten aus @code{NOT NULL} deklarieren. Sie d�rfen in eine indexierte
-Spalte keine @code{NULL}-Werte einf�gen.
-
-@findex LOAD DATA INFILE
-Wenn Sie Daten mit @code{LOAD DATA INFILE} einlesen, werden leere Spalten
-mit @code{''} aktualisiert. Wenn Sie einen @code{NULL}-Wert in einer Spalte
-haben wollen, m�ssen Sie in der Textdatei @code{\N} benutzen. Unter manchen
-Umst�nden kann auch das Literalwort @code{'NULL'} benutzt werden.
-@xref{LOAD DATA, , @code{LOAD DATA}}.
-
-Wenn Sie @code{ORDER BY} benutzen, werden @code{NULL}-Werte zuerst
-angezeigt. Wenn Sie mit @code{DESC} in absteigender Reihenfolge sortieren,
-werden @code{NULL}-Werte zuletzt angezeigt. Wenn Sie @code{GROUP BY}
-benutzen, werden alle @code{NULL}-Werte als gleich betrachtet.
-
-Um die Handhabung von @code{NULL} zu erleichtern, k�nnen Sie die @code{IS
-NULL}- und @code{IS NOT NULL}-Operatoren und die @code{IFNULL()}-Funktion
-benutzen.
-
-@cindex @code{TIMESTAMP} und @code{NULL}-Werte
-@cindex @code{AUTO_INCREMENT} und @code{NULL}-Werte
-@cindex @code{NULL}-Werte und @code{TIMESTAMP}-Spalten
-@cindex @code{NULL}-Werte und @code{AUTO_INCREMENT}-Spalten
-Bei manchen Spaltentypen werden @code{NULL}-Werte besonders behandelt. Wenn
-Sie @code{NULL} in die erste @code{TIMESTAMP}-Spalte einer Tabelle
-einf�gen, werden das aktuelle Datum und die aktuelle Zeit eingef�gt. Wenn
-Sie @code{NULL} in eine @code{AUTO_INCREMENT}-Spalte einf�gen, wird die
-n�chste Zahl in der Zahlenfolge eingef�gt.
-
-
-@node Problems with alias, Deleting from related tables, Problems with NULL, Query Issues
-@c German node Probleme mit alias
-@appendixsubsec Probleme mit @code{alias}
-
-@tindex alias
-
-Sie k�nnen ein Alias verwenden, um auf eine Spalte im @code{GROUP BY}-,
-@code{ORDER BY}- oder @code{HAVING}-Teil zu verweisen. Aliase k�nnen auch
-verwendet werden, um Spalten bessere Namen zu geben:
-
-@example
-SELECT SQRT(a*b) as wurzel FROM tabelle GROUP BY wurzel HAVING wurzel > 0;
-SELECT id,COUNT(*) AS zaehl FROM tabelle GROUP BY id HAVING zaehl > 0;
-SELECT id AS "kunden-kennung" FROM tabelle;
-@end example
-
-Beachten Sie, dass ANSI-SQL verbietet, in einer @code{WHERE}-Klausel auf
-ein Alias zu verweisen. Das liegt daran, dass der Spaltenwert
-m�glicherweise noch nicht feststeht, wenn der @code{WHERE}-Code ausgef�hrt
-wird. Folgende Anfrage zum Beispiel ist @strong{unzul�ssig}:
-
-@example
-SELECT id,COUNT(*) AS zaehl FROM tabelle WHERE zaehl > 0 GROUP BY id;
-@end example
-
-Das @code{WHERE}-Statement wird ausgef�hrt, um festzulegen, welche Zeilen
-im @code{GROUP BY}-Teil enthalten sein sollen, w�hrend @code{HAVING}
-benutzt wird, um zu entscheiden, welche Zeilen der Ergebnismenge benutzt
-werden sollten.
-
-
-@node Deleting from related tables, No matching rows, Problems with alias, Query Issues
-@c German node L�schen aus verwandten Tabellen
-@appendixsubsec Zeilen aus verwandten Tabellen l�schen
-
-@cindex l�schen, Zeilen
-@cindex Zeilen, l�schen
-@cindex Tabellen, Zeilen l�schen
-
-Weil MySQL keine Sub-Selects oder die Benutzung von mehr als einer Tabelle
-im @code{DELETE}-Statement unterst�tzt, m�ssen Sie folgenden Ansatz w�hlen,
-um Zeilen aus zwei verwandten Tabellen zu l�schen:
-
-@enumerate
-@item
-W�hlen (@code{SELECT}) Sie die Zeilen auf der Grundlage einer
-@code{WHERE}-Bedingung in der Haupt-Tabelle aus.
-@item
-L�schen (@code{DELETE}) Sie die Zeilen in der Haupt-Tabelle auf der
-Grundlage derselben Bedingung.
-@item
-L�schen Sie die Zeilen aus der verwandten Tabelle, bei denen die verwandte
-Spalte in den ausgew�hlten Zeilen vorkommt (@code{DELETE FROM
-verwandte_tabelle WHERE verwandte_spalte IN (ausgewaehlte_zeilen)}.
-@end enumerate
-
-Wenn die Gesamtzahl von Zeichen in der Anfrage mit @code{verwandte_spalte}
-mehr als 1.048.576 betr�gt (der Vorgabewert von @code{max_allowed_packet},
-sollten Sie sie in kleinere Teile aufspalten und mehrfache
-@code{DELETE}-Statements ausf�hren. Wahrscheinlich geht das L�schen
-(@code{DELETE}) am Schnellsten, wenn Sie nur 100 bis 1000
-@code{verwandte_spalte}-Kennungen pro Anfrage l�schen, wenn
-@code{verwandte_spalte} ein Index ist. Wenn @code{verwandte_spalte} kein
-Index ist, ist die Geschwindigkeit unabh�ngig von der Anzahl von Argumenten
-in der @code{IN}-Klausel.
-
-
-@node No matching rows, , Deleting from related tables, Query Issues
-@c German node Keine �bereinstimmenden Zeilen
-@appendixsubsec Probleme bei keinen �bereinstimmenden Zeilen l�sen
-
-@cindex keine �bereinstimmenden Zeilen
-@cindex Zeilen, �bereinstimmungsprobleme
-
-Wenn Sie eine komplizierte Anfrage haben, die viele Tabellen hat und keine
-Zeilen zur�ckgibt, sollten Sie folgende Prozedur benutzen, um
-herauszufinden, was bei Ihrer Anfrage falsch ist:
-
-@enumerate
-@item
-Testen Sie die Anfrage mit @code{EXPLAIN} und pr�fen Sie, ob Sie etwas
-finden k�nnen, das offensichtlich falsch ist. @xref{EXPLAIN, ,
-@code{EXPLAIN}}.
-
-@item
-W�hlen Sie in der @code{WHERE}-Klausel nur die Felder aus, die benutzt
-werden.
-
-@item
-Entfernen Sie nacheinander Tabelle f�r Tabelle aus der Anfrage, bis sie
-Zeilen zur�ckgibt. Wenn die Tabellen Gro� sind, ist es eine gute Idee,
-@code{LIMIT 10} bei der Anfrage zu benutzen.
-
-@item
-Machen Sie ein @code{SELECT} f�r die Spalte, die mit einer Zeile h�tte
-�bereinstimmen sollen, gegen die Tabelle, die als letzte aus der Anfrage
-entfernt wurde.
-
-@item
-Wenn Sie @code{FLOAT}- oder @code{DOUBLE}-Spalten mit Zahlen vergleichen,
-die Dezimalstellen haben, k�nnen Sie nicht @code{=} benutzen! Das Problem
-tritt in den meisten Computersprachen auf, weil Flie�kommawerte keine
-exakten Werte sind:
-
-@example
-mysql> SELECT * FROM tabelle WHERE float_spalte=3.5;
-mysql> SELECT * FROM tabelle WHERE float_spalte between 3.45 und 3.55;
-@end example
-
-In den meisten F�llen kann dies durch Umwandlung von @code{FLOAT} in
-@code{DOUBLE} behoben werden!
-
-@item
-Wenn Sie immer noch nicht herausfinden k�nnen, was schief geht, erzeugen
-Sie einen minimalen Test, der mit @code{mysql test < anfrage.sql} laufen
-gelassen werden kann, um Ihre Probleme aufzuzeigen. Sie k�nnen eine
-Testdatei mit @code{mysqldump --quick datenbanktabellen > anfrage.sql}
-erzeugen. �ffnen Sie die Datei in einem Editor, entfernen Sie ein paar
-Einf�gezeilen (wenn es davon zu viele gibt) und f�gen Sie Ihr
-SELECT--Statement am Ende der Datei an.
-
-Testen Sie, ob es hiermit immer noch das Problem gibt:
-
-@example
-shell> mysqladmin create test2
-shell> mysql test2 < anfrage.sql
-@end example
-
-Schicken Sie die Testdatei mittels @code{mysqlbug} an
-@email{mysql@@lists.mysql.com}.
-@end enumerate
-
-
-@node Table Definition Issues, , Query Issues, Problems
-@c German node Tabellendefinitionsprobleme
-@appendixsec Tabellendefinitionsbezogene Themen
-
-
-
-@menu
-* ALTER TABLE problems::
-* Change column order::
-* Temporary table problems::
-@end menu
-
-@node ALTER TABLE problems, Change column order, Table Definition Issues, Table Definition Issues
-@c German node Probleme mit ALTER TABLE
-@appendixsubsec Probleme mit @code{ALTER TABLE}.
-
-@tindex ALTER TABLE
-
-@code{ALTER TABLE} �ndert eine Tabelle zum aktuellen Zeichensatz. Wenn Sie
-w�hrend @code{ALTER TABLE} einen Fehler wegen doppelter Schl�sseleintr�ge
-bekommen, liegt das entweder daran, dass die neuen Zeichens�tze auf bei
-Schl�sseln auf dieselben Werte gemappt sind, oder dass die Tabelle
-besch�digt ist, wobei Sie @code{REPAIR TABLE} auf die Tabelle laufen lassen
-sollten.
-
-Wenn @code{ALTER TABLE} mit einem Fehler wie folgt stirbt:
-
-@example
-Error on rename of './datenbank/name.frm' to './datenbank/B-a.frm' (Errcode: 17)
-@end example
-
-Kann das Problem darin bestehen, dass MySQL bei einem vorhergehenden
-@code{ALTER TABLE} abgest�rzt ist und es eine alte Tabelle namens
-@file{A-etwas} oder @file{B-etwas} gibt, die herum liegt. Gehen Sie in
-diesem Fall ins MySQL-Daten-Verzeichnis und l�schen Sie alle Dateien, die
-Namen wie @code{A-} oder @code{B-} haben. (Statt l�schen k�nnen Sie sie
-auch an eine andere Stelle verschieben.)
-
-@code{ALTER TABLE} funktioniert auf folgenden Weise:
-
-@itemize @bullet
-@item Erzeugt eine neue Tabellen namens @file{A-xxx} mit den angeforderten
-�nderungen.
-@item Alle Zeilen der alten Tabelle werden nach @file{A-xxx} kopiert.
-@item Die alte Tabelle wird in @file{B-xxx} umbenannt.
-@item @file{A-xxx} wird in Ihren alten Tabellennamen umbenannt.
-@item @file{B-xxx} wird gel�scht.
-@end itemize
-
-Wenn etwas bei dieser Umbennungsoperation fehlschl�gt, versucht MySQL, die
-�nderungen r�ckg�ngig zu machen. Wenn etwas Schwerwiegendes schief geht
-(was nat�rlich passieren kann), l��t MySQL eventuell die alte Tabelle als
-@file{B-xxx}, aber ein einfaches Umbenennen auf Systemebene sollte Ihre
-Daten zur�ckbringen.
-
-
-@node Change column order, Temporary table problems, ALTER TABLE problems, Table Definition Issues
-@c German node �nderung der Spalten-Reihenfolge
-@appendixsubsec Wie man die Reihenfolge der Spalten in einer Tabelle �ndert
-
-@cindex neu sortieren, Spalten
-@cindex Spalten, �ndern
-@cindex �ndern, Spalten-Reihenfolge
-@cindex Tabellen, Spalten-Reihenfolge �ndern
-
-Im gro�en und Ganzen geht es bei SQL darum, die Applikation vom
-Daten-Speicherformat zu abstrahieren. Sie sollten immer die Reihenfolge
-angeben, in der Sie Ihre Daten abrufen wollen. Beispiel:
-
-@example
-SELECT spalten_name1, spalten_name2, spalten_name3 FROM tabelle;
-@end example
-
-Das gibt die Spalten in der Reihenfolge @code{spalten_name1},
-@code{spalten_name2}, @code{spalten_name3} zur�ck, wohingegen:
-
-@example
-SELECT spalten_name1, spalten_name3, spalten_name2 FROM tabelle;
-@end example
-
-die Spalten in der Reihenfolge @code{spalten_name1}, @code{spalten_name3},
-@code{spalten_name2} zur�ckgibt.
-
-Sie sollten in einer Applikation @strong{NIE} @code{SELECT *} benutzen und
-die Spalten basierend auf ihrer Position abrufen, weil die Reihenfolge, in
-der Spalten zur�ckgegeben werden, im Zeitablauf @strong{NICHT} garantiert
-werden kann. Eine einfache �nderung in Ihrer Datenbank kann dazu f�hren,
-dass Ihre Applikation dramatisch scheitert.
-
-Wenn Sie dennoch die Spalten-Reihenfolge �ndern wollen, k�nnen Sie das wie
-folgt tun:
-
-@enumerate
-@item
-Erzeugen Sie eine neue Tabelle mit den Spalten in der richtigen
-Reihenfolge.
-@item
-F�hren Sie @code{INSERT INTO neue_tabelle SELECT
-felder-in-der-reihenfolge-von-neue_tabelle FROM alte_tabelle} aus.
-@item
-L�schen Sie @code{alte_tabelle} oder benennen Sie sie um.
-@item
-F�hren Sie @code{ALTER TABLE neue_tabelle RENAME alte_tabelle} aus.
-@end enumerate
-
-
-@node Temporary table problems, , Change column order, Table Definition Issues
-@c German node Probleme mit tempor�ren Tabellen
-@appendixsubsec TEMPORARY TABLE-Probleme
-
-@cindex tempor�re Tabellen, Probleme
-
-Im Folgenden eine Auflistung der Beschr�nkungen bei @code{TEMPORARY TABLES}.
-
-@itemize @bullet
-@item
-Eine tempor�re Tabelle kann nur vom Typ @code{HEAP}, @code{ISAM} oder
-@code{MyISAM} sein.
-@item
-Sie k�nnen tempor�re Tabellen nicht mehr als einmal in derselben Anfrage
-benutzen. Folgendes zum Beispiel funktioniert nicht:
-
-@example
-select * from temporary_table, temporary_table as t2;
-@end example
-
-Das soll in Version 4.0 behoben werden.
-@item
-Sie k�nnen kein @code{RENAME} auf eine @code{TEMPORARY}-Tabelle benutzen.
-Beachten Sie, dass @code{ALTER TABLE alter_name RENAME neuer_name} dagegen
-funktioniert!
-Das soll in Version 4.0 behoben werden.
-@end itemize
-
-
-
-@c German FIX this appendix should be removed (as was done from English ver.)
-@node Benutzer, MySQL-Benutzung durch Kunden, Problems, Top
-@c German node <no English equivalent>
-@appendix Einige MySQL-Benutzer
-
-@cindex Benutzer, von MySQL
-@cindex News-Sites
-
-Dieser Anhang listet einige Benutzer von MySQL auf, die uns ihre
-Genehmigung erteilt haben, sie in dieser Dokumentation aufzuf�hren. Diese
-Liste ist bei weitem nicht vollst�ndig, sollte aber eine allgemeine
-Vorstellung davon geben, wer MySQL benutzt und wof�r es benutzt werden
-kann.
-
-
-@appendixsec Allgemeine News-Sites
-
-@itemize @bullet
-
-@item @uref{http://www.yahoo.com/, Yahoo!}
-
-@item @uref{http://slashdot.org/, Slashdot: Eine Pro-Linux- / Tech-News- und Kommentar-/Diskussions-Site}
-
-@item @uref{http://www.linux.com/, Alles �ber Linux}
-
-@item @uref{http://www.linuxtoday.com/, Linuxtoday}
-
-@item @uref{http://www.32bitsonline.com/, 32Bits Online: weil es mehr als eine Art zu computern gibt}
-
-@item @uref{http://www.freshmeat.net/, Freshmeat: Neues �ber neue Versionen und computerbezogene Themen}
-
-@end itemize
-
-@cindex Suchmaschinen, web
-@cindex Web-Suchmaschinen
-@appendixsec Einige Web-Suchmaschinen
-
-@itemize @bullet
-
-@item @uref{http://www.aaa.com.au, AAA Matilda Web Search}
-
-@item @uref{http://www.whatsnu.com/, What's New}
-
-@item @uref{http://www.aladin.de/, Aladin}
-
-@item @uref{http://www.columbus-finder.de/, Columbus Finder}
-
-@item @uref{http://www.spider.de/, Spider}
-
-@item @uref{http://www.blitzsuche.de/, Blitzsuche}
-
-@item @uref{http://www.indoseek.co.id, Indoseek Indonesien}
-
-@item @uref{http://www.yaboo.dk/, Yaboo - Yet Another BOOkmarker}
-
-
-@item @uref{http://www.ozsearch.com.au, OzSearch Internet Guide}
-
-@item @uref{http://www.splatsearch.com/, Splat! Search}
-
-@item @uref{http://osdls.library.arizona.edu/, The Open Source Digital Library System Project}
-@end itemize
-
-@appendixsec Einige Informations-Suchmaschinen mit Konzentration auf bestimmte Felder
-
-@itemize @bullet
-
-@item @uref{http://www.spylog.ru/, SpyLOG ; Eine sehr popul�re Web-Counter-Site}
-
-@item @uref{http://www.tucows.com/, TuCows Network; Archiv f�r Freie Software}
-
-@item @uref{http://www.jobvertise.com,Jobvertise: Angebot und Nachfrage nach Jobs}
-
-@item @uref{http://www.musicdatabase.com, die Musik-Datenbank}
-
-@item @uref{http://www.soccersearch.com, Fussball-Suchseite}
-
-@item @uref{http://www.headrush.net/takedown, TAKEDOWN - Ringen}
-
-@item @uref{http://www.lyrics.net, das internationale Liedtext-Netzwerk}
-
-@c German FIX removed comma (",") to make description work inside uref
-@item @uref{http://TheMatrix.com/~matrix/bund_search.phtml, Musiker die andere Musiker suchen (kostenloser Service)}
-
-@item @uref{http://www.addall.com/AddBooks/Stores.html,AddALL B�chersuche und Preisvergleich}
-
-@item @uref{http://www.herbaria.harvard.edu/Data/Gray/gray.html,Harvard's Gray Herbarium Index von Pflanzennamen}
-
-@item @uref{http://www.game-Entwickler.com/, die Spiele-Entwicklungs-Suchmaschine}
-
-@item @uref{www.theinnkeeper.com, der Innkeeper Reisef�hrer}
-
-@item @uref{http://www.macgamedatabase.com/, die Mac-Game-Datenbank benutzt PHP und MySQL}
-@c Von: Marc Antony Vose <suzerain@suzerain.com>
-
-@item @uref{http://www.csse.monash.edu.au/publications/, Research
-Ver�ffentlichungen an der Monash University in Australien}
-
-@item @uref{http://www.ipielle.emr.it/bts/index.html,
-Berufsbezogene Gesundheits- und Sicherheits-Website-Datenbank (ein Projekt f�r die ECC)}
-@c c.presutti@ipielle.emr.it
-
-@c German FIX removed comma (",") to make description work inside uref
-@item @uref{http://data.mch.mcgill.ca/, Bioinformatik-Datenbanken am
-Montreal-Kinderkrankenhaus die MySQL benutzen}
-@c saeed@www.debelle.mcgill.ca
-@end itemize
-
-@cindex Online-Magazine
-@cindex magazines, online
-@appendixsec Online-Magazine
-
-@itemize @bullet
-@item @uref{http://www.spoiler.com, Spoiler Webzine}.
-Ein Online-Magazin f�r Musik, Literatur, Kunst und Design.
-@item @uref{http://www.linux-magazin.de/newsflash/, T�gliche Nachrichten �ber Linux in deutscher Sprache}
-@item @uref{http://www.betazine.com,Betazine - Das ultimate Online-Betatester-Magazin}
-@item @uref{http://www.currents.net/ccinfo/aboutcc.html,Computer Currents Magazine}
-@end itemize
-
-@cindex Websites
-@appendixsec Websites die MySQL als Backend benutzen
-
-@itemize @bullet
-
-@item @uref{http://liftoff.msfc.nasa.gov, NASA}
-@item @uref{http://kids.msfc.nasa.gov, NASA KIDS}
-@item @uref{http://science.nasa.gov, Science@@NASA}
-
-@item @uref{http://www.handy.de/, handy.de}
-
-@item @uref{http://lindev.jmc.tju.edu/qwor, Qt Widget and Object Repository}
-
-@item @uref{http://www.samba-choro.com.br, Brasilianische Samba-Site (auf portugiesisch)}
-
-@item @uref{http://pgss.iss.uw.edu.pl/en_index.ISS, polnische allgemeine Sozial-Umschau}
-
-@item @uref{http://www.expo2000.com, Expo2000} Weltweiter Verkauf von
-Ticket f�r diese Veranstaltung wurde mit MySQL und tcl/tk implementiert.
-Mehr als 5.000 Reiseagenturen in der ganzen Welt hatten Zugriff darauf.
-
-@item @uref{http://www.freevote.com/, FreeVote.com ist ein kostenloser
-Abstimmungsservice mit Millionen Benutzern.}
-
-@item @uref{http://f1.tauzero.se, Forza Motorsport}
-
-@item @uref{http://www.dreamhost.com/, DreamHost Web-Hosting}
-
-@end itemize
-
-@cindex services
-@appendixsec Einige Domain- / Internet- / Web- und verwandte Services
-
-@itemize @bullet
-
-@c German FIX removed comma (",") to make description work inside uref
-@item @uref{http://www.wix.com/mysql-hosting, Registrar von Webprovidern
-die MySQL unterst�tzen}
-
-@item @uref{http://www.yi.org/, dynamische DNS-Services}
-
-@item @uref{http://www.dynodns.net/, dynamischer Domain-Name-Service}
-
-@item @uref{http://www.ods.org/, Open DNS Project; kostenloser dynamischer DNS-Service}
-
-@c @item @uref{http://dynodns.net, kostenlose dynamische DNS-Implementation}
-@c EMAIL: A Moore <amoore@mooreSysteme.com>
-
-@item @uref{http://www.hn.org/, Hammernode; �ffentliche DNS-Server}
-
-@item @uref{http://www.fdns.net/, kostenlose 3rd-Level-Domains}
-
-@item @uref{http://worldcommunity.com/, Online-Datenbank}
-
-@item @uref{http://www.bigbiz.com, BigBiz Internet-Services}
-
-@item @uref{http://virt.circle.net, The Virt Gazette}
-
-@item @uref{http://www.california.com, Global InfoNet Inc}
-
-@item @uref{http://www.webhosters.com, WebHosters - ein F�hrer f�r WWW-Provider}
-
-@item @uref{http://online.dn.ru, Internet-Informations-Server}
-
-@item @uref{http://www.stopbit.com, eine Technologie-News-Site}
-
-@item @uref{http://www.worldnetla.net, WorldNet Communications - ein Internet Service Provider}
-
-@item @uref{http://www.netizen.com.au/, Netizen: Web-Beratung in Australien}
-
-@item @uref{http://www.trainingpages.co.uk, Suchseite f�r Trainingskurse in Gro�britannien}
-
-@item @uref{http://chat.nitco.com, Gannon Chat (GPL). Geschrieben in Perl und JavaScript}
-
-@item @uref{http://www.addurls.com/, ein allgemeines Links-Verzeichnis}
-
-@item @uref{http://www.bookmarktracker.com, ein Web-basierender Bookmark-Verwaltungs-Service}
-
-@item @uref{http://www.cdrom.com,Walnut Creek CDROM}
-
-@item @uref{http://www.wwwThread.org/, WWWThread; interaktive Diskussionsforen}
-
-@item @uref{http://pvmon.portici.enea.it/Meteo, auf italienisch; Datenspeicherung von meteo station}
-
-@item @uref{http://www.buysell.net/, Online-"Person To Person"-Auktion}
-
-@item @uref{http://tips.pair.com, Tipps zur Web-Entwicklung}
-
-@c German FIX removed comma (",") to make description work inside uref
-@item @uref{http://www.mailfriends.com, Mailfriends.com ist ein kostenloser Service f�r jeden der �ber das Internet einen Freund finden will.}
-
-@item @uref{http://www.uninova.com/cgi-bin/wctelnets?list, Website Telnet BBS List}
-
-@item @uref{http://www.uninova.com/cnc.html, UniNova Digitale Postkarten}
-
-@c @item @uref{http://cabinboy.powersurfr.com, eine Internet-RFC-Suchmaschine}
-
-@item @uref{http://www.dslreports.com, DSL-Provider-Suche mit Testberichten}.
-Mit MySQL und Modperl hergestellt. Alle Seiten werden dynamisch aus einer
-MySQL-Datenbank erzeugt.
-@end itemize
-
-@cindex PHP, Websites
-@appendixsec Websites, die @code{PHP} und MySQL benutzen
-
-@itemize @bullet
-@c @item @uref{http://www.wh200th.com, Site zum 200. Jahrestag des Wei�en Hauses}
-
-@item @uref{http://support.jgaa.com/, Jgaa's Internet - Offizielle Support-Site}
-
-@item @uref{http://io.incluso.com, Ionline - online publication:} MySQL, PHP, Java, Web-Programmierung, DB-Entwicklung
-
-@item @uref{http://www.baboo.com, BaBoo(Browse und bookmark). Kostenloser Web-basierender Bookmarkmanager und Kalender}
-
-@item @uref{http://www.courses.pjc.cc.fl.us/Schedule/index.php, Kursplanungssystem am Pensacola Junior College}
-
-@item @uref{http://www.fccj.org, Florida Community College in Jacksonville}
-
-@item @uref{http://www.32bit.com/, 32bit.com; Ein umfangreiches Shareware- / Freeware-Archiv}
-
-@item @uref{http://www.jokes2000.com/, Jokes 2000}
-@c Added 990604; EMAIL: ah@dybdahl.dk
-
-
-@item @uref{http://www.burken.nu/ , Burken.NU} Burken ist ein Webhotel, das Skripte unter anderem f�r entfernte Benutzer zur Verf�gung stellt, beispielsweise Counter, G�steb�cher usw.
-@c Added 990608; EMAIL: spacedmp@SpaceDump.Burken.NU (Anders Olausson)
-
-@item @uref{http://tips.pair.com, tips.pair.com} Enth�lt Tipps zu HTML, JavaScript, 2D-/3D-Grafiken und PHP3/MySQL. Alle Seiten werden aus einer Datenbank erzeugt.
-@c Added 990614; EMAIL: downey@image.dk (Rune Madsen)
-
-@item @uref{http://www.Softwarezrus.com/, Softwarezrus.com} E-Commerce-Site, die Computer verkauft.
-@end itemize
-
-@cindex Berater, Auflistung
-@appendixsec Einige MySQL-Berater
-
-@itemize @bullet
-
-@item @uref{http://iConnect.de, iConnect GmbH Berlin}
-
-@item @uref{http://www.ayni.com, Ayni AG}
-
-@item @uref{http://worldcommunity.com/, Online-Datenbank}
-
-@item @uref{http://www2.dataguard.no/,DataGuard (mit MySQL und PHP)}
-
-@item @uref{http://wwits.net/programs/mysql.phtml, WWITS (mit MySQL und PHP)}
-
-@item @uref{http://www.worldcommunity.com/, WCN - The World Community Network}
-
-@item @uref{http://www.chipcastle.com, Chip Castle Dot Com Inc}
-@c Added 990603 EMAIL: chip@chipcastle.com (Chip Castle)
-
-@item @uref{http://www.cyber.com.au/, Cybersource Pty. Ltd}
-
-@item @uref{http://www.spring.de, Spring infotainment GmbH & Co. KG}
-@c added 990905 "Oliver Pischke" <opischke@spring.de>
-
-@item @uref{http://www.wamdesign.com/, Entwickelt Websites mit MySQL}
-@c Added 990905; max@wamdesign.com
-
-@item @uref{http://www.berkeleyconsultants.com, Berkeley-Berater-Gruppe}
-
-@item @uref{http://www.jammconsulting.com/, JAMM Consulting Inc.}
-
-@end itemize
-
-@appendixsec Programmierung
-
-@cindex Websites, verschiedene
-@appendixsec Nicht kategorisierte Seiten
-
-@itemize @bullet
-
-@item @uref{http://www.feature-showcase.com/htmls/demo_mysql.sql, AZC.COM's Feature Showcase}
-
-@item @uref{http://www.teach.org.uk/subjects/trainingcourse/g.html, Kurssuche}
-
-@item @uref{http://www.northerbys.com, Northerbys Online-Auktionen}
-
-@item @uref{http://www.schiphol.nl/flights/home.htm, Amsterdamer Flughafen Schiphol}
-
-@item @uref{http://TheMatrix.com/seventhsin/query.phtml, CD-Datenbank}
-
-@item @uref{http://TheMatrix.com/~flmm/GEAR.html, Datenbank gebrauchter Audio-Ger�te}
-
-@item @uref{http://www.kiss.de/musik-mueller, Notenbl�tter}
-
-@item @uref{http://www.bagism.com, Bagism - Eine John-Lennon-Fanseite}
-
-@item @uref{http://www.selftaught.com/, US-Folkart-Broker}
-
-@item @uref{http://organizer.net/, Mail lesen auf dem Web}
-
-@item @uref{http://www.mypage.org/, Kostenlose Homepages auf www.somecoolname.mypage.org}
-
-@item @uref{http://www.schulweb.de/, Der Server f�r Schulen im Web (auf deutsch)}
-
-@item @uref{http://www.ald.net/, Auldhaefen Online-Services}
-
-@item @uref{http://www.cary.net/, CaryNET Information Center}
-
-@item @uref{http://www.Dataden.com/, Dataden Computer Systems}
-
-@item @uref{http://undree.grm.se/ undr@'emuseet (auf schwedisch)}
-
-@item @uref{http://www.him.net/, HOMESITE Internet Marketing}
-
-@item @uref{http://www.jade-v.com/techinfo.html, Jade-V Network Services }
-
-@item @uref{http://ww2010.atmos.uiuc.edu/(Gl)/abt/aknw/tech.rxml, Weather World 2010 Technical Credits} @*
-
-@item @uref{http://gimp.foebud.org/registry/doc/, �ber die Gimp-Plugin-Registrierung}
-
-@c German FIX removed comma (",") to make description work inside uref
-@item @uref{http://www.fast-inc.com/produkte/Archiver/database.html, Java-Werkzeug Archiver technical detail (leicht optimistisch was die MySQL-ANSI-92-Kompatibilit�t betrifft)}
-
-@item @uref{http://www.gamesdomain.com/cheats/usrcheat.phtml, Games Domain Cheats Datenbank}
-
-@item @uref{http://www.kcilink.com/poweredby/, The "Powered By" Page (Kcilink)}
-
-@item @uref{http://www.netcasting.net/index.whtml, Netcasting}
-
-@item @uref{http://homepages.tig.com.au/~mjj/nblTipps, NBL (Australian National Basketball League) tipping}
-
-@item @uref{http://www.cgishop.com/, CGI-Shop}
-
-@item @uref{http://www.whirlycott.com/, Whirlycott: Website-Design}
-
-@item @uref{http://www.mtp.dk, Museum Tusculanum Press}
-
-@item @uref{http://csdgi.historie.ku.dk/biblio, Centro Siciliano di Documentazione}
-
-@item @uref{http://caribou.dyn.ml.org:8000, Quake-Statistik-Datenbank}
-
-@item @uref{http://www.astroforum.ch, Astroforum: Astrologie und verwandte Dinge (auf deutsch)}
-
-@item @uref{http://www.opendebate.com, OpenDebate - Interaktive Umfragen & Offene Diskussionen}
-
-@item @uref{http://vermeer.organik.uni-erlangen.de/dissertationen/, Online-Server f�r Dissertationen im Bereich Chemie}
-
-@item @uref{http://www.freschinfo.com, FreSch! The Free Scholarship Search Service}
-
-@item @uref{http://www.nada.kth.se/~staffanu/pinball, Stockholmer Flipper-Finder}
-
-@item @uref{http://www.hek.com, HEK - eine Baufirma}
-
-@item @uref{http://www.nbi.nl, Elsevier Business Information}
-
-@item @uref{http://vaccination.medicallink.se/, Medizinische Links (mit ColdFusion und MySQL)}
-
-@item @uref{http://www.joblink-usa.com, Suche nach Jobs & Leuten auf JobLink-USA}
-
-@item @uref{http://www.skydive.net/competfs, Competition Formation Skydiving}
-
-@item @uref{http://www.galaxy-net.net/Galaxy-NET Telecommunikation, E-Commerce und interne Buchhaltung}
-
-@item @uref{http://www.borsen.dk/, D�nemarks f�hrende Wirtschaftszeitung B@o{}rsen}
-
-@item @uref{http://tmmm.simplenet.com/indb/, Die Internet-NES-Datenbank}
-
-@item @uref{http://www.russia.cz, Reiseb�ro in Prag in 3 Sprachen}
-
-@item @uref{http://www.linkstation.de, Linkstation}
-
-@item @uref{http://www.peoplestaff.com, Durchsuchbare Online-Datenbank bei Peoplestaff}
-
-@item @uref{http://www.dreamhorse.com, Durchsuchbares Datenbank-System f�r Pferde-bezogene Werbung}
-
-@item @uref{http://pootpoot.com/,The Poot site}
-
-@item @uref{http://grateful.net/hw_html/,"Playin' in the LAN"; Netzwerk-Monitoring-Suite}
-
-@c Update von Christopher Milton <cmilton@bwn.net> 1999-12-21
-@item @uref{http://www.usapa.army.mil,U.S. Army Publishing Agency}
-
-@item @uref{http://www.nekretnine.co.yu/,Makler in Jugoslawien}
-
-@item @uref{http://demo.cpsoft.com/pims/devFAQ.html, PIMS; Patienten-Informations-Management-System}
-
-@item @uref{http://cpsoft.com,Pilkington Software Inc}
-
-@item @uref{http://www.no-quarter.org/, Memorial f�r Vietnam-Veteranen (The Wall) - Datenbank}
-
-@item @uref{http://www.gamers-union.com/,Gamer's Union ist auf Auktionen f�r gebrauchtes und nicht mehr gedrucktes Spiele-Material spezialisiert}
-
-@item @uref{http://www.montereyhigh.com/office/dbul.php3, Ein t�gliches Bulletin an der Monterey-Highschool}
-
-@item @uref{http://www.myEastside.com,Website der Gemeinde Lake
-Washington's Eastside f�r Einwohner und Unternehmen}
-
-@item @uref{http://bowling-france.net/, Franz�sische Bowling-Site}
-@end itemize
-
-Schicken Sie Erg�nzungen dieser Liste an @email{webmaster@@mysql.com}.
-
-@page
-
-
-
-
-@node MySQL-Benutzung durch Kunden, Contrib, Benutzer, Top
-@c German node <no English equivalent>
-@appendix MySQL-Benutzung durch Kunden
-
-@cindex MySQL-Benutzung
-
-Der Abschnitt 'Einige MySQL-Benutzer' enth�lt viele verschiedene Links zu
-MySQL-Benutzern, aber wenig Informationen dar�ber, wie diese MySQL
-benutzen. @xref{Benutzer}. Dieser Handbuch-Abschnitt soll Ihnen Anregungen
-geben, wie MySQL f�r Probleml�sungen eingesetzt wird.
-
-Dieser Abschnitt ist neu und wir planen, hier in B�lde weitere Geschichten
-unterzubringen. Wenn Sie Interesse haben, teilzunehmen, und erz�hlen
-wollen, wie Sie MySQL in einer einzigartigen Umgebung nutzen, oder
-Erfolgsgeschichten zu Ihrer Benutzung von MySQL haben, schreiben Sie an
-@code{docs@@mysql.com} mit Betreff @code{Success:}. Beachten Sie, dass es
-einige Zeit bis zur Beantwortung dauern kann, da wir sehr besch�ftigt sind.
-
-@itemize @bullet
-@item
-@strong{Peter Zaitsev von Spylog.ru} schreibt:
-Ich denke, die Gr��e meiner Datenbank k�nnte f�r Euch interessant sein.
-Die gesamte Datenbank liegt momentan auf 15 Servern und enth�lt etwa 60.000
-Tabellen, die etwa 5.000.000.000 Zeilen enthalten. Mein unter der h�chsten
-Last stehender Server hat momentan etwa 10.000 Tabellen mit 1.000.000.000
-Zeilen. Die gr��ten Tabellen enthalten etwa 50.000.000 Zeilen, und dieser
-Wert wird sich noch steigern, wenn ich auf den 2.4-Kernel mit gro�en
-Dateien umstelle. Momentan muss ich viele Logs f�r gro�e Sites l�schen, um
-Tabellengr��e unter 2 GB zu halten.
-
-@item
-@strong{Texas Instruments} benutzt MySQL f�r die Handhabung von Tabellen,
-die bis zu 2 Milliarden Zeilen in einer Validations-Regressions-Datenbank
-enthalten.
-@end itemize
-
-@page
-
-
-
-
-@node Contrib, Credits, MySQL-Benutzung durch Kunden, Top
-@c German node Contrib
-@appendix Beigesteuerte Programme
-
-@cindex Beigesteuerte Programme
-@cindex Programme, beigesteuerte
-
-Viele Benutzer von MySQL haben @emph{sehr} n�tzliche Support-Werkzeuge und
-Add-ons beigesteuert.
-
-@ifclear web
-Eine Auflistung, was unter @uref{http://www.mysql.com/Downloads/Contrib/}
-(oder einem Mirror) verf�gbar ist, steht unten. Wenn Sie
-MySQL-Unterst�tzung f�r die Perl-@code{DBI}/@code{DBD}-Schnittstelle bauen
-wollen, sollten Sie sich @code{Data-Dumper}, @code{DBI} und die
-@code{Msql-Mysql-modules}-Dateien holen und installieren.
-@xref{Perl}.
-@end ifclear
-
-@appendix sec-APIs
-
-@cindex Perl, Module
-@itemize @bullet
-@item Perl-Module
-@itemize @minus
-@item @uref{http://www.mysql.com/Downloads/Contrib/Data-Dumper-2.101.tar.gz, Data-Dumper-2.101.tar.gz}
-Perl-@code{Data-Dumper}-Module. N�tzlich f�r
-@code{DBI}/@code{DBD}-Unterst�tzung f�r �ltere Perl-Installationen.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/DBI-1.15.tar.gz, DBI-1.15.tar.gz}
-Perl-@code{DBI}-Module.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/KAMXbase1.2.tar.gz,KAMXbase1.2.tar.gz}
-Konvertiert zwischen @file{.dbf}-Dateien und MySQL-Tabellen. Perl-Module
-geschrieben von Pratap Pereira @email{pereira@@ee.eng.ohio-state.edu},
-erweitert von Kevin A. McGrail
-@email{kmcgrail@@digital1.peregrinehw.com}. Dieser Konverter kann
-MEMO-Felder handhaben.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/Msql-Mysql-modules-1.2216.tar.gz, Msql-Mysql-modules-1.2216.tar.gz}
-Perl-@code{DBD}-Module, um auf mSQL- und MySQL-Datenbanken zuzugreifen.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/Data-ShowTable-3.3.tar.gz, Data-ShowTable-3.3.tar.gz}
-Perl-@code{Data-ShowTable}-Module. N�tzlich f�r @code{DBI}/@code{DBD}-Unterst�tzung.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/HandySQL-1.1.tar.gz, HandySQL-1.1.tar.gz}
-HandySQL ist ein MySQL-Zugriffsmodul. Es bietet eine C-Schnittstelle, die
-in Perl eingebettet ist und ist ungef�hr 20% schneller als regul�res DBI.
-
-@end itemize
-
-@cindex JDBC
-@item JDBC
-@itemize @bullet
-@item @uref{http://www.mysql.com/Downloads/Contrib/mm.mysql.jdbc-1.2c.tar.gz, mm.mysql.jdbc-1.2c.tar.gz}
-Der mm-JDBC-Treiber f�r MySQL. Das ist ein Produktions-Release und wird
-aktiv weiter entwickelt. Von Mark Matthews (@email{mmatthew@@ecn.purdue.edu}).
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mm.mysql.jdbc-2.0pre5.tar.gz, mm.mysql.jdbc-2.0pre5.tar.gz}
-Der mm-JDBC-Treiber f�r MySQL. Das ist eine Pre-Release-Beta-Version und
-wird aktiv weiter entwickelt. Von Mark Matthews (@email{mmatthew@@ecn.purdue.edu}).
-Die beiden obigen Treibern stehen unter LGPL-Lizenz. Bitte sehen Sie unter
-@uref{http://www.worldserver.com/mm.mysql/} nach den aktuellsten Treibern
-nach (und wegen weiterer JDBC-Informationen), weil diese Treibern
-vielleicht schon veraltet sind.
-
-@item @uref{http://www.caucho.com/Projekte/jdbc-mysql/index.xtp}
-Der kommerzielle Resin-JDBC-Treiber, der unter Open Source ver�ffentlicht
-wird. Er behauptet, schneller als der mm-Treiber zu sein, aber wir haben
-dar�ber bislang noch nicht viele Informationen.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/twz1jdbcForMysql-1.0.4-GA.tar.gz, twz1jdbcForMysql-1.0.4-GA.tar.gz}
-Der twz-Treiber: Ein Typ-4-JDBC-Treiber von Terrence W. Zellers
-@email{zellert@@voicenet.com}. Dieser ist kommerziell, aber kostenlos f�r
-privaten und Schulungsgebrauch. (Wird nicht mehr unterst�tzt.)
-@c no answer von Server 990830
-@c You can always find the latest Treiber at @uref{http://www.voicenet.com/~zellert/tjFM/}.
-@item @uref{http://www.mysql.com/Downloads/Contrib/pmdamysql.tgz,pmdamysql.tgz}
-Ein MySQL-PMDA. Stellt MySQL-Serverstatus- und Konfigurationsvariablen zur
-Verf�gung.
-@end itemize
-
-@cindex OLEDB
-@item OLEDB
-@itemize @bullet
-@item @uref{http://www.mysql.com/downloads/Win32/MyOLEDB.exe, MyOLEDB.exe}
-OLEDB-Handler f�r MySQL. Von SWsoft.
-@item @uref{http://www.mysql.com/downloads/Win32/MySamples.zip, MySamples.zip}
-Beispiele und Dokumentation f�r MyOLEDB. Von SWsoft.
-@item @uref{http://www.mysql.com/downloads/Win32/Myoledb.zip, Myoledb.zip}
-Quelltext f�r MyOLEDB. Von SWsoft.
-@item @uref{http://www.mysql.com/downloads/Win32/MyOLEDB.chm, MyOLEDB.chm}
-Hilfedateien f�r MyOLEDB.
-@item @uref{http://www.mysql.com/downloads/Win32/libmyodbc.zip, libmyodbc.zip}
-Statische MyODBC-Bibliothek zum Bauen von MyOLEDB. Basiert auf MyODBC-Code.
-@end itemize
-
-@cindex C++
-@item C++
-@itemize @bullet
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql-c++-0.02.tar.gz, mysql-c++-0.02.tar.gz}
-MySQL-C++-Wrapper-Bibliothek. Von Rolund Haenel,
-@email{rh@@ginster.net}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/MyDAO.tar.gz, MyDAO}
-MySQL-C++-API. Von Satish @email{spitfire@@pn3.vsnl.net.in}. Inspiriert
-von Rolund Haenels C++-API und Ed Carps MyC-Bibliothek.
-
-@item @uref{http://www.mysql.com/download_mysql++.html, mysql++}
-MySQL-C++-API (mehr als nur eine Wrapper-Bibliothek). Urspr�nglich von
-@email{kevina@@clark.net}. Mittlerweile gepflegt von Sinisa bei MySQL AB.
-
-@item @uref{http://nelsonjr.homepage.com/NJrAPI,NJrAPI}
-Eine in C++ geschriebene, Datenbank-unabh�ngige Bibliothek, die MySQL
-unterst�tzt.
-@end itemize
-
-@cindex Delphi
-@item Delphi
-@itemize @bullet
-@item @uref{http://www.mysql.com/Downloads/Contrib/delphi-interface.gz, delphi-interface.gz}
-Delphi-Schnittstelle zu @code{libmysql.dll}, von Blestan Tabakov,
-@email{root@@tdg.bis.bg}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/DelphiMySQL2.zip, DelphiMySQL2.zip}
-Delphi-Schnittstelle zu @code{libmysql.dll}, von @email{bsilva@@umesd.k12.or.us}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/Udmysel.pas, Udmysql.pas}
-Ein Wrapper f�r libmysql.dll f�r die Benutzung in Delphi. Von Reiner Sombrowsky.
-
-@item @uref{http://www.fichtner.net/delphi/mysql.delphi.phtml, Eine Delphi-Schnittstelle zu MySQL.}
-Mit Quelltext. Von Matthias Fichtner.
-
-@c German FIX removed comma (",") to make description work inside uref
-@item @uref{http://www.productivity.org/projects/tmysql/, @strong{TmySQL}
-Eine Bibliothek um MySQL mit Delphi zu benutzen}.
-
-@item @uref{http://www.geocities.com/CapeCanaveral/2064/mysql.html, Delphi TDataset-component}.
-@item
-@item @uref{http://www.mysql.com/Downloads/Contrib/Win32/SBMySQL50Share.exe, Delphi 5 Shareware MySQL Dataset Components}
-@end itemize
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql-ruby-2.2.0.tar.gz, mysql-ruby-2.2.0.tar.gz}
-MySQL Ruvon module. Von TOMITA Masahiro @email{tommy@@tmtm.org}
-@uref{http://www.netlab.co.jp/ruby/, Ruby} ist eine objektorientierte Interpretersprache.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/JdmMysqlTreiber-0.1.0.tar.gz,JdmMysqlTreiber-0.1.0.tar.gz}
-Ein VisualWorks 3.0 Smalltalk-Treiber f�r MySQL. Von
-@email{joshmiller@@earthlink.net}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/Db.py, Db.py}
-Python-Modul mit Caching. Von @email{gundalf@@rosmail.com}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/MySQLmodule-1.4.tar.gz, MySQLmodule-1.4.tar.gz}
-Python-Schnittstelle f�r MySQL. Von Joseph Skinner @email{joe@@earthlight.co.nz}. Ge�ndert von Joerg Senekowitsch @email{senekow@@ibm.net}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/MySQL-python-0.3.0.tar.gz, MySQL-python-0.3.0.tar.gz}
-MySQLdb-Python ist eine DB-API v2.0-kompatible Schnittstelle zu MySQL.
-Transaktionen werden unterst�tzt, wenn der Server und die Tabellen sie
-unterst�tzen. Sie ist Thread-sicher und enth�lt ein Kompatibilit�tsmodul
-f�r �lteren Code, der f�r die nicht mehr gepflegte
-MySQLmodule-Schnittstelle geschrieben wurde.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_mex_12.tar.gz, mysql_mex_1_12.tar.gz}
-Ein Schnittstellenprogramm f�r das Matlab-Programm von MathWorks. Die
-Schnittstelle wurde von Kimmo Uutela und John Fisher (nicht von Mathworks)
-hergestellt. Siehe
-@uref{http://boojum.hut.fi/~kuutela/mysqlmex.html,mysqlmex.html} wegen
-weiterer Informationen.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysqltcl-1.53.tar.gz, mysqltcl-1.53.tar.gz}
-Tcl-Schnittstelle f�r MySQL. Basiert auf @file{msqltcl-1.50.tar.gz}.
-Aktualisiert von Tobias Ritzau, @email{tobri@@ida.liu.se}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/MyC-0.1.tar.gz, MyC-0.1.tar.gz}
-Eine Visual-Basic-�hnliche API von Ed Carp.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/sqlscreens-1.0.1.tar.gz, sqlscreens-1.0.1.tar.gz}
-Tcl/Tk-Code, um Datenbank-Screens zu erzeugen. Von Jean-Francois Dockes.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/Vdb-dflts-2.1.tar.gz, Vdb-dflts-2.1.tar.gz}
-Das ist eine neue Version eines Satzes von Bibliothek-Dienstprogrammen, die
-eine generische Schnittstelle zu SQL-Datenbank-Maschinen zur Verf�gung
-stellen, um Ihre Applikation zu einer Stufe-3-Applikation (3-Tier) zu
-machen. Der Vorteil ist, dass Sie sehr einfach zwischen verschiedenen
-Datenbank-Maschinen umschalten bzw. zu anderen Datenbanken wechseln k�nnen.
-Sie implementieren einfach eine Datei f�r das neue Backend und brauche
-keinerlei �nderungen an Ihren Applikationen vorzunehmen. Von
-@email{damian@@cablenet.net}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/DbFramework-1.10.tar.gz, DbFramework-1.10.tar.gz}
-DbFramework ist eine Sammlung von Klassen zur Manipulation von
-MySQL-Datenbanken. Die Klassen basieren lose auf der CDIF Data Model
-Subject Area. Von Paul Sharpe @email{paul@@miraclefish.com}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/pike-mysql-1.4.tar.gz, pike-mysql-1.4.tar.gz}
-MySQL-Modul f�r pike. Zur Benutzung mit dem Roxen-Webserver.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/squile.tar.gz, squile.tar.gz}
-Modul f�r @code{guile}, das es @code{guile} erlaubt, mit SQL-Datenbanken zu
-interagieren. Von Hal Roberts.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/stk-mysql.tar.gz, stk-mysql.tar.gz}
-Interface f�r Stk. Stk ist Tk-widgets mit Scheme darunter anstelle von Tcl.
-Von Terry Stefan.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/eiffel-wrapper-1.0.tar.gz,eiffel-wrapper-1.0.tar.gz}
-Eiffel-Wrapper von Michael Ravits.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/SQLmy0.06.tgz,SQLmy0.06.tgz}
-Ersetzbarer FlagShip-Datenbank-Treiber (RDD) f�r MySQL. Von Alejundro
-Fernundez Herrero.
-@uref{http://www.fship.com/rdds.html, Flagship-RDD-Homepage}
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mydsn-1.0.zip,mydsn-1.0.zip}
-Bin�rdatei und Quellcode f�r @code{mydsn.dll}. mydsn sollte benutzt werden,
-um die DSN-Registrierungsdatei f�r den MyODBC-Treiber in
-Coldfusion-Applikationen zu bauen und zu entfernen. Von Miguel Angel
-Sol�rzano.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/MySQL-ADA95_API.zip, MySQL-ADA95_API.zip}
-Eine ADA95-Schnittstelle zur MySQL-API. Von Francois Fabien.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/MyTool-DLL_for_VB_und_MySQL.zip, MyTool-DLL_for_VB_und_MySQL.zip}
-Eine DLL mit MySQL-C-API f�r Visual Basic.
-Von Ken Menzel @email{kenm@@icarz.com}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/MYSQLX.EXE, MYSQL.EXE}
-MySQL-ActiveX-Objekt f�r den direkten Zugriff auf Ihre MySQL-Server von
-IIS/ASP, VB und VC++ aus, der die langsameren ODBC-Methoden �berspringt.
-Voll aktualisierbar, multi-threaded mit voller Unterst�tzung f�r alle
-MySQL-Feldtypen (Version 2001.1.1). Von SciBit @uref{http://www.scibit.com/}.
-
-@item @uref{http://www.fastflow.it/mylua/, MyLUA Homepage}
-Wie man die LUA-Sprache benutzt, um MySQL-@code{PROCEDURE} zu schreiben,
-das zur Laufzeit geladen werden kann.
-
-@itemize @bullet
-@item @uref{http://www.mysql.com/Downloads/Contrib/lua-4.0.tar.gz, Lua 4.0}
-LUA 4.0
-@item @uref{http://www.mysql.com/Downloads/Contrib/mylua-3.23.32.1.tar.gz, mylua-3.23.32.1.tar.gz}
-Patch f�r MySQL 3.23.32, um LUA 4.0 zu benutzen. Von Cristian Giussani.
-@end itemize
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/patched_myodbc.zip, patched_myodbc.zip}
-Patch (f�r Omniform-4.0-Unterst�tzung) des MyODBC-Treibers.
-Von Thomas Thaele @email{tthaele@@papenmeier.de}
-
-@end itemize
-
-@appendixsec Clients
-
-@itemize @bullet
-@item Grafische Clients
-@itemize @minus
-@item @uref{http://www.ideit.com/produkte/dbvis/, DbVisualizer}.
-Freeware-JDBC-Client, der Daten und Strukturen mehrerer Datenbanken auf
-einmal grafisch visualisiert. Von Innovative-IT Development AB.
-
-@item @uref{http://www.mysql.com/downloads/gui-clients.html, MySQLGUI}
-Die MySQL-GUI-Client-Homepage. Von Sinisa bei MySQL AB.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_navigator_0.9.0.tar.gz, MySQL Navigator 0.9}
-MySQL Navigator ist ein MySQL-Datenbank-Server-GUI-Client-Programm. Der
-Zweck von MySQL Navigator ist, eine n�tzliche Schnittstelle zu
-MySQL-Datenbank-Servern zur Verf�gung zu stellen, wobei mehrere
-Betriebssysteme und Sprachen unterst�tzt werden. Momentan k�nnen Sie
-Datenbanken importieren / exportieren, Anfragen eingeben, Ergebnismengen
-holen, Skripte editieren, Skripte laufen lassen, Benutzer hinzuf�gen,
-�ndern und l�schen, und Client- und Server-Informationen abrufen. Benutzt
-QT 2.2. GPL @uref{http://sql.kldp.org/mysql, Homepage f�r MySQL Navigator}.
-
-@item @uref{http://www.mysql.com/downloads/Win32/secman.zip, MySQL-Sicherheits-GUI}
-Eine Benutzer- und Sicherheitsverwaltungs-GUI f�r MySQL unter Windows.
-Von Martin Jeremic.
-@uref{http://jsoft.webjump.com/, Homepage f�r MySQL-Sicherheits-GUI}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/kmysqladmin-0.4.1.tar.gz, kmysqladmin-0.4.1.tar.gz}.
-@item @uref{http://www.mysql.com/Downloads/Contrib/kmysqladmin-0.4.1-1.src.rpm, kmysqladmin-0.4.1-1.src.rpm}.
-@item @uref{http://www.mysql.com/Downloads/Contrib/kmysqladmin-0.4.1-1.i386.rpm, kmysqladmin-0.4.1-1.i386.rpm}
-Ein Verwaltungswerkzeug f�r den MySQL-Server, das QT / KDE benutzt. Nur
-unter Linux getestet.
-
-@item
-@uref{http://www.mysql.com/Downloads/Contrib/mysql-admin-using-java+swing.tar.gz, Java client mit Swing} Von Fredy Fischer,
-@email{se-afs@@dial.eunet.ch}. Sie finden die letzte Version immer unter
-@uref{http://www.trash.net/~ffischer/admin/index.html, hier}.
-
-@item @uref{http://www.mysql.com/downloads/Win32/MySQL-Maker-1.0.zip,MySQL-Maker 1.0}.
-Shareware-MySQL-Client f�r Windows. Ein WYSIWYG-Werkzeug, mit dem Sie
-Datenbanken und Tabellen erzeugen, �ndern und l�schen k�nnen. Sie k�nnen
-die Feldstruktur �ndern, Felder hinzuf�gen und Daten hinzuf�gen, �ndern und
-l�schen, direkt ohne ODBC-Treiber.
-@uref{http://www.presult.de/presult/frames/fs_mysqlmaker.html, MySQL-Maker-Homepage}
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysqlwinadmn.zip, mysqlwinadmn.zip}
-Windows-GUI (nur Bin�rdatei) zur Verwaltung einer Datenbank, von David B. Mansel,
-@email{david@@zhadum.org}.
-
-@item @uref{http://home.online.no/~runeberg/myqa, MyQA}
-Ein Linux-basierender Anfrage-Client f�r den MySQL-Datenbank-Server. Mit
-MyQA k�nnen Sie SQL-Anfragen eingeben, diese ausf�hren und die Ergebnisse
-betrachten, alles in einer grafischen Benutzerschnittstelle. Die GUI �hnelt
-grob dem 'Anfrage-Analyzer'-Client, der mit dem Microsoft SQL-Server
-ausgeliefert wird.
-
-@item @uref{http://members.xoom.com/_opex_/mysqlmanager/index.html, MySQL-Manager}
-Ein grafischer MySQL-Server-Manager f�r MySQL-Server. Geschrieben in Java,
-f�r Windows.
-
-
-@item @uref{http://www.mysql.com/downloads/Win32/netadmin.zip, netadmin.zip}
-Ein Verwaltungswerkzeug f�r MySQL unter Windows 95/98 und Windows NT 4.0.
-Nur getestet mit MySQL-Versions 3.23.5 bis 3.23.7. Geschrieben mit den
-Tmysql-Komponenten.
-
-Sie k�nnen Anfragen schreiben und Tabellen darstellen, Indexe,
-Tabellensyntax sowie Benutzer, Host und Datenbank verwalten und vieles
-mehr. Das Werkzeug ist eine Beta-Version und hat noch viele Bugs. Sie
-k�nnen das Programm mit allen Features testen. Bitte schicken Sie Bugs und
-Hinweise an Marco Suess @email{ms@@it-netservice.de}. Original-URL
-@url{http://www.it-netservice.de/pages/Software/index.html}.
-
-@item @uref{http://www.mysql.com/downloads/Win32/netadmin2.zip, netadmin2.zip}
-Neue Version von netadmin. Siehe oben wegen Details.
-
-@item @uref{http://www.mysql.com/downloads/Win32/ARTADMIN203.EXE,Atronic's MySQL-Client f�r Windows 2.0.3.0}.
-Die Homepage hierf�r ist unter @uref{http://www.artronic.hr}.
-
-@item @uref{http://www.mysql.com/downloads/Win32/mysqlfront.zip, mysqlfront}
-Homepage: @uref{http://www.mysqlfront.de/}.
-Win32-Client f�r die Verwaltung von Datenbanken, Tabellen, Tabellendaten,
-Indexen und Import-/Export-Dateien. Freeware. Von Ansgar Becker.
-
-@c German FIX removed comma (",") to make description work inside uref
-@item @uref{http://www.mysql.com/downloads/Win32/W9xstop.zip,Dienstprogramm
-von Artronic um MySQL unter Windows 9x anzuhalten}.
-
-@item @uref{http://bardo.hyperlink.cz/mysqlmon,ein leichtgewichtiger GUI-Client f�r Windows}.
-
-@item @uref{http://dbtools.vila.bol.com.br/, DB-Werkzeuge}
-Ein Werkzeug zur Verwaltung von MySQL-Datenbanken. Momentan nur f�r
-Windows. Einige Features:
-@itemize @bullet
-@item Verwaltung von Servern, Datenbanken, Tabellen, Spalten, Indexen und
-Benutzern.
-@item Import-Assistent, um Strukturen und Daten von MS Access, MS Excel,
-Dbase, FoxPro, Paradox und ODBC Datenbanken zu �bernehmen.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/KMYENG113.zip,KMYENG113.zip}
-Eine Verwaltungs-GUI f�r MySQL. Funktioniert nur unter Windows, kein
-Quellcode verf�gbar. Verf�gbar in englisch und japanisch. Von Mitunobu Kaneko.
-Homepage: @uref{http://sql.jnts.ne.jp/}
-@end itemize
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/xmysqladmin-1.0.tar.gz, xmysqladmin-1.0.tar.gz}
-Ein X-basierendes Frontend zur MySQL-Datenbank-Maschine. Erlaubt Neuladen,
-Status-Pr�fungen, Prozesssteuerung, myisamchk, grant/revoke-Berechtigungen,
-Erzeugung von Datenbanken, L�schen von Datenbanken, Erzeugen, �ndern,
-Durchsuchen und L�schen von Tabellen. Original von Gilbert Therrien,
-@email{gilbert@@ican.net}, jetzt aber Public Domain und von MySQL AB
-unterst�tzt.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/xmysql-1.9.tar.gz, xmysql-1.9.tar.gz}.
-@item @uref{http://web.wt.net/~dblhack, xmysql-Homepage}
-Ein Frontend zur MySQL-Datenbank-Maschine, mit der man auf einfache Weise
-Anfragen und Tabellenwartung durchf�hren kann sowie Stapel-Anfrragen. Von
-Rick Mehalick, @email{dblhack@@wt.net}.
-Erfordert @uref{http://bragg.phys.uwm.edu/xforms,xforms 0.88}, um zu
-funktionieren.
-@item @uref{http://www.tamos.net/sw/dbMetrix,dbMetrix}
-Ein Open-Source-Client f�r das Durchsuchen von Datenbanken und die
-Ausf�hrung von SQL. Unterst�tzt MySQL, Oracle, PostgreSQL und mSQL.
-@item @uref{http://www.multimania.com/bbrox/GtkSQL,GtkSQL}
-Ein Anfrage-Werkzeug f�r MySQL und PostgreSQL.
-@item @uref{http://dbman.linux.cz/,dbMan}
-Ein Anfrage-Werkzeug, geschrieben in Perl. Benutzt DBI und Tk.
-@item @uref{http://www.mysql.com/downloads/Win32/Msc201.EXE, Mascon 202}
-@item @uref{http://www.mysql.com/downloads/Win32/FrMsc202.EXE, Free Mascon 202}
-Mascon ist eine m�chtige Win32-GUI f�r die Verwaltung von
-MySQL-Server-Datenbanken. Die Features von Mascon beinhalten visuellen
-Tabellenentwurf, Verbindungen zu mehrfachen Servern, Daten- und
-Blob-Editierung von Tabellen, Sicherheitseinstellungen, SQL-Farb-Coding,
-Dump-Funktionalit�t und vieles mehr.
-@uref{http://www.scibit.com/produkte/Software/Utils/Mascon.asp,Mascon-Homepage}.
-@item @uref{http://www.virtualbeer.net/dbui/,DBUI}
-DBUI ist ein grafischer Gtk-Datenbank-Editor.
-@item @uref{http://www.rtlabs.com/, MacSQL}
-GUI f�r MySQL-, ODBC- und JDBC-Datenbanken f�r Mac OS.
-@item @uref{http://www.caleb.com.au/, JRetriever}
-JRetriever ist ein generisches Datenbank-Frontend-Werkzeug f�r
-JDBC-kompatible Datenbanken, geschrieben mit Java 2. JRetriever zeigt
-Datenbank- und Tabellenansichten in einem Windows-Explorer-�hnlichen
-Frontend an. Der Benutzer kann Daten entweder durch Klicken auf den
-Tabellen-Ordner oder durch das Zusammenstellen eigener SQL-Statements mit
-dem eingebauten SQL-Editor abrufen. Das Werkzeug wurde mit Oracle 8 und
-MySQL als Backend-Datenbanken getestet. Es erfordert JDK 1.3 von JavaSoft.
-@item @uref{http://www.jetools.com/products/databrowser/, DataBrowser}
-Der DataBrowser ist ein Datenbank- und Plattform-�bergreifendes
-Datenzugriffswerkzeug. Es ist benutzerfreundlicher als Werkzeuge wie SQL
-Plus, psql (kommandozeilenbasierende Werkzeuge). Es ist flexibler als TOAD,
-ISQL und PGAccess, die als GUIs auf eine einzige Plattform oder Datenbank
-beschr�nkt sind.
-@item @uref{http://www.intrex.net/amit/Software/, SQLC}
-Die SQL Console ist eine eigenst�ndige Java-Applikation, mit der Sie auf
-ein SQL-Datenbanksystem zugreifen und SQL-Anfragen und -Aktualisierung
-absetzen k�nnen. Es hat eine leicht benutzbare grafische
-Benutzerschnittstelle. Die SQL Console benutzt JDBC, um sich mit dem
-Datenbanksystem zu verbinden. Daher k�nnen Sie sich mit den richtigen
-JDBC-Treibern mit diesem Dienstprogramm mit den beliebtesten
-Datenbanksystemen verbinden.
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_mmc.zip, MySQL MMC}
-MySQL MMC ist ein GUI-Management-Werkzeug, das mit kdevelop entwickelt
-wurde. Es besitzt eine sehr gute Schnittstelle, die komplett Microsoft
-Enterprise Tool (f�r SQL Server) oder Sybase Central �hnelt. Damit k�nnen
-Sie Server, Datenbanken, Tabellen, Indexe und Benutzer verwalten und
-Tabellendaten in Gittern editieren, sowie SQL ausf�hren.
-@end itemize
-
-@cindex Web-Clients
-@item Web-Clients
-@itemize @minus
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysqladmin-atif-1.0.tar.gz, mysqladmin-atif-1.0.tar.gz}
-WWW-MySQL-Verwaltungswerkzeug f�r die @code{user}-, @code{db}- und
-@code{host}-Tabellen. Von Tim Sailer, ge�ndert von Atif Ghaffar
-@email{aghaffar@@artemedia.ch}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql-webadmin-1.0a8-rz.tar.gz, mysql-webadmin-1.0a8-rz.tar.gz}
-Ein in PHP-FI geschriebenes Werkzeug zur Verwaltung von MySQL-Datenbanken,
-entfernt �ber das Web mit einem Web-Browser. Von Peter Kuppelwieser,
-@email{peter.kuppelwieser@@kantea.it}. Aktualisiert von Wim Bonis,
-@email{bonis@@kiss.de}. Wird nicht mehr gepflegt!
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysqladm.tar.gz, mysqladm.tar.gz}
-MySQL-Web-Datenbankadministration, geschrieben in Perl. Von Tim Sailer.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysqladm-2.tar.gz, mysqladm-2.tar.gz}
-Aktualisierte Version von @file{mysqladm.tar.gz}, von High Tide.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/billowmysql.zip, billowmysql.zip}
-Akualisierte Version von @file{mysqladm.tar.gz}, von Ying Gao. Sie erhalten
-die neueste Version von @uref{http://civeng.com/sqldemo/, der Homepage}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/myadmin-0.4.tar.gz, myadmin-0.4.tar.gz}.
-@item @uref{http://myadmin.cheapnet.net/, MyAdmin-Homepage}
-Ein Web-basierender MySQL-Administrator von Mike Machado.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/phpMyAdmin_2.2.0.tar.gz,phpMyAdmin_2.2.0.tar.gz}
-Ein Satz von PHP3-Skripten, um MySQL �ber das WWW zu administrieren.
-
-@item @uref{http://www.phpwizard.net/Projekte/phpMyAdmin/, phpMyAdmin Homepage}
-Ein PHP3-Werkzeug im Geiste von mysql-webadmin, von Tobias Ratschiller,
-tobias@@dnet.it.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/useradm.tar.gz, useradm.tar.gz}
-MySQL-Administrator in PHP. Von Ofni Thomas @email{othomas@@vaidSysteme.com}.
-
-@item @uref{http://gossamer-thread.com/perl/mysqlman/mysql.cgi, MySQLMan}
-�hnliche Funktionalit�t wie phpmyadmin, aber geschrieben in Perl und unter
-Verwenden von HTML-Vorlagen. Von Alex Krohn.
-@end itemize
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql-editor.tar.gz,mysql-editor.tar.gz}
-Mit diesen CGI-Skripten in Perl k�nnen Sie die Inhalte von
-MySQL-Datenbanken editieren. Von Tomas Zeman.
-@item
-@uref{http://worldcommunity.com/openquelle/futuresql, FutureSQL Web-Datenbankadministrations-Werkzeug}.
-FutureSQL von Peter F. Brown ist ein Open-Source-Web-Datenbank-Werkzeug f�r
-die schelle Applikationsentwicklung. Geschrieben in Perl, verwendet MySQL.
-Benutzt @code{DBI:DBD} und @code{CGI.pm}.
-
-Mit FutureSQL k�nnen Sie schnell config-Dateien einrichten, um Datens�tze
-einer MySQL-Datenbank zu betrachten, zu editieren, zu l�schen und
-anderweitig zu verarbeiten. Es benutzt ein Daten-W�rterbuch,
-Konfigurationsdateien und Vorlagen und erlaubt "Pre-Processing" und
-"Post-Processing" von Feldern, Datens�tzen und Operationen.
-@end itemize
-
-@cindex Web-Werkzeuge
-@cindex Werkzeuge,, Web
-@appendixsec Web-Werkzeuge
-
-@itemize @bullet
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mod_mysql_include_1.0.tar.gz, mod_mysql_include_1.0.tar.gz}
-Apache-Modul, um HTML von MySQL-Anfragen in Ihre Seiten zu integrieren und
-um Aktualisierungsanfragen auszuf�hren. Urspr�nglich geschrieben, um ein
-einfaches, schnelles Banner-Rotationssystem mit geringem Overhead zu
-implementieren. Von Sasha Pachev.
-
-@item @uref{http://htcheck.sourceforge.net, htCheck} - URL-�berpr�fer mit
-MySQL-Backend. Gelistete (spidered) URLs k�nnen sp�ter abgefragt werden,
-wobei SQL verwendet wird, um verschiedene Sorten von Information abzurufen,
-z. B. Broken Links. Geschrieben von Gabriele Bartolini.
-
-@item @uref{http://www.odbsoft.com/cook/sources.htm}
-Dieses Paket hat diverse Funktionen zum Erzeugen von HTML-Code aus einer
-SQL-Tabellenstruktur und zum Erzeugen von SQL-Statements (Select, Insert,
-Update, Delete) aus einem HTML-Formular. Sie k�nnen komplette
-Formular-Schnittstellen zu einer SQL-Datenbank bauen (Anfrage, Hinzuf�gen,
-Aktualisierung, L�schen), ohne jedes Programmieren! Von Marc Beneteau, @email{marc@@odbsoft.com}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/sqlhtml.tar.gz, sqlhtml.tar.gz}
-SQL/HTML ist ein HTML-Datenbankmanager f�r MySQL mit @code{DBI} 1.06.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/udmsearch-3.0.23.tar.gz, UdmSearch 3.0.23 (stabile Version)}.
-@c German FIX removed comma (",") to make description work inside uref
-@item @uref{http://www.mysql.com/Downloads/Contrib/mnogosearch-3.1.12.tar.gz, mnogosearch 3.1.12 (Entwicklungs- aber empfohlene Version)}.
-@item @uref{http://search.mnoGo.ru, UdmSearch-Homepage}
-Eine SQL-basierende Suchmaschine f�rs Internet. Von Alexander I. Barkov @email{bar@@izhcom.ru}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/wmtcl.doc, wmtcl.doc}.
-@item @uref{http://www.mysql.com/Downloads/Contrib/wmtcl.lex, wmtcl.lex}
-Hiermit k�nnen Sie HTML-Dateien mit Einf�gungen von Tcl-Code schreiben. Von @email{vvs@@scil.npi.msu.su}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/www-sql-0.5.7.lsm, www-sql-0.5.7.lsm}.
-@item @uref{http://www.mysql.com/Downloads/Contrib/www-sql-0.5.7.tar.gz, www-sql-0.5.7.tar.gz}
-Ein CGI-Programm, das eine HTML-Datei mit speziellen Tags parst, die Tags
-selbst parst und Daten aus einer MySQL-Datenbank einf�gt.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/genquery.zip, genquery.zip}
-Perl-SQL-Datenbankschnittstellenpaket f�r HTML.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/cgi++-0.8.tar.gz, cgi++-0.8.tar.gz}
-Ein Makro-Prozessor, um leicht CGI/Datenbank-Programme in C++ zu schreiben. Von Sasha Pachev.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/webboard-1.0.zip, WebBoard 1.0}
-EU-Industries Internet-Message-Board.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/DBIx-TextIndex-0.02.tar.gz, DBIx-TextIndex-0.02.tar.gz}
-Volltextsuche mit Perl auf @code{BLOB}/@code{TEXT}-Spalten. Von Daniel Koch.
-@end itemize
-
-@cindex Werkzeuge, Benchmark-
-@cindex Benchmark, Werkzeuge
-@appendixsec Performance-Benchmark-Werkzeuge
-
-@itemize @bullet
-@item @uref{http://www.mysql.com/downloads/super-smack/super-smack-1.0.tar.gz,
- super-smack}
-Multi-Threaded Benchmark-Werkzeug f�r MySQL und @strong{PostgreSQL}.
-Geschrieben in C++. Leicht zu erweitern f�r die Unterst�tzung anderer
-Datenbanken, die C/C++-Client-Bibliotheken haben. Von Sasha Pachev.
-@end itemize
-
-@cindex Werkzeuge, Authentifizierung
-@cindex Authentifizierungswerkzeuge
-@appendixsec Authentifizierungswerkzeuge
-
-@itemize @bullet
-@item @uref{http://www.mysql.com/Downloads/Contrib/ascend-radius-mysql-0.7.2.patch.gz,ascend-radius-mysql-0.7.2.patch.gz}
-Das ist ein Authentifizierungs- und Logging-Patch, der MySQL f�r Ascend-Radius benutzt. Von @email{takeshi@@SoftAgency.co.jp}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/icradius-0.10.tar.gz, icradius 0.10}
-@uref{http://www.mysql.com/Downloads/Contrib/icradius.README, icradius readme-Datei}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/checkpassword-0.81-mysql-0.6.6.patch.gz,
-checkpassword-0.81-mysql-0.6.6.patch.gz}
-MySQL-Authentifizierungs-Patch f�r QMAIL und checkpassword. Diese sind
-n�tzlich f�r die Benutzerverwaltung (mail, pop account) von MySQL.
-Von @email{takeshi@@SoftAgency.co.jp}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/jradius-diff.gz, jradius-diff.gz}
-MySQL-Unterst�tzung f�r Livingston's Radius 2.01. Authentifizierung und
-Abrechnung. Von Jose de Leon, @email{jdl@@thevision.net}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mod_auth_mysql-2.20.tar.gz, mod_auth_mysql-2.20.tar.gz}
-Apache-Authentifizierungsmodul f�r MySQL. Von Zeev Suraski,
-@email{bourbon@@netvision.net.il}.
-
-@c @strong{Bitte} registrieren Sie dieses Modul unter:
-@c @url{http://bourbon.netvision.net.il/mysql/mod_auth_mysql/register.html}.
-@c Die Registrierungsinformationen werden nur f�r statistische Zwecke
-@c benutzt und f�rdern die Weiterentwicklung dieses Moduls!
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mod_log_mysql-1.05.tar.gz, mod_log_mysql-1.05.tar.gz}
-MySQL-Loggingmodul f�r Apache. Von Zeev Suraski,
-@email{bourbon@@netvision.net.il}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mypasswd-2.0.tar.gz, mypasswd-2.0.tar.gz}
-Zusatz f�r @code{mod_auth_mysql}. Das kleine Werzeug erm�glicht Ihnen,
-Benutzerdatens�tze hinzuzuf�gen oder zu �ndern, wobei Gruppen- und / oder
-Passwort-Eintr�ge in MySQL-Tabellen gespeichert werden. Von Harry
-Brueckner, @email{brueckner@@respublica.de}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql-passwd.README, mysql-passwd.README}.
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql-passwd-1.2.tar.gz, mysql-passwd-1.2.tar.gz}
-Zusatz f�r @code{mod_auth_mysql}. Ein System aus zwei Bestandteilen zur
-Benutzung mit @code{mod_auth_mysql}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/pam_mysql.tar.gz, pam_mysql.tar.gz}
-Dieses Modul authentifiziert Benutzer via @code{pam}, mit MySQL.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/nsapi_auth_mysql.tar, nsapi_auth_mysql.tar}
-Netscape-Webserver-API- (NSAPI) Funktionen, um (BASIC) Benutzer gegen
-MySQL-Tabellen zu authentifizieren. Von Yuan John Jiang.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/qmail-1.03-mysql-0.6.6.patch.gz,qmail-1.03-mysql-0.6.6.patch.gz}
-Patch f�r qmail, um Benutzer einer MySQL-Tabelle zu authentifizieren.
-Von @email{takeshi@@SoftAgency.co.jp}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/proftpd-1.2.0rc2-fix-mysql.patch, proftpd-1.2.0rc2-fix-mysql.patch}
-Patch f�r proftpd1.2.0rc2. Von @email{takeshi@@SoftAgency.co.jp}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/pwcheck_mysql-0.1.tar.gz,pwcheck_mysql-0.1.tar.gz}
-Ein Authentifizierungsmodul f�r den Cyrus-IMAP-Server. Von Aaron Newsome.
-
-
-@end itemize
-
-@cindex Konverter
-@appendixsec Konverter
-
-@itemize @bullet
-@item @uref{http://www.mysql.com/Downloads/Contrib/mssql2mysql.txt, mssql2mysql.txt}
-Konverter von MS-SQL zu MySQL. Von Michael Kofler.
-@uref{http://www.kofler.cc/mysql/mssql2mysql.html, mssql2mysql Homepage}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/dbf2mysql-1.14.tar.gz, dbf2mysql-1.14.tar.gz}
-Konvertiert zwischen @file{.dbf}-Dateien und MySQL-Tabellen. Von Maarten
-Boekhold (@email{boekhold@@cindy.et.tudelft.nl}), William Volkman und
-Michael Widenius. Dieser Konverter schlie�t rudiment�re Unterst�tzung (nur
-lesen) f�r MEMO-Felder ein.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/dbf2mysql-1.13.tgz, dbf2mysql-1.13.tgz}
-Konvertiert zwischen @file{.dbf}-Dateien und MySQL-Tabellen. Von Maarten
-Boekhold, @email{boekhold@@cindy.et.tudelft.nl} und Michael Widenius.
-Dieser Konverter kann keine MEMO-Felder handhaben.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/dbf2mysql.zip, dbf2mysql.zip}
-Konvertiert zwischen FoxPro-@file{.dbf}-Dateien und MySQL-Tabellen unter Windows.
-Von Alexunder Eltsyn, @email{ae@@nica.ru} oder @email{ae@@usa.net}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/dbf2sql.zip, dbf2sql.zip}
-Kurzes, einfaches Programm, dass Ihnen bei der �berf�hrung Ihrer Daten von
-Foxpro-Tabellen in MySQL-Tabellen helfen kann. Von Danko Josic.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/dump2h-1.20.gz, dump2h-1.20.gz}
-Konvertiert von einer @code{mysqldump}-Ausgabe in eine C-Header-Datei. Von
-Harry Brueckner, @email{brueckner@@mail.respublica.de}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/exportsql.txt, exportsql.txt}
-Ein Skript, das @code{access_to_mysql.txt} �hnelt, ausser dass dieses voll
-konfigurierbar ist, eine bessere Typumwandlung hat (inklusive Erkennung von
-@code{TIMESTAMP}-Feldern), bei der Konvertierung Warnungen und Vorschl�ge
-bereit stellt, Anf�hrungszeichen, @strong{alle} Sonderzeichen in Text und
-Bin�rdaten erkennt usw. Es konvertiert ausserdem nach @code{mSQL} Version 1
-und 2, und kostet nichts. Siehe @uref{http://www.cynergi.net/exportsql/}
-wegen der neuesten Version. Von Pedro Freire, @email{Support@@cynergi.net}.
-@strong{HINWEIS:} Funktioniert nicht mit Access 2!
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/access_to_mysql.txt, access_to_mysql.txt}
-Kopieren Sie diese Funktion in ein Access-Modul einer Datenbank, die die
-Tabellen enth�lt, die Sie exportieren wollen. Siehe auch @code{exportsql}.
-Von Brian Andrews. @strong{HINWEIS:} Funktioniert nicht mit Access 2!
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/importsql.txt, importsql.txt}
-Ein Skript, das genau das Gegenteil von @code{exportsql.txt} macht. Es
-importiert Daten von MySQL in eine Access-Datenbank via ODBC. Das ist sehr
-handlich, wenn es mit exportsql kombiniert wird, weil Sie damit Access f�r
-das Datenbank-Design und die -Administration verwenden k�nnen und das
-Getane dann mit Ihrem MySQL-Server synchronisieren k�nnen. Siehe
-@uref{http://www.netdive.com/freebies/importsql/} wegen Aktualisierungen.
-Geschrieben von Laurent Bossavit von NetDIVE.
-@strong{HINWEIS:} Funktioniert nicht mit Access 2!
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mdatabase2sql.bas,
-mdatabase2sql.bas}
-Konverter von Access97 nach MySQL von Moshe Gurvich.
-
-@item
-@uref{http://www.mysql.com/Downloads/Contrib/msql2mysqlWrapper-1.0.tgz,
-msql2mysqlWrapper 1.0}
-Ein C-Wrapper von @code{mSQL} nach MySQL. Von @email{alfred@@sb.net}
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/sqlconv.pl, sqlconv.pl}
-Ein einfaches Skript, das zum Kopieren von Feldern von einer MySQL-Tabelle
-in eine andere im Massenverfahren benutzt werden kann. Im Wesentlichen
-k�nnen Sie @code{mysqldump} laufen lassen und die Ausgabe an das
-@code{sqlconv.pl}-Skript �bergeben. Das Skript parst die
-@code{mysqldump}-Ausgabe und ordnet die Felder neu, so dass sie in die neue
-Tabelle eingef�gt werden k�nnen. Ein Beispiel hierf�r ist, dass Sie eine
-neue Tabelle f�r eine andere Site, an der Sie arbeiten, erstellen wollen,
-die Tabelle jedoch ein bisschen anders ist (also die Felder in anderer
-Reihenfolge hat usw.). Von Steve Shreeve.
-@item @uref{http://www.mysql.com/Downloads/Contrib/oracledump oderacledump}
-Perl-Programm, um Oracle-Datenbanken nach MySQL zu konvertieren. Hat
-dasselbe Ausgabeformat wie mysqldump. Von Johan Andersson.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/excel2mysql.pl, excel2mysql.pl}
-Perl-Programm, um Excel-Tabellen in eine MySQL-Datenbank zu importieren.
-Von Stephen Hurd @email{shurd@@sk.sympatico.ca}
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/T2S_100.ZIP, T2S_100.ZIP}.
-Windows-Programm zum Konvertieren von Textdateien in MySQL-Datenbanken. Von
-Asaf Azulay.
-
-@end itemize
-
-@appendixsec MySQL mit anderen Produkten benutzen
-
-@itemize @bullet
-@item @uref{http://www.mysql.com/Downloads/Contrib/emacs-sql-mode.tar.gz, emacs-sql-mode.tar.gz}
-Raw-Portierung eines SQL-Modus f�r XEmacs. Unterst�tzt Vervollst�ndigung.
-Original von Peter D. Pezaris @email{pez@@atlantic2.sbi.com} und teilweise
-MySQL-Portierung von David Axmark.
-
-@item @uref{http://www.mysql.com/downloads/Win32/myaccess97_1_4.zip, MyAccess97 1.4}.
-@item @uref{http://www.mysql.com/downloads/Win32/myaccess2000_1_4.zip, MyAccess2000 1.4}.
-
-MyAccess ist ein Add-In f�r MS-Access 97/2000, mit dem MySQL-Datenbanken
-innerhalb von Access verwaltet werden k�nnen. Hauptfunktionen sind:
-@itemize @minus
-@item Erzeugen und �ndern von Tabellen
-@item Anfragen an MySQL ausf�hren
-@item ''Erzeugen von Tabellen-Skripten'' von MySQL
-@item Importieren / Exportieren von Tabellen aus Access nach MySQL und umgekehrt
-@item �nderungen mitschreiben (Log)
-@item Einen Datenbank-Definitionsbericht anzeigen
-@end itemize
-
-Geschrieben von Hubertus Hiden. @uref{http://www.accessmysql.com, MyAccess-Homepage}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/radius-0.3.tar.gz, radius-0.3.tar.gz}
-Patches f�r @code{radiusd}, damit es MySQL unterst�tzt. Von Wim Bonis,
-@email{bonis@@kiss.de}.
-@end itemize
-
-@cindex Werkzeuge, n�tzliche
-@appendixsec N�tzliche Werkzeuge
-
-@itemize @bullet
-@item @uref{http://worldcommunity.com/opensource/utilities/mysql_backup.html, MySQL-Datensicherung}.
-
-Ein Datensicherungsskript f�r MySQL. Von Peter F. Brown.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mytop, mytop}
-@item @uref{http://public.yahoo.com/~jzawodn/mytop/, mytop Homepage}
-mytop ist ein Perl-Programm, mit dem Sie MySQL-Server beobachten k�nnen,
-indem Sie aktive Threads, Anfragen und Server-Performance �ber alles
-betrachten. Von Jeremy D. Zawodny.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_watchdog.pl, mysql_watchdog.pl}
-Den MySQL-Daemon auf m�gliche Blockierungen �berwachen. Von Yermo Lamers,
-@email{yml@@yml.com}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysqltop.tar.gz, mysqltop.tar.gz}
-Sendet eine Anfrage in einem festen Zeitintervall an den Server und zeigt
-die Ergebnistabelle. Von Thomas Wana.
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_structure_dumper.tar.gz,mysql_structure_dumper.tar.gz}
-Gibt die Struktur aller Tabellen in einer Datenbank aus. Von Thomas Wana.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_structure_dumper.tgz, structure_dumper.tgz}
-Gibt die Struktur aller Tabellen in einer Datenbank aus. Von Thomas Wana.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysqlsync, mysqlsync-1.0-alpha.tar.gz}.
-Ein Perl-Skript, um entfernte Kopien einer MySQL-Datenbank mit einer
-zentralen Master-Kopie synchronisiert zu halten. Von Mark Jeftovic. @email{markjr@@easydns.com}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/MySQLTutor-0.2.tar.gz, MySQLTutor}.
-MySQLTutor. Ein MySQL-Tutorial f�r Anf�nger.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/MySQLDB.zip, MySQLDB.zip}
-Eine COM-Bibliothek f�r MySQL von Alok Singh.
-@item @uref{http://www.mysql.com/Downloads/Contrib/MySQLDB-readme.html, MySQLDB-readme.html}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_replicate.pl, mysql_replicate.pl}
-Perl-Programm, das Replikation handhabt. Von @email{elble@@icculus.nsg.nwu.edu}
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/DBIx-TextIndex-0.02.tar.gz, DBIx-TextIndex-0.02.tar.gz}
-Perl-Skript, das umgekehrte Indexierung f�r Textsuchen benutzt. Von Daniel
-Koch.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/dbcheck, dbcheck}
-Perl-Skript, das eine Datensicherung der Tabellen macht, bevor isamchk
-darauf laufen gelassen wird. Von Elizabeth.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mybackup}.
-@item @uref{http://www.mswanson.com/mybackup, mybackup-Homepage}
-Wrapper f�r mysqldump, um alle Datenbanken zu sichern. Von Marc Swanson.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mdu.pl.gz,mdu.pl.gz}
-Gibt die Speicherbenutzung einer MySQL-Datenbank aus.
-@end itemize
-
-@cindex RPMs, f�r gebr�uchliche Werkzeuge
-@cindex Werkzeuge, RPMs f�r
-@appendixsec RPMs f�r gebr�uchliche Werkzeuge (die meisten sind f�r RedHat 6.1)
-
-@itemize @bullet
-@item @uref{http://www.mysql.com/Downloads/Contrib/perl-Data-ShowTable-3.3-2.i386.rpm,perl-Data-ShowTable-3.3-2.i386.rpm}
-@item @uref{http://www.mysql.com/Downloads/Contrib/perl-Msql-Mysql-modules-1.2210-2.i386.rpm,perl-Msql-Mysql-modules-1.2210-2.i386.rpm}
-@item @uref{http://www.mysql.com/Downloads/Contrib/php-pg-3.0.13-1.i386.rpm,php-pg-3.0.13-1.i386.rpm}
-@item @uref{http://www.mysql.com/Downloads/Contrib/php-pg-manual-3.0.13-1.i386.rpm,php-pg-manual-3.0.13-1.i386.rpm}
-@item @uref{http://www.mysql.com/Downloads/Contrib/php-pg-mysql-3.0.13-1.i386.rpm,php-pg-mysql-3.0.13-1.i386.rpm}
-@item @uref{http://www.mysql.com/Downloads/Contrib/phpMyAdmin-2.0.5-1.noarch.rpm,phpMyAdmin-2.0.5-1.noarch.rpm}
-@end itemize
-
-@cindex Funktionen, n�tzliche
-@appendixsec N�tzliche Funktionen
-@itemize @bullet
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysnprintf.c,mysnprintf.c}
-sprintf()-Funktion f�r SQL-Anfragen, die Blobs escapen kann. Von Chunhua Liu.
-@end itemize
-
-@appendixsec Windows-Programme
-@itemize @bullet
-@item @uref{http://www.mysql.com/Downloads/Contrib/LaunchMySQL.zip, LaunchMySQL.zip}
-Das Programm startet den MySQL-Server, f�hrt ihn herunter und gibt
-Status-Informationen aus. Von Bill Thompson
-@end itemize
-
-@appendixsec Nicht kategorisiert
-
-@itemize @bullet
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/findres.pl, findres.pl}
-Findet reservierte W�rter in Tabellen. Von Nem W Schlecht.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/handicap.tar.gz, handicap.tar.gz}
-Performance-Handicapping-System f�r Yachten. Benutzt PHP. Von
-@email{rhill@@stobyn.ml.org}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/hylalog-1.0.tar.gz, hylalog-1.0.tar.gz}
-Speichert ausgehende @code{hylafax}-Faxe in einer MySQL-Datenbank. Von
-Sinisa Milivojevic, @email{sinisa@@mysql.com}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/mrtg-mysql-1.0.tar.gz, mrtg-mysql-1.0.tar.gz}
-MySQL-Status-Ausgabe mit MRTG, von Luuk de Boer, @email{luuk@@wxs.nl}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/wuftpd-2.4.2.18-mysql_Support.2.tar.gz, wuftpd-2.4.2.18-mysql_Support.2.tar.gz}
-Patches, um Loggen nach MySQL f�r WU-ftpd hinzuzuf�gen. Von Zeev Suraski,
-@email{bourbon@@netvision.net.il}.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/wu-ftpd-2.6.0-mysql.4.tar.gz,wu-ftpd-2.6.0-mysql.4.tar.gz}
-Patches, um Loggen nach MySQL f�r WU-ftpd 2.6.0 hinzuzuf�gen. Von
-@email{takeshi@@SoftAgency.co.jp}, basierend auf den
-Zeev-Suraski-wuftpd-Patches.
-
-@item @uref{http://www.mysql.com/Downloads/Contrib/Old-Versions, Alte Versionen}
-Fr�here Versionen von Dingen in diesen Listen, an denen Sie wahrscheinlich
-nicht interessiert sind.
-@end itemize
-@page
-
-
-
-
-@node Credits, News, Contrib, Top
-@c German node Danksagungen
-@appendix Danksagungen
-
-@cindex Entwickler, Auflistung
-
-Dieser Anhang listet die Entwickler, Kontributoren und Unterst�tzer auf,
-die mitgeholfen haben, dass MySQL das wird, was es heute ist.
-
-
-
-@menu
-* Developers::
-* Contributors::
-* Supporters::
-@end menu
-
-@node Developers, Contributors, Credits, Credits
-@c German node Entwickler
-@appendixsec Entwickler bei MySQL AB
-
-Hier sind die Entwickler, die von @code{MySQL AB} angestellt wurden, um an
-@code{MySQL} zu arbeiten, ungef�hr in der Reihenfolge ihres Eintritts.
-Neben dem Namen wird aufgelistet, f�r welche Teilaufgaben der Entwickler
-verantwortlich ist oder welche Leistungen er erbracht hat.
-
-@table @asis
-@item Michael (Monty) Widenius
-Schrieb folgende Bestandteile von MySQL:
-@itemize @bullet
-@item
-Den gesamten Haupt-Code in @code{mysqld}.
-@item
-Neue Funktionen f�r die Zeichenketten-Bibliothek.
-@item
-Das meiste der @code{mysys}-Bibliothek.
-@item
-Die @code{ISAM}- und @code{MyISAM}-Bibliotheken (B-Baum-Index-Datei-Handler
-mit Index-Komprimierung und verschiedenen Datensatzformaten).
-@item
-Die @code{HEAP}-Bibliothek. Ein Speicher-Tabellensystem mit unserem
-�berragenden komplett dynamischen Hashing. In Gebrauch seit 1981 und
-ver�ffentlicht um 1984.
-@item
-Das @code{replace}-Programm (ansehen, es ist COOL!).
-@item
-@strong{MyODBC}, den ODBC-Treiber f�r Windows95.
-@item
-Behob Bugs in MIT-pThread, um sie f�r MySQL zum Laufen zu bringen, sowie
-Unireg, ein curses-basierendes Applikationswerkzeug vielen Utilities.
-@item
-Portierung von @code{mSQL}-Werkzeugen wie @code{msqlperl},
-@code{DBD}/@code{DBI} und @code{db2mysql}.
-@item
-Das meiste von Crash-me und die Grundlage f�r die MySQL-Benchmarks.
-@end itemize
-
-@item David Axmark
-@itemize @bullet
-@item
-Koordinator und urspr�nglicher Haupt-Schreiber des
-@strong{Referenzhandbuchs}, inklusive Verbesserungen von @code{texi2HTML}.
-@item
-Automatische Website-Aktualisierung des Handbuchs.
-@item
-Urspr�ngliche Autoconf-, Automake- und Libtool-Unterst�tzung.
-@item
-Den Lizensierungs-Kram.
-@item
-Teile all der Textdateien. (Heutzutage ist nur noch die @file{README}
-�brig. Der Rest befindet sich im Handbuch.)
-@item
-Viel Testen neuer Features.
-@item
-Unser ``kostenloser'' Inhouse-Software-Anwalt.
-@item
-Derjenige, der die Mailing-Liste wartet (und nie die Zeit hatte, es richtig
-zu machen ...)
-@item
-Unser Original-Portabilit�tscode (jetzt mehr als 10 Jahre alt). Heutzutage
-sind nur noch Teile von @code{mysys} �brig.
-@item
-Jemand, den Monty mitten in der Nacht anrufen kann, wenn er gerade das neue
-Feature zum Laufen gebracht hat.
-@end itemize
-
-@item Jani Tolonen
-@itemize @bullet
-@item
-@code{mysqlimport}
-@item
-Etliche Erweiterungen zum @code{mysql}-Client.
-@item
-@code{Prozeduranalyse()}
-@end itemize
-
-@item Sinisa Milivojevic
-@itemize @bullet
-@item
-Kompression (mit @code{zlib}) im Client-Server-Protokoll.
-@item
-Perfektes Hashing f�r die lexikalische Analyse-Phase.
-@item
-Den MySQLGUI-Client.
-@item
-Derjenige, der mysql++ wartet.
-@end itemize
-
-@item Tonu Samuel
-@itemize @bullet
-@item
-Unser Sicherheitsexperte.
-@item
-Vio-Schnittstelle (die Grundlage f�r das verschl�sselte Client-Server-Protokoll).
-@item
-MySQL-Dateisystem (eine Art, MySQL-Datenbanken als Dateien und
-Verzeichnisse zu benutzen).
-@item
-Den CASE-Ausdruck.
-@item
-Die MD5()- und COALESCE()-Funktionen.
-@item
-@code{RAID}-Unterst�tzung f�r @code{MyISAM}-Tabellen.
-@end itemize
-
-@item Sasha Pachev
-@itemize @bullet
-@item
-Replikation.
-@item
-@code{SHOW CREATE TABLE}.
-@item
-mod_mysql_include
-@item
-cgi++
-@item
-mysql-bench
-@end itemize
-
-@item Matt Wagner
-@itemize @bullet
-@item
-MySQL-Test-Suite.
-@item
-Unser Webmaster.
-@end itemize
-
-@item Miguel Solorzano
-@itemize @bullet
-@item
-Winmysqladmin.
-@end itemize
-
-@item Timothy Smith
-@itemize @bullet
-@item
-Dynamische Zeichen-Unterst�tzung.
-@item
-Verantwortlich f�r MySQL-configure.
-@end itemize
-
-@item Sergei Golubchik
-@itemize @bullet
-@item
-Volltextsuche.
-@item
-F�gte Schl�ssel zur @code{MERGE}-Bibliothek hinzu.
-@end itemize
-
-@item Jeremy Cole
-@itemize @bullet
-@item
-
-Korrekturlesen und Editieren dieses netten Handbuchs.
-@item
-@code{ALTER TABLE ... ORDER BY ...}.
-@item
-@code{UPDATE ... ORDER BY ...}.
-@item
-@code{DELETE ... ORDER BY ...}.
-@end itemize
-
-@item John Dean
-@itemize @bullet
-@item
-Den MySQL-GUI-Client.
-@end itemize
-
-@item Indrek Siitan
-@itemize @bullet
-@item
-Designer / Programmierer unserer Web-Schnittstelle.
-@end itemize
-@end table
-
-Folgende Nicht-Entwickler arbeiten ebenfalls bei oder zusammen mit MySQL
-AB:
-
-@table @asis
-@item
-Hans Kierkegaard - verantwortlich f�r die MySQL-Lizenz-Handhabung.
-@item
-Antti Halonen - Vertriebsleiter.
-@item
-Jonas Norrman - Beantwortet Lizensierungsfrage, die an
-@email{info@@mysql.com} geschickt werden.
-@item
-Erik Granberg - bedient MySQL-Partner (und eine Menge sonstiger Kram).
-@item
-Allan Larsson (der BOSS f�r TCX DataKonsult AB).
-@end table
-
-
-@node Contributors, Supporters, Developers, Credits
-@c German node Kontributoren
-@appendixsec Kontributoren zu MySQL
-
-@cindex Kontributoren, Auflistung
-
-W�hrend @code{MySQL AB} das gesammte Copyright f�r den @code{MySQL Server}
-und das @code{MySQL manual} besitzt, m�chten wir hier diejenigen Menschen
-nennen, die das Ein oder Andere zur @code{MySQL Distribution} beigetragen
-haben. Die Kontributoren sind in eher zuf�lliger Reihenfolge aufgef�hrt:
-
-@table @asis
-@item Paul DuBois
-Hilft mit, das Referenzhandbuch korrekt und verst�ndlich zu machen. Das
-beinhaltet, Montys und Davids Englischversuche in das Englisch zu
-�bertragen, das andere Leute kennen.
-@item Gianmassimo Vigazzola @email{qwerg@@mbox.vol.it} oder @email{qwerg@@tin.it}
-Die urspr�ngliche Portierung auf Win32/NT.
-@item Kim Aldale
-Half, Montys und Davids fr�he Englischversuche ins Englische umzuschreiben.
-@item Per Eric Olsson
-Mehr oder weniger konstruktive Kritik und Testen des dynamischen
-Datensatzformats.
-@item Irena Pancirov @email{irena@@mail.yacc.it}
-Win32-Portierung mit dem Borland-Compiler. @code{mysqlshutdown.exe} und
-@code{mysqlwatch.exe}
-@item David J. Hughes
-Er bem�hte sich, eine Shareware-SQL-Datenbank herzustellen. Wir bei TcX
-fingen mit @code{mSQL} an, fanden aber, dass es unsere Bed�rfnisse nicht
-befriedigen k�nne, daher schrieben wir stattdessen eine SQL-Schnittstelle
-zu unserem Applikation-Builder Unireg. @code{mysqladmin} und @code{mysql}
-sind Programme, die stark von ihren @code{mSQL}-Pendants beeinflusst sind.
-Wir haben uns gro�e M�he gegeben, die MySQL-Syntax zu einer Obermenge von
-@code{mSQL} zu machen. Viele API-Ideen sind von @code{mSQL} entliehen,
-damit es einfach ist, kostenlose @code{mSQL}-Programme nach MySQL zu
-portieren. MySQL enth�lt keinen Code von @code{mSQL}. Zwei Dateien in der
-Distribution (@file{client/insert_test.c} und @file{client/select_test.c})
-basieren auf den entsprechenden (keinem Copyright unterliegenden) Dateien
-in der @code{mSQL}-Distribution, sind aber als Beispiele abge�ndert, die
-die notwendigen �nderungen aufzeigen, wenn man Code von @code{mSQL} nach
-MySQL konvertiert. (@code{mSQL} unterliegt dem Copyright von David J. Hughes.)
-@item Fred Fish
-Seine exzellente C-Debugging- und Trace-Bibliothek. Monty hat eine Reihe
-kleinerer Verbesserungen an der Bibliothek vorgenommen (Geschwindigkeit und
-zus�tzliche Optionen).
-@item Richard A. O'Keefe
-Seine Public-Domain-Zeichenketten-Bibliothek.
-@item Henry Spencer
-Seine Regex-Bibliothek, benutzt bei @code{WHERE spalte REGEXP regexp}.
-@item Free Software Foundation
-Von ihnen haben wir einen exzellenten Compiler (@code{gcc}), die
-@code{libc}-Bibliothek (aus der wir @file{strto.c} entliehen haben, damit
-einiger Code unter Linux funktioniert), und die @code{readline}-Bibliothek
-(f�r den @code{mysql}-Client).
-@item Free Software Foundation und das XEmacs-Entwicklungsteam
-Ihr gro�artiger Editor, der f�r fast jeden Artikeltext bei TcX/MySQL
-AB/detron benutzt wird.
-@item Patrick Lynch
-F�r seine Hilfe bei @code{http://www.mysql.com/}.
-@item Fred Lindberg
-Er half, qmail aufzusetzen, um die MySQL Mailing-Liste zu handhaben, und
-f�r seine unglaubliche Unterst�tzung bei der Verwaltung der MySQL
-Mailing-Listen.
-@item Igor Romanenko @email{igor@@frog.kiev.ua}
-@code{mysqldump} (vormals @code{msqldump}, aber portiert und verbessert von
-Monty).
-@item Yuri Dario
-Er unterh�lt die MySQL-OS/2-Portierung und baut sie aus.
-@item Tim Bunce, Alligator Descartes
-F�r die @code{DBD}-(Perl)-Schnittstelle.
-@item Tim Bunce
-Autor von @code{mysqlhotcopy}.
-@item Andreas Koenig @email{a.koenig@@mind.de}
-F�r die Perl-Schnittstelle zu MySQL.
-@item Eugene Chan @email{eugene@@acenet.com.sg}
-F�r den Port von PHP zu MySQL.
-@item Michael J. Miller Jr. @email{mke@@terrapin.turbolift.com}
-Er schrieb das erste MySQL-Handbuch, und nahm etliche Bereinigungen der
-Rechtschreibung / Sprache f�r die FAQ vor (aus dieser entstand vor langer
-Zeit das MySQL-Handbuch).
-@item Yan Cailin
-Erster �bersetzer des MySQL-Referenzhandbuch in vereinfachtes Chinesisch,
-Anfang 2000, auf der die Big5- und HK-kodierten Versionen
-(@uref{http://mysql.hitstar.com, mysql.hitstar.com}) basieren.
-@uref{http://linuxdb.yeah.net, Private Homepage bei linuxdb.yeah.net}.
-@item Giovanni Maruzzelli @email{maruzz@@matrice.it}
-F�r die Portierung von iODBC (Unix ODBC).
-@item Chris Provenzano
-Portierbarer Benutzerebene-pThread. Aus dem Copyright: Dieses Produkt
-beinhaltet Software, die von Chris Provenzano, University of California,
-Berkeley und Kontributoren entwickelt wurde. Momentan benutzen wir Version
-1_60_beta6, die von Monty gepatcht wurde (siehe @file{with-pThread/Changes-mysql}).
-@item Xavier Leroy @email{Xavier.Leroy@@inria.fr}
-Der Autor von LinuxThread (benutzt von MySQL unter Linux).
-@item Zarko Mocnik @email{zarko.mocnik@@dem.si}
-Sortieren f�r slowenische Sprache und die @file{cset.tar.gz}-Module, die es
-vereinfachen, andere Zeichens�tze hinzuzuf�gen.
-@item "TAMITO" @email{tommy@@valley.ne.jp}
-Die @code{_MB}-Zeichensatz-Makros und die ujis- und sjis-Zeichens�tze.
-@item Joshua Chamas @email{joshua@@chamas.com}
-Grundlage f�r gleichzeitige Einf�geoperationen, erweiterte Datums-Syntax,
-Debuggen unter NT und Antworten in der MySQL-Mailing-Liste.
-@item Yves Carlier @email{Yves.Carlier@@rug.ac.be}
-@code{mysqlaccess}, ein Programm, das die Zugriffsrechte f�r einen Benutzer
-anzeigt.
-@item Rhys Stefan @email{rhys@@wales.com} (und GWE Technologies Limited)
-F�r JDBC, ein Modul, um Daten aus MySQL mit einem Java-Client zu
-extrahieren.
-@item Dr. Xiaokun Kelvin ZHU @email{X.Zhu@@brad.ac.uk}
-Weiterentwicklung der JDBC-Treiber und anderer MySQL-bezogener
-Java-Werkzeuge.
-@item James Cooper @email{pixel@@organic.com}
-Aufsetzen eines durchsuchbaren Mailing-Listen-Archivs auf seiner Site.
-@item Rick Mehalick @email{Rick_Mehalick@@i-o.com}
-F�r @code{xmysql}, einen grafischen X-Client f�r MySQL.
-@item Doug Sisk @email{sisk@@wix.com}
-Er stellt RPM-Pakete von MySQL f�r RedHat Linux bereit.
-@item Diemund Alexunder V. @email{axeld@@vial.ethz.ch}
-Er stelle RPM-Pakete von MySQL f�r RedHat Linux-Alpha bereit.
-@item Antoni Pamies Olive @email{toni@@readysoft.es}
-Er stellt RPM-Versionen vieler MySQL-Clients f�r Intel und SPARC bereit.
-@item Jay Bloodworth @email{jay@@pathways.sde.state.sc.us}
-Er stellte RPM-Versionen f�r MySQL-Version 3.21 bereit.
-@item Jochen Wiedmann @email{wiedmann@@neckar-alb.de}
-F�r die Wartung der Perl-@code{DBD::mysql}-Module.
-@item Therrien Gilbert @email{gilbert@@ican.net}, Jean-Marc Pouyot @email{jmp@@scalaire.fr}
-Franz�sische Fehlermeldungen.
-@item Petr snajdr, @email{snajdr@@pvt.net}
-Tschechische Fehlermeldungen.
-@item Jaroslaw Lewundowski @email{jotel@@itnet.com.pl}
-Polnische Fehlermeldungen.
-@item Miguel Angel Fernundez Roiz
-Spanische Fehlermeldungen.
-@item Roy-Magne Mo @email{rmo@@www.hivolda.no}
-Norwegische Fehlermeldungen und Testen von Version 3.21.#.
-@item Timur I. Bakeyev @email{root@@timur.tatarstan.ru}
-Russische Fehlermeldungen.
-@item @email{brenno@@dewinter.com} && Filippo Grassilli @email{phil@@hyppo.com}
-Italienische Fehlermeldungen.
-@item Dirk Munzinger @email{dirk@@trinity.saar.de}
-Deutsche Fehlermeldungen.
-@item Billik Stefan @email{billik@@sun.uniag.sk}
-Slowakische Fehlermeldungen.
-@item Stefan Saroiu @email{tzoompy@@cs.washington.edu}
-Rum�nische Fehlermeldungen.
-@item Peter Feher
-Ungarische Fehlermeldungen.
-@item Roberto M. Serqueira
-Portugiesische Fehlermeldungen.
-@item Carsten H. Pedersen
-D�nische Fehlermeldungen
-@item David Sacerdote @email{davids@@secnet.com}
-Knowhow f�r die Sicherheitspr�fung von DNS-Hostnamen.
-@item Wei-Jou Chen @email{jou@@nematic.ieo.nctu.edu.tw}
-Unterst�tzung f�r chinesisch(BIG5)-Zeichen.
-@item Wei He @email{hewei@@mail.ied.ac.cn}
-Viel Funktionalit�t f�r den chinesischen (GBK-) Zeichensatz.
-@item Zeev Suraski @email{bourbon@@netvision.net.il}
-@code{FROM_UNIXTIME()}-Zeitformatierung, @code{ENCRYPT()}-Funktionen und
-@code{bison}-Ratgeber.
-Aktives Mitglied der Mailing-Liste.
-@item Luuk de Boer @email{luuk@@wxs.nl}
-Portierte (und erweiterte) die Benchmark-Suite f�r @code{DBI}/@code{DBD}.
-War eine gro�e Hilfe bei @code{Crash-me} und beim Laufenlassen von
-Benchmarks. Einige neue Datumsfunktionen. Das mysql_setpermissions-Skript.
-@item Jay Flaherty @email{fty@@mediapulse.com}
-Gro�e Teile des Perl-@code{DBI}/@code{DBD}-Abschnitts im Handbuch.
-@item Paul Southworth @email{pauls@@etext.org}, Ray Loyzaga @email{yar@@cs.su.oz.au}
-Korrekturlesen des Referenzhandbuchs.
-@item Alexis Mikhailov @email{root@@medinf.chuvashia.su}
-Benutzerdefinierte Funktionen (UDFs); @code{CREATE FUNCTION} und
-@code{DROP FUNCTION}.
-@item Andreas F. Bobak @email{bobak@@relog.ch}
-Die @code{AGGREGATE}-Erweiterung f�r UDF-Funktionen.
-@item Ross Wakelin @email{R.Wakelin@@march.co.uk}
-Half, InstallShield f�r MySQL-Win32 aufzusetzen.
-@item Jethro Wright III @email{jetman@@li.net}
-Die @file{libmysql.dll}-Bibliothek.
-@item James Pereria @email{jpereira@@iafrica.com}
-Mysqlmanager, ein grafisches Win32-Werkzeug f�r die Administration von MySQL.
-@item Curt Sampson @email{cjs@@portal.ca}
-Portierung von MIT-pThread auf NetBSD/Alpha und NetBSD 1.3/i386.
-@item Antony T. Curtis @email{antony.curtis@@olcs.net}
-Portiierung von MySQL auf OS/2.
-@item Martin Ramsch @email{m.ramsch@@computer.org}
-Beispiele im MySQL-Tutorial.
-@item Steve Harvey
-Er machte @code{mysqlaccess} sicherer.
-@item Konark IA-64 Centre of Persistent Systems Private Limited
-@uref{http://www.pspl.co.in/konark/}. Hilfe bei der Win64-Portierung des
-MySQL-Servers.
-@item Albert Chin-A-Young.
-Configure-Aktualisierungen f�r Tru64, Unterst�tzung gro�er Dateien und
-verbesserte Unterst�tzung von TCP-Wrappern.
-@item John Birrell
-Emulation von pthread_mutex() f�r OS/2.
-@item Benjamin Pflugmann
-Erweiterte @code{MERGE}-Tabellen, so dass sie @code{INSERTS} handhaben.
-Aktives Mitglied der MySQL-Mailing-Listen.
-@end table
-
-Andere Kontributoren, Bug-Finder und Tester: James H. Thompson, Maurizio
-Menghini, Wojciech Tryc, Luca Berra, Zarko Mocnik, Wim Bonis, Elmar
-Haneke, @email{jehamby@@lightside}, @email{psmith@@BayNetworks.com},
-@email{duane@@connect.com.au}, Ted Deppner @email{ted@@psyber.com},
-Mike Simons, Jaakko Hyvatti.
-
-Und viele Bug-Berichte und Patches von den Leuten auf der Mailing-Liste.
-
-Gro�e Anerkennung zollen wir denjenigen, die uns halfen, Fragen auf der
-@code{mysql@@lists.mysql.com}-Mailing-Liste zu beantworten:
-
-@table @asis
-@item Daniel Koch @email{dkoch@@amcity.com}
-Irix-Setup.
-@item Luuk de Boer @email{luuk@@wxs.nl}
-Benchmark-Fragen.
-@item Tim Sailer @email{tps@@Benutzer.buoy.com}
-@code{DBD-mysql}-Fragen.
-@item Boyd Lynn Gerber @email{gerberb@@zenez.com}
-SCO-bezogene Fragen.
-@item Richard Mehalick @email{RM186061@@shellus.com}
-@code{xmysql}-bezogene Fragen und grunds�tzliche Installationsfragen.
-@item Zeev Suraski @email{bourbon@@netvision.net.il}
-Fragen zur Apache-Modul-Konfiguration (log & auth), PHP-bezogene Fragen,
-SQL-Syntax-bezogene Fragen und andere allgemeine Fragen.
-@item France Guasch @email{frankie@@citel.upc.es}
-Allgemeine Fragen.
-@item Jonathan J Smith @email{jsmith@@wtp.net}
-Fragen zu Betriebssystem-spezifschen Dingen bei Linux, SQL-Syntax- und
-andere Dinge, die etwas �berarbeitung bed�rfen.
-@item David Sklar @email{sklar@@student.net}
-MySQL von PHP und Perl aus benutzen.
-@item Alistair MacDonald @email{A.MacDonald@@uel.ac.uk}
-Noch nicht festgelegt, aber er ist flexibel und kann Linux und vielleicht
-HP-UX handhaben. Wird versuchen, Benutzer dazu zu bringen, @code{mysqlbug}
-zu benutzen.
-@item John Lyon @email{jlyon@@imag.net}
-Fragen zur Installation von MySQL auf Linux-Systemen, entweder mit
-@file{.rpm}-Dateien oder durch Kompilieren vom Quelltext.
-@item Lorvid Ltd. @email{lorvid@@WOLFENET.com}
-Einfache Fragen zu Rechnung / Lizenz / Support / Copyright.
-@item Patrick Sherrill @email{patrick@@coconet.com}
-Fragen zur ODBC- und VisualC++-Schnittstelle.
-@item Rundy Harmon @email{rjharmon@@uptimecomputers.com}
-@code{DBD}, Linux, und einige SQL-Syntax-Fragen.
-@end table
-
-
-@node Supporters, , Contributors, Credits
-@c German node Unterst�tzer
-@appendixsec Unterst�tzer von MySQL
-
-@cindex Unterst�tzende Unternehmen, Auflistung
-
-W�hrend @code{MySQL AB} das gesammte Copyright f�r den @code{MySQL Server}
-und das @code{MySQL manual} besitzt, m�chten wir hier diejenigen Unternehmen
-nennen, die die Entwicklung des @code{MySQL Servers} unterst�tzt haben.
-Sie haben geholfen, indem sie uns f�r die Entwicklung eines neuen
-Features bezahlten, indem sie MySQL-Features selbst entwickelten oder indem
-sie uns Hardware f�r die MySQL-Entwicklung gaben.
-
-@table @asis
-@item VA Linux / Andover.net
-Stiftete Replikation.
-@item NuSphere
-Editieren des MySQL-Referenzhandbuchs.
-@item Stork Design studio
-Die MySQL-Website zwischen 1998 und 2000.
-@item Intel
-Trugen zur Entwicklung auf Windows- und Linux-Plattformen bei.
-@item Compaq
-Trugen zur Entwicklung auf Linux/Alpha bei.
-@item SWSoft
-Entwicklung der eingebetteten @code{mysqld}-Version.
-@item FutureQuest
-@code{--skip-show-variables}
-@end table
-
-
-
-
-@node News, Porting, Credits, Top
-@c German node Neuigkeiten
-@appendix MySQL-�nderungsverlauf (Change History)
-
-@cindex ChangeLog
-@cindex �nderungen, Log
-@cindex Log, �nderungen
-
-Dieser Anhang listet die �nderungen von Version zu Version im
-MySQL-Quellcode auf.
-
-Beachten Sie, dass wir versuchen, das Handbuch zeitgleich mit den
-�nderungen an MySQL zu aktualisieren. Wenn Sie unten eine Version
-aufgelistet sehen, die Sie auf der
-@uref{http://www.mysql.com/downloads/,MySQL-Download-Seite} nicht finden
-k�nnen, hei�t das, dass die Version noch nicht ver�ffentlicht wurde!
-
-
-
-@menu
-* News-4.0.x::
-* News-3.23.x::
-@end menu
-
-@node News-4.0.x, News-3.23.x, News, News
-@c German node Neuigkeiten-4.0.x
-@appendixsec �nderungen in Release 4.0.x (Entwicklung; Alpha)
-
-Wir arbeiten mittlerweile aktiv an MySQL 4.0 und werden nur noch kritische
-Bug-Bereinigungen f�r MySQL 3.23 herausgeben. Wir aktualisieren diesen
-Abschnitt, wenn wir neue Features hinzuf�gen, so dass andere unserer
-Entwicklung folgen k�nnen.
-
-Unser TODO-Abschnitt enth�lt, was wir f�r 4.0 planen. @xref{TODO}.
-
-@cindex �nderungen, Version 4.0
-
-
-@menu
-* News-4.0.2::
-* News-4.0.1::
-* News-4.0.0::
-@end menu
-
-@node News-4.0.2, News-4.0.1, News-4.0.x, News-4.0.x
-@c German node Neuigkeiten-4.0.2
-@appendixsubsec �nderungen in Release 4.0.2
-
-@itemize @bullet
-@item
-Bug in @code{FLUSH QUERY CACHE} behoben.
-@item
-@code{CAST()}- und @code{CONVERT()}-Funktionen hinzugef�gt.
-@item
-Reihenfolge ge�ndert, wie Schl�ssel in Tabellen erzeugt werden.
-@item
-Neue Spalten @code{Null} und @code{Index_type} zu @code{SHOW INDEX}
-hinzugef�gt.
-@end itemize
-
-@node News-4.0.1, News-4.0.0, News-4.0.2, News-4.0.x
-@c German node Neuigkeiten-4.0.1
-@appendixsubsec �nderungen in Release 4.0.1
-
-@itemize @bullet
-@item
-Bug behoben, wenn @code{HANDLER} mit einem nicht unterst�tzten Tabellentyp
-verwendet wurde.
-@item
-@code{mysqldump} schreibt jetzt @code{ALTER TABLE tabelle DISABLE KEYS} und
-@code{ALTER TABLE tabelle DISABLE KEYS} in den SQL-Dump.
-@item
-@code{mysql_fix_extensions}-Skript hinzugef�gt.
-@item
-Stack-�berlaufproblem @code{LOAD DATA FROM MASTER} auf OSF1 behoben.
-@item
-Herunterfahr-Problem auf HPUX behoben.
-@item
-Funktionen @code{des_encrypt()} und @code{des_decrypt()} hinzugef�gt.
-@item
-Statement FLUSH DES_KEY_FILE hinzugef�gt.
-@item
-mysqld-Option @code{--des-key-file} hinzugef�gt.
-@item
-@code{HEX(string)} gibt jetzt die Buchstaben in der Zeichenkette
-konvertiert in hexadezimal zur�ck.
-@item
-Problem mit @code{GRANT} bei der Benutzung von @code{lower_case_tables ==
-1} behoben.
-@item
-@code{SELECT ... IN SHARE MODE} in @code{SELECT .. LOCK IN SHARE MODE} (wie
-in MySQL 3.23) ge�ndert.
-@item
-Ein neuer Anfragen-Cache, der Ergebnisse identischer @code{SELECT}-Anfragen
-zwischenspeichert.
-@item
-Coredump-Bug auf 64-Bit-Maschinen beim Erhalt eines falschen
-Kommunikationspakets behoben.
-@item
-@code{MATCH ... AGAINST(... IN BOOLEAN MODE)} funktioniert jetzt auch ohne
-@code{FULLTEXT}-Index.
-@item
-Slave, der vom 3.23-Master repliziert, in Ordnung gebracht.
-@item
-Diverse Replikationsprobleme behoben / bereinigt.
-@item
-Herunterfahren funktioniert jetzt auf Mac OS X.
-@item
-@file{myisam/ft_dump}-Werkzeug zur Low-Level-Inspektion von
-@code{FULLTEXT}-Indexen hinzugef�gt.
-@item
-Bug in @code{DELETE ... WHERE ... MATCH ...} behoben.
-@item
-Unterst�tzung f�r @code{MATCH ... AGAINST(... IN BOOLEAN MODE)}
-hinzugef�gt. @strong{Hinweis: Sie m�ssen Ihre Tabellen mit
-@code{ALTER TABLE tabelle TYPE=MyISAM} neu aufbauen, um Boole'sche
-Volltextsuche benutzen zu k�nnen.}
-@item
-@code{LOCATE()} und @code{INSTR()} sind abh�ngig von der verwendeten
-Gro�-/Kleinschreibung, wenn keins der Argumente eine bin�re Zeichenkette
-ist.
-@item
-@code{RND()}-Initialisierung ge�ndert, so dass @code{RND(N)} und
-@code{RND(N+1)} verschiedener sind.
-@item
-Coredump-Bug in @code{UPDATE ... ORDER BY} behoben.
-@item
-@code{INSERT INTO .. SELECT} ge�ndert, damit es bei Fehlern vorgabem��ig
-anh�lt.
-@item
-@code{DATA DIRECTORY}- und @code{INDEX DIRECTORY}-Anweisungen werden unter
-Windows ignoriert.
-@item
-Boole'sche Volltextsuche hinzugef�gt. Diese sollte als fr�he Alphaversion
-betrachtet werden.
-@item
-@code{MODIFY} und @code{CHANGE} in @code{ALTER TABLE} erweitert, damit sie
-das @code{AFTER}-Schl�sselwort akzeptieren.
-@item
-Index wird jetzt in @code{ORDER BY} von einer ganzen InnoDB-Tabelle
-verwendet.
-@end itemize
-
-@node News-4.0.0, , News-4.0.1, News-4.0.x
-@c German node Neuigkeiten-4.0.0
-@appendixsubsec �nderungen in Release 4.0.0
-
-@itemize @bullet
-@item
-Variablen @code{ft_min_word_len}, @code{ft_max_word_len} und
-@code{ft_max_word_len_for_sort} hinzugef�gt.
-@c German FIX removed extra @itemize @bullet from right here
-@item
-Dokumentation f�r @code{libmysqld}, die eingebettete
-MySQL-Server-Bibliothek, hinzugef�gt. Beispielprogramme (ein
-@code{mysql}-Client und @code{mysqltest}-Testprogramm) hinzugef�gt, die
-@code{libmysqld} benutzen.
-@item
-@code{my_thread_init()} und @code{my_thread_end()} aus mysql_com.h entfernt
-und @code{mysql_thread_init()} und @code{mysql_thread_end()} zu mysql.h
-hinzugef�gt.
-@item
-Vorzeichenlose @code{BIGINT}-Konstanten funktionieren jetzt. @code{MIN()}
-und @code{MAX()} handhabt vorzeichenbehaftete und vorzeichenlose
-@code{BIGINT}-Zahlen korrekt.
-@item
-Neuer Zeichensatz @code{latin_de}, der korrektes deutsches Sortieren
-erm�glicht.
-@item
-@code{TRUNCATE TABLE} und @code{DELETE FROM tabelle} sind jetzt separate
-Funktionen. Ein Vorteil davon ist, dass @code{DELETE FROM tabelle} jetzt
-die Anzahl gel�schter Zeilen zur�ckgibt.
-@item
-@code{DROP DATABASE} f�hrt jetzt ein @code{DROP TABLE} auf alle Tabellen in
-der Datenbank aus, was ein Problem mit InnoDB-Tabellen behebt.
-@item
-Unterst�tzung f�r @code{UNION} hinzugef�gt.
-@item
-Eine neue @code{HANDLER}-Schnittstelle zu @code{MyISAM}-Tabellen.
-@item
-Unterst�tzung f�r @code{INSERT} auf @code{MERGE}-Tabellen hinzugef�gt.
-Patch von Benjamin Pflugmann.
-@item
-@code{WEEK(#,0)} dem Kalender in den USA angepasst.
-@item
-@code{COUNT(DISTINCT)} ist etwa 30% schneller.
-@item
-Alle internen Listen-Handlings in der Geschwindigkeit verbessert.
-@item
-Das Erzeugen von Volltext-Indexen ist jetzt viel schneller.
-@item
-Baum-�hnlicher Cache, um Massen-Einf�gevorg�nge und die
-@code{myisam_bulk_insert_tree_size}-Variable zu beschleunigen.
-@item
-Suchen auf komprimierten (@code{CHAR}/@code{VARCHAR})-Schl�sseln ist jetzt
-viel schneller.
-@item
-Anfragen folgenden Typs optimiert:
-@code{SELECT DISTINCT * from tabelle ORDER by schluessel_teil1 LIMIT #}
-@item
-@code{SHOW CREATE TABLE} zeigt jetzt alle Tabellenattribute.
-@item
-@code{ORDER BY ... DESC} kann jetzt Schl�ssel benutzen.
-@item
-@code{LOAD DATA FROM MASTER} setzt jetzt "auto-magisch" einen Slave auf.
-@item
-@code{safe_mysqld} in @code{mysqld_safe} umbenannt.
-@item
-Unterst�tzung f�r symbolische Links auf @code{MyISAM}-Tabellen hinzugef�gt.
-Symlink-Handhabung ist jetzt vorgabem��ig f�r Windows aktiviert.
-@item
-@code{LOAD DATA FROM MASTER} setzt "auto-magisch" einen Slave auf.
-@item
-@code{SQL_CALC_FOUND_ROWS} und @code{FOUND_ROWS()} hinzugef�gt. Das
-erm�glicht es herauszufinden, wie viele Zeilen eine Anfrage ohne eine
-@code{LIMIT}-Klausel zur�ckgegeben h�tte.
-@item
-Ausgabeformat von @code{SHOW OPEN TABLES} ge�ndert.
-@item
-@code{SELECT ausdruck LIMIT ...} wird zugelassen.
-@item
-@code{IDENTITY} als Synonym f�r @code{AUTO_INCREMENT} hinzugef�gt (wie
-Sybase).
-@item
-@code{ORDER BY}-Syntax zu @code{UPDATE} und @code{DELETE} hinzugef�gt.
-@item
-@code{SHOW INDEXES} ist jetzt ein Synonym f�r @code{SHOW INDEX}.
-@item
-@code{ALTER TABLE tabelle DISABLE KEYS}- und @code{ALTER TABLE tabelle
-ENABLE KEYS}-Befehle hinzugef�gt.
-@item
-@code{IN} kann anstelle von @code{FROM} in @code{SHOW}-Befehlen benutzt
-werden.
-@item
-ANSI-SQL-Syntax @code{X'Hexadezimalzahl'} wird zugelassen.
-@item
-Globale Sperr-Handhabung f�r @code{FLUSH TABLES with READ LOCK} aufger�umt.
-@item
-Problem mit @code{DATETIME = constant} in @code{WHERE}-Optimierungen
-behoben.
-@end itemize
-
-
-@node News-3.23.x, , News-4.0.x, News
-@c German node Neuigkeiten-3.23.x
-@appendixsec �nderungen in Release 3.23.x (Stabil)
-
-@cindex changes, version 3.23
-
-Das 3.23-Release hat etliche wichtige Features, die in fr�heren Versionen
-nicht vorhanden sind. Es wurden drei neue Tabellentypen hinzugef�gt:
-
-@table @asis
-@item @strong{MyISAM}
-Eine neue ISAM-Bibliothek, die auf SQL und Unterst�tzung gro�er Dateien
-abgestimmt ist.
-@item @strong{BerkeleyDB} oder @strong{BDB}
-Benutzt die Berkeley-DB-Bibliothek von Sleepycat Software, um
-transaktionssichere Tabellen zu implementieren.
-@item @strong{InnoDB}
-Ein transaktionssicherer Tabellen-Handler, der Sperren auf Zeilenebene und
-viele Oracle-�hnliche Features unterst�tzt.
-@end table
-
-Beachten Sie, dass nur MyISAM in der Standard-Bin�rdistribution verf�gbar
-ist.
-
-Das 3.23-Release beinhaltet ausserdem Unterst�tzung f�r
-Datenbank-Replikation zwischen einem Master und vielen Slaves,
-Volltext-Indexierung und vieles mehr.
-
-Alle neuen Features werden in der 4.0-Version weiter entwickelt. Nur
-Bug-Behebungen und kleinere Verbesserungen bestehender Features werden zu
-3.23 hinzugef�gt.
-
-Der Replikationscode und der BerkeleyDB-Code sind noch nicht so gut
-getestet wie der Rest des Codes, daher wird es wahrscheinlich zuk�nftig
-noch einige Releases von 3.23 mit kleineren Behebungen f�r diesen Teil des
-Codes geben. Solange Sie diese Features nicht benutzen, sollten Sie mit
-MySQL 3.23 auf der sicheren Seite liegen!
-
-Beachten Sie, dass das Gesagte nicht hei�t, dass Replikation oder Berkeley
-DB nicht funktionieren. Wir haben den gesamten Code ausgiebig getestet,
-inklusive Replikation und BDB, ohne irgend welche Probleme zu finden. Es
-hei�t nur, dass nicht so viele Benutzer diesen Code verwenden wie den Rest
-des Codes, weshalb wir noch nicht 100% auf diesen Teil des Codes vertrauen.
-
-
-@menu
-* News-3.23.43::
-* News-3.23.42::
-* News-3.23.41::
-* News-3.23.40::
-* News-3.23.39::
-* News-3.23.38::
-* News-3.23.37::
-* News-3.23.36::
-* News-3.23.35::
-* News-3.23.34a::
-* News-3.23.34::
-* News-3.23.33::
-* News-3.23.32::
-* News-3.23.31::
-* News-3.23.30::
-* News-3.23.29::
-* News-3.23.28::
-* News-3.23.27::
-* News-3.23.26::
-* News-3.23.25::
-* News-3.23.24::
-* News-3.23.23::
-* News-3.23.22::
-* News-3.23.21::
-* News-3.23.20::
-* News-3.23.19::
-* News-3.23.18::
-* News-3.23.17::
-* News-3.23.16::
-* News-3.23.15::
-* News-3.23.14::
-* News-3.23.13::
-* News-3.23.12::
-* News-3.23.11::
-* News-3.23.10::
-* News-3.23.9::
-* News-3.23.8::
-* News-3.23.7::
-* News-3.23.6::
-* News-3.23.5::
-* News-3.23.4::
-* News-3.23.3::
-* News-3.23.2::
-* News-3.23.1::
-* News-3.23.0::
-@end menu
-
-@node News-3.23.43, News-3.23.42, News-3.23.x, News-3.23.x
-@c German node Neuigkeiten-3.23.43
-@appendixsubsec �nderungen in Release 3.23.43
-@itemize @bullet
-@item
-Bug behoben, der mit sehr geringer Wahrscheinlichkeit auftritt, der keine
-�bereinstimmenden Zeilen zur�ckgab bei SELECT mit vielen Tabellen,
-mehrspaltigen Indexen und 'Bereichs-'-Typen.
-@item
-Coredump-Bug behoben, der mit sehr geringer Wahrscheinlichkeit auftritt,
-wenn man @code{EXPLAIN SELECT} mit vielen Tabellen und @code{ORDER BY}
-ausf�hrt.
-@item
-Bug in @code{LOAD DATA FROM MASTER} bei der Benutzung einer Tabelle mit
-@code{CHECKSUM=1} behoben.
-@item
-Eindeutige Fehlermeldung hinzugef�gt, die man bei einer Blockierung
-(Deadlock) w�hrend einer Transaktion mit BDB-Tabellen erh�lt.
-@item
-Problem mit @code{BDB}-Tabellen und @code{UNIQUE}-Spalten, die als
-@code{NULL} definiert wurden, behoben.
-@item
-Problem mit @code{myisampack} bei der Benutzung von CHAR-Spalten, die
-Leerzeichen aufgef�llt wurden, behoben.
-@item
-Patch von Yuri Dario f�r OS2 angewandt.
-@item
-Bug in @code{--safe-user-create} behoben.
-@end itemize
-
-@node News-3.23.42, News-3.23.41, News-3.23.43, News-3.23.x
-@c German node Neuigkeiten-3.23.42
-@appendixsubsec �nderungen in Release 3.23.42
-@itemize @bullet
-@item
-Problem bei der Benutzung von @code{LOCK TABLES} und @code{BDB}-Tabellen
-behoben.
-@item
-Problem mit @code{REPAIR TABLE} auf MyISAM-Tabellen mit Zeilenl�ngen
-zwischen 65517 und 65520 Bytes behoben.
-@item
-Seltenen H�nger bei @code{mysqladmin shutdown} behoben, wenn es viel
-Aktivit�t auf einem anderen Thread gab.
-@item
-Problem mit @code{INSERT DELAYED} behoben, bei dem ein verz�gerter Thread
-auf @code{Upgrade locks} ohne ersichtlichen Grund h�ngen konnte.
-@item
-Problem mit @code{myisampack} und @code{BLOB} behoben.
-@item
-Problem beim Editieren von @code{.MRG}-Tabellen von Hand behoben.
-(Patch von Benjamin Pflugmann).
-@item
-Es wird erzwungen, dass alle Tabellen in einer @code{MERGE}-Tabelle von
-derselben Datenbank kommen.
-@item
-Bug mit @code{LOAD DATA INFILE} und transaktionalen Tabellen behoben.
-@item
-Bug bei der Benutzung von @code{INSERT DELAYED} mit falschen
-Spaltendefinitionen behoben.
-@item
-Coredump w�hrend @code{REPAIR} besonders besch�digter Tabellen behoben.
-@item
-Bug in @code{InnoDB}- und @code{AUTO_INCREMENT}-Spalten behoben.
-@item
-Bug in @code{InnoDB} und @code{RENAME TABLE}-Spalten behoben.
-@item
-Kritischer Bug in @code{InnoDB}- und @code{BLOB}-Spalten behoben. Wenn man
-@code{BLOB}-Spalten gr��er als 8000 Bytes in einer @code{InnoDB}-Tabelle
-benutzte, musste man die Tabelle mit @code{mysqldump} sichern, l�schen und
-aus dem Dump neu aufbauen.
-@item
-Gro�en Patch f�r OS/2 von Yuri Dario angewandt.
-@item
-Problem mit @code{InnoDB} behoben, bei dem man den Fehler @code{Can't
-execute the given command...} bekommen konnte, selbst wenn man keine aktive
-Transaktion hatte.
-@item
-Einige kleine Probleme behoben, die Gemini betrafen.
-@item
-Echte arithmetische Operationen werden selbst dann in einem
-Ganzzahl-Zusammenhang benutzt, wenn nicht alle Argumente Ganzzahlen sind.
-(Behebt einen wenig h�ufigen Bug in einigen Ganzzahl-Kontexten.)
-@item
-Unter Windows wird nicht alles in Kleinschreibung erzwungen (um ein Problem
-mit Windows und @code{ALTER TABLE} zu beheben). @code{--lower_case_names}
-funktioniert jetzt auch unter Unix.
-@item
-Automatisches Rollback behoben, das ausgef�hrt wurde, wenn das Beenden
-eines Threads keinen anderen Thread blockiert.
-@end itemize
-
-@node News-3.23.41, News-3.23.40, News-3.23.42, News-3.23.x
-@c German node Neuigkeiten-3.23.41
-@appendixsubsec �nderungen in Release 3.23.41
-
-@itemize @bullet
-@item
-Option @code{--sql-mode=option[,option[,option]]} hinzugef�gt.
-@xref{Command-line options}.
-@item
-M�gliches Problem mit @code{shutdown} auf Solaris behoben, wobei die
-@file{.pid}-Datei nicht gel�scht wurde.
-@item
-InnoDB unterst�tzt jetzt Zeilen < 4 GB. Die vorherige Beschr�nkung war
-8.000 Bytes.
-@item
-Die @code{doublewrite}-Datei-Flush-Methode wird in InnoDB benutzt. Sie
-reduziert die Notwendigkeit von Unix-fsync-Aufrufen auf einen Bruchteil und
-verbessert die Performance auf den meisten Unix-Varianten.
-@item
-Sie k�nnen jetzt den InnoDB-Monitor benutzen, um etliche Informationen �ber
-den InnoDB-Status auf die Standardausgabe auszugeben, inklusive Sperren.
-N�tzlich zum Tunen der Performance.
-@item
-Mehrere Bugs, die in InnoDB H�nger verursachen konnten, behoben.
-@item
-@code{record_buffer} in @code{record_buffer} und @code{record_rnd_buffer}
-aufgeteilt. Um zu vorherigen MySQL-Versionen kompatibel zu bleiben, wird
-@code{record_rnd_buffer} auf den Wert von @code{record_buffer} gesetzt,
-wenn es nicht explizit gesetzt wird.
-@item
-Optimierungs-Bug in @code{ORDER BY} behoben, bei dem einige @code{ORDER
-BY}-Teile f�lschlicherweise entfernt wurden.
-@item
-Overflow-Bug bei @code{ALTER TABLE} und @code{MERGE}-Tabellen behoben.
-@item
-Prototypen f�r @code{my_thread_init()} und @code{my_thread_end()} zu
-@file{mysql_com.h} hinzugef�gt.
-@item
-Option @code{--safe-user-create} to @code{mysqld} hinzugef�gt.
-@item
-Bug in @code{SELECT DISTINCT ... HAVING} behoben, der die Fehlermeldung
-@code{Can't find record in '#...} verursachte.
-@end itemize
-
-
-@node News-3.23.40, News-3.23.39, News-3.23.41, News-3.23.x
-@c German node Neuigkeiten-3.23.40
-@appendixsubsec �nderungen in Release 3.23.40
-
-@itemize @bullet
-@item
-Problem mit @code{--low-priority-updates} und @code{INSERT}'s behoben.
-@item
-Bug im Slave-Thread beseitigt, bei dem dieser in seltenen F�llen um 22 Byte
-vor den Offset im Master kommen konnte.
-@item
-@code{slave_wait_timeout} f�r Replikation hinzugef�gt.
-@item
-Problem mit @code{UPDATE} und @code{BDB}-Tabellen behoben.
-@item
-Problematischen Bug in @code{BDB}-Tabellen behoben, der bei der Benutzung
-von Schl�sselteilen auftrat.
-@item
-Problem bei der Benutzung von @code{GRANT FILE ON datenbank.* ...} behoben.
-Vorher wurde die @code{DROP}-Berechtigung f�r die Datenbank hinzugef�gt.
-@item
-Bug bei @code{DELETE FROM tabelle ... LIMIT 0} und @code{UPDATE FROM
-tabelle ... LIMIT 0} behoben, die sich vorher so verhielten, als g�be es
-keine @code{LIMIT}-Klausel (sie l�schten oder aktualisierten alle
-ausgew�hlten Zeilen).
-@item
-@code{CHECK TABLE} pr�ft jetzt, ob eine @code{AUTO_INCREMENT}-Spalte den
-Wert 0 enth�lt.
-@item
-Wenn man @code{SIGHUP} an @code{mysqld} schickt, werden jetzt nur die Logs
-auf Platte zur�ckgeschrieben (flush), nicht die Replikation zur�ckgesetzt.
-@item
-Parser in Ordnung gebracht, so dass er jetzt Flie�kommazahlen des Typs
-@code{1.0e1} (kein Vorzeichen nach @code{e}) zul��t.
-@item
-Option @code{--force} f�r @code{myisamchk} aktualisiert jetzt auch Zust�nde
-(Status).
-@item
-Option @code{--warnings} f�r @code{mysqld} hinzugef�gt. @code{mysqld} gibt
-jetzt nur den Fehler @code{Aborted connection} aus, wenn diese Option
-benutzt wird.
-@item
-Problem mit @code{SHOW CREATE TABLE} behoben, wenn man keinen @code{PRIMARY
-KEY} hatte.
-@item
-Saubere Behebung der Umbenennung von @code{innodb_unix_file_flush_method}
-in @code{innodb_flush_method}.
-@item
-Bug beim Umwandeln von @code{UNSIGNED BIGINT} in @code{DOUBLE} behoben.
-Dieser verursachte bei Vergleichen mit @code{BIGINT}-Werten ausserhalb des
-vorzeichenbehafteten Bereichs ein Problem.
-@item
-Bug in @code{BDB}-Tabellen behoben, wenn man leere Tabellen abfragte.
-@item
-Bug bei der Benutzung von @code{COUNT(DISTINCT)} mit @code{LEFT JOIN}
-behoben, wenn es keine �bereinstimmenden Zeilen gab.
-@item
-Alle Dokumentation bez�glich @code{GEMINI}-Tabellen entfernt. @code{GEMINI}
-wird nicht unter einer Open-Source-Lizenz herausgegeben.
-@end itemize
-
-
-@node News-3.23.39, News-3.23.38, News-3.23.40, News-3.23.x
-@c German node Neuigkeiten-3.23.39
-@appendixsubsec �nderungen in Release 3.23.39
-
-@itemize @bullet
-@item
-Die @code{AUTO_INCREMENT}-Zahlenfolge wurde beim L�schen und Hinzuf�gen
-einer @code{AUTO_INCREMENT}-Spalte nicht zur�ckgesetzt.
-@item
-@code{CREATE ... SELECT} erzeugt jetzt nicht eindeutige Indexe verz�gert.
-@item
-Problem behoben, bei dem @code{LOCK TABLES tabelle READ} gefolgt von
-@code{FLUSH TABLES} eine exklusive Sperre auf die Tabelle setzte.
-@item
-@code{REAL}-@@Variablen wurden mit 2 Ziffern dargestellt, wenn sie in
-Zeichenketten umgewandelt wurden.
-@item
-Problem mit h�ngendem Client behoben, wenn @code{LOAD TABLE FROM MASTER}
-fehlschlug.
-@item
-@code{myisamchk --fast --force} repariert jetzt keine Tabellen mehr, bei
-denen nur der �ffnen-Z�hler falsch ist.
-@item
-Funktionen zur Handhabung von symbolischen Links hinzugef�gt, um sich das
-Leben in Version 4.0 zu erleichtern.
-@item
-Wir benutzen jetzt die @code{-lcma}-Thread-Bibliothek unter HP-UX 10.20, so
-dass MySQL auf HP-UX stabiler l�uft.
-@item
-Problem mit @code{IF()} und Anzahl von Dezimalstellen im Ergebnis behoben.
-@item
-Funktionen zum Extrahieren von Datumsanteilen in Ordnung gebracht, so dass
-sie jetzt mit Datumsangaben funktionieren, bei denen Tag und / oder Monat 0
-sind.
-@item
-Argumentl�nge in Optionsdateien von 256 auf 512 Zeichen erweitert.
-@item
-Problem bei Herunterfahren, wenn @code{INSERT DELAYED} auf ein @code{LOCK
-TABLE} wartete, behoben.
-@item
-Coredump-Bug in InnoDB behoben, wenn der Tabellenplatz (Tablespace) voll
-war.
-@item
-Problem mit @code{MERGE}-Tabellen und gro�en Tabellen (> 4 GB) und der
-Benutzung von @code{ORDER BY} behoben.
-@end itemize
-
-
-@node News-3.23.38, News-3.23.37, News-3.23.39, News-3.23.x
-@c German node Neuigkeiten-3.23.38
-@appendixsubsec �nderungen in Release 3.23.38
-
-@itemize @bullet
-@item
-Bug behoben, bei dem @code{SELECT} von @code{MERGE}-Tabellen manchmal zu
-falsch sortierten Zeilen f�hrte.
-@item
-Bug in @code{REPLACE()} bei der Benutzung des ujis-Zeichensatzes behoben.
-@item
-Sleepycat-BDB-Patches 3.2.9.1 und 3.2.9.2 angewandt.
-@item
-Option @code{--skip-stack-trace} zu @code{mysqld} hinzugef�gt.
-@item
-@code{CREATE TEMPORARY} funktioniert jetzt mit @code{InnoDB}-Tabellen.
-@item
-@code{InnoDB} zieht jetzt Teile von Schl�sseln (Sub-Keys) ganzen Schl�sseln
-vor.
-@item
-Option @code{CONCURRENT} f�r @code{LOAD DATA} hinzugef�gt.
-@item
-Bessere Fehlermeldung, wenn die Slave-@code{max_allowed_packet}-Variable zu
-niedrig ist, um ein sehr langes Log-Ereignis vom Master zu lesen.
-@item
-Bug behoben, wenn zu viele Zeilen bei der Benutzung von @code{SELECT
-DISTINCT ... HAVING} entfernt wurden.
-@item
-@code{SHOW CREATE TABLE} gibt jetzt @code{TEMPORARY} f�r tempor�re Tabellen
-zur�ck.
-@item
-@code{Rows_examined} f�r Langsame-Anfragen-Log-Datei hinzugef�gt.
-@item
-Probleme mit Funktion behoben, die eine leere Zeichenkette zur�ckgab, wenn
-sie zusammen mit einer Gruppenfunktion und einem @code{WHERE} benutzt
-wurde, das keine Zeilen�bereinstimmung ergab.
-@item
-Neues Programm @code{mysqlcheck}.
-@item
-Datenbankname zur Ausgabe f�r administrative Befehle wie @code{CHECK},
-@code{REPAIR}, @code{OPTIMIZE} hinzugef�gt.
-@item
-Viele Portabilit�tsbehebungen f�r InnoDB.
-@item
-Optimierer ge�ndert, so dass Anfragen wie @code{SELECT * FROM
-tabelle,tabelle2 ... ORDER BY schluessel_teil1 LIMIT #} den Index auf
-@code{schluessel_teil1} anstelle von @code{filesort} benutzen.
-@item
-Bug bei der Ausf�hrung von @code{LOCK TABLE to_table WRITE,...; INSERT INTO
-to_table... SELECT ...} behoben, wenn @code{to_table} leer war.
-@item
-Bug mit @code{LOCK TABLE} und BDB-Tabellen behoben.
-@end itemize
-
-
-@node News-3.23.37, News-3.23.36, News-3.23.38, News-3.23.x
-@c German node Neuigkeiten-3.23.37
-@appendixsubsec �nderungen in Release 3.23.37
-
-@itemize @bullet
-@item
-Bug bei der Benutzung von @code{MATCH} in @code{HAVING}-Klausel.
-@item
-Bug bei der Benutzung von @code{HEAP}-Tabellen mit @code{LIKE} behoben.
-@item
-@code{--mysql-version} f�r @code{safe_mysqld} hinzugef�gt.
-@item
-@code{INNOBASE} in @code{InnoDB} ge�ndert (weil der @code{INNOBASE}-Name
-bereits benutzt wurde). Alle @code{configure}-Optionen und
-@code{mysqld}-Startoptionen benutzen jetzt @code{innodb} anstelle von
-@code{innobase}. Das hei�t, dass Sie jegliche Konfigurationsdateien, in
-denen Sie @code{innobase}-Optionen benutzt haben, �ndern m�ssen, bevor Sie
-auf diese Version aktualisieren!
-@item
-Bug bei der Benutzung von Indexen auf @code{CHAR(255) NULL}-Spalten
-behoben.
-@item
-Slave-Thread wird jetzt auch dann gestartet, wenn @code{master-host} nicht
-gesetzt ist, so lange @code{server-id} gesetzt wird und es eine g�ltige
-@code{master.info} gibt.
-@item
-Teilweise Aktualisierungen (beendet mit kill) werden jetzt mit einem
-speziellen Fehler-Code in die Bin�r-Log-Datei geschrieben. Der Slave
-weigert sich, sie auszuf�hren, wenn der Fehler-Code anzeigt, dass die
-Aktualisierung abnorm beendet wurde, und muss mit @code{SET
-SQL_SLAVE_SKIP_COUNTER=1; SLAVE START} wieder dazu veranlasst werden,
-nachdem eine manuelle �berpr�fung / Korrektur der Datenintegrit�t
-durchgef�hrt wurde.
-@item
-Bug behoben, der das L�schen einer internen tempor�ren Tabelle beim Beenden
-des Threads irrt�mlicherweise in die Bin�r-Log-Datei schrieb. Dieser Bug
-betraf Replikation.
-@item
-Bug in @code{REGEXP()} auf 64-Bit-Maschinen.
-@item
-@code{UPDATE} und @code{DELETE} mit @code{WHERE eindeutiger_schluessel_teil
-IS NULL} aktualisierte / l�schte nicht alle Zeilen.
-@item
-@code{INSERT DELAYED} f�r Tabellen abgeschaltet, die Transaktionen
-unterst�tzen.
-@item
-Bug bei der Benutzung von DATE-Funktionen auf
-@code{TEXT}/@code{BLOB}-Spalten mit falschem Datumsformat behoben.
-@item
-UDFs (benutzerdefinierte Funktionen) funktionieren jetzt auch unter
-Windows (Patch von Ralph Masona).
-@item
-Bug in @code{ALTER TABLE} und @code{LOAD DATA INFILE} behoben, der das
-Sortieren von Schl�sseln deaktivierte. Diese Befehle sollten jetzt in den
-meisten F�llen schneller sein.
-@item
-Performance-Bug beim erneuten �ffnen von Tabellen behoben (Tabellen, die
-auf ein @code{FLUSH} oder @code{REPAIR} warteten), die f�r die n�chste
-Anfrage keine Indexe benutzten.
-@item
-Problem mit @code{ALTER TABLE} f�r Innobase-Tabellen auf FreeBSD behoben.
-@item
-@code{mysqld}-Variablen @code{myisam_max_sort_file_size} und
-@code{myisam_max_extra_sort_file_size} hinzugef�gt.
-@item
-Signale werden fr�hzeitig initialisiert, um Problem mit Signalen in
-Innobase zu vermeiden.
-@item
-Patch f�r den @code{tis620}-Zeichensatz hinzugef�gt, um Vergleiche
-unabh�ngig von der verwendeten Gro�-/Kleinschreibung zu machen und einen
-Bug in @code{LIKE} f�r diesen Zeichensatz zu beheben. @strong{HINWEIS}:
-Alle Tabellen, die den @code{tis620}-Zeichensatz benutzen, m�ssen mit
-@code{myisamchk -r} oder @code{REPAIR TABLE} in Ordnung gebracht werden!
-@item
-@code{--skip-safemalloc}-Option zu @code{mysqld} hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.36, News-3.23.35, News-3.23.37, News-3.23.x
-@c German node Neuigkeiten-3.23.36
-@appendixsubsec �nderungen in Release 3.23.36
-
-@itemize @bullet
-@item
-Bug behoben, der Datenbanknamen mit einem @samp{.}-Zeichen zulie�. Das
-behebt ein schwerwiegendes Sicherheitsproblem, wenn man @code{mysqld} unter
-dem Benutzer root laufen l��t.
-@item
-Bug behoben, wenn die Erzeugung eines Threads fehlschl�gt (das konnte bei
-der Herstellung SEHR vieler Verbindungen in kurzer Zeit passieren).
-@item
-Einige Probleme mit @code{FLUSH TABLES} und @code{TEMPORARY}-Tabellen
-behoben. (Problem mit dem Freisetzen des Schl�ssel-Cache und Fehler
-@code{Can't reopen table...}).
-@item
-Problem in Innobase mit anderen Zeichens�tze als @code{latin1} und ein
-anderes Problem bei der Benutzung von vielen Spalten behoben.
-@item
-Bug behoben, der einen Coredump bei der Benutzung einer sehr komplexen
-Anfrage mit @code{DISTINCT} und Summenfunktionen verursachte.
-@item
-@code{SET TRANSACTION ISOLATION LEVEL ...} hinzugef�gt.
-@item
-@code{SELECT ... FOR UPDATE} hinzugef�gt.
-@item
-Bug behoben, bei dem die Anzahl von betroffenen Zeilen nicht zur�ckgegeben
-wurde, wenn @code{MySQL} ohne Transaktionsunterst�tzung kompiliert wurde.
-@item
-Bug in @code{UPDATE} behoben, bei dem nicht immer Schl�ssel benutzt wurden,
-um die zu aktualisierenden Zeilen zu finden.
-@item
-Bug in @code{CONCAT_WS()} behoben, bei dem diese Funktion falsche
-Ergebnisse zur�ckgab.
-@item
-@code{CREATE ... INSERT} und @code{INSERT ... SELECT} ge�ndert, so dass
-diese noch kleine gleichzeitigen Einf�gevorg�nge zulassen, weil das dazu
-f�hren k�nnte, dass die Bin�r-Log-Datei schwer zu wiederholen ist.
-(Gleichzeitige Einf�gevorg�nge sind aktiviert, wenn Sie nicht die Bin�r-
-oder Update-Log-Datei verwenden.)
-@item
-Einige Makros ge�ndert, so dass schnelles mutex mit glibc 2.2 verwendet
-werden kann.
-@end itemize
-
-
-@node News-3.23.35, News-3.23.34a, News-3.23.36, News-3.23.x
-@c German node Neuigkeiten-3.23.35
-@appendixsubsec �nderungen in Release 3.23.35
-
-@itemize @bullet
-@item
-Neu eingef�hrter Bug in @code{ORDER BY} behoben.
-@item
-Falsches Definieren von @code{CLIENT_TRANSACTIONS} behoben.
-@item
-Bug in @code{SHOW VARIABLES} bei der Benutzung von @code{INNOBASE}-Tabellen
-behoben.
-@item
-Das Setzen und Benutzen von Benutzer-Variablen in @code{SELECT DISTINCT}
-funktionierte nicht.
-@item
-@code{SHOW ANALYZE} f�r kleine Tabellen verbessert.
-@item
-Handhabung von Argumenten im Benchmark-Skript @file{run-all-tests} behoben.
-@end itemize
-
-
-@node News-3.23.34a, News-3.23.34, News-3.23.35, News-3.23.x
-@c German node Neuigkeiten-3.23.34a
-@appendixsubsec �nderungen in Release 3.23.34a
-
-@itemize @bullet
-@item
-Zus�tzliche Dateien zur Distribution hinzugef�gt, die es erm�glichen, mit
-@code{INNOBASE}-Unterst�tzung zu kompilieren.
-@end itemize
-
-
-@node News-3.23.34, News-3.23.33, News-3.23.34a, News-3.23.x
-@c German node Neuigkeiten-3.23.34
-@appendixsubsec �nderungen in Release 3.23.34
-
-@itemize @bullet
-@item
-@code{INNOBASE}-Tabellen-Handler und @code{BDB}-Tabellen-Handler zur
-MySQL-Quelldistribution hinzugef�gt.
-@item
-Die Dokumentation zu @code{GEMINI}-Tabellen aktualisiert.
-@item
-Bug in @code{INSERT DELAYED} behoben, der den Thread zum H�ngen brachte,
-wenn @code{NULL} in eine @code{AUTO_INCREMENT}-Spalte eingef�gt wurde.
-@item
-Bug in @code{CHECK TABLE} / @code{REPAIR TABLE} behoben, der einen Thread
-zum H�ngen bringen konnte.
-@item
-@code{REPLACE} ersetzt keine Zeile mehr, die mit einem durch
-@code{auto_increment} erzeugten Schl�ssel in Konflikt steht.
-@item
-@code{mysqld} setzt jetzt nur @code{CLIENT_TRANSACTIONS} in
-@code{mysql->server_capabilities}, wenn der Server einen
-transaktionssicheren Handler unterst�tzt.
-@item
-@code{LOAD DATA INFILE} l��t jetzt das Einf�gen numerischer Werte in
-@code{ENUM}- und @code{SET}-Spalten zu.
-@item
-Fehlerdiagnose beim Slave-Thread-Exit verbessert.
-@item
-Bug in @code{ALTER TABLE ... ORDER BY} behoben.
-@item
-Option @code{max_user_connections} f�r @code{mysqld} hinzugef�gt.
-@item
-Anfragel�nge f�r Replikation auf @code{max_allowed_packet} begrenzt, nicht
-auf die willk�rliche L�nge von 4 MB.
-@item
-Leerzeichen um @code{=} herum im Argument zu @code{--set-variable} werden
-zugelassen.
-@item
-Problem beim automatischen Reparieren behoben, der einen Thread im Zustand
-@code{Waiting for table} lassen konnte.
-@item
-@code{SHOW CREATE TABLE} gibt jetzt das @code{UNION()} f�r
-@code{MERGE}-Tabellen aus.
-@item
-@code{ALTER TABLE} merkt sich jetzt die alte @code{UNION()}-Definition.
-@item
-Bug beim Replizieren von Timestamps behoben.
-@item
-Bug bei der bidirektionalen Replikation behoben.
-@item
-Bug im @code{BDB}-Tabellen-Handler behoben, der bei der Benutzung eines
-Indexes auf mehrteilige Schl�ssel vorkam, wenn ein Schl�sselteil
-@code{NULL} sein konnte.
-@item
-@code{MAX()}-Optimierung f�r Schl�sselteile (Sub-Keys) f�r
-@code{BDB}-Tabellen verbessert.
-@item
-Problem behoben, bei dem 'M�ll'-Ergebnisse bei der Benutzung von
-@code{BDB}-Tabellen und @code{BLOB}- oder @code{TEXT}-Feldern beim
-Verkn�pfen (Join) vieler Tabellen auftraten.
-@item
-Problem mit @code{BDB}-Tabellen und @code{TEXT}-Spalten behoben.
-@item
-Bug bei der Benutzung eines @code{BLOB}-Schl�ssels behoben, wenn eine
-Konstanten-Zeile nicht gefunden wurde.
-@item
-Problem behoben, dass @code{mysqlbinlog} den Timestamp-Wert f�r jede
-Anfrage schreibt. Das stellt sicher, dass man dieselben Werte bei
-Datumsfunktionen wie @code{NOW()} bei der Benutzung von @code{mysqlbinlog}
-erh�lt, um die Anfragen zu einem anderen Server durchzureichen (pipe).
-@item
-Es wird zugelassen, dass @code{--skip-gemini}, @code{--skip-bdb} und
-@code{--skip-innobase} f�r @code{mysqld} angegeben werden, selbst wenn
-diese Datenbanken nicht in @code{mysqld} einkompiliert sind.
-@item
-Man kann jetzt @code{GROUP BY ... DESC} ausf�hren.
-@item
-Blockierung im @code{SET}-Code behoben, wenn man @code{SET @@foo=bar}
-ausf�hrte, wobei @code{bar} ein Spaltenverweis ist. Hier wurde die
-Fehlermeldung nicht korrekt erzeugt.
-@end itemize
-
-
-@node News-3.23.33, News-3.23.32, News-3.23.34, News-3.23.x
-@c German node Neuigkeiten-3.23.33
-@appendixsubsec �nderungen in Release 3.23.33
-
-@itemize @bullet
-@item
-DNS-Lookups benutzen jetzt nicht mehr denselben mutex wie der
-Hostnamen-Cache. Das gestattet, dass bekannte Hosts schnell aufgel�st
-werden k�nnen, selbst wenn ein DNS-Lookup lange Zeit braucht.
-@item
-@code{--character-sets-dir} f�r @code{myisampack} hinzugef�gt.
-@item
-Warnungen beim Laufenlassen von @code{REPAIR TABLE ... EXTENDED} entfernt.
-@item
-Bug, der einen Coredump bei der Benutzung von @code{GROUP BY} auf ein Alias
-verursachte, wobei der Alias dasselbe wie ein existierender Spaltenname
-war, entfernt.
-@item
-@code{SEQUENCE()} als Beispiel-UDF-Funktion hinzugef�gt.
-@item
-@code{mysql_install_db} ge�ndert, so dass es @code{BINARY} f�r
-@code{CHAR}-Spalten in den Berechtigungstabellen benutzt.
-@item
-@code{TRUNCATE tabelle} zu @code{TRUNCATE TABLE tabelle} ge�ndert, um
-dieselbe Syntax wie Oracle zu verwenden. Bis Version 4.0 lassen wir
-weiterhin @code{TRUNCATE tabelle} zu, um alten Code nicht zum Absturz zu
-bringen.
-@item
-'no found rows'-Bug in @code{MyISAM}-Tabellen behoben, wenn ein @code{BLOB}
-erster Teil eines mehrteiligen Schl�ssels war.
-@item
-Bug behoben, bei dem @code{CASE} mit @code{GROUP BY} nicht funktionierte.
-@item
-Option @code{--sort-recover} f�r @code{myisamchk} hinzugef�gt.
-@item
-@code{myisamchk -S} und @code{OPTIMIZE TABLE} funktionieren jetzt unter
-Windows.
-@item
-Bug bei der Benutzung von @code{DISTINCT} auf Ergebnisse von Funktionen
-behoben, die sich auf eine Gruppenfunktion bezogen, wie:
-@example
-SELECT a, DISTINCT SEC_TO_TIME(sum(a)) from tabelle GROUP BY a, b;
-@end example
-@item
-Puffer-�berlauf in @code{libmysqlclient}-Bibliothek behoben. Bug bei der
-Handhabung des @code{STOP}-Ereignisses nach @code{ROTATE}-Ereignis bei
-Replikation.
-@item
-Einen weiteren Puffer-�berlauf in @code{DROP DATABASE} behoben.
-@item
-@code{Table_locks_immediate}- und
-@code{Table_locks_waited}-Status-Variablen hinzugef�gt.
-@item
-Bug in Replikation behoben, der den Slave-Server-Start bei existierendem
-@code{master.info} unterbrach. Das behebt einen Bug, der in Version 3.23.32
-eingef�hrt wurde.
-@item
-@code{SET SQL_SLAVE_SKIP_COUNTER=n}-Befehl hinzugef�gt, um nach
-Replikationsst�rungen ohne volle Datenbankkopie wiederherzustellen.
-@item
-@code{max_binlog_size}-Variable hinzugef�gt; die Bin�r-Log-Datei wird
-automatisch rotiert, wenn die Gr��e die Grenze �berschreitet.
-@item
-@code{Last_error}, @code{Last_errno} und @code{Slave_skip_counter} f�r
-@code{SHOW SLAVE STATUS} hinzugef�gt.
-@item
-Bug in @code{MASTER_POS_WAIT()}-Funktion behoben.
-@item
-Coredump-Handler auf @code{SIGILL} und @code{SIGBUS} zus�tzlich zu
-@code{SIGSEGV}.
-@item
-Auf x86-Linux wird im Coredump-Handler die aktuelle Anfrage und die Thread-
-(Verbindungs-) Kennung, falls verf�gbar, angegeben.
-@item
-Mehrere Timing-Bugs in der Test-Suite behoben.
-@item
-@code{mysqltest} erweitert, so dass es sich um Probleme mit dem Timing in
-der Test-Suite k�mmert.
-@item
-@code{ALTER TABLE} kann jetzt auch benutzt werden, um die Definition einer
-@code{MERGE}-Tabelle zu �ndern.
-@item
-Erzeugung von @code{MERGE}-Tabellen unter Windows in Ordnung gebracht.
-@item
-Portabilit�tsbehebungen f�r OpenBSD und OS/2.
-@item
-@code{--temp-pool}-Option zu @code{mysqld} hinzugef�gt. Das Benutzen dieser
-Option f�hrt dazu, dass tempor�re Dateien nur einen kleinen Satz von Namen
-benutzen, statt eines eindeutigen Namens f�r jede neue Datei. Das ist ein
-Workaround um ein Problem im Linux-Kernel beim Erzeugen einer gro�en Menge
-neuer Dateien mit unterschiedlichen Namen. Beim alten Verhalten scheint es
-so, als ein Linux ein Speicher-'Loch' h�tte, weil zum
-Verzeichniseintrags-Cache statt zum Festplatten-Cache zugewiesen
-(alloziert) wird.
-@end itemize
-
-
-@node News-3.23.32, News-3.23.31, News-3.23.33, News-3.23.x
-@c German node Neuigkeiten-3.23.32
-@appendixsubsec �nderungen in Release 3.23.32
-
-@itemize @bullet
-@item
-Code ge�ndert, um um einen Compiler-Bug in Compaq C++ auf OSF1
-herumzuarbeiten, der @code{BACKUP}, @code{RESTORE}, @code{CHECK},
-@code{REPAIR} und @code{ANALYZE TABLE} besch�digte.
-@item
-Option @code{FULL} f�r @code{SHOW COLUMNS} hinzugef�gt. Jetzt wird die
-Berechtigungsliste f�r die Spalten nur angezeigt, wenn diese Option
-angegeben wird.
-@item
-Bug in @code{SHOW LOGS} behoben, wenn es keine BDB-Logs gab.
-@item
-Timing-Problem in Replikation behoben, dass das Abschicken einer
-Aktualisierung an den Client verz�gern konnte, bis eine weitere
-Aktualisierung durchgef�hrt wurde.
-@item
-Feldnamen bei der Benutzung von @code{mysql_list_fields()} nicht umwandeln.
-Damit bleibt dieser Code kompatibel mit @code{SHOW FIELDS}.
-@item
-@code{MERGE}-Tabellen funktionierten nicht unter Windows.
-@item
-Problem mit @code{SET PASSWORD=...} unter Windows.
-@item
-Fehlende @file{my_config.h} f�r RPM-Distribution hinzugef�gt.
-@item
-@code{TRIM("foo" von "foo")} gab keine leere Zeichenkette zur�ck.
-@item
-@code{--with-version-suffix} f�r @code{configure} hinzugef�gt.
-@item
-Coredump behoben, wenn der Client eine Verbindung ohne @code{mysql_close()}
-abbrach.
-@item
-Bug in @code{RESTORE TABLE} behoben, wenn man versuchte, aus einem nicht
-vorhandenen Verzeichnis wiederherzustellen.
-@item
-Bug behoben, der einen Coredump auf dem Slave bei der Replikation von
-@code{SET PASSWORD} verursachte.
-@item
-@code{MASTER_POS_WAIT()} hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.31, News-3.23.30, News-3.23.32, News-3.23.x
-@c German node Neuigkeiten-3.23.31
-@appendixsubsec �nderungen in Release 3.23.31
-
-@itemize @bullet
-@item
-Die Test-Suite testet jetzt jeden erreichbaren BDB-Schnittstellen-Code.
-W�hrend der Tests fanden und behoben wir viele Fehler im
-Schnittstelle-Code.
-@item
-Die Benutzung von @code{HAVING} auf eine leere Tabelle konnte eine
-Ergebniszeile ergeben, ohne dass es das sollte.
-@item
-Problem behoben, so dass das MySQL-RPM nicht mehr von Perl5 abh�ngt.
-@item
-Einige Probleme mit @code{HEAP}-Tabellen unter Windows behoben.
-@item
-@code{SHOW TABLE STATUS} zeigte nicht die korrekte durchschnittliche
-Zeilenl�nge bei Tabellen gr��er als 4 GB.
-@item
-@code{CHECK TABLE ... EXTENDED} pr�ften keine Zeilen-Links f�r Tabellen
-fester Gr��e.
-@item
-Option @code{MEDIUM} f�r @code{CHECK TABLE} hinzugef�gt.
-@item
-Problem bei der Benutzung von @code{DECIMAL()}-Schl�sseln auf negative
-Zahlen behoben.
-@item
-@code{HOUR()} (und einige andere @code{TIME}-Funktionen) auf einer
-@code{CHAR}-Spalte gaben immer @code{NULL} zur�ck.
-@item
-Sicherheits-Bug in etwas behoben (bitte aktualisieren Sie, wenn Sie eine
-fr�here MySQL-3.23-Version benutzen).
-@item
-Bug mit Puffer-�berlauf behoben, wenn eine bestimmte Fehlermeldung
-ausgegeben wurde.
-@item
-Benutzung von @code{setrlimit()} unter Linux hinzugef�gt, damit
-@code{-O --open-files-limit=#} unter Linux l�uft.
-@item
-Neue @code{mysqld}-Variable @code{bdb_version} hinzugef�gt.
-@item
-Bug bei der Benutzung von Ausdr�cken folgenden Typs behoben:
-@example
-SELECT ... FROM t1 LEFT JOIN t2 ON (t1.a=t2.a) WHERE t1.a=t2.a
-@end example
-In diesem Fall wurde der Test in der @code{WHERE}-Klausel f�lschlicherweise
-weg optimiert.
-@item
-Bug in @code{MyISAM} beim L�schen von Schl�sseln mit m�glichen
-@code{NULL}-Werten behoben, wenn die erste Schl�sselspalte keine
-Pr�fix-komprimierte Text-Spalte war.
-@item
-@code{mysql.server} repariert, so dass es den
-@code{mysql.server}-Optionsabschnitt anstelle von @code{mysql_server}
-liest.
-@item
-@code{safe_mysqld} und @code{mysql.server} repariert, so dass sie den
-@code{server}-Optionsabschnitt lesen.
-@item
-@code{thread_created}-Status-Variable zu @code{mysqld} hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.30, News-3.23.29, News-3.23.31, News-3.23.x
-@c German node Neuigkeiten-3.23.30
-@appendixsubsec �nderungen in Release 3.23.30
-
-@itemize @bullet
-@item
-@code{SHOW OPEN TABLES}-Befehl hinzugef�gt.
-@item
-@code{myisamdump} funktioniert jetzt mit alten @code{mysqld}-Servern.
-@item
-@code{myisamchk -k#} funktioniert jetzt wieder.
-@item
-Problem mit Replikation behoben, wenn die Bin�r-Log-Datei-Datei auf
-32-Bit-Systemen gr��er als 2 GB wurde.
-@item
-@code{LOCK TABLES} startet jetzt automatisch eine neue Transaktion.
-@item
-@code{BDB}-Tabellen so ge�ndert, dass sie interne Sub-Transaktionen
-benutzen und offene Dateien wiederholt benutzen, um mehr Geschwindigkeit zu
-erzielen.
-@item
-Option @code{--mysqld=#} f�r @code{safe_mysqld} hinzugef�gt.
-@item
-Hexadezimale Konstanten in @code{--fields-*-by}- und
-@code{--lines-terminated-by}-Optionen f�r @code{mysqldump} und
-@code{mysqlimport} werden jetzt zugelassen. Von Paul DuBois.
-@item
-Option @code{--safe-show-Datenbank} f�r @code{mysqld} hinzugef�gt.
-@item
-@code{have_bdb}, @code{have_gemini}, @code{have_innobase},
-@code{have_raid} und @code{have_openssl} f�r @code{SHOW VARIABLES}
-hinzugef�gt, um das Testen auf unterst�tzte Erweiterungen zu erleichtern.
-@item
-Option @code{--open-files-limit} f�r @code{mysqld} hinzugef�gt.
-@item
-Option @code{--open-files} zu @code{--open-files-limit} in
-@code{safe_mysqld} ge�ndert.
-@item
-Bug behoben, bei dem einige Zeilen nicht gefunden wurden, wenn
-@code{HEAP}-Tabellen viele Schl�ssel hatten.
-@item
-@code{--bdb-no-sync} funktioniert jetzt.
-@item
-@code{--bdb-recover} in @code{--bdb-no-recover} ge�ndert, weil recover
-vorgabem��ig angeschaltet sein sollte.
-@item
-Die vorgabem��ige Anzahl von BDB-Sperren auf 10.000 ge�ndert.
-@item
-Bug aus Version 3.23.29 behoben, beim Zuweisen der gemeinsam genutzten
-Struktur, die f�r BDB-Tabellen ben�tigt wird.
-@item
-@file{mysqld_multi.sh} f�r benutzerkonfigurierbare Variablen ge�ndert.
-Patch von Christopher McCrory.
-@item
-Include-Dateien f�r Solaris 2.8 in Ordnung gebracht.
-@item
-Bug mit @code{--skip-networking} auf Debian Linux behoben.
-@item
-Problem behoben, dass einige tempor�re Dateien den Namen @code{UNOPENED} in
-Fehlermeldungen hatten.
-@item
-Bug beim Laufenlassen von zwei gleichzeitigen @code{SHOW LOGS}-Anfragen
-behoben.
-@end itemize
-
-
-@node News-3.23.29, News-3.23.28, News-3.23.30, News-3.23.x
-@c German node Neuigkeiten-3.23.29
-@appendixsubsec �nderungen in Release 3.23.29
-
-@itemize @bullet
-@item
-Configure-Aktualisierungen f�r Tru64, Unterst�tzung gro�er Dateien und
-besser TCP-Wrapper-Unterst�tzung. Von Albert Chin-A-Young.
-@item
-Bug in @code{<=>}-Operator behoben.
-@item
-Bug in @code{REPLACE} mit BDB-Tabellen behoben.
-@item
-@code{LPAD()} und @code{RPAD()} k�rzen jetzt die Ergebnis-Zeichenkette,
-wenn sie l�nger als das L�ngenargument ist.
-@item
-@code{SHOW LOGS}-Befehl hinzugef�gt.
-@item
-Unbenutzte BDB-Logs werden beim Herunterfahren entfernt.
-@item
-Beim Erzeugen einer Tabelle werden @code{PRIMARY}-Schl�sseln zuerst
-gesetzt, gefolgt von @code{UNIQUE}-Schl�sseln.
-@item
-Bug in @code{UPDATE} behoben, wenn mehrteilige Schl�ssel benutzt wurden,
-bei denen alle Schl�sselteile sowohl in der Aktualisierung als auch im
-@code{WHERE}-Teil angegeben wurden. In diesem Fall k�nnte MySQL versuchen,
-einen Datensatz zu aktualisieren, der nicht dem gesamten @code{WHERE}-Teil
-entspricht.
-@item
-L�schen von Tabellen so ge�ndert, dass zun�chst die Tabelle und dann die
-@file{.frm}-Datei gel�scht wird.
-@item
-Bug im Hostnamen-Cache behoben, der dazu f�hrte, dass @code{mysqld} den
-Hostnamen als @code{''} in manchen Fehlermeldungen berichtete.
-@item
-Bug mit @code{HEAP}-Tabellen behoben; die Variable
-@code{max_heap_table_size} wurde nicht benutzt. Jetzt kann entweder
-@code{MAX_ROWS} oder @code{max_heap_table_size} benutzt werden, um die
-Gr��e einer @code{HEAP}-Tabelle zu beschr�nken.
-@item
-Die vorgabem��ige Server-Kennung auf 1 f�r Master-Server und 2 f�r Slaves
-ge�ndert, um die Benutzung der Bin�r-Log-Datei zu erleichtern.
-@item
-Variable @code{bdb_lock_max} in @code{bdb_max_lock} umbenannt.
-@item
-Unterst�tzung f�r @code{auto_increment} auf Unter-Felder (Sub-Fields) f�r
-BDB-Tabellen hinzugef�gt.
-@item
-@code{ANALYZE} von BDB-Tabellen hinzugef�gt.
-@item
-In BDB-Tabellen wird jetzt die Anzahl von Zeilen gespeichert. Das hilft,
-Anfragen zu optimieren, wenn daf�r die ungef�hre Anzahl von Zeilen ben�tigt
-wird.
-@item
-Wenn es einen Fehler in einem mehrzeiligen Statement gibt, wird jetzt nur
-das letzte Statement zur�ckgerollt, nicht die gesamte Transaktion.
-@item
-Wenn man @code{ROLLBACK} nach der Aktualisierung einer nicht
-transaktionalen Tabelle ausf�hrt, erh�lt man als Warnung einen Fehler.
-@item
-Option @code{--bdb-shared-data} f�r @code{mysqld} hinzugef�gt.
-@item
-Status-Variable @code{Slave_open_temp_tables} hinzugef�gt.
-@item
-Variablen @code{binlog_cache_size} und @code{max_binlog_cache_size} f�r
-@code{mysqld} hinzugef�gt.
-@item
-@code{DROP TABLE}, @code{RENAME TABLE}, @code{CREATE INDEX} und
-@code{DROP INDEX} sind jetzt Transaktions-Endpunkte.
-@item
-Wenn Sie ein @code{DROP DATABASE} auf eine symbolisch verkn�pfte Datenbank
-ausf�hren, werden sowohl der Link als auch die Original-Datenbank gel�scht.
-@item
-@code{DROP DATABASE} funktioniert jetzt auf OS/2.
-@item
-Bug bei der Ausf�hrung von @code{SELECT DISTINCT ... tabelle1 LEFT JOIN
-tabelle2 ...} behoben, wenn tabelle2 leer war.
-@item
-@code{--abort-slave-event-count}- und
-@code{--disconnect-slave-event-count}-Optionen f�r @code{mysqld} zum
-Debuggen und Testen der Replikation hinzugef�gt.
-@item
-Replikation tempor�rer Tabellen in Ordnung gebracht. Handhabt alles ausser
-dem Neustart von Slaves.
-@item
-@code{SHOW KEYS} zeigt jetzt, ob ein Schl�ssel @code{FULLTEXT} ist oder
-nicht.
-@item
-Neues Skript @file{mysqld_multi}. @xref{mysqld_multi, , @code{mysqld_multi}}.
-@item
-Neues Skript @file{mysql-multi.server.sh} hinzugef�gt. Vielen Dank an Tim
-Bunce @email{Tim.Bunce@@ig.co.uk} f�r die Modifizierung von
-@file{mysql.server}, um auf einfache Weise Hosts zu handhaben, die viele
-@code{mysqld}-Prozesse laufen lassen.
-@item
-@file{safe_mysqld}, @file{mysql.server} und @file{mysql_install_db} wurden
-so abge�ndert, dass sie @code{mysql_print_defaults} anstelle verschiedener
-Hacks benutzen, um @file{my.cnf}-Dateien zu lesen. Zus�tzlich wurde die
-Handhabung verschiedener Pfade konsistenter gemacht, in Bezug auf wie
-@code{mysqld} vorgabem��ig handhabt.
-@item
-Berkeley-DB-Transaktions-Logs, die nicht mehr in Benutzung sind, werden
-automatisch entfernt.
-@item
-Bug bei mehreren @code{FULLTEXT}-Indexen in einer Tabelle behoben.
-@item
-Warnung hinzugef�gt, wenn sich die von Zeilen bei
-@code{REPAIR}/@code{OPTIMIZE} �ndert.
-@item
-Patches f�r OS/2 von @code{Yuri Dario} angewandt.
-@item
-@code{FLUSH TABLES tabelle} schrieb den Index-Baum nicht immer korrekt auf
-die Festplatte zur�ck.
-@item
-@code{--bootstrap} l�uft jetzt in einem separaten Thread. Das behebt ein
-Problem, das bei @code{mysql_install_db} einen Coredump auf einigen
-Linux-Maschinen verursachte.
-@item
-@code{mi_create()} abge�ndert, so dass es weniger Stack-Platz ben�tigt.
-@item
-Bug beim Optimierer, wenn er versucht, @code{MATCH}, mit
-@code{UNIQUE}-Schl�sseln benutzt, zu �beroptimieren.
-@item
-@code{Crash-me} und die MySQL-Benchmarks funktionieren jetzt auch mit
-FrontBase.
-@item
-@code{RESTRICT} und @code{CASCADE} werden nach einem @code{DROP TABLE}
-zugelassen, um die Portierung einfacher zu machen.
-@item
-Status-Variable zur�ckgesetzt, die Probleme hervorrufen konnte, wenn man
-@code{--slow-log} benutzte.
-@item
-Variable @code{connect_timeout} f�r @code{mysql} und @code{mysqladmin}
-hinzugef�gt.
-@item
-@code{connect_timeout} als Alias f�r @code{timeout} f�r Optionsdateien, die
-von @code{mysql_options()} gelesen werden, hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.28, News-3.23.27, News-3.23.29, News-3.23.x
-@c German node Neuigkeiten-3.23.28
-@appendixsubsec �nderungen in Release 3.23.28
-
-@itemize @bullet
-@item
-Neue Optionen @code{--pager[=...]}, @code{--no-pager}, @code{--tee=...} und
-@code{--no-tee} f�r den @code{mysql}-Client hinzugef�gt. Die entsprechenden
-neuen interaktiven Befehle hei�en @code{pager}, @code{nopager}, @code{tee}
-und @code{notee}. Siehe @xref{mysql, , @code{mysql}}, @code{mysql --help}
-und die interaktive Hilfe wegen weiterer Informationen.
-@item
-Absturz behoben, der beim Fehlschlagen der Reparatur von
-@code{MyISAM}-Tabellen auftrat.
-@item
-Gr��erer Performance-Bug im Tabellensperren-Code behoben, wenn man
-permanent VIELE @code{SELECT}-, @code{UPDATE}- und @code{INSERT}-Statements
-laufen hatte. Das Symptom zeigte sich darin, dass die @code{UPDATE}- und
-@code{INSERT}-Anfragen lange gesperrt waren, w�hrend neue
-@code{SELECT}-Statements vor den Aktualisierungen ausgef�hrt wurden.
-@item
-Beim Lesen von @code{options_files} mit @code{mysql_options()} wurde die
-@code{return-found-rows}-Option ignoriert.
-@item
-Man kann jetzt @code{interactive-timeout} in der Optionsdatei angeben, die
-von @code{mysql_options()} gelesen wird. Das erm�glicht es, Programme, die
-lange laufen (wie @code{mysqlhotcopy}), zu zwingen,
-@code{interactive_timeout} anstelle von @code{wait_timeout} zu benutzen.
-@item
-Zur Langsame-Anfragen-Log-Datei Zeit und Benutzernamen f�r jede geloggte
-Anfrage hinzugef�gt. Wenn Sie @code{--log-long-format} benutzen, werden
-auch Anfragen, die keinen Index benutzen, geloggt, selbst wenn die Anfrage
-weniger als @code{long_query_time} Sekunden ben�tigt.
-@item
-Problem in @code{LEFT JOIN} behoben, was dazu f�hrte, dass alle Spalten in
-einer Verweistabelle @code{NULL} waren.
-@item
-Problem bei der Benutzung von @code{NATURAL JOIN} ohne Schl�ssel behoben.
-@item
-Bug bei der Benutzung eines mehrteiligen Schl�ssels behoben, bei dem der
-erste Teil vom Typ @code{TEXT} oder @code{BLOB} war.
-@item
-@code{DROP} von tempor�ren Tabellen wurde nicht in der
-Update-/Bin�r-Log-Datei gespeichert.
-@item
-Bug behoben, der bei @code{SELECT DISTINCT * ... LIMIT #} nur eine Zeile
-zur�ckgab.
-@item
-Bug im Assembler-Code in @code{strstr()} f�r sparc behoben und
-@file{global.h}-Header-Datei aufger�umt, um ein Problem mit schlechtem
-Aliasing des Compilers zu vermeiden, der bei RedHat 7.0 beiliegt (berichtet
-von Trond Eivind Glomsr�d).
-@item
-Die Option @code{--skip-networking} funktioniert jetzt sauber unter Windows
-NT.
-@item
-Lang ausstehender Bug in den @code{ISAM}-Tabellen behoben, wenn eine Zeile
-mit einer L�nge von mehr als 65 KB um ein einzelnes Byte gek�rzt wurde.
-@item
-Bug in @code{MyISAM} beim Laufenlassen mehrfacher Aktualisierungsprozesse
-auf dieselbe Tabelle behoben.
-@item
-Es wird zugelassen, dass @code{FLUSH TABLE tabelle} benutzt wird.
-@item
-@code{--replicate-ignore-table}, @code{--replicate-do-table},
-@code{--replicate-wild-ignore-table} und @code{--replicate-wild-do-table}
-hinzugef�gt.
-@item
-Alle Log-Dateien so ge�ndert, dass sie unseren eigenen
-@code{IO_CACHE}-Mechanismus anstelle von @code{FILE} benutzen, um
-Betriebssystemprobleme zu vermeiden, wenn zu viele Dateien offen sind.
-@item
-Optionen @code{--open-files} und @code{--timezone} f�r @code{safe_mysqld}
-hinzugef�gt.
-@item
-Schweren Bug in @code{CREATE TEMPORARY TABLE ... SELECT ...} behoben.
-@item
-Problem mit @code{CREATE TABLE ... SELECT NULL} behoben.
-@item
-Variablen @code{large_file_support}, @code{net_read_timeout},
-@code{net_write_timeout} und @code{query_buffer_size} f�r @code{SHOW
-VARIABLES} hinzugef�gt.
-@item
-Status-Variablen @code{created_tmp_files} und @code{sort_merge_passes} f�r
-@code{SHOW STATUS} hinzugef�gt.
-@item
-Bug behoben, bei dem kein Index-Name nach der @code{FOREIGN KEY}-Definition
-zugelassen wurde.
-@item
-@code{TRUNCATE tabelle} als ein Synonym f�r @code{DELETE FROM tabelle}
-hinzugef�gt.
-@item
-Bug in einer BDB-Schl�sselvergleichsfunktion beim Vergleich von
-Schl�sselteilen behoben.
-@item
-Variable @code{bdb_lock_max} f�r @code{mysqld} hinzugef�gt.
-@item
-Weitere Tests zur Benchmark-Suite hinzugef�gt.
-@item
-�berlauf-Bug im Client-Code bei der Benutzung von �berlangen Datenbanknamen
-behoben.
-@item
-@code{mysql_connect()} bricht jetzt unter Linux ab, wenn der Server nicht
-in @code{timeout} Sekunden antwortet.
-@item
-@code{SLAVE START} funktionierte nicht, wenn Sie mit
-@code{--skip-slave-start} starteten und vorher nicht explizit @code{CHANGE
-MASTER TO} laufen lie�en.
-@item
-Die Ausgabe von @code{SHOW MASTER STATUS} in Ordnung gebracht, damit sie
-konsistent mit @code{SHOW SLAVE STATUS} ist. (Sie hat jetzt kein
-Verzeichnis im Log-Namen.)
-@item
-@code{PURGE MASTER LOGS TO} hinzugef�gt.
-@item
-@code{SHOW MASTER LOGS} hinzugef�gt.
-@item
-@code{--safemalloc-mem-limit}-Option f�r @code{mysqld} hinzugef�gt, um
-Speichermangel zu simulieren, wenn mit @code{--with-debug=full} kompiliert
-wurde.
-@item
-Mehrere Coredumps unter Bedingungen, in denen Arbeitsspeicher fehlt,
-behoben.
-@item
-@code{SHOW SLAVE STATUS} benutzte einen nicht initialisierten mutex, wenn
-der Slave noch nicht gestartet wurde.
-@item
-Bug in @code{ELT()} und @code{MAKE_SET()} behoben, wenn die Anfrage eine
-tempor�re Tabelle benutzte.
-@item
-@code{CHANGE MASTER TO} ohne Angabe von @code{MASTER_LOG_POS} setzte es auf
-0 statt auf 4 und erreichte die magische Zahl im bin�ren Master-Log.
-@item
-@code{ALTER TABLE ... ORDER BY ...}-Syntax hinzugef�gt. Das erzeugt die
-Tabelle mit Zeilen in einer festgelegten Reihenfolge.
-@end itemize
-
-
-@node News-3.23.27, News-3.23.26, News-3.23.28, News-3.23.x
-@c German node Neuigkeiten-3.23.27
-@appendixsubsec �nderungen in Release 3.23.27
-
-@itemize @bullet
-@item
-Bug behoben, bei dem das automatische Reparieren von MyISAM-Tabellen
-manchmal fehlschlug, wenn die Daten-Datei besch�digt war.
-@item
-Bug in @code{SHOW CREATE} bei der Benutzung von
-@code{AUTO_INCREMENT}-Spalten behoben.
-@item
-BDB-Tabellen so ge�ndert, dass sie die neue Vergleichsfunktion in Berkeley
-DB 3.2.3 benutzen.
-@item
-Sie k�nnen jetzt Unix-Sockets bei @code{mit-pThread} benutzen.
-@item
-Neuer latin5- (t�rkischer) Zeichensatz.
-@item
-Kleinere Portabilit�tsbehebungen.
-@end itemize
-
-
-@node News-3.23.26, News-3.23.25, News-3.23.27, News-3.23.x
-@c German node Neuigkeiten-3.23.26
-@appendixsubsec �nderungen in Release 3.23.26
-
-@itemize @bullet
-@item
-@code{<>} funktioniert jetzt sauber mit @code{NULL}.
-@item
-Problem mit @code{SUBSTRING_INDEX()} und @code{REPLACE()} behoben (Patch
-von Alexunder Igonitchev).
-@item
-@code{CREATE TEMPORARY TABLE IF NOT EXISTS} gab keinen Fehler, wenn die
-Tabelle existierte.
-@item
-Wenn Sie keinen @code{PRIMARY KEY} in einer BDB-Tabelle erzeugen, wird ein
-versteckter @code{PRIMARY KEY} erzeugt.
-@item
-Nur-Lese-Schl�ssel-Optimierung to BDB-Tabellen hinzugef�gt.
-@item
-@code{LEFT JOIN} bevorzugte in manchen F�llen einen vollen Tabellen-Scan,
-wenn es keine @code{WHERE}-Klausel gab.
-@item
-Bei der Benutzung von @code{--log-slow-query} die Wartezeit auf eine Sperre
-nicht z�hlen.
-@item
-Bug im Sperr-Code unter Windows behoben, der dazu f�hrte, dass der
-Schl�ssel-Cache berichtete, dass die Schl�ssel-Datei besch�digt sei, obwohl
-sie in Ordnung war.
-@item
-Automatische Reparatur von @code{MyISAM}-Tabellen, wenn Sie @code{mysqld}
-mit @code{--myisam-recover} starten, hinzugef�gt.
-@item
-Das @code{TYPE=}-Schl�sselwort wurde von @code{CHECK} und @code{REPAIR}
-entfernt. Es wird zugelassen, dass @code{CHECK}-Optionen kombiniert werden.
-(Sie k�nnen immer noch @code{TYPE=} benutzen, aber die Benutzung wird nicht
-empfohlen.)
-@item
-Mutex-Bug im bin�ren Replikations-Log behoben - lange
-Aktualisierungsanfragen konnten vom Slave nur teilweise gelesen werden,
-wenn er das zur falschen Zeit machte, was nicht schwerwiegend ist, aber zu
-einem Performance-verschlechternden erneuten Verbinden f�hrte, sowie zu
-einer beunruhigenden Nachricht in der Fehler-Log-Datei.
-@item
-Das Format der Bin�r-Log-Datei wurde ge�ndert - hinzugef�gt wurden magische
-Zahl, Serverversion, Binlog-Version, Server-Kennung und Anfragen-Fehlercode
-f�r jedes Anfrage-Ereignis.
-@item
-Replikations-Thread vom Slave killt jetzt alle darnieder liegenden Threads
-vom selben Server.
-@item
-Lange Replikations-Benutzernamen wurden bislang nicht korrekt gehandhabt.
-@item
-@code{--replicate-rewrite-db}-Option zu @code{mysqld} hinzugef�gt.
-@item
-@code{--skip-slave-start}-Option to @code{mysqld} hinzugef�gt.
-@item
-Aktualisierungen, die einen Fehlercode erzeugten (wie @code{INSERT INTO
-foo(schluessel) values (1),(1)}) beendeten bislang irrt�mlich den
-Slave-Thread.
-@item
-Optimierung von Anfragen, bei denen @code{DISTINCT} nur auf Spalten aus
-denselben Tabellen benutzt wird, hinzugef�gt.
-@item
-Flie�kommazahlen ohne Vorzeichen nach dem Exponent (wie 1e1) werden
-zugelassen.
-@item
-@code{SHOW GRANTS} zeigte nicht immer alle Spaltenberechtigungen.
-@item
-@code{--default-extra-file=#} f�r alle MySQL-Clients hinzugef�gt.
-@item
-Spalten, auf die in @code{INSERT}-Statements verwiesen wird, werden nun
-sauber initialisiert.
-@item
-@code{UPDATE} funktioniert nicht immer, wenn es mit einem Bereich auf einem
-Timestamp benutzt wurde, der Teil des Schl�ssels war, der benutzt wurde, um
-Zeilen zu finden.
-@item
-Bug in @code{FULLTEXT}-Index beim Einf�gen einer @code{NULL}-Spalte
-behoben.
-@item
-@code{mkstemp()} wird jetzt anstelle von @code{tempnam()} benutzt. Basiert
-auf einem Patch von John Jones.
-@end itemize
-
-
-@node News-3.23.25, News-3.23.24, News-3.23.26, News-3.23.x
-@c German node Neuigkeiten-3.23.25
-@appendixsubsec �nderungen in Release 3.23.25
-
-@itemize @bullet
-@item
-@code{database} funktioniert als zweites Argument f�r @code{mysqlhotcopy}.
-@item
-@code{UMASK} und @code{UMASK_DIR} k�nnen jetzt oktal angegeben werden.
-@item
-@code{RIGHT JOIN}. Hierdurch wird @code{RIGHT} zu einem reservierten Wort.
-@item
-@code{@@@@IDENTITY} als ein Synonym f�r @code{LAST_INSERT_ID()}
-hinzugef�gt, aus Gr�nden der Visual-Basic-Kompatibilit�t.)
-@item
-Bug in @code{myisamchk} und @code{REPAIR} bei der Benutzung von
-@code{FULLTEXT}-Indexen behoben.
-@item
-@code{LOAD DATA INFILE} funktioniert jetzt mit FIFOs (Patch von Toni L.
-Harbaugh-Blackford).
-@item
-@code{FLUSH LOGS} brach die Replikation ab, wenn Sie einen Log-Namen mit
-einer expliziten Erweiterung als Wert der @code{log-bin}-Option angaben.
-@item
-Bug in @code{MyISAM} mit komprimierten mehrteiligen Schl�sseln behoben.
-@item
-Absturz bei der Benutzung von @code{CHECK TABLE} unter Windows behoben.
-@item
-Bug, bei dem @code{FULLTEXT}-Index immer den koi8_ukr-Zeichensatz
-benutzten, behoben.
-@item
-Berechtigungs�berpr�fung f�r @code{CHECK TABLE} in Ordnung gebracht.
-@item
-Der @code{MyISAM}-Reparatur-/Reindexierungs-Code benutzte nicht die
-@code{--tempdir}-Option f�r seine tempor�ren Dateien.
-@item
-@code{BACKUP TABLE/RESTORE TABLE} hinzugef�gt.
-@item
-Coredump auf @code{CHANGE MASTER TO} behoben, wenn der Slave keinen Master
-hatte, mit dem er startet.
-@item
-Falsche @code{time} in der Prozessliste f�r @code{Connect} des
-Slave-Threads in Ordnung gebracht.
-@item
-Der Slave loggt jetzt, wann er sich mit dem Master verbindet.
-@item
-Coredump-Bug beim Ausf�hren von @code{FLUSH MASTER} behoben, wenn man kein
-Dateinamens-Argument f�r @code{--log-bin} angab.
-@item
-Fehlende @file{ha_berkeley.x}-Dateien zu MySQL unter Windows hinzugef�gt.
-@item
-Einige mutex-Bugs im Log-Code behoben, die zu Thread-Blockierungen f�hren
-konnten, wenn neue Log-Dateien nicht erzeugt werden konnten.
-@item
-Sperrzeit und Anzahl von ausgew�hlten bearbeiteten Zeilen zur
-Langsame-Anfragen-Log-Datei hinzugef�gt.
-@item
-@code{--memlock}-Option f�r @code{mysqld}, um @code{mysqld} im
-Arbeitsspeicher auf Systemen mit dem @code{mlockall()}-Aufruf (wie in
-Solaris) zu sperren, hinzugef�gt.
-@item
-@code{HEAP}-Tabellen benutzten Schl�ssel nicht korrekt (Bug aus Version
-3.23.23).
-@item
-Bessere Unterst�tzung f�r @code{MERGE}-Tabellen (Schl�ssel, Mapping,
-Erzeugung, Dokumentation und mehr) hinzugef�gt. @xref{MERGE}.
-@item
-Bug in @code{mysqldump} aus Version 3.23 behoben, der dazu f�hrte, dass
-einige @code{CHAR}-Spalten nicht in Anf�hrungsstrichen standen.
-@item
-@code{analyze}, @code{check}, @code{optimize} und Reparatur-Code
-zusammengefasst.
-@item
-@code{OPTIMIZE TABLE} wird jetzt auf @code{REPAIR} mit Statistiken und
-Sortieren des Index-Baums gemappt. Das hei�t, das es momentan nur auf
-@code{MyISAM}-Tabellen funktioniert.
-@item
-Einen pre-alloced Block zu root_malloc hinzugef�gt, um weniger mallocs zu
-erhalten.
-@item
-Viele neue Statistik-Variablen hinzugef�gt.
-@item
-@code{ORDER BY}-Bug bei BDB-Tabellen behoben.
-@item
-Warnungen entfernt, dass @code{mysqld} die @file{.pid}-Datei unter Windows
-nicht entfernen konnte.
-@item
-@code{--log-isam} zum Loggen von @strong{MyISAM}-Tabellen anstelle von
-isam-Tabellen abge�ndert.
-@item
-@code{CHECK TABLE} funktioniert jetzt auch unter Windows.
-@item
-Datei-mutexes hinzugef�gt, um @code{pwrite()} unter Windows sicher zu
-machen.
-@end itemize
-
-
-@node News-3.23.24, News-3.23.23, News-3.23.25, News-3.23.x
-@c German node Neuigkeiten-3.23.24
-@appendixsubsec �nderungen in Release 3.23.24
-
-@itemize @bullet
-@item
-@code{mysqld}-Variable @code{created_tmp_disk_tables} hinzugef�gt.
-@item
-Um das verl�ssliche Dumpen und Wiederherstellen von Tabellen mit
-@code{TIMESTAMP(X)}-Spalten zu erm�glichen, berichtet MySQL jetzt Spalten
-mit @code{X} anders als 14 oder 8 als Zeichenketten.
-@item
-Sortierreihenfolge f�r latin1 abge�ndert im Vergleich zu MySQL-Version vor
-3.23.23. Jede Tabelle mit @code{CHAR}-Spalten, die Zeichen mit ASCII-Werten
-gr��er als 128 enthalten darf, die vor Version 3.23.22 erzeugt oder
-ge�ndert wurde, muss repariert werden!
-@item
-Kleines Speicherleck behoben, das in Version 3.23.22 beim Einf�gen einer
-tempor�ren Tabelle eingef�hrt wurde.
-@item
-Problem mit BDB-Tabellen und Lesen auf einem eindeutigen (nicht prim�ren)
-Schl�ssel behoben.
-@item
-Der win1251-Zeichensatz wurde wiederhergestellt (er ist jetzt nur als nicht
-empfohlen gekennzeichnet).
-@end itemize
-
-
-@node News-3.23.23, News-3.23.22, News-3.23.24, News-3.23.x
-@c German node Neuigkeiten-3.23.23
-@appendixsubsec �nderungen in Release 3.23.23
-
-@itemize @bullet
-@item
-Ge�nderte Sortierreihenfolge f�r 'deutsch'; Alle Tabellen mit 'deutscher'
-Sortierreihenfolge m�ssen mit @code{REPAIR TABLE} oder @code{myisamchk}
-repariert werden, bevor sie benutzt werden k�nnen!
-@item
-Option @code{--core-file} f�r @code{mysqld} hinzugef�gt, um eine Core-Datei
-unter Linux zu erhalten, wenn @code{mysqld} durch das SIGSEGV-Signal
-stirbt.
-@item
-MySQL-Client @code{mysql} startet jetzt vorgabem��ig mit
-@code{--no-named-commands} (@code{-g}). Diese Option kann mit
-@code{--enable-named-commands} (@code{-G}) abgeschaltet werden. Das kann in
-manchen F�llen Inkompatibilit�tsprobleme hervorrufen, zum Beispiel in
-SQL-Skripten, die benannte Befehle ohne Semikolon benutzen!
-Langformat-Befehle funktionieren immer noch von der ersten Zeile.
-@item
-Problem bei der Benutzung vieler anh�ngiger @code{DROP TABLE}-Statements
-zugleich behoben.
-@item
-Der Optimierer verwendete Schl�ssel nicht korrekt bei der Benutzung von
-@code{LEFT JOIN} auf eine leere Tabelle.
-@item
-K�rzerer Hilfetext beim Aufruf von @code{mysqld} mit falschen Optionen.
-@item
-Nicht schwerwiegender @code{free()}-Bug in @code{mysqlimport} behoben.
-@item
-Bug in der @code{MyISAM}-Index-Handhabung von
-@code{DECIMAL}-/@code{NUMERIC}-Schl�sseln behoben.
-@item
-Bug beim gleichzeitigen Einf�gen in @code{MyISAM}-Tabellen behoben; in
-manchen Zusammenh�ngen gab die Benutzung von @code{MIN(schluessel_teil)}
-oder @code{MAX(schluessel_teil)} eine leere Ergebnismenge zur�ck.
-@item
-@code{mysqlhotcopy} f�r die Benutzung der neuen @code{FLUSH TABLES
-tabellen_liste}-Syntax aktualisiert. Nur Tabellen, die gesichert werden,
-werden jetzt auf Platte zur�ckgeschrieben (flush).
-@item
-Verhalten von @code{--enable-thread-safe-client} so ge�ndert, dass sowohl
-nicht gethreadete (@code{-lmysqlclient}) als auch gethreadete
-(@code{-lmysqlclient_r}) Bibliotheken eingebaut werden. Benutzer, die gegen
-ein gethreadetes @code{-lmysqlclient} linkten, m�ssen jetzt gegen
-@code{libmysqlclient_r} linken.
-@item
-Atomischer @code{RENAME}-Befehl hinzugef�gt.
-@item
-Eintr�ge mit @code{NULL} werden in @code{COUNT(DISTINCT ...)} nicht
-gez�hlt.
-@item
-@code{ALTER TABLE}, @code{LOAD DATA INFILE} auf leere Tabellen und
-@code{INSERT ... SELECT ...} auf leere Tabellen so ge�ndert, dass nicht
-eindeutige Indexe in einem separaten Stapellauf mit Sortieren erzeugt
-werden. Das macht die genannten Aufrufe viel schneller, wenn Sie viele
-Indexe haben.
-@item
-@code{ALTER TABLE} loggt jetzt die zuerst benutzte insert_id korrekt.
-@item
-Absturz beim Hinzuf�gen eines Vorgabewerts zu einer @code{BLOB}-Spalte
-behoben.
-@item
-Bug bei @code{DATE_ADD/DATE_SUB} behoben, der eine DATETIME anstelle eines
-DATE zur�ckgab.
-@item
-Problem mit dem Thread-Cache behoben, der dazu f�hrte, dass einige Threads
-als @code{***DEAD***} in @code{SHOW PROCESSLIST} erschienen.
-@item
-Eine Sperre in unserem thr_rwlock-Code beseitigt, die dazu f�hren konnte,
-dass SELECTs, die zur selben Zeit laufen wie gleichzeitige Einf�gevorg�nge,
-abst�rzen. Das betrifft nur Systeme, die nicht den
-@code{pthread_rwlock_rdlock}-Code haben.
-@item
-Beim L�schen von Zeilen mit einem nicht eindeutigen Schl�ssel in einer
-HEAP-Tabelle wurden nicht immer alle Zeilen gel�scht.
-@item
-Bug im Bereichsoptimierer f�r HEAP-Tabellen bei Suchen auf einem Teil-Index
-behoben.
-@item
-@code{SELECT} auf Teilschl�sseln funktioniert jetzt bei BDB-Tabellen.
-@item
-@code{INSERT INTO bdb_tabelle ... SELECT} funktioniert jetzt bei
-BDB-Tabellen.
-@item
-@code{CHECK TABLE} aktualisiert jetzt Schl�sselstatistiken f�r die Tabelle.
-@item
-@code{ANALYZE TABLE} aktualisiert jetzt nur Tabellen, die seit dem letzten
-@code{ANALYZE} ge�ndert wurden. Beachten Sie, dass das ein neues Feature
-ist, und dass Tabellen nicht als analysiert gekennzeichnet werden, bis sie
-auf irgend eine Weise mit Version 3.23.23 oder neuer aktualisiert wurden.
-Bei �lteren Tabellen m�ssen Sie @code{CHECK TABLE} ausf�hren, um die
-Schl�sselverteilung zu aktualisieren.
-@item
-Einige kleinere Berechtigungsprobleme bei @code{CHECK}, @code{ANALYZE},
-@code{REPAIR} und @code{SHOW CREATE} behoben.
-@item
-@code{CHANGE MASTER TO}-Befehl hinzugef�gt.
-@item
-@code{FAST}-, @code{QUICK}- @code{EXTENDED}-�berpr�fungsarten zu
-@code{CHECK TABLES} hinzugef�gt.
-@item
-@code{myisamchk} abge�ndert, so dass @code{--fast} und
-@code{--check-changed-tables} auch bei @code{--sort-index} und
-@code{--analyze} ber�cksichtigt werden.
-@item
-Schwerwiegenden Bug in @code{LOAD TABLE FROM MASTER} behoben, bei dem die
-Tabelle w�hrend des Neuaufbaus des Indexes nicht gesperrt wurde.
-@item
-@code{LOAD DATA INFILE} brach die Replikation ab, wenn die Datenbank aus
-der Replikation ausgeschlossen war.
-@item
-Mehr Variablen zu @code{SHOW SLAVE STATUS} und @code{SHOW MASTER STATUS}
-hinzugef�gt.
-@item
-@code{SLAVE STOP} gibt jetzt solange nichts zur�ck, bis der Thread
-tats�chlich beendet ist.
-@item
-Volltextsuche mit der @code{MATCH}-Funktion und @code{FULLTEXT}-Indextyp
-hinzugef�gt (f�r MyISAM-Dateien). Das macht @code{FULLTEXT} zu einem
-reservierten Wort.
-@end itemize
-
-
-@node News-3.23.22, News-3.23.21, News-3.23.23, News-3.23.x
-@c German node Neuigkeiten-3.23.22
-@appendixsubsec �nderungen in Release 3.23.22
-
-@itemize @bullet
-@item
-@code{lex_hash.h} wird jetzt f�r jede MySQL-Distribution korrekt erzeugt.
-@item
-@code{MASTER} und @code{COLLECTION} sind jetzt reservierte W�rter.
-@item
-Die Log-Datei, die von @code{--slow-query-log} erzeugt wird, enthielt nicht
-die gesamten Anfragen.
-@item
-Offene Transaktionen in BDB-Tabellen werden jetzt nicht mehr zur�ckgerollt,
-wenn die Verbindung unerwartet geschlossen wird.
-@item
-Workaround f�r einen Bug in @code{gcc} 2.96 (intel) und @code{gcc} 2.9
-(Ia64) in @code{gen_lex_hash.c} hinzugef�gt.
-@item
-Speicherleck in der Client-Bibliothek bei der Benutzung von @code{host=} in
-der @code{my.cnf}-Datei behoben.
-@item
-Funktionen optimiert, die Stunden/Minuten/Sekunden bearbeiten.
-@item
-Bug beim Vergleich des Ergebnisses von @code{DATE_ADD()}/@code{DATE_SUB()}
-mit einer Zahl behoben.
-@item
-Bedeutung von @code{-F, --fast} f�r @code{myisamchk} ge�ndert. Option
-@code{-C, --check-only-changed} f�r @code{myisamchk} hinzugef�gt.
-@item
-@code{ANALYZE tabelle} zum Aktualisieren von Schl�sselstatistiken f�r
-Tabellen hinzugef�gt.
-@item
-Bin�reinheiten @code{0x...} abge�ndert, so dass sie vorgabem��ig als
-Ganzzahlen betrachtet werden.
-@item
-Fehlerbehebung f�r SCO und @code{SHOW PROCESSLIST}.
-@item
-@code{auto-rehash} beim erneuten Verbinden f�r den @code{mysql}-Client
-hinzugef�gt.
-@item
-Neu eingef�hrten Bug in @code{MyISAM} behoben, bei dem die Index-Datei
-nicht gr��er als 64 MB werden durfte.
-@item
-@code{SHOW MASTER STATUS} und @code{SHOW SLAVE STATUS} hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.21, News-3.23.20, News-3.23.22, News-3.23.x
-@c German node Neuigkeiten-3.23.21
-@appendixsubsec �nderungen in Release 3.23.21
-
-@itemize @bullet
-@item
-@code{mysql_character_set_name(MYSQL *mysql)}-Funktion zur MySQL-C-API
-hinzugef�gt.
-@item
-Update-Log-Datei @code{ASCII 0}-sicher gemacht.
-@item
-@code{mysql_config}-Skript hinzugef�gt.
-@item
-Problem bei der Benutzung von @code{<} oder @code{>} mit einer CHAR-Spalte,
-die nur teilweise indexiert war, behoben.
-@item
-Man erhielt einen Coredump, wenn die Log-Datei nicht vom MySQL-Benutzer
-lesbar war.
-@item
-@code{mysqladmin} so ge�ndert, dass es die @code{CREATE
-DATABASE}/@code{DROP DATABASE}-Befehle anstelle der alten, nicht
-empfohlenen API-Aufrufe benutzt.
-@item
-@code{chown}-Warnung in @code{safe_mysqld} in Ordnung gebracht.
-@item
-Bug in @code{ORDER BY} behoben, der in Version 3.23.19 eingef�hrt wurde.
-@item
-@code{DELETE FROM tabelle} wird nur dann optimiert, ein L�schen und
-Neuerzeugen der Tabelle auszuf�hren, wenn man sich im
-@code{AUTOCOMMIT}-Modus befindet (ben�tigt f�r BDB-Tabellen).
-@item
-Zus�tzliche Pr�fungen hinzugef�gt, um Index-Besch�digung zu vermeiden, wenn
-die @code{ISAM}/@code{MyISAM}-Index-Dateien w�hrend eines
-@code{INSERT}/@code{UPDATE} voll werden.
-@item
-@code{myisamchk} aktualisierte die Zeilenpr�fsumme nicht korrekt, wenn es
-mit @code{-ro} benutzt wurde (sondern gab nur bei nachfolgenden L�ufen eine
-Warnung aus).
-@item
-Bug in @code{REPAIR TABLE} behoben, so dass es bei Tabellen ohne Indexe
-funktioniert.
-@item
-Puffer-�berlauf in @code{DROP DATABASE} behoben.
-@item
-@code{LOAD TABLE FROM MASTER} ist ausreichend ohne Bugs, um es als Feature
-vorstellen zu k�nnen.
-@item
-@code{MATCH} und @code{AGAINST} sind jetzt reservierte W�rter.
-@end itemize
-
-
-@node News-3.23.20, News-3.23.19, News-3.23.21, News-3.23.x
-@c German node Neuigkeiten-3.23.20
-@appendixsubsec �nderungen in Release 3.23.20
-
-@itemize @bullet
-@item
-Bug in Version 3.23.19 behoben; @code{DELETE FROM tabelle} entfernte die
-.frm-Datei.
-@item
-@code{SHOW CREATE TABLE}.
-@end itemize
-
-
-@node News-3.23.19, News-3.23.18, News-3.23.20, News-3.23.x
-@c German node Neuigkeiten-3.23.19
-@appendixsubsec �nderungen in Release 3.23.19
-
-@itemize @bullet
-@item
-Copyright f�r alle Dateien zu GPL f�r den Server-Code und die
-Dienstprogramme und LGPL f�r die Client-Bibliotheken ge�ndert.
-@item
-Bug behoben, bei dem nicht alle �bereinstimmenden Zeilen bei einer
-@code{MyISAM}-Tabelle aktualisiert wurden, wenn man eine Aktualisierung
-basierend auf einem Schl�ssel auf eine Tabelle mit vielen Schl�sseln
-durchf�hrte, und sich einige Schl�sselwerte �nderten.
-@item
-Die Linux-MySQL-RPMs und -Bin�rdateien werden jetzt bei einer
-Linux-Thread-Version statisch gelinkt, die schnellere mutex-Handhabung bei
-der Benutzung mit MySQL hat.
-@item
-@code{ORDER BY} kann jetzt @code{REF}-Schl�ssel benutzen, um eine
-Untermenge von Zeilen zu finden, die sortiert werden m�ssen.
-@item
-Der Name von @code{print_defaults} wurde in @code{my_print_defaults}
-ge�ndert, um Namenskonflikte zu vermeiden.
-@item
-@code{NULLIF()} funktioniert jetzt gem�� ANSI-SQL99.
-@item
-@code{net_read_timeout} und @code{net_write_timeout} als Startparameter f�r
-@code{mysqld} hinzugef�gt.
-@item
-Bug behoben, der den Index bei der Ausf�hrung von @code{myisamchk
---sort-records} auf eine Tabelle mit Pr�fix-komprimiertem Index zerst�rte.
-@item
-pack_isam und myisampack zur Standard-MySQL-Distribution hinzugef�gt.
-@item
-Die Syntax @code{BEGIN WORK} hinzugef�gt (dasselbe wie @code{BEGIN}).
-@item
-Coredump-Bug bei der Benutzung von @code{ORDER BY} auf
-@code{CONV()}-Ausdruck behoben.
-@item @code{LOAD TABLE FROM MASTER} hinzugef�gt.
-@item @code{FLUSH MASTER} und @code{FLUSH SLAVE} hinzugef�gt.
-@item Gro�es/kleines 'endian'-Problem in der Replikation behoben.
-@end itemize
-
-
-@node News-3.23.18, News-3.23.17, News-3.23.19, News-3.23.x
-@c German node Neuigkeiten-3.23.18
-@appendixsubsec �nderungen in Release 3.23.18
-
-@itemize @bullet
-@item
-Problem aus Version 3.23.17 bei der Auswahl eines Zeichensatzes auf der
-Client-Seite behoben.
-@item
-@code{FLUSH TABLES with READ LOCK} ge�ndert, so dass es eine globale Sperre
-macht, die f�r das Herstellen einer Kopie der MySQL-Daten-Dateien geeignet
-ist.
-@item
-@code{CREATE TABLE ... SELECT ... PROCEDURE} funktioniert jetzt.
-@item
-Interne tempor�re Tabellen benutzen jetzt einen komprimierten Index bei der
-Benutzung von @code{GROUP BY} auf @code{VARCHAR/CHAR}-Spalten.
-@item
-Problem behoben beim Sperren derselbe Tabelle mit einer @code{READ}- und
-einer @code{WRITE}-Sperre.
-@item
-Problem mit myisamchk und @code{RAID}-Tabellen behoben.
-@end itemize
-
-
-@node News-3.23.17, News-3.23.16, News-3.23.18, News-3.23.x
-@c German node Neuigkeiten-3.23.17
-@appendixsubsec �nderungen in Release 3.23.17
-
-@itemize @bullet
-@item
-Bug in @code{find_in_set()} behoben, wenn das erste Argument @code{NULL}
-war.
-@item
-Tabellensperren f�r Berkeley-DB hinzugef�gt.
-@item
-Bug bei @code{LEFT JOIN} und @code{ORDER BY} behoben, bei dem die erste
-Tabelle nur eine �bereinstimmende Zeile hatte.
-@item
-4 @code{my.cnf}-Beispiel-Dateien im @file{Support-files}-Verzeichnis
-hinzugef�gt.
-@item
-@code{duplicated key}-Problem bei der Ausf�hrung gro�er @code{GROUP BY}s
-behoben. (Dieser Bug wurde wahrscheinlich in Version 3.23.15 eingef�hrt).
-@item
-Syntax f�r @code{INNER JOIN} ge�ndert, um ANSI-SQL zu entsprechen.
-@item
-@code{NATURAL JOIN}-Syntax hinzugef�gt.
-@item
-Viele Korrekturen in der @code{BDB}-Schnittstelle.
-@item
-Handhabung von @code{--no-defaults} und @code{--defaults-file} f�r
-@code{safe_mysqld.sh} und @code{mysql_install_db.sh} hinzugef�gt.
-@item
-Bug beim Lesen komprimierter Tabellen mit vielen Threads behoben.
-@item
-@code{USE INDEX} funktioniert jetzt mit @code{PRIMARY}-Schl�sseln.
-@item
-@code{BEGIN}-Statement ge�ndert, so dass es eine Transaktion im
-@code{AUTOCOMMIT}-Modus startet.
-@item
-Symbolische-Links-Unterst�tzung f�r Windows.
-@item
-Protokoll ge�ndert, so dass der Client wei�, ob der Server im AUTOCOMMIT-
-Modus ist und ob es eine anh�ngige Transaktion gibt. Wenn das der Fall ist,
-gibt die Client-Bibliothek einen Fehler aus, bevor sie sich wieder mit dem
-Server verbindet, damit der Client wei�, dass der Server ein Rollback
-durchgef�hrt hat. Das Protokoll ist noch abw�rtskompatibel mit den alten
-Clients.
-@item
-@code{KILL} funktioniert jetzt auf einem Thread, der durch ein 'Schreiben'
-auf einen toten Client gesperrt ist.
-@item
-Speicherleck im Replikations-Slave-Thread behoben.
-@item
-Neue Option @code{log-slave-updates} hinzugef�gt, die das
-Hintereinanderh�ngen im Kreis (Daisy-Chaining, 'Ringelrei') von Slaves
-erlaubt.
-@item
-Compile-Fehler auf FreeBSD und anderen Systemen behoben, auf denen
-@code{pthread_t} nicht dasselbe wie @code{int} ist.
-@item
-Herunterfahren des Masters bricht den Slave-Thread nicht mehr ab.
-@item
-Race-Bedingung im @code{INSERT DELAYED}-Code beim Ausf�hren von @code{ALTER
-TABLE} behoben.
-@item
-Blockierungs�berpr�fung f�r @code{INSERT DELAYED} hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.16, News-3.23.15, News-3.23.17, News-3.23.x
-@c German node Neuigkeiten-3.23.16
-@appendixsubsec �nderungen in Release 3.23.16
-
-@itemize @bullet
-@item
-Option @code{TYPE=QUICK} f�r @code{CHECK} und @code{REPAIR} hinzugef�gt.
-@item
-Bug in @code{REPAIR TABLE} behoben, wenn die Tabelle durch einen anderen
-Thread in Benutzung war.
-@item
-Einen Thread-Cache hinzugef�gt, um zu erm�glichen, MySQL mit @code{gdb} zu
-debuggen, wenn man viele erneute Verbindungen durchf�hrt. Das verbessert
-auch Systeme, auf denen man keine persistenten Verbindungen benutzen kann.
-@item
-Viele Korrekturen in der Berkeley-DB-Schnittstelle.
-@item
-@code{UPDATE IGNORE} bricht jetzt nicht mehr ab, wenn eine Aktualisierung
-zu einem @code{DUPLICATE_KEY}-Fehler f�hrt.
-@item
-@code{CREATE TEMPORARY TABLE}-Befehle werden in die Update-Log-Datei
-geschrieben.
-@item
-Bug bei der Handhabung von maskierten IP-Nummern in den
-Berechtigungstabellen behoben.
-@item
-Bug mit @code{delayed_key_writes}-Tabellen und @code{CHECK TABLE} behoben.
-@item
-@code{replicate-do-db} und @code{replicate-ignore-db}-Optionen hinzugef�gt,
-um auf Datenbanken zu beschr�nken, die repliziert werden.
-@item
-@code{SQL_LOG_BIN}-Option hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.15, News-3.23.14, News-3.23.16, News-3.23.x
-@c German node Neuigkeiten-3.23.15
-@appendixsubsec �nderungen in Release 3.23.15
-
-@itemize @bullet
-@item
-Um @code{mysqld} als @code{root} zu starten, m�ssen Sie jetzt die @code{--
-user=root}-Option benutzen.
-@item
-Schnittstelle zu Berkeley-DB hinzugef�gt. (Diese funktioniert noch nicht
-richtig. Spielen Sie mit ihr auf eigenes Risiko herum!)
-@item
-Replikation zwischen Master und Slaves hinzugef�gt.
-@item
-Bug behoben, bei dem ein anderer Thread eine Sperre stehlen konnte, wenn
-ein Thread eine Sperre auf eine Tabelle hatte und einen @code{FLUSH
-TABLES}-Befehl ausf�hrte.
-@item
-Die @code{slow_launch_time}-Variable und die
-@code{slow_launch_thread}-Status-Variable zu @code{mysqld} hinzugef�gt.
-Diese k�nnen mit @code{mysqladmin variables} und @code{mysqladmin
-extended-status} betrachtet werden.
-@item
-Funktionen @code{INET_NTOA()} und @code{INET_ATON()} hinzugef�gt.
-@item
-Der vorgabem��ige Typ von @code{IF()} h�ngt jetzt vom zweiten und dritten
-Argument ab und nicht nur vom zweiten.
-@item
-Fall behoben, bei dem @code{myisamchk} beim Versuch, eine Tabelle zu
-reparieren, in eine Schleife geraten konnte.
-@item
-@code{INSERT DELAYED} nicht in die Update-Log-Datei schreiben, wenn
-@code{SQL_LOG_UPDATE=0}.
-@item
-Problem mit @code{REPLACE} auf @code{HEAP}-Tabellen behoben.
-@item
-M�gliche Zeichens�tze und Zeitzone zu @code{SHOW VARIABLES} hinzugef�gt.
-@item
-Bug im Sperr-Code behoben, der zu Sperrproblemen bei gleichzeitigen
-Einf�gevorg�ngen unter hoher Last f�hren konnte.
-@item
-Problem bei @code{DELETE} vieler Zeilen auf eine Tabelle mit komprimierten
-Schl�sseln behoben, bei dem MySQL den Index scannte, um Zeilen zu finden.
-@item
-Problem mit @code{CHECK} auf Tabelle mit gel�schten Schl�sselbl�cken
-behoben.
-@item
-Bug beim Neuverbinden (auf der Client-Seite) behoben, bei dem in manchen
-Situationen Speicher nicht freigegeben wurde.
-@item
-Probleme in der Update-Log-Datei bei der Benutzung von
-@code{LAST_INSERT_ID()} zum Aktualisieren einer Tabelle mit einem
-auto_increment-Schl�ssel behoben.
-@item
-Funktion @code{NULLIF()} hinzugef�gt.
-@item
-Bug bei der Benutzung von @code{LOAD DATA INFILE} auf eine Tabelle mit
-@code{BLOB/TEXT}-Spalten behoben.
-@item
-MyISAM optimiert, um es beim Einf�gen von Schl�sseln in sortierter
-Reihenfolge schneller zu machen.
-@item
-@code{EXPLAIN SELECT ...} gibt jetzt auch aus, ob MySQL eine tempor�re
-Tabelle oder Dateisortieren verwendet, wenn das @code{SELECT} aufgel�st
-wird.
-@item
-Optimierung hinzugef�gt, um @code{ORDER BY}-Teile zu �berspringen, bei
-denen der Teil ein konstanter Ausdruck im @code{WHERE}-Teil ist. Indexe
-k�nnen jetzt benutzt werden, selbst wenn das @code{ORDER BY} nicht genau
-mit dem Index �bereinstimmt, solange alle nicht benutzten Index-Teile und
-alle zus�tzlichen @code{ORDER BY}-Spalten Konstanten in der
-@code{WHERE}-Klausel sind. @xref{MySQL indexes}.
-@item
-@code{UPDATE} und @code{DELETE} auf einen gesamten eindeutigen Schl�ssel im
-@code{WHERE}-Teil ist jetzt schneller als vorher.
-@item
-@code{RAID_CHUNKSIZE} so ge�ndert, dass es in 1024 Bytes inkrementiert.
-@item
-Coredump in LOAD_FILE(NULL) behoben.
-@end itemize
-
-
-@node News-3.23.14, News-3.23.13, News-3.23.15, News-3.23.x
-@c German node Neuigkeiten-3.23.14
-@appendixsubsec �nderungen in Release 3.23.14
-
-@itemize @bullet
-@item
-Bug in @code{CONCAT()} behoben, bei dem eins der Argumente eine Funktion
-war, die ein ver�ndertes Argument zur�ckgab.
-@item
-Kritischen Bug in @code{myisamchk} behoben, wobei es den Header in der
-Index-Datei aktualisierte, wenn man die Tabelle nur pr�fte. Das brachte den
-@code{mysqld}-Daemon durcheinander, wenn er dieselbe Tabelle zur gleichen
-Zeit aktualisierte. Jetzt wird der Status in der Index-Datei nur dann
-aktualisiert, wenn man @code{--update-state} benutzt. Bei �lteren
-@code{myisamchk}-Versionen sollten Sie @code{--read-only} benutzen, wenn
-Sie Tabellen nur pr�fen, wenn es auch nur die geringste Chance gibt, dass
-der @code{mysqld}-Server zur gleichen Zeit auf der Tabelle arbeitet!
-@item
-@code{DROP TABLE} wird nicht mehr in der Update-Log-Datei geloggt.
-@item
-Problem beim Suchen auf @code{DECIMAL()}-Schl�sselfeld behoben, wenn die
-Spalte Daten mit f�hrenden Nullen enthielt.
-@item
-Bug in @code{myisamchk} behoben, wenn auto_increment nicht der erste
-Schl�ssel ist.
-@item
-@code{DATETIME} wird im ISO-8601-Format zugelassen: 2000-03-12T12:00:00
-@item
-Dynamische Zeichens�tze hinzugef�gt. Eine @code{mysqld}-Bin�rdatei kann
-jetzt viele unterschiedliche Zeichens�tze handhaben (welche, k�nnen Sie
-beim Start von @code{mysqld} angeben).
-@item
-Befehl @code{REPAIR TABLE} hinzugef�gt.
-@item
-C-API-Funktion @code{mysql_thread_safe()} hinzugef�gt.
-@item
-@code{UMASK_DIR}-Umgebungsvariable hinzugef�gt.
-@item
-Funktion @code{CONNECTION_ID()} hinzugef�gt.
-@item
-Bei der Benutzung von @code{=} auf @code{BLOB}- oder @code{VARCHAR
-BINARY}-Schl�sseln, bei denen nur ein Teil der Spalte indexiert war, wurde
-nicht die gesamte Spalte der Ergebniszeile verglichen.
-@item
-Problembehebung f�r sjis-Zeichensatz und @code{ORDER BY}.
-@item
-Beim Laufenlassen im ANSI-Modus wird nicht mehr zugelassen, dass Spalten
-benutzt werden, die nicht im @code{GROUP BY}-Teil angegeben wurden.
-@end itemize
-
-
-@node News-3.23.13, News-3.23.12, News-3.23.14, News-3.23.x
-@c German node Neuigkeiten-3.23.13
-@appendixsubsec �nderungen in Release 3.23.13
-
-@itemize @bullet
-@item
-Problem behoben bei der Ausf�hrung von Sperren auf dieselbe Tabelle mehr
-als zweimal im selben @code{LOCK TABLE}-Befehl. Dadurch wurde das Problem
-behoben, das man bekam, wenn man test-ATIS test mit @code{--fast} oder
-@code{--check-only-changed} laufen lie�.
-@item
-Option @code{SQL_Puffer_RESULT} f�r @code{SELECT} hinzugef�gt.
-@item
-Leerzeichen am Ende von Double-/Float-Zahlen in Ergebnissen aus tempor�ren
-Tabellen entfernt.
-@code{CHECK TABLE}-Befehl hinzugef�gt.
-@item
-�nderungen f�r MyISAM in Version 3.23.12 hinzugef�gt, die wegen
-CVS-Problemen nicht in die Quelldistribution gelangten.
-@item
-Bug behoben, so dass @code{mysqladmin shutdown} darauf wartet, dass der
-lokale Server herunter f�hrt.
-@item
-M�gliche Endlosschleife bei der Zeitstempel-Berechnung repariert.
-@item
-@code{print_defaults} f�r die @file{.rpm}-Dateien hinzugef�gt.
-@code{mysqlbug} aus der Client-@file{.rpm}-Datei entfernt.
-@end itemize
-
-
-@node News-3.23.12, News-3.23.11, News-3.23.13, News-3.23.x
-@c German node Neuigkeiten-3.23.12
-@appendixsubsec �nderungen in Release 3.23.12
-
-@itemize @bullet
-@item
-Bug in @code{MyISAM} behoben, bei dem @code{REPLACE ... SELECT ...} eine
-besch�digte Tabelle ergeben konnte.
-@item
-Bug in @code{myisamchk} behoben, bei dem der auto_increment-Wert falsch
-zur�ckgesetzt wurde.
-@item
-VIELE Patches f�r Linux Alpha. MySQL scheint mittlerweile auf Linux Alpha
-relativ stabil zu laufen.
-@item
-@code{DISTINCT} auf @code{HEAP} tempor�re Tabellen so ge�ndert, dass
-gehashte Schl�ssel verwendet werden, um doppelte Zeilen (Duplikate) schnell
-zu finden. Das betrifft meistens Anfragen des Typs @code{SELECT DISTINCT
-... GROUP BY ...}. Das behebt ein Problem, bei dem nicht alle Duplikate in
-Anfragen des genannten Typs entfernt wurden. Zus�tzlich ist der neue Code
-VIEL schneller.
-@item
-Patches hinzugef�gt, damit MySQL auf Mac OS X kompiliert.
-@item
-Option @code{IF NOT EXISTS} f�r @code{CREATE DATABASE} hinzugef�gt.
-@item
-Optionen @code{--all-databases} und @code{--databases} f�r @code{mysqldump}
-hinzugef�gt, um das Dumpen vieler Datenbanken zugleich zu erm�glichen.
-@item
-Bug im komprimierten @code{DECIMAL()}-Index in @code{MyISAM}-Tabellen
-behoben.
-@item
-Bug beim Speichern von 0 in ein Timestamp-Feld behoben.
-@item
-Beim Ausf�hren von @code{mysqladmin shutdown} auf eine lokale Verbindung
-wartet @code{mysqladmin} jetzt, bis die PID-Datei entfernt ist, bevor es
-sich beendet.
-@item
-Coredump bei einigen @code{COUNT(DISTINCT ...)}-Anfragen behoben.
-@item
-@code{myisamchk} funktioniert jetzt sauber bei RAID-Tabellen.
-@item
-Problem bei @code{LEFT JOIN} und @code{schluessel_feld IS NULL} behoben.
-@item
-Bug in @code{net_clear()} behoben, der den Fehler @code{Aborted connection}
-in MySQL-Clients ausgeben konnte.
-@item
-Optionen @code{USE INDEX (schluessel_liste)} und @code{IGNORE INDEX
-(schluessel_liste)} als Join-Parameter in @code{SELECT} hinzugef�gt.
-@item
-@code{DELETE} und @code{RENAME} sollten jetzt auf @code{RAID}-Tabellen
-funktionieren.
-@end itemize
-
-
-@node News-3.23.11, News-3.23.10, News-3.23.12, News-3.23.x
-@c German node Neuigkeiten-3.23.11
-@appendixsubsec �nderungen in Release 3.23.11
-
-@itemize @bullet
-@item
-@code{ALTER TABLE tabelle ADD (feld_liste)}-Syntax wird zugelassen.
-@item
-Problem mit dem Optimierer behoben, der manchmal falsche Schl�ssel
-benutzte.
-@item
-@code{GRANT/REVOKE ALL PRIVILEGES} betrifft jetzt nicht mehr @code{GRANT
-OPTION}.
-@item
-Zus�tzliche Klammer (@code{)}) aus der Ausgabe von @code{SHOW GRANTS}
-entfernt.
-@item
-Problem beim Speichern von Zahlen in Timestamps behoben.
-@item
-Problem mit Zeitzonen behoben, die einen Halbstunden-Offset haben.
-@item
-Syntax @code{UNIQUE INDEX} in @code{CREATE}-Statements wird jetzt
-zugelassen.
-@item
-@code{mysqlhotcopy} hinzugef�gt. Das ist ein schnelles
-Online-Datensicherungsdienstprogramm f�r lokale MySQL-Datenbanken. Von Tim
-Bunce.
-@item
-Neues, sichereres @code{mysqlaccess} hinzugef�gt. Dank an Steve Harvey
-hierf�r.
-@item
-Optionen @code{--i-am-a-dummy} und @code{--safe-updates} f�r @code{mysql}
-hinzugef�gt.
-@item
-Variablen @code{select_limit} und @code{max_join_size} f�r @code{mysql}
-hinzugef�gt.
-@item
-SQL-Variablen @code{SQL_MAX_JOIN_SIZE} und @code{SQL_SAFE_UPDATES}
-hinzugef�gt.
-@item
-@code{READ LOCAL}-Sperre hinzugef�gt, die die Tabelle nicht f�r
-gleichzeitige Einf�gevorg�nge sperrt (das wird von @code{mysqldump}
-benutzt).
-@item
-@code{LOCK TABLES ... READ} l��t keine gleichzeitigen Einf�gevorg�nge mehr
-zu.
-@item
-Option @code{--skip-delay-key-write} f�r @code{mysqld} hinzugef�gt.
-@item
-Sicherheitsproblem im Protokoll betreffend Passwort�berpr�fung behoben.
-@item
-@code{_rowid} kann jetzt als Alias f�r eine eindeutig indexierte Spalte vom
-Typ Ganzzahl benutzt werden.
-@item
-Zur�ck-Blockieren (Back Blocking) f�r @code{SIGPIPE} beim Kompilieren mit
-@code{--thread-safe-clients} hinzugef�gt, um Dinge f�r alte Clients sicher
-zu machen.
-@end itemize
-
-
-@node News-3.23.10, News-3.23.9, News-3.23.11, News-3.23.x
-@c German node Neuigkeiten-3.23.10
-@appendixsubsec �nderungen in Release 3.23.10
-
-@itemize @bullet
-@item
-Bug in Version 3.23.9 behoben, bei dem Speicher nicht korrekt freigegeben
-wurde, wenn man @code{LOCK TABLES} ausf�hrte.
-@end itemize
-
-
-@node News-3.23.9, News-3.23.8, News-3.23.10, News-3.23.x
-@c German node Neuigkeiten-3.23.9
-@appendixsubsec �nderungen in Release 3.23.9
-
-@itemize @bullet
-@item
-Problem behoben, dass betroffene Anfragen Berechnungen auf
-Gruppenfunktionen durchf�hrten.
-@item
-Problem mit timestamps und @code{INSERT DELAYED} behoben.
-@item
-@code{datum_spalte BETWEEN konstanten_datum AND konstanten_datum}
-funktioniert.
-@item
-Problem behoben, wenn man nur eine 0 zu @code{NULL} in einer Tabelle mit
-@code{BLOB/TEXT}-Spalten �nderte.
-@item
-Bug im Bereichsoptimierer bei der Benutzung von vielen Schl�sselteilen und
-/ oder den mittleren Schl�sselteilen behoben: @code{WHERE K1=1 and K3=2 and
-(K2=2 and K4=4 or K2=3 and K4=5)}
-@item
-Befehl @code{source} f�r @code{mysql} hinzugef�gt, um Lesen von
-Stapeldateien innerhalb des @code{mysql}-Clients zu erm�glichen.
-Original-Patch von Matthew Vanecek.
-@item
-Kritisches Problem mit der @code{WITH GRANT OPTION}-Option behoben.
-@item
-Keinen unn�tigen @code{GRANT}-Fehler bei der Benutzung von Tabellen von
-vielen Datenbanken in derselben Anfrage ausgeben.
-@item
-VIO-Wrapper (ben�tigt f�r SSL-Unterst�tzung) hinzugef�gt. Von Andrei
-Errapart und T�nu Samuel).
-@item
-Optimiererproblem bei @code{SELECT} bei der Benutzung von vielen
-�berlappenden Indexen behoben. MySQL sollte jetzt in der Lage sein,
-Schl�ssel noch besser auszusuchen, wenn es viele Schl�ssel zur Auswahl
-gibt.
-@item
-Optimierer so ge�ndert, dass er einen Bereichsschl�ssel anstelle eines
-Verweisschl�ssels bevorzugt, wenn der Bereichsschl�ssel mehr Spalten als
-der Verweisschl�ssel benutzen kann (der nur Spalten mit = verwenden
-kann). Folgender Anfragentyp beispielsweise sollte jetzt schneller sein:
-@code{SELECT * from schluessel_teil_1=konstante und schluessel_teil_2 >
-konstante2}
-@item
-Bug behoben, bei dem eine �nderung aller @code{VARCHAR}-Spalten in
-@code{CHAR}-Spalten den Spaltentyp nicht von dynamisch auf fest �nderte.
-@item
-Flie�komma-Ausnahmefehler f�r FreeBSD abgeschaltet, um Coredump beim
-Ausf�hren von @code{SELECT floor(pow(2,63))} zu vermeiden.
-@item
-@code{mysqld}-Startoption @code{--delay-key-write} in
-@code{--delay-key-write-for-all-tables} ge�ndert.
-@item
-@code{read-next-on-key} f�r @code{HEAP}-Tabellen hinzugef�gt. Das sollte
-alle Probleme mit @code{HEAP}-Tabellen bei der Benutzung von
-Nicht-@code{UNIQUE}-Schl�sseln beheben.
-@item
-Optionen f�r die Ausgabe vorgabem��iger Argumente f�r alle Clients
-hinzugef�gt.
-@item
-@code{--log-slow-queries} f�r @code{mysqld} hinzugef�gt, um alle Anfragen
-in einer separate Log-Datei zu loggen, die lange dauerten, mit einer
-Zeitangabe, wie lange die Anfrage ben�tigte.
-@item
-Coredump bei der Ausf�hrung von @code{WHERE schluessel_spalte=RAND(...)}
-behoben.
-@item
-Optimierungs-Bug in @code{SELECT ... LEFT JOIN ... schluessel_spalte IS
-NULL} behoben, wenn @code{schluessel_spalte} @code{NULL}-Werte enthalten
-konnte.
-@item
-Problem mit 8-Bit-Zeichen als Trennzeichen in @code{LOAD DATA INFILE}
-behoben.
-@end itemize
-
-
-@node News-3.23.8, News-3.23.7, News-3.23.9, News-3.23.x
-@c German node Neuigkeiten-3.23.8
-@appendixsubsec �nderungen in Release 3.23.8
-
-@itemize @bullet
-@item
-Problem bei der Handhabung von Index-Dateien gr��er als 8 GB behoben.
-@item
-neueste Patches f�r mit-pThread f�r NetBSD angewandt.
-@item
-Probleme mit Zeitzonen < GMT - 11 behoben.
-@item
-Bug beim L�schen komprimierter Schl�ssel in @code{MyISAM} behoben.
-@item
-Problem mit @code{ISAM} bei der Ausf�hrung einiger @code{ORDER BY ...
-DESC}-Anfragen behoben.
-@item
-Bug bei der Ausf�hrung eines Joins auf einen Text-Schl�ssel behoben, der
-nicht den gesamten Schl�ssel abdeckte.
-@item
-Option @code{--delay-key-write} schaltete verz�gertes Schl�ssel-Schreiben
-nicht an.
-@item
-Aktualisierung von @code{TEXT}-Spalten, die nur �nderungen der
-Gro�-/Kleinschreibung beinhalteten, in Ordnung gebracht.
-@item
-@code{INSERT DELAYED} aktualisiert jetzt Timestamps, die angegeben sind.
-@item
-Funktion @code{YEARWEEK()} und Optionen @code{x}, @code{X}, @code{v} und
-@code{V} f�r @code{DATE_FORMAT()} hinzugef�gt.
-@item
-Problem mit @code{MAX(indexierte_spalte)} und HEAP-Tabellen behoben.
-@item
-Problem mit @code{BLOB NULL}-Schl�sseln und @code{LIKE} "praefix%"
-behoben.
-@item
-Problem mit @code{MyISAM} und Zeilen fester L�nge < 5 Bytes behoben.
-@item
-Problem behoben, bei dem es vorkommen konnte, dass MySQL auf freigegebenen
-Speicher zugriff, wenn er sehr komplizierte @code{GROUP BY}-Anfragen
-ausf�hrte.
-@item
-Coredump behoben, wenn man eine besch�digte Tabelle erhielt, in der ein
-@code{ENUM}-Feldwert zu Gro� war.
-@end itemize
-
-
-@node News-3.23.7, News-3.23.6, News-3.23.8, News-3.23.x
-@c German node Neuigkeiten-3.23.7
-@appendixsubsec �nderungen in Release 3.23.7
-
-@itemize @bullet
-@item
-Workaround unter Linux in Ordnung gebracht, um Probleme mit
-@code{pthread_mutex_timedwait}, was bei @code{INSERT DELAYED} benutzt wird,
-zu vermeiden. @xref{Linux}.
-@item
-Man erh�lt jetzt einen 'disk full'-Fehler, wenn die Festplatten beim
-Sortieren voll wird (statt darauf zu warten, bis mehr Plattenplatz
-verf�gbar ist).
-@item
-Bug in @code{MyISAM} mit Schl�sseln > 250 Zeichen behoben.
-@item
-In @code{MyISAM} kann man jetzt ein @code{INSERT} zur selben Zeit
-durchf�hren, in der andere Threads aus der Tabelle lesen.
-@item
-Variable @code{max_write_lock_count} f�r @code{mysqld} hinzugef�gt, um eine
-@code{READ}-Sperre nach einer bestimmten Anzahl von @code{WRITE}-Sperren zu
-erzwingen.
-@item
-Flag @code{delayed_key_write} bei @code{show variables} invertiert.
-@item
-Variable @code{concurrency} in @code{thread_concurrency} umbenannt.
-@item
-Folgende Funktionen sind jetzt Multi-Byte-sicher:
-@code{LOCATE(teilzeichenfolge,zeichenkette)},
-@code{POSITION(teilzeichenfolge IN zeichenkette)},
-@code{LOCATE(teilzeichenfolge,zeichenkette,position)},
-@code{INSTR(zeichenkette,teilzeichenfolge)},
-@code{LEFT(zeichenkette,laenge)}, @code{RIGHT(zeichenkette,laenge)},
-@code{SUBSTRING(zeichenkette,pos,laenge)}, @code{SUBSTRING(zeichenkette
-FROM position FOR laenge)}, @code{MID(zeichenkette,position,laenge)},
-@code{SUBSTRING(zeichenkette,position)}, @code{SUBSTRING(zeichenkette FROM
-pos)}, @code{SUBSTRING_INDEX(zeichenkette,begrenzer,zaehler)},
-@code{RTRIM(zeichenkette)}, @code{TRIM([[BOTH | TRAILING]
-[entfernzeichenkette] FROM] zeichenkette)},
-@code{REPLACE(zeichenkette,from_zeichenkette,to_zeichenkette)},
-@code{REVERSE(zeichenkette)},
-@code{INSERT(zeichenkette,pos,laenge,newstr)}, @code{LCASE(zeichenkette)},
-@code{LOWER(zeichenkette)}, @code{UCASE(zeichenkette)} und
-@code{UPPER(zeichenkette)}. Patch von Wei He.
-@item
-Coredump beim Aufheben einer Sperre von einer nicht existierenden Tabelle
-behoben.
-@item
-Sperren auf Tabellen werden jetzt entfernt, bevor Duplikate entfernt
-werden.
-@item
-Option @code{FULL} f�r @code{SHOW PROCESSLIST} hinzugef�gt.
-@item
-Option @code{--verbose} f�r @code{mysqladmin} hinzugef�gt.
-@item
-Problem beim automatischen Umwandeln von HEAP in MyISAM behoben.
-@item
-Bug in HEAP-Tabellen behoben, wenn man INSERT + DELETE + INSERT + Scannen
-der Tabelle ausf�hrt.
-@item
-Bugs auf Alpha mit @code{REPLACE()} und @code{LOAD DATA INFILE} behoben.
-@item
-@code{mysqld}-Variable @code{interactive_timeout} hinzugef�gt.
-@item
-Argument f�r @code{mysql_data_seek()} von @code{ulong} zu @code{ulonglong}
-ge�ndert.
-@end itemize
-
-
-@node News-3.23.6, News-3.23.5, News-3.23.7, News-3.23.x
-@c German node Neuigkeiten-3.23.6
-@appendixsubsec �nderungen in Release 3.23.6
-
-@itemize @bullet
-@item
-@code{mysqld}-Option @code{-O lower_case_tables=@{0|1@}} hinzugef�gt, damit
-Benutzer Tabellennamen to Kleinschreibung erzwingen k�nnen.
-@item
-@code{SELECT ... INTO DUMPFILE} hinzugef�gt.
-@item
-@code{mysqld}-Option @code{--ansi} hinzugef�gt, um einige Funktionen
-@code{ANSI-SQL}-kompatibler zu machen.
-@item
-Tempor�re Tabellen fangen jetzt mit @code{#sql} an.
-@item
-Quoten von Bezeichnern mit @code{`} (@code{"} im @code{--ansi}-Modus).
-@item
-Jetzt wird snprintf() bei der Ausgabe von Flie�kommazahlen benutzt, um
-einige Puffer-�berl�ufe unter FreeBSD zu vermeiden.
-@item
-@code{[floor()} �berlaufsicher unter FreeBSD gemacht.
-@item
-Option @code{--quote-names} f�r @code{mysqldump} hinzugef�gt.
-@item
-Bug behoben, dass man einen Teil eines @code{PRIMARY KEY NOT NULL} machen
-konnte.
-@item
-@code{encrypt()} in Ordnung gebracht, um Thread-sicher zu sein und Puffer
-nicht erneut zu benutzen.
-@item
-@code{mysql_odbc_escape_string()}-Funktion zur Unterst�tzung von
-big5-Zeichen in MyODBC hinzugef�gt.
-@item
-Die Tabellen-Handler wurden umgeschrieben und benutzen jetzt Klassen.
-Hierdurch wird viel neuer Code eingef�hrt, aber die Tabellenhandhabung wird
-schneller und besser.
-@item
-Patch von Sasha f�r benutzerdefinierte Variablen angewandt.
-@item
-@code{FLOAT} und @code{DOUBLE} (ohne jeden L�ngen-Modifikator) sind jetzt
-keine festen Dezimalpunkt-Zahlen mehr.
-@item
-Die Bedeutung von @code{FLOAT(X)} wurde ge�ndert: Jetzt ist das dasselbe
-wie @code{FLOAT}, wenn X <= 24, und @code{DOUBLE}, wenn 24 < X <= 53.
-@item
-@code{DECIMAL(X)} ist jetzt ein Alias f�r @code{DECIMAL(X,0)}, und
-@code{DECIMAL} ist jetzt ein Alias f�r @code{DECIMAL(10,0)}. Dasselbe gilt
-f�r @code{NUMERIC}.
-@item
-Option @code{ROW_FORMAT=@{default | dynamic | static | compressed@}} f�r
-@code{CREATE_TABLE} hinzugef�gt.
-@item
-@code{DELETE FROM tabelle} funktionierte nicht auf tempor�ren Tabellen.
-@item
-Funktion @code{CHAR_LENGTH()} ge�ndert, so dass sie
-Multi-Byte-Zeichen-sicher ist.
-@item
-Funktion @code{ORD(zeichenkette)} hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.5, News-3.23.4, News-3.23.6, News-3.23.x
-@c German node Neuigkeiten-3.23.5
-@appendixsubsec �nderungen in Release 3.23.5
-
-@itemize @bullet
-@item
-Einige Jahr-2000-Probleme in der neuen Daten-Handhabung in Version 3.23
-behoben.
-@item
-Problem mit @code{SELECT DISTINCT ... ORDER BY RAND()} behoben.
-@item
-Patches von Sergei A. Golubchik f�r Textsuche auf MyISAM-Ebene angewandt.
-@item
-Cache-�berlaufproblem bei der Benutzung von Full Joins ohne Schl�ssel
-behoben.
-@item
-Einige configure-Probleme bereinigt.
-@item
-Einige kleine �nderungen, um das Parsen schneller zu machen.
-@item
-@code{ALTER TABLE} + Hinzuf�gen einer Spalte nach dem letzten Feld
-funktionierte nicht.
-@item
-Problem bei der Benutzung einer auto_increment-Spalte in zwei Schl�sseln
-behoben.
-@item
-Bei MyISAM kann man jetzt den auto_increment-Teil als Untermenge haben:
-@code{CREATE TABLE foo (a int not null auto_increment, b char(5), primary
-key (b,a))}
-@item
-Bug in MyISAM mit komprimierten CHAR-Schl�sseln, die @code{NULL} sein
-konnten, behoben.
-@item
-@code{AS} auf Feldname mit @code{CREATE TABLE tabelle SELECT ...}
-funktionierte nicht.
-@item
-Benutzung von @code{NATIONAL} und @code{NCHAR} bei der Definition von
-Zeichenspalten wird zugelassen. Das ist dasselbe, als wenn man
-@code{BINARY} nicht benutzt.
-@item
-Keine @code{NULL}-Spalten in einem @code{PRIMARY KEY} zulassen (nur in
-@code{UNIQUE}-Schl�sseln).
-@item
-@code{LAST_INSERT_ID} wird gel�scht (clear), wenn man diese in ODBC
-benutzt: @code{WHERE auto_increment_spalte IS NULL}. Das scheint einige
-Probleme mit Access zu beheben.
-@item
-@code{SET SQL_AUTO_IS_NULL=0|1} schaltet jetzt die Handhabung von Suchen
-nach der letzten eingef�gten Zeile bei @code{WHERE auto_increment_spalte IS
-NULL} aus / an.
-@item
-Neue @code{mysqld}-Variable @code{concurrency} f�r Solaris hinzugef�gt.
-@item
-Option @code{--relative} f�r @code{mysqladmin} hinzugef�gt, um mit
-@code{extended-status} eine bessere Beobachtung von �nderungen zu erzielen.
-@item
-Bug bei der Benutzung von @code{COUNT(DISTINCT ...)} auf eine leere Tabelle
-behoben.
-@item
-Unterst�tzung f�r den chinesischen Zeichensatz GBK hinzugef�gt.
-@item
-Problem mit @code{LOAD DATA INFILE} und @code{BLOB}-Spalten behoben.
-@item
-Bit-Operator @code{~} (Negation) hinzugef�gt.
-@item
-Problem mit @code{UDF}-Funktionen behoben.
-@end itemize
-
-
-@node News-3.23.4, News-3.23.3, News-3.23.5, News-3.23.x
-@c German node Neuigkeiten-3.23.4
-@appendixsubsec �nderungen in Release 3.23.4
-
-@itemize @bullet
-@item
-Einf�gen eines @code{DATETIME}-Werts in eine @code{TIME}-Spalte versucht
-jetzt nicht mehr, darin 'Tage' zu speichern.
-@item
-Problem mit der Speicherung von Float / Double auf kleinen Endian-Maschinen
-behoben (das betraf @code{SUM()}).
-@item
-Verbindungs-Zeit�berschreitung (Timeout) auf TCP/IP-Verbindungen
-hinzugef�gt.
-@item
-Problem mit @code{LIKE} "%" auf einem Index, der @code{NULL}-Werte
-enthalten darf, behoben.
-@item
-@code{REVOKE ALL PRIVILEGES} widerrief nicht alle Berechtigungen.
-@item
-Erzeugung tempor�rer Tabellen mit demselben Namen wie die Original-Tabelle
-wird zugelassen.
-@item
-Wenn man einem Benutzer eine Berechtigungsoption (Grant Option) f�r eine
-Datenbank gew�hrte, konnte er die Berechtigungen nicht an andere Benutzer
-weitergeben.
-@item
-Neuer Befehl @code{SHOW GRANTS FOR benutzer} hinzugef�gt (von Sinisa).
-@item
-Neue @code{date_add}-Syntax @code{date/datetime + INTERVAL # intervall_typ}
-hinzugef�gt. Von Joshua Chamas.
-@item
-Berechtigungs�berpr�fung f�r @code{LOAD DATA REPLACE} in Ordnung gebracht.
-@item
-Automatische Reparatur besch�digter Include-Dateien auf Solaris 2.7
-hinzugef�gt.
-@item
-Einige configure-Probleme behoben, um Probleme bei der Erkennung gro�er
-Dateisysteme zu beheben.
-@item
-@code{REGEXP} ist jetzt unabh�ngig von der verwendeten
-Gro�-/Kleinschreibung, wenn Sie nicht bin�re Zeichenketten verwenden.
-@end itemize
-
-
-@node News-3.23.3, News-3.23.2, News-3.23.4, News-3.23.x
-@c German node Neuigkeiten-3.23.3
-@appendixsubsec �nderungen in Release 3.23.3
-
-@itemize @bullet
-@item
-Patches f�r MIT-pThread auf NetBSD angewandt.
-@item
-Bereichs-Bug in MyISAM behoben.
-@item
-@code{ASC} ist jetzt wieder Vorgabe f�r @code{ORDER BY}.
-@item
-@code{LIMIT} f�r @code{UPDATE} hinzugef�gt.
-@item
-Neue Client-Funktion @code{mysql_change_user()} hinzugef�gt.
-@item
-Zeichensatz zu @code{SHOW VARIABLES} hinzugef�gt.
-@item
-Unterst�tzung von @code{--[leerraum]}-Kommentaren hinzugef�gt.
-@item
-@code{INSERT into tabelle VALUES ()} wird zugelassen. Das hei�t, Sie
-k�nnen jetzt eine leere Wertliste angeben, die in eine Zeile eingef�gt
-wird, und in der jede Spalte auf ihren Vorgabewert gesetzt wird.
-@item
-@code{SUBSTRING(text FROM position)} ge�ndert, um ANSI-SQL-kompatibel zu
-sein. (Vorher gab dieses Konstrukt das rechteste 'position'-Zeichen
-zur�ck.)
-@item
-@code{SUM()} mit @code{GROUP BY} gab auf manchen Systemen 0 zur�ck.
-@item
-Ausgabe bei @code{SHOW TABLE STATUS} ge�ndert.
-@item
-@code{DELAY_KEY_WRITE}-Option f�r @code{CREATE TABLE} hinzugef�gt.
-@item
-@code{AUTO_INCREMENT} wird f�r jeden beliebigen Schl�sselteil zugelassen.
-@item
-Problem mit @code{YEAR(NOW())} und @code{YEAR(CURDATE())} behoben.
-@item
-@code{CASE}-Konstrukt hinzugef�gt.
-@item
-Neue Funktion @code{COALESCE()} hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.2, News-3.23.1, News-3.23.3, News-3.23.x
-@c German node Neuigkeiten-3.23.2
-@appendixsubsec �nderungen in Release 3.23.2
-
-@itemize @bullet
-@item
-Bereichsoptimierer-Bug behoben: @code{SELECT * FROM tabelle WHERE
-schluessel_teil1 >= konstante AND (schluessel_teil2 = konstante OR
-schluessel_teil2 = konstante)}. Der Bug bestand darin, dass manche Zeilen
-im Ergebnis doppelt auftauchen konnten.
-@item
-Das Laufenlassen von @code{myisamchk} ohne @code{-a} aktualisierte die
-Index-Verteilung falsch.
-@item
-@code{SET SQL_LOW_PRIORITY_UPDATES=1} gab vorher einen Parser-Fehler.
-@item
-Sie k�nnen jetzt Spalten indexieren, die in der @code{WHERE}-Klausel
-benutzt werden. @code{UPDATE tabelle SET KEY=KEY+1 WHERE KEY > 100}
-@item
-Datums-Handhabung sollte jetzt etwas schneller sein.
-@item
-Handhabung von 'fuzzy' Datumsangaben m�glich (Datumsangaben, bei denen der
-Tag oder der Monat 0 sind, wie 1999-01-00).
-@item
-Optimierung von @code{SELECT ... WHERE schluessel_teil1=konstante1 AND
-schluessel_teil_2=konstante2 AND schluessel_teil1=konstante4 AND
-schluessel_teil2=konstante4} in Ordnung gebracht. Indextyp sollte
-@code{range} anstelle von @code{ref} sein.
-@item
-@code{egcs}-1.1.2-Optimierer-Bug behoben (bei der Benutzung von
-@code{BLOB}s) auf Linux Alpha.
-@item
-Problem mit @code{LOCK TABLES} in Kombination mit @code{DELETE FROM
-tabelle} behoben.
-@item
-MyISAM-Tabellen lassen jetzt Schl�ssel auf @code{NULL} und
-@code{BLOB/TEXT}-Spalten zu.
-@item
-Folgender Join ist jetzt viel schneller: @code{SELECT ... FROM t1 LEFT JOIN
-t2 ON ... WHERE t2.nicht_null_spalte IS NULL}.
-@item
-@code{ORDER BY} und @code{GROUP BY} k�nnen jetzt auf Funktionen angewendet
-werden.
-@item
-Handhabung von 'konstante' ge�ndert, um Handhabung von @code{ORDER BY
-RAND()} zu gestatten.
-@item
-Indexe werden jetzt f�r @code{WHERE schluessel_spalte = funktion} benutzt.
-@item
-Indexe werden jetzt f�r @code{WHERE schluessel_spalte = spalten_name}
-benutzt, selbst wenn die Spalten nicht identisch komprimiert sind.
-@item
-Indexe werden jetzt f�r @code{WHERE spalten_name IS NULL} benutzt.
-@item
-HEAP-Tabellen so ge�ndert, dass in der Reihenfolge niedriges Byte zuerst
-gespeichert wird (um es zu erleichtern, MyISAM-Tabellen zu konvertieren).
-@item
-Automatische �nderung tempor�rer HEAP-Tabellen in MyISAM-Tabellen im Falle
-von 'table is full'-Fehlern.
-@item
-Option @code{--init-file=datei} f�r @code{mysqld} hinzugef�gt.
-@item
-@code{COUNT(DISTINCT wert, [wert, ...])} hinzugef�gt.
-@item
-@code{CREATE TEMPORARY TABLE} erzeugt jetzt eine tempor�re Tabelle in ihrem
-eigenen Namensraum, die automatisch gel�scht wird, wenn die Verbindung
-beendet wird.
-@item
-Neue reservierte W�rter (erforderlich f�r @code{CASE}): @code{CASE, THEN,
-WHEN, ELSE und END}.
-@item
-Neue Funktionen @code{EXPORT_SET()} und @code{MD5()} hinzugef�gt.
-@item
-Unterst�tzung f�r den GB2312 chinesischen Zeichensatz hinzugef�gt.
-@end itemize
-
-
-@node News-3.23.1, News-3.23.0, News-3.23.2, News-3.23.x
-@c German node Neuigkeiten-3.23.1
-@appendixsubsec �nderungen in Release 3.23.1
-
-@itemize @bullet
-@item
-Einige Kompilierungsprobleme behoben.
-@end itemize
-
-
-@node News-3.23.0, , News-3.23.1, News-3.23.x
-@c German node Neuigkeiten-3.23.0
-@appendixsubsec �nderungen in Release 3.23.0
-
-@itemize @bullet
-@item
-Eine neue Tabellen-Handler-Bibliothek (@code{MyISAM}) mit vielen neuen
-Features hinzugef�gt. @xref{MyISAM}.
-@item
-Sie k�nnen @code{HEAP}-Tabellen im Hauptspeicher erzeugen, die zum
-Nachschlagen extrem schnell sind.
-@item
-Unterst�tzung f�r gro�e Dateien (63-Bit) auf Systemen, die gro�e Dateien
-unterst�tzen, hinzugef�gt.
-@item
-Neue Funktion @code{LOAD_FILE(datei)} hinzugef�gt, um die Inhalte einer
-Datei als Zeichenkettenwert zu erhalten.
-@item
-Neuer Operator @code{<=>} hinzugef�gt, der wie @code{=} funktioniert, aber
-WAHR (true) zur�ckgibt, wenn beide Argumente @code{NULL} sind. Das ist
-n�tzlich, um �nderungen zwischen Tabellen zu vergleichen.
-@item
-ODBC-3.0-@code{EXTRACT(intervall FROM datetime)}-Funktion hinzugef�gt.
-@item
-Spalten, die als @code{FLOAT(X)} definiert sind, werden beim Speichern
-nicht gerundet und d�rfen beim Abruf in wissenschaftlicher Notation sein
-(1.0 E+10).
-@item
-@code{REPLACE} ist jetzt schneller als vorher.
-@item
-@code{LIKE}-Zeichenvergleiche ge�ndert, so dass sie sich wie @code{=}
-verhalten. Das hei�t, dass @code{'e' LIKE '@'�'} jetzt WAHR (true) ist
-(falls hier etwas nicht richtig angezeigt wird: Das letztgenannte 'e' ist
-das franz�sische 'e' mit Akzent).
-@item
-@code{SHOW TABLE STATUS} gibt eine Menge an Informationen �ber die Tabellen
-zur�ck.
-@item
-@code{LIKE} f�r den @code{SHOW STATUS}-Befehl hinzugef�gt.
-@item
-Berechtigungsspalte zu @code{SHOW COLUMNS} hinzugef�gt.
-@item
-Spalten @code{packed} und @code{comment} f�r @code{SHOW INDEX} hinzugef�gt.
-@item
-Kommentare zu Tabellen (mit @code{CREATE TABLE ... COMMENT "kommentar"})
-hinzugef�gt.
-@item
-@code{UNIQUE}, wie bei @code{CREATE TABLE tabelle (spalte int not null
-UNIQUE)}, hinzugef�gt.
-@item
-Neue CREATE-Syntax: @code{CREATE TABLE tabelle SELECT ...}
-@item
-Neue CREATE-Syntax: @code{CREATE TABLE IF NOT EXISTS ...}
-@item
-Die Erzeugung von @code{CHAR(0)}-Spalten wird zugelassen.
-@item
-@code{DATE_FORMAT()} erfordert jetzt @samp{%} vor jeglichem
-Formatierungszeichen.
-@item
-@code{DELAYED} ist jetzt ein reserviertes Wort (tut uns leid :( ).
-@item
-Eine Beispiel-Prozedur wurde hinzugef�gt: @code{analyse}, Datei:
-@file{sql_analyse.c}. Diese beschreibt die Daten in Ihrer Anfrage.
-Probieren Sie folgendes:
-@example
-SELECT ... FROM ... WHERE ... prozeduranalyse([max elemente,[max speicher]])
-@end example
-
-Diese Prozedur ist extrem n�tzlich, wenn Sie die Daten in Ihrer Tabelle
-pr�fen wollen!
-@item
-@code{BINARY}-Cast, um zu erzwingen, dass eine Zeichenkette abh�ngig von
-der verwendeten Gro�-/Kleinschreibung verglichen wird.
-@item
-Option @code{--skip-show-database} f�r @code{mysqld} hinzugef�gt.
-@item
-Das Pr�fen, ob sich eine Zeile bei einem @code{UPDATE} ge�ndert hat,
-funktioniert jetzt auch bei @code{BLOB}-/@code{TEXT}-Spalten.
-@item
-Die @code{INNER}-Join-Syntax wurde hinzugef�gt. @strong{HINWEIS}: Hierdurch
-wurde @code{INNER} zu einem reservierten Wort!
-@item
-Unterst�tzung f�r Netmasks zum Hostname in den MySQL-Tabellen hinzugef�gt.
-Sie k�nnen eine Netmask mit der @code{IP/NETMASK}-Syntax angeben.
-@item
-Wenn Sie eine @code{NOT NULL DATE/DATETIME}-Spalte mit @code{IS NULL}
-vergleichen, wird das zu einem Vergleich auf @code{0} ge�ndert, um einige
-ODBC-Applikationen zufrieden zu stellen (von @email{shreeve@@uci.edu}).
-@item
-@code{NULL IN (...)} gibt jetzt @code{NULL} anstelle von @code{0} zur�ck.
-Das stellt sicher, dass @code{null_spalte NOT IN (...)} nicht mit
-@code{NULL}-Werten �bereinstimmt.
-@item
-Speicherung von Flie�kommawerten in @code{TIME}-Spalten in Ordnung
-gebracht.
-@item
-Das Parsen von @code{TIME}-Zeichenketten ge�ndert, so dass es strenger ist.
-Jetzt wird der Bruchteil-Sekunden-Teil erkannt (und momentan noch
-�bergangen). Folgende Formate werden unterst�tzt:
-@table @code
-@item [[DAYS] [H]H:]MM:]SS[.bruchteil]
-@item [[[[[H]H]H]H]MM]SS[.bruchteil]
-@end table
-@item
-Erkennen (und Ignorieren) des zweiten Bruchteil-Anteils von @code{DATETIME}
-hinzugef�gt.
-@item
-@code{LOW_PRIORITY}-Attribut f�r @code{LOAD DATA INFILE} hinzugef�gt.
-@item
-Der vorgabem��ige Index-Name benutzt jetzt dieselbe Gro�-/Kleinschreibung
-wie der benutzte Spaltenname.
-@item
-Vorgabem��ige Anzahl von Verbindungen auf 100 ge�ndert.
-@item
-Bei der Benutzung von @code{LOAD DATA INFILE} werden gr��ere Puffer
-verwendet.
-@item
-@code{DECIMAL(x,y)} funktioniert jetzt gem�� ANSI-SQL.
-@item
-Aggregat-UDF-Funktionen. Dank an Andreas F. Bobak @email{bobak@@relog.ch}
-hierf�r!
-@item
-@code{LAST_INSERT_ID()} wird jetzt bei @code{INSERT INTO ... SELECT}
-aktualisiert.
-@item
-Einige kleinere �nderungen am Join-Tabellenoptimierer, um einige Joins
-schneller zu machen.
-@item
-@code{SELECT DISTINCT} ist viel schneller. Es benutzt die neue
-@code{UNIQUE}-Funktionalit�t in @code{MyISAM}. Ein Unterschied im Vergleich
-zur MySQL-Version 3.22 besteht darin, dass die Ausgabe von @code{DISTINCT}
-nicht mehr sortiert wird.
-@item
-Alle C-Client-API-Makros sind jetzt Funktionen, um die gemeinsam genutzten
-(shared) Bibliotheken verl�sslicher zu machen. Deswegen k�nnen Sie nicht
-mehr @code{mysql_num_fields()} auf ein @code{MYSQL}-Objekt aufrufen,
-sondern m�ssen statt dessen @code{mysql_field_count()} benutzen.
-@item
-Benutzung von @code{LIBEWRAP}; Patch von Henning P. Schmiedehausen.
-@item
-@code{AUTO_INCREMENT} wird nur noch f�r numerische Spalten zugelassen.
-@item
-Durch die Verwendung von @code{AUTO_INCREMENT} wird die Spalte automatisch
-@code{NOT NULL}.
-@item
-@code{NULL} wird als Vorgabewert f�r AUTO_INCREMENT-Spalten angezeigt.
-@item
-@code{SQL_BIG_RESULT}; @code{SQL_SMALL_RESULT} ist jetzt Vorgabe.
-@item
-Ein gemeinsam genutztes (shared) Bibliothek-RPM hinzugef�gt. Diese
-Verbesserung wurde von David Fox (dsfox@@cogsci.ucsd.edu) beigesteuert.
-@item
-Ein @code{--enable-large-files/--disable-large-files}-Schalter zu
-@code{configure} hinzugef�gt. Siehe @file{configure.in} wegen mancher
-Systeme, auf denen dies wegen nicht funktionierender Implementation
-automatisch abgeschaltet ist.
-@item
-@code{readline} f�r Version 4.0 aktualisiert.
-@item
-Neue @code{CREATE TABLE}-Optionen: @code{PACK_KEYS} und @code{CHECKSUM}.
-@item
-@code{mysqld}-Option @code{--default-table-type} hinzugef�gt.
-@end itemize
-
-
-@node Porting, Environment variables, News, Top
-@c German node Portierung
-@appendix Anmerkungen zur Portierung auf andere Systeme
-
-@cindex Portierung, auf andere Systeme
-
-F�r den Server wird eine funktionierende Posix-Thread-Bibliothek ben�tigt.
-Auf Solaris 2.5 benutzen wir Sun PThread (die native Thread-Unterst�tzung
-in Version 2.4 und fr�her ist nicht gut genug). Auf Linux benutzen wir
-LinuxThread von Xavier Leroy, @email{Xavier.Leroy@@inria.fr}.
-
-Der schwierige Teil der Portierung auf eine neue Unix-Variante ohne gute
-native Thread-Unterst�tzung ist wahrscheinlich, MIT-pThread zu portieren.
-Siehe @file{with-pThread/README} und
-@uref{http://www.humanfactor.com/pThread/, POSIX-Thread programmieren}.
-
-Die MySQL-Distribution enth�lt eine gepatchte Version von Provenzanos
-PThread von MIT (siehe
-@uref{http://www.mit.edu:8001/people/proven/pThread.html,
-MIT-PThread-Website}). Diese kann f�r einige Betriebssysteme benutzt
-werden, die kein POSIX-Thread haben.
-
-Es ist ebenfalls m�glich, ein anderes Thread-Paket auf Benutzerebene namens
-FSU-PThread zu benutzen (siehe
-@uref{http://www.informatik.hu-berlin.de/~mueller/pThread.html,
-FSU-PThread-Homepage}). Diese Implementation wird f�r die SCO-Portierung
-benutzt.
-
-In den @file{thr_lock.c}- und @file{thr_alarm.c}-Programmen im
-@file{mysys}-Verzeichnis finden Sie einige Tests / Beispiele dieser
-Probleme.
-
-Sowohl Server als auch Client ben�tigen einen funktionierenden C++-Kompiler
-(wir benutzen @code{gcc} und haben SparcWorks ausprobiert). Ein anderer
-bekannterma�en funktionierender Compiler ist Irix @code{cc}.
-
-Um nur den Client zu kompilieren, benutzen Sie @code{./configure
---without-server}.
-
-Es gibt momentan keine Unterst�tzung, um nur den Server zu kompilieren,
-noch ist es wahrscheinlich, dass eine solche hinzugef�gt wird, falls nicht
-jemand einen guten Grund daf�r findet.
-
-Wenn Sie irgend welche @file{Makefile} oder das configure-Skript �ndern
-wollen / m�ssen, m�ssen Sie sich Automake und Autoconf holen. Wir haben die
-@code{automake-1.2}- und @code{autoconf-2.12}-Distributionen benutzt.
-
-Alle Schritte, die notwendig sind, um alles aus den grundlegendsten Dateien
-neu zu machen (make):
-
-@example
-/bin/rm */.deps/*.P
-/bin/rm -f config.cache
-aclocal
-autoheader
-aclocal
-automake
-autoconf
-./configure --with-debug=full --prefix='ihr_installationsverzeichnis'
-
-# Die oben erzeugten makefiles ben�tigen GNU-make 3.75 oder neuer.
-# (unten gmake genannt)
-gmake clean all install init-db
-@end example
-
-Wenn Sie bei einer neuen Portierung Probleme bekommen, kann es sein, dass
-Sie MySQL etwas debuggen m�ssen! @xref{Debugging server}.
-
-@strong{HINWEIS:} Bevor Sie mit dem Debuggen von @code{mysqld} anfangen,
-bringen Sie sich zuerst die Testprogramme @code{mysys/thr_alarm} und
-@code{mysys/thr_lock} zum Laufen. Das stellt sicher, dass Ihre
-Thread-Installation zumindest �berhaupt eine Chance hat, zu funktionieren!
-
-
-
-@menu
-* Debugging server::
-* Debugging client::
-* The DBUG package::
-* Locking methods::
-* RTS-threads::
-* Thread packages::
-@end menu
-
-@node Debugging server, Debugging client, Porting, Porting
-@c German node Server debuggen
-@appendixsec Einen MySQL-Server debuggen
-
-@cindex Server, debuggen
-@cindex debuggen, Server
-@cindex Absturz
-
-Wenn Sie Funktionalit�t benutzen, die in MySQL sehr neu ist, k�nnen Sie
-versuchen, @code{mysqld} mit der @code{--skip-new}-Option laufen zu lassen
-(die alle sehr neue, potenziell unsichere Funktionalit�t abschaltet) oder
-mit @code{--safe-mode}, was viel an Optimierung abschaltet, die
-m�glicherweise Probleme verursacht. @xref{Crashing}.
-
-Wenn @code{mysqld} nicht starten will, sollten Sie pr�fen, ob Sie irgend
-welche @code{my.cnf}-Dateien haben, die mit Ihrer Konfiguration in Konflikt
-kommen! Sie k�nnen Ihre @code{my.cnf}-Argumente mit @code{mysqld
---print-defaults} pr�fen und sie vermeiden, indem Sie mit @code{mysqld
---no-defaults ...} starten.
-
-Wenn @code{mysqld} anf�ngt, Prozessorleistung oder Speicher zu fressen,
-oder wenn er ``h�ngt'', k�nnen Sie @code{mysqladmin processlist status}
-benutzen, um herauszufinden, ob irgend etwas eine Anfrage ausf�hrt, die
-sehr lange dauert. Es ist eine gute Idee, @code{mysqladmin -i10 processlist
-status} in irgend einem Fenster laufen zu haben, wenn Sie
-Performance-Probleme oder Probleme damit haben, dass sich neue Clients
-nicht verbinden k�nnen.
-
-Der Befehl @code{mysqladmin debug} dumpt Informationen �ber Sperren, die in
-Gebrauch sind, den benutzten Speicher und den Anfragengebrauch in die
-mysql-Log-Datei aus. Das kann helfen, einige Probleme zu l�sen. Dieser
-Befehl stellt auch n�tzliche Informationen zur Verf�gung, selbst wenn Sie
-MySQL nicht zum Debuggen kompiliert haben!
-
-Wenn das Problem darin besteht, dass einige Tabellen langsamer und
-langsamer werden, sollten Sie versuchen, die Tabelle mit @code{OPTIMIZE
-TABLE} der @code{myisamchk} zu optimieren.
-@xref{MySQL Database Administration}. Sie sollten langsame Anfragen
-dar�ber hinaus mit @code{EXPLAIN} �berpr�fen.
-
-Ebenfalls sollten Sie den Abschnitt �ber betriebssystemspezifische Dinge in
-diesem Handbuch lesen, weil Sie Probleme haben k�nnten, die einzigartig f�r
-Ihre Umgebung sind. @xref{Operating System Specific Notes}.
-
-
-
-@menu
-* Compiling for debugging::
-* Making trace files::
-* Using gdb on mysqld::
-* Using stack trace::
-* Using log files::
-* Reproduceable test case::
-@end menu
-
-@node Compiling for debugging, Making trace files, Debugging server, Debugging server
-@c German node Zum Debuggen kompilieren
-@appendixsubsec MySQL zum Debuggen kompilieren
-
-Wenn Sie sehr spezielle Probleme haben, k�nnen Sie immer versuchen, MySQL
-zu debuggen. Daf�r m�ssen Sie MySQL mit der @code{--with-debug}- oder der
-@code{--with-debug=full}-Option kompilieren. Sie k�nnen pr�fen, ob MySQL
-mit Debuggen kompiliert wurde oder nicht, wenn Sie @code{mysqld --help}
-ausf�hren. Wenn das @code{--debug}-Flag in den Optionen aufgef�hrt ist,
-haben Sie Debuggen eingeschaltet. @code{mysqladmin ver} gibt die
-@code{mysqld}-Version in diesem Fall ebenfalls als @code{mysql ... --debug}
-aus.
-
-Wenn Sie gcc oder egcs benutzen, ist die empfohlene configure-Zeile:
-
-@example
-CC=gcc CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-debug --with-extra-charsets=complex
-@end example
-
-Das vermeidet Probleme mit der @code{libstdc++}-Bibliothek und mit
-C++-Ausnahmen (viele Compiler haben Probleme mit C++-Ausnahmen in threaded
-Code) und kompiliert eine MySQL-Version mit Unterst�tzung f�r alle
-Zeichens�tze.
-
-Wenn Sie einen Speicher�berlauffehler vermuten, k�nnen Sie MySQL mit
-@code{--with-debug=full} kompilieren, was zus�tzlich einen
-(@code{SAFEMALLOC})-Pr�fer f�r die Speicherzuweisung installiert. Das
-Laufenlassen mit @code{SAFEMALLOC} ist jedoch recht langsam. Wenn Sie daher
-Performance-Probleme bekommen, sollten Sie @code{mysqld} mit der
-@code{--skip-safemalloc}-Option starten. Das schaltet die
-Speicher�berlaufpr�fung f�r jeden Aufruf von @code{malloc} und @code{free}
-ab.
-
-Wenn @code{mysqld} nicht mehr abst�rzt, wenn Sie ihn mit
-@code{--with-debug} kompilieren, haben Sie wahrscheinlich einen
-Compiler-Bug oder einen Timing-Bug innerhalb von MySQL gefunden. In diesem
-Fall k�nnen Sie versuchen, @code{-g} f�r die @code{CFLAGS}- und
-@code{CXXFLAGS}-Variablen oben hinzuzuf�gen und nicht mehr
-@code{--with-debug} zu benutzen. Wenn @code{mysqld} jetzt stirbt, k�nnen
-Sie wenigstens mit @code{gdb} mit ihm verbinden oder @code{gdb} auf die
-Core-Datei benutzen, um herauszufinden, was passiert ist.
-
-Wenn Sie MySQL zum Debuggen konfigurieren, k�nnen Sie viele zus�tzliche
-Sicherheitpr�ffunktionen hinzuf�gen, die die Gesundheit von @code{mysqld}
-beobachten. Wenn Sie etwas ``Unerwartetes'' finden, wird ein Eintrag nach
-@code{stderr} geschrieben, den @code{safe_mysqld} in die Fehler-Log-Datei
-leitet! Das hei�t auch, dass Sie bei unerwarteten Problemen mit MySQL und
-der Benutzung einer Quelldistribution als erstes MySQL zum Debuggen
-konfigurieren sollten! (Die zweite Sache w�re nat�rlich, eine E-Mail an
-@email{mysql@@lists.mysql.com} zu schicken und um Hilfe zu bitten. Bitte
-benutzen Sie das @code{mysqlbug}-Skript f�r alle Bug-Berichte oder Fragen
-hinsichtlich der MySQL-Version, die Sie benutzen!
-
-In der Windows-MySQL-Distribution wird @code{mysqld.exe} vorgabem��ig mit
-Unterst�tzung f�r Trace-Dateien kompiliert.
-
-
-@node Making trace files, Using gdb on mysqld, Compiling for debugging, Debugging server
-@c German node Trace-Dateien
-@appendixsubsec Trace-Dateien erzeugen
-
-Wenn der @code{mysqld}-Server nicht startet oder wenn Sie den
-@code{mysqld}-Server schnell zum Absturz bringen k�nnen, k�nnen Sie
-versuchen, eine Trace-Datei zu erzeugen, um das Problem zu finden.
-
-Hierf�r brauchen Sie einen @code{mysqld}, der zum Debuggen kompiliert ist.
-Sie k�nnen das mit @code{mysqld -V} pr�fen. Wenn die Versionsnummer mit
-@code{-debug} endet, ist Unterst�tzung f�r Trace-Dateien einkompiliert.
-
-Starten Sie den @code{mysqld}-Server mit einem Trace-Log in
-@file{/tmp/mysqld.trace} (oder @file{C:\mysqld.trace} unter Windows):
-
-@code{mysqld --debug}
-
-Unter Windows sollten Sie auch den @code{--standalone}-Flag benutzen, um
-@code{mysqld} nicht als Systemdienst zu starten.
-
-Machen Sie folgendes in einem DOS-Fenster:
-
-@example
-mysqld --debug --standalone
-@end example
-
-Danach k�nnen Sie das @code{mysql.exe}-Kommandozeilenwerkzeug in einem
-zweiten DOS-Fenster benutzen, um das Problem zu reproduzieren. Sie k�nnen
-den obigen @code{mysqld}-Server mit @code{mysqladmin shutdown} herunter
-fahren.
-
-Beachten Sie, dass die Trace-Datei sehr @emph{Gro�} wird! Wenn Sie eine
-kleinere Trace-Datei haben wollen, k�nnen Sie etwa folgendes tun:
-
-@code{mysqld --debug=d,info,error,query,general,where:O,/tmp/mysqld.trace}
-
-Das gibt nur Informationen f�r die interessantesten Dinge in
-@file{/tmp/mysqld.trace} aus.
-
-Wenn Sie hier�ber einen Bug-Bericht erstellen, schicken Sie bitte nur die
-Zeilen aus der Trace-Datei an die entsprechende Mailing-Liste, in denen
-etwas schief zu gehen scheint! Wenn Sie diese Stelle nicht finden k�nnen,
-k�nnen Sie die Trace-Datei per FTP einschicken, zusammen mit einem
-kompletten Bug-Bericht, an @uref{ftp://Support.mysql.com/pub/mysql/secret},
-so dass ein MySQL-Entwickler sich das ansehen kann.
-
-Die Trace-Datei wird mit dem @strong{DBUG}-Paket von Fred Fish hergestellt.
-@xref{The DBUG package}.
-
-
-@node Using gdb on mysqld, Using stack trace, Making trace files, Debugging server
-@c German node gdb auf mysqld benutzen
-@appendixsubsec mysqld unter gdb debuggen
-
-@cindex gdb, using
-
-Auf den meisten Systemen k�nnen Sie @code{mysqld} von @code{gdb} starten,
-um mehr Informationen zu erhalten, wenn @code{mysqld} abst�rzt.
-
-Bei einigen �lteren @code{gdb}-Versionen unter Linux m�ssen Sie @code{run
---one-thread} benutzen, um den @code{mysqld}-Thread debuggen zu k�nnen. In
-diesem Fall k�nnen Sie zur gleichen Zeit nur einen Thread aktiv haben.
-
-Wenn Sie @code{mysqld} unter gdb laufen lassen, sollten Sie den Stack-Trace
-mit @code{--skip-stack-trace} abschalten, um Segmentation-Fehler innerhalb
-gdb abfangen zu k�nnen.
-
-Es ist sehr schwierig, MySQL unter @code{gdb} zu debuggen, wenn Sie
-permanent viele neue Verbindungen aufbauen, weil @code{gdb} den Speicher
-f�r den alten Thread nicht freigibt. Sie k�nnen dieses Problem vermeiden,
-indem Sie @code{mysqld} mit @code{-O thread_cache_size=
-'maximale_verbindungen +1'} starten. In den meisten F�llen hilft bereits
-schon die Benutzung von @code{-O thread_cache_size=5'} recht viel!
-
-Wenn Sie einen Coredump unter Linux erhalten wollen, wenn @code{mysqld} mit
-einem SIGSEGV-Signal stirbt, k�nnen Sie @code{mysqld} mit der
-@code{--core-file}-Option starten. Diese Core-Datei kann benutzt werden, um
-eine Zur�ckverfolgung (Backtrace) zu machen, die Ihnen helfen kann
-herauszufinden, warum @code{mysqld} starb:
-
-@example
-shell> gdb mysqld core
-gdb> backtrace full
-gdb> exit
-@end example
-
-@xref{Crashing}.
-
-Wenn Sie gdb 4.17.x oder h�her unter Linux benutzen, sollten Sie eine
-@file{.gdb}-Datei mit folgenden Informationen in Ihrem aktuellen
-Verzeichnis installieren:
-
-@example
-set print sevenbit off
-handle SIGUSR1 nostop noprint
-handle SIGUSR2 nostop noprint
-handle SIGWAITING nostop noprint
-handle SIGLWP nostop noprint
-handle SIGPIPE nostop
-handle SIGALRM nostop
-handle SIGHUP nostop
-handle SIGTERM nostop noprint
-@end example
-
-Wenn Sie Probleme haben, den Thread mit gdb zu debuggen, sollten Sie gdb
-5.x herunter laden und diesen statt dessen benutzen. Die neue gdb-Version
-hat eine stark verbesserte Thread-Handhabung!
-
-Hier ist ein Beispiel, wie man mysqld debuggt:
-
-@example
-shell> gdb /usr/local/libexec/mysqld
-gdb> run
-...
-backtrace full # Tun Sie das, wenn mysqld abst�rzt
-@end example
-
-Schlie�en Sie die obige Ausgabe in eine Mail ein, die mit @code{mysqlbug}
-erzeugt wurde und schicken Sie sie an @code{mysql@@lists.mysql.com}.
-
-Wenn @code{mysqld} h�ngen bleibt, k�nnen Sie versuchen, einige
-Systemwerkzeuge wie @code{strace} oder @code{/usr/proc/bin/pstack} zu
-benutzen, um herauszufinden, was @code{mysqld} zum H�ngen brachte.
-
-@example
-strace /tmp/log libexec/mysqld
-@end example
-
-@findex DBI->trace
-@findex Trace-DBI-Methode
-@tindex DBI_TRACE-Umgebungsvariable
-@tindex Umgebungsvariable, DBI_TRACE
-Wenn Sie die Perl-@code{DBI}-Schnittstelle benutzen, k�nnen Sie
-Debug-Informationen anschalten, indem Sie die @code{trace}-Methode benutzen
-oder die @code{DBI_TRACE}-Umgebungsvariable setzen.
-@xref{Perl DBI Class, , Perl @code{DBI} Class}.
-
-
-@node Using stack trace, Using log files, Using gdb on mysqld, Debugging server
-@c German node Stack-Trace benutzen
-@appendixsubsec Einen Stack-Trace benutzen
-
-Auf manchen Betriebssystemen enth�lt die Fehler-Log-Datei einen
-Stack-Trace, wenn @code{mysqld} unerwartet stirbt. Diese k�nnen Sie
-benutzen, um herauszufinden, wo (und vielleicht warum) @code{mysqld} starb.
-@xref{Error log}. Um einen Stack-Trace zu erhalten, sollten Sie
-@code{mysqld} NICHT mit der @code{-fomit-frame-pointer}-Option f�r gcc
-kompilieren. @xref{Compiling for debugging}.
-
-Wenn die Fehlerdatei etwas wie folgendes enth�lt:
-
-@example
-mysqld got signal 11;
-The manual section 'debugging a MySQL server' tells you how to use a
-stack trace and/or the core file to produce a readable backtrace that may
-help in finding out why mysqld died
-Attemping backtrace. You can use the following information to find out
-where mysqld died. Wenn you see no messages after this, something went
-terribly wrong
-stack range sanity check, ok, backtrace follows
-0x40077552
-0x81281a0
-0x8128f47
-0x8127be0
-0x8127995
-0x8104947
-0x80ff28f
-0x810131b
-0x80ee4bc
-0x80c3c91
-0x80c6b43
-0x80c1fd9
-0x80c1686
-@end example
-
-K�nnen Sie herausfinden, wo @code{mysqld} starb, indem Sie folgendes tun:
-
-@enumerate
-@item
-Kopieren Sie die obigen Zahlen in eine Datei, zum Beispiel
-@file{mysqld.stack}.
-
-@item
-Machen Sie eine symbolische Datei f�r den @code{mysqld}-Server:
-@example
-nm -n libexec/mysqld > /tmp/mysqld.sym
-@end example
-
-Beachten Sie, dass viele MySQL-Bin�rdistributionen die obige Datei namens
-@code{mysqld.sym.gz} enthalten. In diesem Fall m�ssen Sie sie wie folgt
-entpacken:
-@example
-gunzip < bin/mysqld.sym.gz > /tmp/mysqld.sym
-@end example
-
-@item
-F�hren Sie @code{resolve_stack_dump -s /tmp/mysqld.sym -n mysqld.stack}
-aus.
-
-Das gibt aus, wo @code{mysqld} starb. Wenn Ihnen das nicht hilft,
-herauszufinden, warum @code{mysqld} starb, sollten Sie einen Bug-Bericht
-machen und die Ausgabe des obigen Befehls in diesen Bericht einschlie�en.
-
-Beachten Sie aber, dass es uns in den meisten F�llen nicht weiterhilft, nur
-einen Stack-Trace zu haben, um die Ursache des Problems herauszufinden. Um
-den Bug feststellen oder einen Workaround zur Verf�gung stellen zu k�nnen,
-m�ssen wir in den meisten F�llen die Anfrage kennen, die @code{mysqld}
-t�tete, und am besten einen Testfall, so dass wir das Problem wiederholen
-k�nnen! @xref{Bug reports}.
-@end enumerate
-
-
-@node Using log files, Reproduceable test case, Using stack trace, Debugging server
-@c German node Log-Dateien benutzen
-@appendixsubsec Log-Dateien benutzen, um Gr�nde f�r Fehler in mysqld zu finden
-
-Beachten Sie, dass Sie vor dem Start von @code{mysqld} mit @code{--log}
-alle Ihre Tabellen mit @code{myisamchk} pr�fen sollten.
-@xref{MySQL Database Administration}.
-
-Wenn @code{mysqld} stirbt oder h�ngenbleibt, sollten Sie ihn mit
-@code{--log} starten. Wenn @code{mysqld} wieder stirbt, k�nnen Sie das Ende
-der Log-Datei nach der Anfrage durchsuchen, die @code{mysqld} t�tete.
-
-Wenn Sie @code{--log} ohne einen Dateinamen verwenden, wird das Log im
-Datenbank-Verzeichnis als 'hostname'.log gespeichert. In den meisten F�llen
-ist es die letzte Anfrage in der Log-Datei, die @code{mysqld} t�tete, aber
-das sollten Sie falls m�glich sicherstellen, indem Sie @code{mysqld} neu
-starten und dieselbe Anfrage mit dem @code{mysql}-Kommandozeilenwerkzeug
-wiederholen. Wenn das funktioniert, sollten Sie ebenfalls alle
-komplizierten Anfragen testen, die nicht beendet wurden.
-
-Sie k�nnen auch den Befehl @code{EXPLAIN} auf alle @code{SELECT}-Statements
-ausprobieren, die lange Zeit ben�tigen, um sicherzustellen, dass
-@code{mysqld} Indexe korrekt benutzt. @xref{EXPLAIN, , @code{EXPLAIN}}.
-
-Sie finden Anfragen, die zur Ausf�hrung lange Zeit ben�tigen, indem Sie
-@code{mysqld} mit @code{--log-slow-queries} starten.
-@xref{Slow query log}.
-
-Wenn Sie den Text @code{mysqld restarted} in der Fehler-Log-Datei-Datei
-(normalerweise namens @file{hostname.err}) finden, haben Sie wahrscheinlich
-eine Anfrage gefunden, die @code{mysqld} zum Absturz brachte. Wenn das
-passiert, sollten Sie alle Ihre Tabellen mit @code{myisamchk} pr�fen
-(@pxref{MySQL Database Administration}) und die Anfragen in den
-MySQL-Log-Dateien untersuchen, um herauszufinden, ob eine nicht
-funktioniert. Wenn Sie eine solche Anfrage finden, versuchen Sie zun�chst,
-auf die neueste MySQL-Version zu aktualisieren. Wenn das nicht hilft und Sie
-nichts im @code{mysql}-Mailarchiv finden k�nnen, sollten Sie den Bug an
-@email{mysql@@lists.mysql.com} berichten. Links zu Mailarchiven finden Sie
-online auf der @uref{http://www.mysql.com/documentation/,
-MySQL-Dokumentationsseite}.
-
-Wenn Sie @code{mysqld} mit @code{--with-myisam-recover} gestartet haben,
-pr�ft MySQL automatisch @code{MyISAM}-Tabellen und versucht sie zu
-reparieren, wenn sie als 'nicht korrekt geschlossen' oder 'besch�digt'
-gekennzeichnet sind. Wenn das passiert, schreibt MySQL einen Eintrag in die
-@code{hostname.err}-Datei @code{'Warning: Checking table ...'}, der von
-@code{Warning: Repairing table} gefolgt wird, wenn die Tabelle repariert
-werden muss. Wenn Sie viele solcher Fehler erhalten, ohne dass
-@code{mysqld} direkt davor unerwartet gestorben ist, stimmt etwas nicht und
-muss weiter untersucht werden. @xref{Command-line options}.
-
-Nat�rlich ist es kein gutes Zeichen, wenn @code{mysqld} unerwartet stirbt,
-doch in diesem Fall sollte man nicht die @code{Checking table...}-Meldungen
-untersuchen, sondern statt dessen versuchen herauszufinden, warum
-@code{mysqld} starb.
-
-
-@node Reproduceable test case, , Using log files, Debugging server
-@c German node Reproduzierbarer Testfall
-@appendixsubsec Einen Testfall herstellen, wenn Sie Tabellenbesch�digung feststellen
-
-Wenn Sie besch�digte Tabellen erhalten oder wenn @code{mysqld} immer nach
-irgend einem Aktualisierungsbefehl fehlschl�gt, k�nnen Sie mit folgendem
-�berpr�fen, ob der Bug reproduzierbar ist:
-
-@itemize @bullet
-@item
-Fahren Sie den MySQL-Daemon herunter (mit @code{mysqladmin shutdown}).
-@item
-Machen Sie eine Datensicherung der Tabellen (um dem sehr unwahrscheinlichen
-Fall vorzubeugen, dass die Reparatur etwas Schlechtes macht).
-@item
-Pr�fen Sie alle Tabellen mit @code{myisamchk -s Datenbank/*.MYI}.
-Reparieren Sie jegliche besch�digten Tabellen mit @code{myisamchk -r
-datenbank/tabelle.MYI}.
-@item
-Machen Sie eine Datensicherung der Tabellen.
-@item
-Entfernen (oder verschieben) Sie jegliche alten Log-Dateien aus dem
-MySQL-Daten-Verzeichnis, wenn Sie mehr Platz brauchen.
-@item
-Starten Sie @code{mysqld} mit @code{--log-binary}. @xref{Binary log}.
-Wenn Sie eine Anfrage finden wollen, die @code{mysqld} zum Absturz brachte,
-sollten Sie @code{--log --log-binary} benutzen.
-@item
-Wenn Sie eine besch�digte Tabelle erhalten, halten Sie @code{mysqld} an.
-@item
-Stellen Sie die Datensicherung wieder her.
-@item
-Starten Sie den @code{mysqld}-Server neu, @strong{ohne}
-@code{--log-binary}.
-@item
-F�hren Sie die Befehle mit @code{mysqlbinlog update-log-file | mysql}
-erneut aus. Die Update-Log-Datei wird im MySQL-Datenbank-Verzeichnis unter
-dem Namen @code{hostname-bin.#} gespeichert.
-@item
-Wenn die Tabellen wieder besch�digt werden oder Sie @code{mysqld} wieder
-dazu bringen k�nnen zu sterben, haben Sie einen reproduzierbaren Bug
-gefunden, der sich leicht beheben lassen sollte! Schicken Sie die Tabellen
-und die Bin�r-Log-Datei an @uref{ftp://support.mysql.com/pub/mysql/secret}
-und schicken Sie eine E-Mail an @email{bugs@@lists.mysql.com} oder (wenn
-Sie ein Support-Kunde sind) an @email{Support@@mysql.com}, und das
-MySQL-Team wird den Bug so schnell wie m�glich beheben.
-@end itemize
-
-Sie k�nnen auch das Skript @code{mysql_find_rows} benutzen, um einfach
-einige der Aktualisierungs-Statements auszuf�hren, wenn Sie das Problem
-eingrenzen wollen.
-
-
-@node Debugging client, The DBUG package, Debugging server, Porting
-@c German node Clients debuggen
-@appendixsec Einen MySQL-Client debuggen
-
-@cindex debuggen, Client
-@cindex Clients, debuggen
-
-Um einen MySQL-Client mit dem integrierten Debug-Paket debuggen zu k�nnen,
-sollten Sie MySQL mit @code{--with-debug} oder @code{--with-debug=full}
-kompilieren. @xref{configure options}.
-
-@tindex MYSQL_DEBUG-Umgebungsvariable
-@tindex Umgebungsvariable, MYSQL_DEBUG
-Bevor Sie einen Client laufen lassen, sollten Sie die
-@code{MYSQL_DEBUG}-Umgebungsvariable setzen:
-
-@example
-shell> MYSQL_DEBUG=d:t:O,/tmp/client.trace
-shell> export MYSQL_DEBUG
-@end example
-
-Das bringt Clients dazu, eine Trace-Datei in @file{/tmp/client.trace} zu
-erzeugen.
-
-Wenn Sie Probleme mit Ihrem eigenen Client-Code haben, sollten Sie
-versuchen, sich mit dem Server zu verbinden und Ihre Anfragen mit einem
-Client laufen zu lassen, der bekannterma�en funktioniert. Lassen Sie dabei
-@code{mysql} im Debug-Modus laufen (unter der Annahme, dass Sie MySQL mit
-angeschaltetem Debuggen kompiliert haben):
-
-@example
-shell> mysql --debug=d:t:O,/tmp/client.trace
-@end example
-
-Das stellt n�tzliche Informationen f�r den Fall bereit, dass Sie einen
-Bug-Bericht schicken. @xref{Bug reports}.
-
-Wenn Ihr Client bei irgend einem 'zul�ssigen' Sperr-Code abst�rzt, sollten
-Sie sicherstellen, dass Ihre @file{mysql.h}-Include-Datei mit Ihrer
-MySQL-Bibliotheksdatei zusammenpasst. Es ist ein h�ufiger Fehler, eine alte
-@file{mysql.h}-Datei aus einer alten MySQL-Installation mit einer neuen
-MySQL-Bibliothek zu benutzen.
-
-
-@node The DBUG package, Locking methods, Debugging client, Porting
-@c German node Das DBUG-Paket
-@appendixsec Das DBUG-Paket
-
-@cindex DBUG-Paket
-
-Der MySQL-Server und die meisten MySQL-Clients werden mit dem DBUG-Paket
-kompiliert, das urspr�nglich von Fred Fish stammt. Wenn man MySQL zum
-Debuggen kompiliert hat, erm�glicht es dieses Paket, eine Trace-Datei davon
-zu erhalten, was das Programm debuggt. @xref{Making trace files}.
-
-Man benutzt das Debug-Paket durch Aufruf des Programms mit der
-@code{--debug="..."}- oder der @code{-#...}-Option.
-
-Die meisten MySQL-Programme haben eine vorgabem��ige Debug-Zeichenkette,
-die benutzt wird, wenn Sie keine Option f�r @code{--debug} angeben. Die
-vorgabem��ige Trace-Datei ist �blicherweise
-@code{/tmp/programm_name.trace} unter Unix und @code{\programm_name.trace}
-unter Windows.
-
-Die Debug-Steuerungs-Zeichenkette ist eine Folge durch Doppelpunkte
-getrennter Felder, wie folgt:
-
-@example
-<feld_1>:<feld_2>:...:<feld_N>
-@end example
-
-Jedes Feld besteht aus einem zwingend erforderlichen Flag-Zeichen, gefolgt
-durch ein optionales Komma (",") und eine durch Kommas getrennte Auflistung
-von Modifikatoren:
-
-@example
-flag[,modifikator,modifikator,...,modifikator]
-@end example
-
-Aktuell werden folgende Flag-Zeichen erkannt:
-
-@multitable @columnfractions .1 .9
-@item d
- @tab Ausgabe von DBUG_<N>-Makros des aktuellen Status erm�glichen.
-Gegebenenfalls gefolgt von einer Auflistung von Schl�sselw�rtern, die
-Ausgaben nur f�r die DBUG-Makros mit diesem Schl�sselwort ausw�hlt. Eine
-leere Auflistung von Schl�sselw�rtern bedeutet Ausgabe f�r alle Makros.
-@item D
- @tab Nach jeder Debugger-Ausgabezeile verz�gern. Das Argument ist die
-Anzahl von Zehntelsekunden der Verz�gerung, abh�ngig von den F�higkeiten
-der Maschine. @code{-#D,20} bedeutet als eine Verz�gerung von 2 Sekunden.
-@item f
- @tab Debuggen und / oder Tracen und Profilen auf die in der Auflistung
-genannten Funktionen beschr�nken. Beachten Sie, dass eine leere Liste alle
-Funktionen abschaltet. Die entsprechenden "d"- oder "t"-Flags m�ssen immer
-noch angegeben werden; dieser Flag beschr�nkt nur ihre Aktionen, wenn Sie
-angeschaltet sind.
-@item F
- @tab Den Quell-Dateinamen f�r jede Zeile der Debug- oder Trace-Ausgabe
-festlegen.
-@item i
- @tab Den Prozess mit der PID- oder Thread-Kennung f�r jede Ziele der
-Debug- oder Trace-Ausgabe festlegen.
-@item g @tab Profiling anschalten. Es wird eine Datei namens 'dbugmon.out'
-erzeugt, die Informationen enth�lt, die benutzt werden k�nnen, um das
-Programm zu profilen. Wir gegebenenfalls von einer Auflistung von
-Schl�sselw�rter gefolgt, die Profiling nur f�r die Funktionen in dieser
-Liste ausw�hlen. Eine leere Liste bedeutet, dass alle Funktionen in
-Betracht gezogen werden.
-@item L
- @tab Die Quell-Datei-Zeilennummer f�r jede Zeile der Debug- oder
-Trace-Ausgabe festlegen.
-@item n
- @tab Die aktuelle Funktionsverschachtelungstiefe f�r jede Zeile der Debug-
-oder Trace-Ausgabe ausgeben.
-@item N
- @tab Jede Zeile der dbug-Ausgabe nummerieren.
-@item o
- @tab Die Debugger-Ausgabe in die angegebene Datei umlenken. Die
-vorgabem��ige Ausgabe ist stderr.
-@item O
- @tab Wie @code{O}, aber die Datei wird nach jedem Schreiben auf die Platte
-zur�ckgeschrieben (flush). Wenn n�tig, wird die Datei geschlossen und
-wieder ge�ffnet.
-@item p
- @tab Debugger-Aktionen auf die angegebenen Prozesse beschr�nken. Ein
-Prozess muss mit dem DBUG_PROCESS-Makro gekennzeichnet sein und mit einer
-der Aktionen in der Liste �bereinstimmen, damit Debugger-Aktionen
-durchgef�hrt werden.
-@item P
- @tab Den aktuellen Prozessnamen f�r jede Zeile der Debug- oder
-Trace-Ausgabe ausgeben.
-@item r
- @tab Wenn ein neuer Zustand gepusht wird, nicht die
-Funktionsverschachtelungsebene des alten Zustands �bernehmen (erben).
-N�tzlich, wenn die Ausgabe am linken Rand anfangen soll.
-@item S
- @tab Funktion _sanity(_datei_,_zeile_) bei jeder debuggten Funktion
-ausf�hren, bis _sanity() etwas anderes als 0 zur�ckgibt. (Wird meist
-zusammen mit safemalloc benutzt, um Speicherlecks zu finden.)
-@item t
- @tab Trace-Zeile f�r Funktionsaufrufen / Funktionsende anschalten. Wird
-gegebenenfalls gefolgt von einer Liste (die nur einen Modifikator enth�lt), in
-der numerisch eine maximale Trace-Ebene angegeben wird, nach der keine
-Ausgaben mehr erfolgen, weder f�r Debuggen noch f�r das Tracen von Makros. Die
-Vorgabe ist eine Kompilierzeit-Option.
-@end multitable
-
-Einige Beispiele von Debug-Steuerungs-Zeichenketten, die auf einer
-Shell-Kommandozeile erscheinen k�nnen (das "-#" wird typischerweise
-benutzt, um eine Steuerungs-Zeichenkette f�r ein Applikationsprogramm
-einzuf�hren):
-
-@example
--#d:t
--#d:f,main,subr1:F:L:t,20
--#d,input,output,files:n
--#d:t:i:O,\\mysqld.trace
-@end example
-
-In MySQL werden gebr�uchlicherweise (mit der @code{d}-Option) folgende Tags
-ausgegeben: @code{enter}, @code{exit}, @code{error}, @code{warning},
-@code{info} und @code{loop}.
-
-
-@node Locking methods, RTS-threads, The DBUG package, Porting
-@c German node Sperrmethoden
-@appendixsec Sperrmethoden
-
-@cindex Sperrmethoden
-@cindex Methoden, Sperr-
-
-Momentan unterst�tzt MySQL Tabellensperren nur f�r @code{ISAM}- /
-@code{MyISAM}- und @code{HEAP}-Tabellen und Sperren auf Seitenebene nur f�r
-@code{BDB}-Tabellen. @xref{Internal locking}. Bei @code{MyISAM}-Tabellen
-k�nnen Sie @code{INSERT} und @code{SELECT} ohne Sperren frei vermischen.
-(@code{Versionierung}).
-
-Ab Version 3.23.33 k�nnen Sie die Tabellensperr-Konkurrenz auf Ihrem System
-durch Pr�fen der @code{Table_locks_waited}- und
-@code{Table_locks_immediate}-Umgebungsvariablen analysieren.
-
-Einige Datenbankbenutzer behaupten, dass MySQL keine gro�e Anzahl
-gleichzeitiger Benutzer unterst�tzen kann, weil es kein Sperren auf
-Zeilenebene hat. Das mag bei einigen speziellen Applikationen zutreffen,
-aber nicht allgemein. Wie immer h�ngt das v�llig davon ab, was Ihre
-Applikation macht, und davon, wie das Zugriffs-/Aktualisierungs-Muster der
-Daten aussieht.
-
-Vorteile f�r Zeilensperren:
-
-@itemize @bullet
-@item
-Weniger Sperrkonflikte beim Zugriff auf unterschiedliche Zeilen in vielen
-Threads.
-@item
-Weniger �nderungen bei Rollbacks.
-@item
-Macht es m�glich, eine einzelne Zeile lange zu sperren.
-@end itemize
-
-Nachteile:
-
-@itemize @bullet
-@item
-Ben�tigt mehr Speicher als Sperren auf Seiten- oder Tabellenebene.
-@item
-Ist langsamer als Sperren auf Seiten- oder Tabellenebene, wenn es einen
-gro�en Teil der Tabelle betrifft, weil man viel mehr Sperren durchf�hren
-muss.
-@item
-Ist definitiv viel schlechter als andere Sperren, wenn Sie oft @code{GROUP
-BY} auf einen gro�en Teil der Daten ausf�hren oder wenn man die gesamte
-Tabelle oft scannen muss.
-@item
-Bei Sperren auf h�herer Ebene kann man einfacher Sperren unterschiedlichen
-Typs unterst�tzen, um die Applikation zu optimieren, weil der
-Sperr-Overhead sich weniger als bei Sperren auf Zeilenebene bemerkbar
-macht.
-@end itemize
-
-Tabellensperren sind Seiten- oder Zeilensperren in folgenden F�llen
-�berlegen:
-
-@itemize @bullet
-@item
-Wenn man meist liest.
-@item
-Wenn Lese- und Aktualisierungsoperationen auf strengen Schl�sseln erfolgen.
-Das ist dann der Fall, wenn man eine Zeile aktualisiert oder l�scht, die
-mit einem Schl�ssel-Lesen geholt werden kann:
-@example
-UPDATE tabelle SET spalte=wert WHERE eindeutige_schluessel_nummer
-DELETE FROM tabelle WHERE eindeutiger_schluessel=#
-@end example
-@item
-@code{SELECT} in Kombination mit @code{INSERT} (und sehr wenigen
-@code{UPDATE}'s und @code{DELETE}'s).
-@item
-Viele Scans / @code{GROUP BY} auf die gesamte Tabelle ohne irgend welche
-Schreibvorg�nge.
-@end itemize
-
-Andere Optionen als Sperren auf Zeilen- / Seiten-Ebene:
-
-Versionierung (wie die, die wir bei MySQL f�r gleichzeitige Einf�gevorg�nge
-nutzen), bei der man gleichzeitig einen Schreibvorgang haben kann, w�hrend
-viele Lesevorg�nge stattfinden. Das hei�t, dass die Datenbank / Tabelle
-verschiedene Sichten der Daten unterst�tzt, abh�ngig davon, wann man
-anfing, darauf zuzugreifen. Andere Namen hierf�r sind Zeitreisen, Kopieren
-beim Schreiben (Copy on Write) oder Kopieren bei Bedarf (Copy on Demand).
-
-Kopieren bei Bedarf ist in vielen F�llen viel besser als Sperren auf
-Seiten- oder Zeilenebene. Im schlimmsten Fall wird jedoch viel mehr
-Speicher verbraucht als bei der Benutzung normaler Sperren.
-
-Anstelle von Zeilen-Sperren kann man Sperren auf Applikationsebene
-benutzen (wie get_lock/release_lock in MySQL). Das funktioniert nat�rlich
-nur bei 'wohl erzogenen' Applikationen.
-
-In vielen F�llen kann man auf fortgeschrittene Art raten, welcher Sperrtyp
-der beste f�r die Applikation ist, aber allgemein ist es sehr schwer zu
-sagen, dass ein bestimmter Sperrtyp besser ist als ein anderer. Alles h�ngt
-von der Applikation ab, und verschiedene Teile der Applikation k�nnen nach
-unterschiedlichen Sperrtypen verlangen.
-
-Hier sind einige Tipps zu Sperren in MySQL:
-
-Bei Web-Applikation f�hren die meisten Applikationen viele SELECTs aus,
-sehr wenige DELETEs, UPDATEs haupts�chlich auf Schl�ssel und INSERTs in
-einigen bestimmten Tabellen. Die grundlegende Einrichtung von MySQL ist
-hierf�r BESTENS optimiert.
-
-Gleichzeitige Benutzer sind kein Problem, solange man UPDATEs und SELECTs
-nicht vermischt, die beide gleichzeitig viele Zeilen in derselben Tabelle
-untersuchen m�ssen.
-
-Wenn man INSERTs und DELETEs auf dieselbe Tabelle mischt, kann @code{INSERT
-DELAYED} eine gro�e Hilfe sein.
-
-Man kann auch @code{LOCK TABLES} benutzen, um Dinge zu beschleunigen (viele
-UPDATEs innerhalb einer einzelnen Sperre sind viel schneller als UPDATEs
-ohne Sperren). Daten in unterschiedliche Tabellen aufteilen hilft hierbei
-auch.
-
-Wenn Sie Geschwindigkeitsprobleme mit den Tabellensperren in MySQL
-bekommen, k�nnen Sie diese eventuell dadurch l�sen, dass Sie Ihre Tabellen
-in @code{BDB}-Tabellen umwandeln.
-@xref{BDB}.
-
-Der Optimierungsabschnitt dieses Handbuchs behandelt viele verschiedene
-Aspekte dessen, wie man seine Applikationen optimieren kann. @xref{Tips}.
-
-
-@node RTS-threads, Thread packages, Locking methods, Porting
-@c German node RTS-Thread
-@appendixsec Anmerkungen zu RTS-Thread
-
-@cindex RTS-Thread
-@cindex Thread, RTS
-
-Ich habe versucht, die RTS-Thread-Pakete bei MySQL zu benutzen, bin aber
-�ber folgende Probleme gestolpert:
-
-Sie benutzen die alte Version vieler POSIX-Aufrufe und es ist sehr m�hsam,
-Wrapper f�r alle Funktionen zu schreiben. Ich neige dazu zu denken, dass es
-leichter ist, die Thread-Bibliotheken auf die neueste POSIX-Spezifikation
-zu �ndern.
-
-Einige Wrapper sind bereits geschrieben. Siehe @file{mysys/my_pThread.c}
-wegen weiterer Informationen.
-
-Zumindest folgendes sollte ge�ndert werden:
-
-@code{pthread_get_specific} sollte ein Argument benutzen.
-@code{sigwait} sollte zwei Argumente entgegennehmen.
-Viele Funktionen (zumindest @code{pthread_cond_wait} und
-@code{pthread_cond_timedwait}) sollten bei einem Fehler den Fehler-Code
-zur�ckgeben. Momentan geben sie -1 zur�ck und setzen @code{errno}.
-
-Ein weiteres Problem ist, dass Threads auf Benutzerebene das
-@code{ALRM}-Signal benutzen und dass dieses viele Funktionen abbricht
-(@code{read}, @code{write}, @code{open}, ...). MySQL sollte versuchen, nach
-der Unterbrechung all dieser Funktionen weiterzumachen, aber das ist nicht
-einfach zu verifizieren.
-
-Das gr��te ungel�ste Problem ist folgendes:
-
-Um Alarme auf Thread-Ebene zu erhalten, �nderte ich
-@file{mysys/thr_alarm.c} in der Art, dass es zwischen Alarmen wartet, mit
-@code{pthread_cond_timedwait()}, aber das bricht mit Fehler @code{EINTR}
-ab. Ich versuchte, die Thread-Bibliothek zu debuggen, um den Grund
-herauszufinden, konnte aber keine einfache L�sung finden.
-
-Wenn jemand MySQL mit RTS-Thread ausprobieren m�chte, schlage ich folgendes
-vor:
-
-@itemize @bullet
-@item
-Funktionen, die MySQL benutzt, von der Thread-Bibliothek zu POSIX �ndern.
-Das sollte nicht lange dauern.
-@item
-Alle Bibliotheken mit @code{-DHAVE_rts_thread} kompilieren.
-@item
-@code{thr_alarm} kompilieren.
-@item
-Wenn es kleine Unterschiede in der Implementation gibt, k�nnen diese
-behoben werden, indem man @file{my_pThread.h} und @file{my_pThread.c}
-�ndert.
-@item
-@code{thr_alarm} laufen lassen. Wenn es ohne irgend welche ``warning''-,
-``error''- oder ``aborted''-Meldungen l�uft, sind Sie auf dem richtigen
-Weg. Hier ist ein erfolgreiches Laufenlassen unter Solaris:
-@example
-Main Thread: 1
-Thread 0 (5) started
-Thread: 5 Waiting
-process_alarm
-Thread 1 (6) started
-Thread: 6 Waiting
-process_alarm
-process_alarm
-thread_alarm
-Thread: 6 Slept for 1 (1) sec
-Thread: 6 Waiting
-process_alarm
-process_alarm
-thread_alarm
-Thread: 6 Slept for 2 (2) sec
-Thread: 6 Simulation of no alarm needed
-Thread: 6 Slept for 0 (3) sec
-Thread: 6 Waiting
-process_alarm
-process_alarm
-thread_alarm
-Thread: 6 Slept for 4 (4) sec
-Thread: 6 Waiting
-process_alarm
-thread_alarm
-Thread: 5 Slept for 10 (10) sec
-Thread: 5 Waiting
-process_alarm
-process_alarm
-thread_alarm
-Thread: 6 Slept for 5 (5) sec
-Thread: 6 Waiting
-process_alarm
-process_alarm
-
-...
-thread_alarm
-Thread: 5 Slept for 0 (1) sec
-end
-@end example
-@end itemize
-
-
-@node Thread packages, , RTS-threads, Porting
-@c German node Thread-Pakete
-@appendixsec Unterschiede zwischen verschiedenen Thread-Paketen
-
-@cindex Thread-Pakete, Unterschiede
-
-MySQL ist sehr abh�ngig vom verwendeten Thread-Paket. Wenn Sie daher eine
-gute Plattform f�r MySQL ausw�hlen, ist das Thread-Paket sehr wichtig.
-
-Es gibt mindestens drei Typen von Thread-Paketen:
-
-@itemize @bullet
-@item
-Benutzer-Thread in einem einzelnen Prozess. Das Thread-Umschalten wird mit
-Alarmen gemacht und die Thread-Bibliothek verwaltet alle nicht
-Thread-sicheren Funktionen mit Sperren. Lese-, Schreib- und
-Auswahl-Operationen werden �blicherweise mit einer Thread-spezifischen
-Auswahl verwaltet, die auf einen anderen Thread umschaltet, wenn der
-laufende Thread auf Daten warten muss.
-Wenn die Benutzer-Thread-Pakete in die Standard-Bibliotheken integriert
-sind (FreeBSD- und BSDI-Thread), erfordert das Thread-Paket weniger
-Overhead als Thread-Pakete, die alle unsicheren Aufrufen mappen m�ssen
-(MIT-pThread, FSU-PThread und RTS-Thread). In einigen Umgebungen
-(beispielsweise SCO) sind alle Systemaufrufe Thread-sicher, weshalb das
-Mapping sehr leicht durchgef�hrt werden kann (FSU-PThread unter SCO).
-Nachteil: Alle gemappten Aufrufe ben�tigen etwas Zeit und es ist sehr
-verzwickt, alle Situationen handhaben zu k�nnen. �blicherweise gibt es auch
-einige Systemaufrufe, die vom Thread-Paket nicht gehandhabt werden (wie
-MIT-pThread und Sockets). Thread-Scheduling ist nicht immer optimal.
-@item
-Benutzer-Thread in separaten Prozessen. Das Thread-Umschalten wird vom
-Kernel durchgef�hrt und alle Daten werden zwischen den Threads geteilt. Das
-Thread-Paket verwaltet die Standard-Thread-Aufrufe, so dass diese Daten
-zwischen Threads teilen k�nnen. LinuxThread benutzt diese Methode.
-Nachteil: viele Prozesse. Die Erzeugung von Threads ist langsam. Wenn ein
-Thread stirbt, bleiben die �brigen �blicherweise h�ngen, und Sie m�ssen
-alle t�ten, bevor Sie neu starten k�nnen. Man kann sagen, dass die
-Thread-Umschaltung ziemlich viel kostet.
-@item
-Kernel-Thread. Das Thread-Umschalten wird von der Thread-Bibliothek oder
-dem Kernel durchgef�hrt und ist sehr schnell. Alles wird in einem Prozess
-gemacht, aber auch manchen Systemen zeigt @code{ps} die verschiedenen
-Threads. Wenn ein Thread abbricht, bricht der gesamte Prozess ab. Die
-meisten Systemaufrufe sind Thread-sicher und sollten sehr wenig Overhead
-beanspruchen. Solaris, HP-UX, AIX und OSF1 haben Kernel-Thread.
-@end itemize
-
-Auf manchen Systemen wird Kernel-Thread gehandhabt, indem
-Benutzerebenen-Thread in die Systembibliotheken integriert wird. In solchen
-F�llen kann das Umschalten nur von der Thread-Bibliothek durchgef�hrt
-werden und der Kernel ist sich nicht wirklich ``der Threads bewusst''.
-
-
-
-
-@node Environment variables, Regexp, Porting, Top
-@c German node Umgebungsvariablen
-@appendix Umgebungsvariablen
-
-@cindex Umgebungsvariablen, Auflistung
-
-Hier ist eine Auflistung aller Umgebungsvariablen, die direkt oder indirekt
-von MySQL benutzt werden. Die meisten von ihnen finden sich auch an anderen
-Stellen dieses Handbuchs.
-
-Beachten Sie, dass jegliche Optionen auf der Kommandozeile vorrangig vor
-Werten, die in Konfigurationsdateien und Umgebungsvariablen angegeben sind,
-und Werte in Konfigurationsdateien vorrangig vor Werten in
-Umgebungsvariablen sind.
-
-In vielen F�llen ist es vorzuziehen, eine configure-Datei anstelle von
-Umgebungsvariablen zu verwenden, um das Verhalten von MySQL zu
-beeinflussen. @xref{Option files}.
-
-@tindex CCX-Umgebungsvariable
-@tindex Umgebungsvariable, CCX
-@tindex CC-Umgebungsvariable
-@tindex Umgebungsvariable, CC
-@tindex CFLAGS-Umgebungsvariable
-@tindex Umgebungsvariable, CFLAGS
-@tindex CXXFLAGS-Umgebungsvariable
-@tindex Umgebungsvariable, CXXFLAGS
-@tindex DBI_USER-Umgebungsvariable
-@tindex Umgebungsvariable, DBI_USER
-@tindex DBI_TRACE-Umgebungsvariable
-@tindex Umgebungsvariable, DBI_TRACE
-@tindex HOME-Umgebungsvariable
-@tindex Umgebungsvariable, HOME
-@tindex LD_RUN_PATH-Umgebungsvariable
-@tindex Umgebungsvariable, LD_RUN_PATH
-@tindex MYSQL_DEBUG-Umgebungsvariable
-@tindex Umgebungsvariable, MYSQL_DEBUG
-@tindex MYSQL_HISTFILE-Umgebungsvariable
-@tindex Umgebungsvariable, MYSQL_HISTFILE
-@tindex MYSQL_HOST-Umgebungsvariable
-@tindex Umgebungsvariable, MYSQL_HOST
-@tindex MYSQL_PWD-Umgebungsvariable
-@tindex Umgebungsvariable, MYSQL_PWD
-@tindex MYSQL_TCP_PORT-Umgebungsvariable
-@tindex Umgebungsvariable, MYSQL_TCP_PORT
-@tindex MYSQL_UNIX_PORT-Umgebungsvariable
-@tindex Umgebungsvariable, MYSQL_UNIX_PORT
-@tindex PATH-Umgebungsvariable
-@tindex Umgebungsvariable, PATH
-@tindex TMPDIR-Umgebungsvariable
-@tindex Umgebungsvariable, TMPDIR
-@tindex TZ-Umgebungsvariable
-@tindex Umgebungsvariable, TZ
-@tindex UMASK_DIR-Umgebungsvariable
-@tindex Umgebungsvariable, UMASK_DIR
-@tindex UMASK-Umgebungsvariable
-@tindex Umgebungsvariable, UMASK
-@tindex USER-Umgebungsvariable
-@tindex Umgebungsvariable, USER
-
-@multitable @columnfractions .2 .8
-@item @code{CCX} @tab Setzen Sie diese f�r Ihren C++-Kompiler, wenn Sie
-configure laufen lassen.
-@item @code{CC} @tab Setzen Sie diese f�r Ihren C-Kompiler, wenn Sie
-configure laufen lassen.
-@item @code{CFLAGS} @tab Flags f�r Ihren C-Kompiler, wenn Sie
-configure laufen lassen.
-@item @code{CXXFLAGS} @tab Flags f�r Ihren C++-Kompiler wenn Sie
-configure laufen lassen.
-@item @code{DBI_USER} @tab Der vorgabem��ige Benutzername f�r Perl-DBI.
-@item @code{DBI_TRACE} @tab Beim Tracen in Perl-DBI benutzt.
-@item @code{HOME} @tab Der vorgabem��ige Pfad f�r die
-@code{mysql}-History-Datei ist @file{$HOME/.mysql_history}.
-@item @code{LD_RUN_PATH} @tab Wird benutzt um anzugeben, wo Ihr
-@code{libmysqlclient.so} ist.
-@item @code{MYSQL_DEBUG} @tab Debug-Trace-Optionen beim Debuggen.
-@item @code{MYSQL_HISTFILE} @tab Der Pfad zur @code{mysql}-History-Datei.
-@item @code{MYSQL_HOST} @tab Vorgabem��iger Hostname, der von der
-@code{mysql}-Befehlszeilenaufforderung benutzt wird.
-@item @code{MYSQL_PWD} @tab Das vorgabem��ige Passwort bei der Verbindung
-mit @code{mysqld}. Beachten Sie, dass die Benutzung dieser
-Umgebungsvariablen unsicher ist!
-@item @code{MYSQL_TCP_PORT} @tab Der vorgabem��ige TCP/IP-Port.
-@item @code{MYSQL_UNIX_PORT} @tab Der vorgabem��ige Socket; benutzt f�r
-Verbindungen nach @code{localhost}.
-@item @code{PATH} @tab Wird von der Shell benutzt, um die MySQL-Programme
-zu finden.
-@item @code{TMPDIR} @tab Das Verzeichnis, in dem tempor�re Tabellen /
-Dateien erzeugt werden.
-@item @code{TZ} @tab Diese Variable sollte auf Ihre lokale Zeitzone gesetzt
-sein. @xref{Timezone problems}.
-@item @code{UMASK_DIR} @tab Die Erzeugungsmaske (Creation Mask) des
-Benutzer-Verzeichnisses, wenn Verzeichnisse angelegt werden. Beachten Sie,
-dass diese mit @code{UMASK} mit einem logischen UND verkn�pft wird!
-@item @code{UMASK} @tab Die Erzeugungsmaske (Creation Mask) bei der
-Erzeugung von Dateien.
-@item @code{USER} @tab Der vorgabem��ige Benutzer unter Windows, der beim
-Verbinden mit @code{mysqld} benutzt wird.
-@end multitable
-
-
-
-
-@node Regexp, GPL license, Environment variables, Top
-@c German node Regul�re Ausdr�cke
-@appendix Beschreibung der MySQL-Syntax f�r regul�re Ausdr�cke
-
-@cindex regex
-@cindex Syntax regul�rer Ausdr�cke, Beschreibung
-@cindex Syntax, regul�re Ausdr�cke
-
-Ein regul�rer Ausdruck (regex) ist eine m�chtige M�glichkeit, eine komplexe
-Suche zu formulieren.
-
-MySQL benutzt Henry Spencers Implementation regul�rer Ausdr�cke, die
-anstrebt, POSIX-1003.2-konform zu sein. MySQL benutzt die erweiterte
-Version.
-
-Die vorliegende vereinfachte Referenz �berspringt die Details. Um genauere
-Informationen zu erhalten, sehen Sie sich Henry Spencers
-@code{regex(7)}-Handbuchseite an, die in der Quelldistribution enthalten
-ist. @xref{Credits}.
-
-Ein regul�rer Ausdruck beschreibt einen Satz von Zeichenketten. Der
-einfachste regexp ist einer, der keine Sonderzeichen enth�lt. Der regexp
-@code{hello} beispielsweise stimmt mit @code{hello} und sonst nichts
-�berein.
-
-Nicht triviale regul�re Ausdr�cke benutzen bestimmte spezielle Konstrukte,
-so dass sie mit mehr als einer Zeichenkette �bereinstimmen k�nnen. Der
-regexp @code{hallo|stefan} beispielsweise stimmt entweder mit der
-Zeichenkette @code{hallo} oder der Zeichenkette @code{stefan} �berein.
-
-Um ein komplexeres Beispiel zu geben, stimmt der regexp @code{B[an]*s} mit
-jeder der Zeichenketten @code{Bananas}, @code{Baaaaas}, @code{Bs} und jeder
-anderen Zeichenkette �berein, die mit einem @code{B} anf�ngt, mit einem
-@code{s} aufh�rt und jede beliebige Anzahl von @code{a}- oder
-@code{n}-Zeichen dazwischen enth�lt.
-
-Ein regul�rer Ausdruck kann jedes der folgenden Sonderzeichen bzw.
-Konstrukte benutzen (0 = keine �bereinstimmung):
-@table @code
-@item ^
-Stimmt mit dem Anfang einer Zeichenkette �berein.
-@example
-mysql> select "fo\nfo" REGEXP "^fo$"; -> 0
-mysql> select "fofo" REGEXP "^fo"; -> 1
-@end example
-@item $
-Stimmt mit dem Ende einer Zeichenkette �berein.
-@example
-mysql> select "fo\no" REGEXP "^fo\no$"; -> 1
-mysql> select "fo\no" REGEXP "^fo$"; -> 0
-@end example
-@item .
-Stimmt mit jedem Zeichen �berein (inklusive neue Zeile).
-@example
-mysql> select "fofo" REGEXP "^f.*"; -> 1
-mysql> select "fo\nfo" REGEXP "^f.*"; -> 1
-@end example
-@item a*
-Stimmt mit jeder Folge von 0 oder mehr @code{a}-Zeichen �berein.
-@example
-mysql> select "Ban" REGEXP "^Ba*n"; -> 1
-mysql> select "Baaan" REGEXP "^Ba*n"; -> 1
-mysql> select "Bn" REGEXP "^Ba*n"; -> 1
-@end example
-@item a+
-Stimmt mit jeder Folge von einem oder mehr @code{a}-Zeichen �berein.
-@example
-mysql> select "Ban" REGEXP "^Ba+n"; -> 1
-mysql> select "Bn" REGEXP "^Ba+n"; -> 0
-@end example
-@item a?
-Stimmt mit 0 oder einem @code{a}-Zeichen �berein.
-@example
-mysql> select "Bn" REGEXP "^Ba?n"; -> 1
-mysql> select "Ban" REGEXP "^Ba?n"; -> 1
-mysql> select "Baan" REGEXP "^Ba?n"; -> 0
-@end example
-@item de|abc
-Stimmt mit den Zeichenfolgen @code{de} oder @code{abc} �berein.
-@example
-mysql> select "pi" REGEXP "pi|apa"; -> 1
-mysql> select "axe" REGEXP "pi|apa"; -> 0
-mysql> select "apa" REGEXP "pi|apa"; -> 1
-mysql> select "apa" REGEXP "^(pi|apa)$"; -> 1
-mysql> select "pi" REGEXP "^(pi|apa)$"; -> 1
-mysql> select "pix" REGEXP "^(pi|apa)$"; -> 0
-@end example
-@item (abc)*
-Stimmt mit 0 oder mehr Instanzen der Folge @code{abc} �berein.
-@example
-mysql> select "pi" REGEXP "^(pi)*$"; -> 1
-mysql> select "pip" REGEXP "^(pi)*$"; -> 0
-mysql> select "pipi" REGEXP "^(pi)*$"; -> 1
-@end example
-@item @{1@}
-@itemx @{2,3@}
-Es gibt eine allgemeinere Schreibweise f�r regexps, die mit vielen
-Vorkommen des vorherigen Atoms �bereinstimmen.
-@table @code
-@item a*
-Kann als @code{a@{0,@}} geschrieben werden.
-@item a+
-Kann als @code{a@{1,@}} geschrieben werden.
-@item a?
-Kann als @code{a@{0,1@}} geschrieben werden.
-@end table
-
-Um genauer zu sein, stimmt ein Atom, gefolgt von einer Begrenzung, die eine
-Ganzzahl @code{i} und keine Kommas enth�lt, mit einer Folge von genau
-@code{i} �bereinstimmungen des Atoms �berein. Ein Atom gefolgt von einer
-Begrenzung, die eine Ganzzahl @code{i} und ein Komma enth�lt, stimmt mit
-einer Folge von @code{i} oder mehr �bereinstimmungen des Atoms �berein. Ein
-Atom, gefolgt von einer Begrenzung, die zwei Ganzzahlen @code{i} und
-@code{j} �bereinstimmungen enth�lt, stimmt mit einer Folge von @code{i} bis
-@code{j} (inklusive) �bereinstimmungen des Atoms �berein.
-
-Beide Argumente m�ssen im Bereich von @code{0} bis @code{RE_DUP_MAX}
-(Vorgabe 255) inklusive sein. Wenn es zwei Argumente gibt, muss das zweite
-gr��er oder gleich dem ersten sein.
-@item [a-dX]
-@itemx [^a-dX]
-Stimmt mit jedem Zeichen �berein, was entweder @code{a}, @code{b},
-@code{c}, @code{d} oder @code{X} ist (oder nicht ist, wenn ^ benutzt wird).
-Um ein literales @code{]}-Zeichen einzuschlie�en, muss es unmittelbar der
-�ffnenden Klammer @code{[} folgen. Um ein literales @code{-}-Zeichen
-einzuschlie�en, muss es zuerst oder zuletzt geschrieben werden. Daher
-stimmt @code{[0-9]} mit jeder Dezimalziffer �berein. Alle Zeichen, die
-innerhalb eines @code{[]}-Paars keine definierte Bedeutung haben, haben
-keine spezielle Bedeutung und stimmen nur mit sich selbst �berein.
-@example
-mysql> select "aXbc" REGEXP "[a-dXYZ]"; -> 1
-mysql> select "aXbc" REGEXP "^[a-dXYZ]$"; -> 0
-mysql> select "aXbc" REGEXP "^[a-dXYZ]+$"; -> 1
-mysql> select "aXbc" REGEXP "^[^a-dXYZ]+$"; -> 0
-mysql> select "gheis" REGEXP "^[^a-dXYZ]+$"; -> 1
-mysql> select "gheisa" REGEXP "^[^a-dXYZ]+$"; -> 0
-@end example
-@item [[.zeichen.]]
-Die Zeichenfolge des vereinigten Elements. Die Folge ist ein einzelnes
-Element der Ausdrucksliste in der Klammer. Ein Klammerausdruck, der ein
-Mehrzeichen-Vereinigungselement enth�lt, kann daher mit mehr als einem
-Zeichen �bereinstimmen. Wenn die Vereinigungsfolge zum Beispiel ein
-@code{ch}-Vereinigungselement enth�lt, stimmt der regul�re Ausdruck
-@code{[[.ch.]]*c} mit den ersten f�nf Zeichen von @code{chchcc} �berein.
-
-@item [=zeichen_klasse=]
-Eine �quivalenzklasse, die f�r Zeichenfolgen aller Vereinigungselemente
-dieser steht, inklusive sich selbst.
-
-Wenn zum Beispiel @code{o} und @code{(+)} die Mitglieder einer
-�quivalenzklasse sind, sind @code{[[=o=]]}, @code{[[=(+)=]]} und
-@code{[o(+)]} allesamt Synonyme. Eine �quivalenzklasse darf kein Endpunkt
-eines Bereichs sein.
-
-@item [:zeichen_klasse:]
-Innerhalb eines Klammerausdrucks steht der Name einer Zeichenklasse, die in
-@code{[:} und @code{:]} eingeschlossen ist, f�r die Auflistung aller
-Zeichen, die zu dieser Klasse geh�ren. Standard-Zeichenklassennamen sind:
-
-@multitable @columnfractions .33 .33 .33
-@item alnum @tab digit @tab punct
-@item alpha @tab graph @tab space
-@item empty @tab lower @tab upper
-@item cntrl @tab print @tab xdigit
-@end multitable
-
-Diese stehen f�r die Zeichenklassen, die auf der
-@code{ctype(3)}-Handbuchseite definiert sind. Ein Locale darf andere zur
-Verf�gung stellen. Eine Zeichenklasse darf nicht als Endpunkt eines
-Bereichs benutzt werden.
-@example
-mysql> select "justalnums" REGEXP "[[:alnum:]]+"; -> 1
-mysql> select "!!" REGEXP "[[:alnum:]]+"; -> 0
-@end example
-
-@item [[:<:]]
-@itemx [[:>:]]
-Diese stimmen mit der Null-Zeichenkette am Anfang bzw. am Ende eines Worts
-�berein. Ein Wort ist definiert als Folge von Wort-Zeichen, dem weder
-Wortzeichen vorangestellt sind noch darauf folgen. Ein Wortzeichen ist ein
-alnum-Zeichen (wie in @code{ctype(3)} definiert) oder ein Unterstrich
-(@code{_}).
-@example
-mysql> select "a word a" REGEXP "[[:<:]]word[[:>:]]"; -> 1
-mysql> select "a xword a" REGEXP "[[:<:]]word[[:>:]]"; -> 0
-@end example
-@end table
-
-@example
-mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1
-@end example
-
-
-@page
-@c This node name ist special
-
-
-
-@node GPL license, LGPL license, Regexp, Top
-@c German node GPL-Lizenz
-@appendix GNU GENERAL PUBLIC LICENSE
-
-@cindex GPL, General Public License
-@cindex GPL, GNU General Public License
-
-@center Version 2, Juni 1991
-
-@display
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-Jeder hat das Recht, diese Lizenzurkunde zu vervielf�ltigen und
-unver�nderte Kopien zu verbreiten; �nderungen sind jedoch nicht gestattet.
-@end display
-
-@appendixsec Vorwort
-
-Die meisten Softwarelizenzen sind daraufhin entworfen worden, Ihnen die
-Freiheit zu nehmen, die Software weiterzugeben und zu ver�ndern.
-Im Gegensatz dazu soll Ihnen die GNU General Public License, die
-allgemeine �ffentliche GNU-Lizenz, ebendiese Freiheit garantieren.
-Sie soll sicherstellen, dass die Software f�r alle Benutzer frei ist.
-Diese Lizenz gilt f�r den Gro�teil der von der Free Software Foundation
-herausgegebenen Software und f�r alle anderen Programme, deren Autoren
-ihr Werk dieser Lizenz unterstellt haben. Auch Sie k�nnen diese
-M�glichkeit der Lizenzierung f�r Ihre Programme anwenden.
-(Ein anderer Teil der Software der Free Software Foundation unterliegt
-stattdessen der GNU Library General Public License, der allgemeinen
-�ffentlichen GNU-Lizenz f�r Bibliotheken.)
-
-Die Bezeichnung "freie" Software bezieht sich auf Freiheit, nicht auf
-den Preis. Unsere Lizenzen sollen Ihnen die Freiheit garantieren,
-Kopien freier Software zu verbreiten (und etwas f�r diesen Service zu
-berechnen, wenn Sie m�chten), die M�glichkeit, die Software im Quelltext
-zu erhalten oder den Quelltext auf Wunsch zu bekommen. Die Lizenzen
-sollen garantieren, dass Sie die Software �ndern oder Teile davon in
-neuen freien Programmen verwenden d�rfen - und dass Sie wissen, dass
-Sie dies alles tun d�rfen.
-
-Um Ihre Rechte zu sch�tzen, m�ssen wir Einschr�nkungen machen, die es
-jedem verbieten, Ihnen diese Rechte zu verweigern oder Sie aufzufordern,
-auf diese Rechte zu verzichten. Aus diesen Einschr�nkungen folgen
-bestimmte Verantwortlichkeiten f�r Sie, wenn Sie Kopien der Software
-verbreiten oder sie ver�ndern.
-
-Beispielsweise m�ssen Sie den Empf�ngern alle Rechte gew�hren, die
-Sie selbst haben, wenn Sie - kostenlos oder gegen Bezahlung - Kopien
-eines solchen Programms verbreiten. Sie m�ssen sicherstellen, dass auch
-sie den Quelltext erhalten bzw. erhalten k�nnen. Und Sie m�ssen ihnen
-diese Bedingungen zeigen, damit sie Ihre Rechte kennen.
-
-Wir sch�tzen Ihre Rechte in zwei Schritten: (1) Wir stellen die Software
-unter ein Urheberrecht (Copyright), und (2) wir bieten Ihnen diese Lizenz
-an, die Ihnen das Recht gibt, die Software zu vervielf�ltigen, zu
-verbreiten und/oder zu ver�ndern.
-
-Um die Autoren und uns zu sch�tzen, wollen wir dar�berhinaus sicherstellen,
-dass jeder erf�hrt, dass f�r diese freie Software keinerlei Garantie besteht.
-Wenn die Software von jemand anderem modifiziert und weitergegeben wird,
-m�chten wir, dass die Empf�nger wissen, dass sie nicht das Original erhalten
-haben, damit von anderen verursachte Probleme nicht den Ruf des
-urspr�nglichen Autors sch�digen.
-
-Schlie�lich und endlich ist jedes freie Programm permanent durch
-Software-Patente bedroht. Wir m�chten die Gefahr ausschlie�en, dass
-Distributoren eines freien Programms individuell Patente lizensieren
- - mit dem Ergebnis, dass das Programm propriet�r w�rde. Um dies zu
- verhindern, haben wir klargestellt, dass jedes Patent entweder f�r freie
-Benutzung durch jedermann lizenziert werden muss oder �berhaupt nicht
-lizenziert werden darf.
-
-Es folgen die genauen Bedingungen f�r die Vervielf�ltigung,
-Verbreitung und Bearbeitung:
-
-@iftex
-@appendixsec Bedingungen f�r die Vervielf�ltigung,
-Verbreitung und Bearbeitung
-@end iftex
-@ifinfo
-@center GNU GENERAL PUBLIC LICENSE
-@center Bedingungen f�r die Vervielf�ltigung, Verbreitung
-und Bearbeitung
-@end ifinfo
-
-@enumerate 0
-@item
-Diese Lizenz gilt f�r jedes Programm und jedes andere Werk, in dem
-ein entsprechender Vermerk des Copyright-Inhabers darauf hinweist,
-dass das Werk unter den Bestimmungen dieser General Public License
-verbreitet werden darf. Im folgenden wird jedes derartige Programm
-oder Werk als "das Programm" bezeichnet; die Formulierung "auf dem
-Programm basierendes Werk" bezeichnet das Programm sowie jegliche
-Bearbeitung des Programms im urheberrechtlichen Sinne, also ein Werk,
-welches das Programm, auch auszugsweise, sei es unver�ndert oder
-ver�ndert und/oder in eine andere Sprache �bersetzt, enth�lt.
-(Im folgenden wird die �bersetzung ohne Einschr�nkung als
-"Bearbeitung" eingestuft.) Jeder Lizenznehmer wird im folgenden
-als "Sie" angesprochen.
-
-Andere Handlungen als Vervielf�ltigung, Verbreitung und Bearbeitung
-werden von dieser Lizenz nicht ber�hrt; sie fallen nicht in Ihren
-Anwendungsbereich. Der Vorgang der Ausf�hrung des Programms wird
-nicht eingeschr�nkt, und die Ausgaben des Programms unterliegen
-dieser Lizenz nur, wenn der Inhalt ein auf dem Programm basierendes
-Werk darstellt (unabh�ngig davon, dass die Ausgabe durch die
-Ausf�hrung des Programmes erfolgte). Ob dies zutrifft, h�ngt von den
-Funktionen des Programms ab.
-
-@item
-Sie d�rfen auf beliebigen Medien unver�nderte Kopien des Quelltextes
-des Programms, wie sie ihn erhalten haben, anfertigen und verbreiten.
-Voraussetzung hierf�r ist, dass Sie mit jeder Kopie einen entsprechenden
-Copyright-Vermerk sowie einen Haftungsausschluss ver�ffentlichen, alle
-Vermerke, die sich auf diese Lizenz und das Fehlen einer Garantie
-beziehen, unver�ndert lassen und desweiteren allen anderen Empf�ngern
-des Programms zusammen mit dem Programm eine Kopie dieser Lizenz
-zukommen lassen.
-
-Sie d�rfen f�r den eigentlichen Kopiervorgang eine Geb�hr verlangen.
-Wenn Sie es w�nschen, d�rfen Sie auch gegen Entgelt eine Garantie
-f�r das Programm anbieten.
-
-@item
-Sie d�rfen Ihre Kopie(n) des Programms oder eines Teils davon
-ver�ndern, wodurch ein auf dem Programm basierendes Werk entsteht;
-Sie d�rfen derartige Bearbeitungen unter den Bestimmungen von
-Paragraph 1 vervielf�ltigen und verbreiten, vorausgesetzt, dass
-zus�tzlich alle folgenden Bedingungen erf�llt werden:
-
-@enumerate a
-@item
-Sie m�ssen die ver�nderten Dateien mit einem auff�lligen Vermerk
-versehen, der auf die von Ihnen vorgenommene Modifizierung und
-das Datum jeder �nderung hinweist.
-
-@item
-Sie m�ssen daf�r sorgen, dass jede von Ihnen verbreitete oder
-ver�ffentlichte Arbeit, die ganz oder teilweise von dem Programm
-oder Teilen davon abgeleitet ist, Dritten gegen�ber als Ganzes
-unter den Bedingungen dieser Lizenz ohne Lizenzgeb�hren zur
-Verf�gung gestellt wird.
-
-@item
-Wenn das ver�nderte Programm normalerweise bei der Ausf�hrung
-interaktiv Kommandos einliest, m�ssen Sie daf�r sorgen, dass es,
-wenn es auf dem �blichsten Wege f�r solche interaktive Nutzung
-gestartet wird, eine Meldung ausgibt oder ausdruckt, die einen
-geeigneten Copyright-Vermerk enth�lt sowie einen Hinweis, dass es
-keine Gew�hrleistung gibt (oder anderenfalls, dass Sie Garantie
-leisten), und dass die Benutzer das Programm unter diesen
-Bedingungen weiter verbreiten d�rfen. Auch muss der Benutzer darauf
-hingewiesen werden, wie er eine Kopie dieser Lizenz ansehen kann.
-(Ausnahme: Wenn das Programm selbst interaktiv arbeitet, aber
-normalerweise keine derartige Meldung ausgibt, muss Ihr auf dem
-Programm basierendes Werk auch keine solche Meldung ausgeben).
-@end enumerate
-
-Diese Anforderungen betreffen das ver�nderte Werk als Ganzes.
-Wenn identifizierbare Abschnitte des Werkes nicht von dem
-Programm abgeleitet sind und vern�nftigerweise selbst als
-unabh�ngige und eigenst�ndige Werke betrachtet werden k�nnen, dann
-erstrecken sich diese Lizenz und Ihre Bedingungen nicht auf
-diese Abschnitte, wenn sie als eigenst�ndige Werke verbreitet
-werden. Wenn Sie jedoch dieselben Abschnitte als Teil eines
-Ganzen verbreiten, dass ein auf dem Programm basierendes Werk
-darstellt, dann muss die Verbreitung des Ganzen nach den
-Bedingungen dieser Lizenz erfolgen, deren Bedingungen f�r
-weitere Lizenznehmer somit auf die Gesamtheit ausgedehnt werden
-- und damit auf jeden einzelnen Teil, unabh�ngig vom jeweiligen Autor.
-
-Somit ist es nicht die Absicht dieses Abschnittes, Rechte f�r
-Werke in Anspruch zu nehmen oder zu beschneiden, die komplett
-von Ihnen geschrieben wurden; vielmehr ist es die Absicht,
-die Rechte zur Kontrolle der Verbreitung von Werken, die auf
-dem Programm basieren oder unter seiner auszugsweisen
-Verwendung zusammengestellt worden sind, auszu�ben.
-
-Ferner bringt ein einfaches Zusammenstellen eines anderen Werkes,
-das nicht auf dem Programm basiert, zusammen mit dem Programm
-oder einem auf dem Programm basierenden Werk auf ein- und
-demselben Speicher- oder Vertriebsmedium das andere Werk nicht in
-den Anwendungsbereich dieser Lizenz.
-
-@item
-Sie d�rfen das Programm (oder ein darauf basierendes Werk gem��
-Paragraph 2) als Objectcode oder in ausf�hrbarer Form unter den
-Bedingungen von Paragraph 1 und 2 vervielf�ltigen und verbreiten
-- vorausgesetzt, dass Sie au�erdem eine der folgenden Leistungen
-erbringen:
-
-@enumerate a
-@item
-Liefern Sie das Programm zusammen mit dem vollst�ndigen
-zugeh�rigen maschinenlesbaren Quelltext auf einem f�r den
-Datenaustausch �blichen Medium aus, wobei die Verteilung unter den
-Bedingungen der Paragraphen 1 und 2 erfolgen mu�. Oder:
-
-@item
-Liefern Sie das Programm zusammen mit einem mindestens drei
-Jahre lang g�ltigen schriftlichen Angebot aus, jedem Dritten
-eine vollst�ndige maschinenlesbare Kopie des Quelltextes zur
-Verf�gung zu stellen - zu nicht h�heren Kosten als denen, die
-durch den physikalischen Kopiervorgang anfallen -, wobei der
-Quelltext unter den Bedingungen der Paragraphen 1 und 2 auf
-einem f�r den Datenaustausch �blichen Medium weitergegeben
-wird. Oder:
-
-@item
-Liefern Sie das Programm zusammen mit dem schriftlichen An-
-gebot der Zurverf�gungstellung des Quelltextes aus, das Sie
-selbst erhalten haben. (Diese Alternative ist nur f�r
-nicht-kommerzielle Verbreitung zul�ssig und nur, wenn Sie
-das Programm als Objectcode oder in ausf�hrbarer Form mit
-einem entsprechenden Angebot gem�� Absatz b erhalten haben.)
-@end enumerate
-
-Unter dem Quelltext eines Werkes wird diejenige Form des Werkes
-verstanden, die f�r Bearbeitungen vorzugsweise verwendet wird.
-F�r ein ausf�hrbares Programm bedeutet "der komplette Quell-
-text": Der Quelltext aller im Programm enthaltenen Module ein-
-schlie�lich aller zugeh�rigen Modulschnittstellen-Definitions-
-dateien sowie der zur Compilation und Installation verwendeten
-Skripte. Als besondere Ausnahme jedoch braucht der verteilte
-Quelltext nichts von dem zu enthalten, was �blicherweise
-(entweder als Quelltext oder in bin�rer Form) zusammen mit den
-Hauptkomponenten des Betriebssystems (Kernel, Compiler usw.)
-geliefert wird, unter dem das Programm l�uft - es sei denn,
-diese Komponente selbst geh�rt zum ausf�hrbaren Programm.
-
-Wenn die Verbreitung eines ausf�hrbaren Programms oder des
-Objectcodes dadurch erfolgt, dass der Kopierzugriff auf eine
-daf�r vorgesehene Stelle gew�hrt wird, so gilt die Gew�hrung
-eines gleichwertigen Zugriffs auf den Quelltext als Verbreitung
-des Quelltextes, auch wenn Dritte nicht dazu gezwungen sind,
-den Quelltext zusammen mit dem Objectcode zu kopieren.
-
-@item
-Sie d�rfen das Programm nicht vervielf�ltigen, ver�ndern, weiter
-lizenzieren oder verbreiten, sofern es nicht durch diese Lizenz
-ausdr�cklich gestattet ist. Jeder anderweitige Versuch der
-Vervielf�ltigung, Modifizierung, Weiterlizenzierung und Verbreitung
-ist nichtig und beendet automatisch Ihre Rechte unter dieser
-Lizenz. Jedoch werden die Lizenzen Dritter, die von Ihnen Kopien
-oder Rechte unter dieser Lizenz erhalten haben, nicht beendet,
-solange diese die Lizenz voll anerkennen und befolgen.
-
-@item
-Sie sind nicht verpflichtet, diese Lizenz anzunehmen, da Sie sie
-nicht unterzeichnet haben. Jedoch gibt Ihnen nichts anderes die
-Erlaubnis, das Programm oder von ihm abgeleitete Werke zu
-ver�ndern oder zu verbreiten. Diese Handlungen sind gesetzlich
-verboten, wenn Sie diese Lizenz nicht anerkennen. Indem Sie das
-Programm (oder ein darauf basierendes Werk) ver�ndern oder
-verbreiten, erkl�ren Sie Ihr Einverst�ndnis mit dieser Lizenz und
-mit allen Ihren Bedingungen bez�glich der Vervielf�ltigung,
-Verbreitung und Ver�nderung des Programms oder eines darauf
-basierenden Werkes.
-
-@item
-Jedesmal, wenn Sie das Programm (oder ein auf dem Programm
-basierendes Werk) weitergeben, erh�lt der Empf�nger automatisch
-vom urspr�nglichen Lizenzgeber die Lizenz, das Programm
-entsprechend den hier festgelegten Bestimmungen zu vervielf�ltigen,
-zu verbreiten und zu ver�ndern. Sie d�rfen keine weiteren
-Einschr�nkungen der Durchsetzung der hierin zugestandenen Rechte
-des Empf�ngers vornehmen. Sie sind nicht daf�r verantwortlich,
-die Einhaltung dieser Lizenz durch Dritte durchzusetzen.
-
-@item
-Sollten Ihnen infolge eines Gerichtsurteils, des Vorwurfs einer
-Patentverletzung oder aus einem anderen Grunde (nicht auf Patent
-fragen begrenzt) Bedingungen (durch Gerichtsbeschlu�, Vergleich
-oder anderweitig) auferlegt werden, die den Bedingungen dieser
-Lizenz widersprechen, so befreien Sie diese Umst�nde nicht von
-den Bestimmungen dieser Lizenz. Wenn es Ihnen nicht m�glich ist,
-das Programm unter gleichzeitiger Beachtung der Bedingungen in
-dieser Lizenz und Ihrer anderweitigen Verpflichtungen zu ver-
-breiten, dann d�rfen Sie als Folge das Programm �berhaupt nicht
-verbreiten. Wenn zum Beispiel ein Patent nicht die geb�hrenfreie
-Weiterverbreitung des Programms durch diejenigen erlaubt, die das
-Programm direkt oder indirekt von Ihnen erhalten haben, dann
-besteht der einzige Weg, sowohl das Patentrecht als auch diese
-Lizenz zu befolgen, darin, ganz auf die Verbreitung des Programms
-zu verzichten.
-
-Sollte sich ein Teil dieses Paragraphen als ung�ltig oder unter
-bestimmten Umst�nden nicht durchsetzbar erweisen, so soll dieser
-Paragraph seinem Sinne nach angewandt werden; im �brigen soll
-dieser Paragraph als Ganzes gelten.
-
-Zweck dieses Paragraphen ist nicht, Sie dazu zu bringen,
-irgendwelche Patente oder andere Eigentumsanspr�che zu verletzen oder
-die G�ltigkeit solcher Anspr�che zu bestreiten; dieser Paragraph
-hat einzig den Zweck, die Integrit�t des Verbreitungssystems der
-freien Software zu sch�tzen, das durch die Praxis �ffentlicher
-Lizenzen verwirklicht wird. Viele Leute haben gro�z�gige Beitr�ge
-zu dem gro�en Angebot der mit diesem System verbreiteten Software
-im Vertrauen auf die konsistente Anwendung dieses Systems
-geleistet; es liegt am Autor/Geber, zu entscheiden, ob er die
-Software mittels irgendeines anderen Systems verbreiten will; ein
-Lizenznehmer hat auf diese Entscheidung keinen Einfluss.
-
-Dieser Paragraph ist dazu gedacht, deutlich klarzustellen, was als
-Konsequenz aus dem Rest dieser Lizenz betrachtet wird.
-
-@item
-Wenn die Verbreitung und/oder die Benutzung des Programms in be-
-stimmten Staaten entweder durch Patente oder durch urheberrechtlich
-gesch�tzte Schnittstellen eingeschr�nkt ist, kann der Urheberrechts-
-inhaber, der das Programm unter diese Lizenz gestellt hat, eine
-explizite geographische Beschr�nkung der Verbreitung angeben, in der
-diese Staaten ausgeschlossen werden, so dass die Verbreitung nur
-innerhalb und zwischen den Staaten erlaubt ist, die nicht ausge-
-schlossen sind. In einem solchen Fall beinhaltet diese Lizenz die
-Beschr�nkung, als w�re sie in diesem Text niedergeschrieben.
-
-@item
-Die Free Software Foundation kann von Zeit zu Zeit �berarbeitete
-und/oder neue Versionen der General Public License ver�ffentlichen.
-Solche neuen Versionen werden vom Grundprinzip her der gegenw�rtigen
-entsprechen, k�nnen aber im Detail abweichen, um neuen Problemen und
-Anforderungen gerecht zu werden.
-
-Jede Version dieser Lizenz hat eine eindeutige Versionsnummer.
-Wenn in einem Programm angegeben wird, dass es dieser Lizenz in einer
-bestimmten Versionsnummer oder "jeder sp�teren Version" ("any later
-version") unterliegt, so haben Sie die Wahl, entweder den Bestimmungen
-der genannten Version zu folgen oder denen jeder beliebigen sp�teren
-Version, die von der Free Software Foundation ver�ffentlicht wurde.
-Wenn das Programm keine Versionsnummer angibt, k�nnen Sie eine beliebige
-Version w�hlen, die je von der Free Software Foundation ver�ffentlicht
-wurde.
-
-@item
-Wenn Sie den Wunsch haben, Teile des Programms in anderen freien Programmen
-zu verwenden, deren Bedingungen f�r die Verbreitung anders sind, schreiben
-Sie an den Autor, um ihn um die Erlaubnis zu bitten. F�r Software, die unter
-dem Copyright der Free Software Foundation steht, schreiben Sie an die Free
-Software Foundation; wir machen zu diesem Zweck gelegentlich Ausnahmen.
-Unsere Entscheidung wird von den beiden Zielen geleitet werden, zum einen
-den freien Status aller von unserer freien Software abgeleiteten Werke zu
-erhalten und zum anderen das gemeinschaftliche Nutzen und Wiederverwenden
-von Software im allgemeinen zu f�rdern
-
-@iftex
-@heading Keine Gew�hrleistung
-@end iftex
-@ifinfo
-@center Keine Gew�hrleistung
-@end ifinfo
-
-@item
-Da das Programm ohne jegliche Kosten lizenziert wird, besteht keinerlei
-Gew�hrleistung f�r das Programm, soweit dies gesetzlich zul�ssig ist.
-Sofern nicht anderweitig schriftlich best�tigt, stellen die Copyright-Inhaber
-und/oder Dritte das Programm so zur Verf�gung, "wie es ist", ohne irgendeine
-Gew�hrleistung, weder ausdr�cklich noch implizit, einschlie�lich - aber nicht
-begrenzt auf - Marktreife oder Verwendbarkeit f�r einen bestimmten Zweck.
-Das volle Risiko bez�glich Qualit�t und Leistungsf�higkeit des Programms
-liegt bei Ihnen. Sollte sich das Programm als fehlerhaft herausstellen,
-liegen die Kosten f�r notwendigen Service, Reparatur oder Korrektur bei Ihnen.
-
-@item
-In keinem Fall, au�er wenn durch geltendes Recht gefordert oder schriftlich
-zugesichert, ist irgendein Copyright-Inhaber oder irgendein Dritter, der das
-Programm wie oben erlaubt modifiziert oder verbreitet hat, Ihnen gegen�ber
-f�r irgendwelche Sch�den haftbar, einschlie�lich jeglicher allgemeiner oder
-spezieller Sch�den, Sch�den durch Seiteneffekte (Nebenwirkungen) oder
-Folgesch�den, die aus der Benutzung des Programms oder der Unbenutzbarkeit des
-Programms folgen (einschlie�lich - aber nicht beschr�nkt auf - Datenverluste,
-fehlerhafte Verarbeitung von Daten, Verluste, die von Ihnen oder anderen
-getragen werden m�ssen oder dem Unverm�gen des Programms, mit irgendeinem
-anderen Programm zusammenzuarbeiten), selbst wenn ein Copyright-Inhaber
-oder Dritter �ber die M�glichkeit solcher Sch�den unterrichtet worden war.
-@end enumerate
-
-@iftex
-@heading Ende der Bedingungen
@end iftex
-@ifinfo
-@center Ende der Bedingungen
-@end ifinfo
-
-@page
-@appendixsec Anhang: Wie Sie diese Bedingungen auf Ihre neuen Programme anwendbar machen
-
-Wenn Sie ein neues Programm entwickeln und wollen, dass es von gr��tm�glichem
-Nutzen f�r die Allgemeinheit ist, dann erreichen Sie das am besten, indem
-Sie es zu freier Software machen, die jeder unter diesen Bestimmungen
-weiterverbreiten und ver�ndern kann.
-
-Um dies zu erreichen, f�gen Sie die folgenden Anmerkungen zu Ihrem Programm
-hinzu. Am sichersten ist es, sie an den Anfang einer jeden Quelldatei zu
-stellen, um den Gew�hrleistungsausschlu� m�glichst deutlich darzustellen;
-au�erdem sollte jede Datei mindestens eine "Copyright"-Zeile besitzen sowie
-einen kurzen Hinweis darauf, wo die vollst�ndige Lizenz gefunden werden kann.
-
-@smallexample
-@var{eine Zeile mit dem Programmnamen und einer kurzen Beschreibung}
-Copyright (C) @var{yyyy} @var{Name des Autors}
-
-This Programm ist free Software; you can redistribute it und / oder modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License oder
-(at your option) any later version.
-
-This Programm ist distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; ohne even the implied warranty of
-MERCHANTABILITY oder FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License f�r mehr details.
-
-You should have received a copy of the GNU General Public License
-along mit this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-@end smallexample
-
-Also add information on how to contact you von electronic und paper mail.
-
-@smallexample auf deutsch
-@var{eine Zeile mit dem Programmnamen und einer kurzen Beschreibung}
-Copyright (C) @var{yyyy} @var{Name des Autors}
-
- Dieses Programm ist freie Software. Sie k�nnen es unter
- den Bedingungen der GNU General Public License, wie von der
- Free Software Foundation herausgegeben, weitergeben und/oder
- modifizieren, entweder unter Version 2 der Lizenz oder (wenn
- Sie es w�nschen) jeder sp�teren Version.
-
- Die Ver�ffentlichung dieses Programms erfolgt in der
- Hoffnung, dass es Ihnen von Nutzen sein wird, aber OHNE JEDE
- GEW�HRLEISTUNG - sogar ohne die implizite Gew�hrleistung
- der MARKTREIFE oder der EIGNUNG F�R EINEN BESTIMMTEN ZWECK.
- Details finden Sie in der GNU General Public License.
-
- Sie sollten eine Kopie der GNU General Public License zusammen
- mit diesem Programm erhalten haben. Falls nicht, schreiben Sie
- an die Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
- MA 02139, USA.
-@end smallexample
-
-
-Wenn Ihr Programm interaktiv ist, sorgen Sie daf�r, dass es nach dem
-Start einen kurzen Vermerk ausgibt:
-
-@smallexample
-Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
-Gnomovision comes mit ABSOLUTELY NO WARRANTY; f�r details type `show w'.
-Das ist free Software und you are welcome to redistribute it
-under certain conditions; type `show c' f�r details.
-@end smallexample
-
-@smallexample auf deutsch
- Gnomovision Version 69, Copyright (C) 19[jj] [Name des Autors]
- F�r Gnomovision besteht KEINERLEI GARANTIE; geben Sie `show w'
- f�r Details ein. Gnomovision ist freie Software, die Sie unter
- bestimmten Bedingungen weitergeben d�rfen; geben Sie `show c'
- f�r Details ein.
-@end smallexample
-
-Die hypothetischen Kommandos `show w' und `show c' sollten die
-entsprechenden Teile der GNU-GPL anzeigen. Nat�rlich k�nnen die von
-Ihnen verwendeten Kommandos anders hei�en als `show w' und `show c';
-es k�nnten auch Mausklicks oder Men�punkte sein - was immer am besten
-in Ihr Programm passt.
-
-Soweit vorhanden, sollten Sie auch Ihren Arbeitgeber (wenn Sie als
-Programmierer arbeiten) oder Ihre Schule einen Copyright-Verzicht
-f�r das Programm unterschreiben lassen. Hier ein Beispiel;
-�ndern Sie bitte die Namen:
-
-@example
-Yoyodyne, Inc., herefrom disclaims all copyright interest in the program
-`Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-@var{signature of Ty Coon}, 1 April 1989
-Ty Coon, President of Vice
-@end example
-
-@example auf deutsch
-Die Yoyodyne GmbH erhebt keinerlei urheberrechtlichen Anspruch auf das
-Programm "Gnomovision" (einem Schrittmacher f�r Compiler),
-geschrieben von James Hacker.
-
-@var{Unterschrift von Ty Coon}, 1 April 1989
-Ty Coon, Vizepr�sident
-@end example
-
-Diese General Public License gestattet nicht die Einbindung des Programms
-in propriet�re Programme. Ist Ihr Programm eine Funktionsbibliothek, so
-kann es sinnvoller sein, das Linken propriet�rer Programme mit dieser
-Bibliothek zu gestatten. Wenn Sie dies tun wollen, sollten Sie die
-GNU Library General Public License anstelle dieser Lizenz verwenden.
-
-@display
-@c German FIX added @@ in e-mail addresses
-Erstellt im Auftrag der S.u.S.E. GmbH [suse@@suse.de]
-von Katja Lachmann �bersetzungen [na194@@fim.uni-erlangen.de],
-�berarbeitet von Peter Gerwinski [peter.gerwinski@@uni-essen.de] (31. Oktober 1996)
-
-Diese �bersetzung wird mit der Absicht angeboten, das Verst�ndnis der
-GNU General Public License (GNU-GPL) zu erleichtern. Es handelt sich jedoch
-nicht um eine offizielle oder im rechtlichen Sinne anerkannte �bersetzung.
-
-Die Free Software Foundation (FSF) ist nicht der Herausgeber dieser �bersetzung,
-und sie hat diese �bersetzung auch nicht als rechtskr�ftigen Ersatz f�r die
-Original-GNU-GPL anerkannt. Da die �bersetzung nicht sorgf�ltig von Anw�lten
-�berpr�ft wurde, k�nnen die �bersetzer nicht garantieren, dass die �bersetzung
-die rechtlichen Aussagen der GNU-GPL exakt wiedergibt. Wenn Sie sichergehen
-wollen, dass von Ihnen geplante Aktivit�ten im Sinne der GNU-GPL gestattet sind,
-halten Sie sich bitte an die englischsprachige Originalversion.
-
-Die Free Software Foundation m�chte Sie darum bitten, diese �bersetzung
-nicht als offizielle Lizenzbedingungen f�r von Ihnen geschriebene Programme
-zu verwenden. Bitte benutzen Sie hierf�r stattdessen die von der
-Free Software Foundation herausgegebene englischsprachige Originalversion.
-@end display
-
-@page
-
-
-
-
-@node LGPL license, Function Index, GPL license, Top
-@c German node LGPL-Lizenz
-@appendix GNU LESSER GENERAL PUBLIC LICENSE
-@cindex LGPL, Lesser General Public License
-@cindex LGPL, GNU Library General Public License
+@node Top, (dir), (dir), (dir)
-@center Version 2.1, Februar 1999
-
-@display
-Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc.
-59 Temple Place -- Suite 330, Boston, MA 02111-1307, USA
-
-Es ist jedermann gestattet, diese Lizenzurkunde zu vervielf�ltigen
-und unver�nderte Kopien zu verbreiten. �nderungen sind jedoch nicht erlaubt.
-
-[Dies ist die erste freigegebene Version der Lesser GPL.
-Sie ist als Nachfolgerin der GNU Library Public License zu betrachten und
-erhielt daher die Versionsnummer 2.1.]
-@end display
-
-Diese �bersetzung ist kein rechtskr�ftiger Ersatz f�r die
-englischsprachige Originalversion!
-
-@appendixsec Vorwort
-
-Die meisten Softwarelizenzen sind daraufhin entworfen worden, Ihnen die
-Freiheit zu nehmen, die Software weiterzugeben und zu ver�ndern.
-Im Gegensatz dazu sollen Ihnen die GNU General Public Licenses,
-die Allgemeinen �ffentlichen GNU-Lizenzen, ebendiese Freiheit des
-Weitergebens und Ver�nderns garantieren und somit sicherstellen, dass diese
-Software f�r alle Benutzer frei ist.
-
-Diese Lizenz, die Kleine Allgemeine �ffentliche Lizenz
-(Lesser General Public License), gilt f�r einige besonders bezeichnete
-Software-Pakete - typischerweise Programmbibliotheken - von der
-Free Software Foundation und anderen Autoren, die beschlie�en,
-diese Lizenz zu verwenden. Auch Sie k�nnen sie verwenden; wir empfehlen
-aber, vorher gr�ndlich dar�ber nachzudenken, ob diese Lizenz (LGPL)
-oder aber die gew�hnliche Allgemeine �ffentliche Lizenz (GPL) die
-bessere Strategie zur Anwendung im jeweiligen speziellen Fall ist.
-Dabei bieten Ihnen die untenstehenden Erl�uterungen eine Grundlage
-f�r Ihre Entscheidung.
-
-Die Bezeichnung ,,freie`` Software bezieht sich auf Freiheit der Nutzung,
-nicht auf den Preis. Unsere Allgemeinen �ffentlichen Lizenzen sollen
-sicherstellen, dass Sie die Freiheit haben, Kopien freier Software zu
-verbreiten (und etwas f�r diesen Service zu berechnen, wenn Sie m�chten),
-dass Sie die Software im Quelltext erhalten oder den Quelltext auf Wunsch
-bekommen k�nnen, dass Sie die Software �ndern oder Teile davon in neuen
-freien Programmen verwenden d�rfen, und dass Sie dar�ber informiert sind,
-dass Sie dies alles tun d�rfen.
-
-Um Ihre Rechte zu sch�tzen, m�ssen wir Einschr�nkungen machen, die es jedem,
-der die Software weitergibt, verbieten, Ihnen diese Rechte zu verweigern
-oder Sie zum Verzicht auf diese Rechte aufzufordern. Aus diesen
-Einschr�nkungen ergeben sich bestimmte Verantwortlichkeiten f�r Sie, wenn Sie
-Kopien der Bibliothek verbreiten oder sie ver�ndern.
-
-Beispielsweise m�ssen Sie den Empf�ngern alle Rechte gew�hren, die wir Ihnen
-einger�umt haben, wenn Sie - kostenlos oder gegen Bezahlung - Kopien der
-Bibliothek verbreiten. Sie m�ssen sicherstellen, dass auch die Empf�nger
-den Quelltext erhalten bzw. erhalten k�nnen. Wenn Sie einen anderen Code
-mit der Bibliothek linken, m�ssen Sie den Empf�ngern die vollst�ndigen
-Objekt-Dateien zukommen lassen, so dass sie selbst diesen Code mit der
-Bibliothek neu linken k�nnen, auch nachdem sie Ver�nderungen an der
-Bibliothek vorgenommen und sie neu compiliert haben. Und Sie m�ssen ihnen
-diese Bedingungen zeigen, damit sie Ihre Rechte kennen.
-
-Wir sch�tzen Ihre Rechte in zwei Schritten: (1) Wir stellen die Bibliothek
-unter ein Urheberrecht (Copyright), und (2) wir bieten Ihnen diese Lizenz
-an, die Ihnen das Recht gibt, die Bibliothek zu vervielf�ltigen, zu
-verbreiten und/oder zu ver�ndern.
-
-Um jeden, der die Software weitergibt, zu sch�tzen, wollen wir dar�ber
-hinaus vollkommen klarstellen, dass f�r diese freie Bibliothek keinerlei
-Garantie besteht. Auch sollten, falls die Software von jemand anderem
-modifiziert und weitergegeben wird, die Empf�nger wissen, dass sie nicht
-das Original erhalten haben, damit irgendwelche von anderen verursachte
-Probleme nicht den Ruf des urspr�nglichen Autors sch�digen.
-
-Schlie�lich und endlich stellen Software-Patente f�r die Existenz jedes
-freien Programms eine st�ndige Bedrohung dar. Wir m�chten sicherstellen,
-dass keine Firma den Benutzern eines freien Programms Einschr�nkungen
-auferlegen kann, indem sie von einem Patentinhaber eine die freie Nutzung
-einschr�nkende Lizenz erwirbt. Deshalb bestehen wir darauf, dass jegliche
-f�r eine Version der Bibliothek erworbene Patentlizenz mit der in dieser
-Lizenz (also der LGPL) im einzelnen angegebenen Nutzungsfreiheit voll
-vereinbar sein mu�.
-
-Die meiste GNU-Software einschlie�lich einiger Bibliotheken f�llt unter
-die gew�hnliche Allgemeine �ffentliche GNU-Lizenz (GNU-GPL).
-Die vorliegende Lizenz, also die GNU-LGPL, gilt f�r gewisse n�her
-bezeichnete Bibliotheken. Sie unterscheidet sich wesentlich von der
-gew�hnlichen Allgemeinen �ffentlichen Lizenz (GNU-GPL). Wir benutzen
-diese Lizenz f�r gewisse Bibliotheken, um das Linken (d.h. die Verkn�pfung
-von Bibliotheken und anderen Programmteilen zu einem lauff�higen
-Programm - Anmerkung der �bersetzer) von Programmen, die nicht frei
-sind, mit diesen Bibliotheken zu gestatten.
-
-Wenn ein Programm mit einer Bibliothek gelinkt wurde, sei es nun statisch
-oder dynamisch, so ist die Kombination der beiden, rechtlich gesehen,
-ein ,,kombiniertes Datenwerk``, also eine abgeleitete Version der
-Orginal-Bibliothek. Die gew�hnliche GPL erlaubt ein solches Linken nur
-dann, wenn die ganze Kombination die Kriterien f�r freie Software erf�llt.
-Die LGPL erlaubt dagegen weniger strenge Kriterien f�r das Linken von
-irgendeiner anderen Software mit der Bibliothek.
-
-Wir nennen diese Lizenz die "Kleine" Allgemeine �ffentliche Lizenz
-@dfn{Lesser} General Public License weil sie weniger @emph{Less} dazu beitr�gt,
-die Freiheit des Benutzers zu sch�tzen, als die gew�hnliche Allgemeine
-�ffentliche Lizenz (GPL). Sie verschafft auch anderen Entwicklern freier
-Software ein "Weniger" an Vorteil gegen�ber konkurrierenden nichtfreien Programmen.
-Diese Nachteile sind ein Grund daf�r, dass wir die gew�hnliche GPL f�r viele
-Bibliotheken benutzen. Die "kleine" Lizenz (LGPL) bietet aber unter bestimmten
-besonderen Umst�nden doch Vorteile.
-
-So kann, wenn auch nur bei seltenen Gelegenheiten, eine besondere Notwendigkeit
-bestehen, einen Anreiz zur m�glichst weitgehenden Benutzung einer bestimmten
-Bibliothek zu schaffen, so dass diese dann ein De-facto-Standard wird. Um dies
-zu erreichen, m�ssen nichtfreie Programme die Bibliothek benutzen d�rfen.
-Ein h�ufigerer Fall ist der, dass eine freie Bibliothek dasselbe leistet wie
-weithin benutzte nichtfreie Bibliotheken. In diesem Falle bringt es wenig
-Nutzen, die freie Bibliothek allein auf freie Software zu beschr�nken, und
-dann benutzen wir eben die LGPL.
-
-In anderen F�llen erm�glicht die Erlaubnis zur Benutzung einer speziellen
-Bibliothek in nichtfreien Programmen viel mehr Leuten, eine umfangreiche
-Sammlung freier Software zu nutzen. So erm�glicht z.B. die Erlaubnis zur
-Benutzung der GNU-C-Bibliothek in nichtfreien Programmen einer viel gr��eren
-Zahl von Leuten, das ganze GNU-Betriebssystem ebenso wie seine Variante, das
-Betriebssystem GNU/Linux, zu benutzen.
-
-Obwohl die LGPL die Freiheit des Benutzers weniger sch�tzt, stellt sie doch
-sicher, dass der Benutzer eines Programms, das mit der Bibliothek gelinkt wurde,
-die Freiheit und die erforderlichen Mittel hat, das Programm unter Benutzung
-einer abge�nderten Version der Bibliothek zu betreiben.
-
-Die genauen Bedingungen f�r das Kopieren, Weitergeben und Ab�ndern finden Sie
-im nachstehenden Kapitel. Achten Sie genau auf den Unterschied zwischen
-"work Basiert auf the library", d.h. "Datenwerk, das auf der Bibliothek basiert"
-und "work that uses the library" d.h. "Datenwerk, das die Bibliothek benutzt".
-Ersteres enth�lt Code, der von der Bibliothek abgeleitet ist, w�hrend letzteres
-lediglich mit der Bibliothek kombiniert werden mu�, um betriebsf�hig zu sein.
-
-@iftex
-@appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end iftex
@ifinfo
-@center GNU LESSER GENERAL PUBLIC LICENSE
-@center Bedingungen f�r die Vervielf�ltigung, Verbreitung und Bearbeitung
-
-@end ifinfo
-
-@enumerate 0
-@item
-Diese Lizenz gilt f�r jedes Programm und jedes andere Datenwerk, in dem
-ein entsprechender Vermerk des Copyright-Inhabers oder eines anderen dazu
-Befugten darauf hinweist, dass das Datenwerk unter den Bestimmungen dieser
-Lesser General Public License (im weiteren auch als "diese Lizenz"
-bezeichnet) verbreitet werden darf. Jeder Lizenznehmer wird hierin
-einfach als "Sie" angesprochen.
-
-Eine "Bibliothek" bedeutet eine Zusammenstellung von Software-Funktionen
-und/oder Daten, die so vorbereitet ist, dass sie sich bequem mit
-Anwendungsprogrammen (welche einige dieser Funktionen und Daten benutzen) zum Bilden
-von ausf�hrbaren Programmen linken (d.h. verbinden, kombinieren) l��t.
-
-Der Begriff "Bibliothek" bezieht sich im weiteren immer nur auf solche
-Software-Bibliotheken und solche Datenwerke, die unter diesen Bedingungen
-der Lesser-GPL-Lizenz verbreitet worden sind. Ein "auf der Bibliothek
-basierendes Datenwerk" bezeichnet die betreffende Bibliothek selbst
-sowie jegliche davon abgeleitete Bearbeitung im urheberrechtlichen Sinne,
-also ein Datenwerk, welches die Bibliothek oder einen Teil davon, sei
-es unver�ndert oder ver�ndert und/oder direkt in eine andere Sprache
-�bersetzt, enth�lt. (Im folgenden wird die �bersetzung ohne
-Einschr�nkung als "Bearbeitung" eingestuft.)
-
-Unter dem "Quelltext" eines Datenwerks ist seine f�r das Vornehmen
-von Ver�nderungen bevorzugte Form zu verstehen. F�r eine Bibliothek
-bedeutet "vollst�ndiger Quelltext" den gesamten Quelltext f�r alle in
-ihr enthaltenen Bestandteile, f�r jegliche zu ihr geh�renden Dateien
-zur Definition von Schnittstellen und schlie�lich auch f�r die Skripte,
-die zur Steuerung der Compilation und Installation der Bibliothek
-benutzt werden.
-
-Andere Handlungen als Vervielf�ltigung, Verbreitung und Bearbeitung
-werden von dieser Lizenz nicht ber�hrt; sie fallen nicht in Ihren
-Anwendungsbereich. Das Ausf�hren eines Programms unter Benutzung der
-Bibliothek wird nicht eingeschr�nkt, und die Ausgaben des Programms
-unterliegen dieser Lizenz nur dann, wenn der Inhalt ein auf der
-Bibliothek basierendes Datenwerk darstellt (unabh�ngig davon, dass die
-Bibliothek in einem Werkzeug zum Schreiben dieses Programms benutzt
-wurde). Ob dies zutrifft, h�ngt davon ab, was die Bibliothek bewirkt
-und was das Programm, das die Bibliothek nutzt, bewirkt.
-
-@item
-Sie d�rfen auf beliebigen Medien unver�nderte Kopien des vollst�ndigen
-Quelltextes des Programms so, wie sie ihn erhalten haben, anfertigen
-und verbreiten. Voraussetzung hierf�r ist, dass Sie mit jeder Kopie
-deutlich erkennbar und in angemessener Form einen entsprechenden
-Copyright-Vermerk sowie einen Haftungsausschluss ver�ffentlichen, alle
-Vermerke, die sich auf diese Lizenz und das Fehlen einer Garantie
-beziehen, unver�ndert lassen und zusammen mit der Bibliothek jeweils
-eine Kopie dieser Lizenz weitergeben.
-
-Sie d�rfen f�r den eigentlichen Kopier- und Versandvorgang eine Geb�hr
-verlangen. Wenn Sie es w�nschen, d�rfen Sie auch gegen Entgelt eine
-Garantie anbieten.
-
-@item
-Sie d�rfen Ihre Kopie(n) der Bibliothek oder irgendeines Teils davon
-ver�ndern, wodurch ein auf der Bibliothek basierendes Datenwerk
-entsteht, und Sie d�rfen derartige Bearbeitungen unter den Bestimmungen
-von Paragraph 1 vervielf�ltigen und verbreiten, vorausgesetzt, dass
-zus�tzlich alle im folgenden genannten Bedingungen erf�llt werden:
-
-@enumerate a
-@item
-Das Bearbeitungsergebnis muss selbst wieder eine Software-Bibliothek sein.
-
-@item
-Sie m�ssen die ver�nderten Dateien mit einem auff�lligen Vermerk
-versehen, der auf die von Ihnen vorgenommene Modifizierung der
-Dateien hinweist und das Datum jeder �nderung angibt.
-
-@item
-Sie m�ssen daf�r sorgen, dass das Datenwerk als Ganzes Dritten unter
-den Bedingungen dieser Lizenz ohne Lizenzgeb�hren zur Verf�gung
-gestellt wird.
-
-@item
-Wenn sich eine Funktionseinheit der bearbeiteten Bibliothek auf eine
-Funktion oder Datentabelle st�tzt, die von einem die Funktionseinheit
-nutzenden Anwendungsprogramm bereitgestellt werden mu�, ohne dass sie
-als Argument �bergeben werden mu�, wenn die Funktionseinheit angesprochen
-wird, dann m�ssen Sie sich nach bestem Wissen und Gewissen bem�hen,
-sicherzustellen, dass die betreffende Funktionseinheit auch dann noch
-funktioniert, wenn die Anwendung eine solche Funktion oder Datentabelle
-nicht bietet, und dass sie den sinnvoll bleibenden Teil Ihres
-Bestimmungszwecks noch ausf�hrt.
-
-(So hat z.B. eine Funktion zum Berechnen von Quadratwurzeln einen von
-der Anwendung unabh�ngigen genau definierten Zweck. Deshalb verlangt
-�2 Absatz d, dass jede von der Anwendung bereitgestellte Funktion oder
-von dieser Funktion benutzte Tabelle optional sein mu�: Auch wenn die
-Anwendung sie nicht bereitstellt, muss die Quadratwurzelfunktion trotzdem
-noch Quadratwurzeln berechnen).
-@end enumerate
-
-Diese Anforderungen gelten f�r das bearbeitete Datenwerk als Ganzes.
-Wenn identifizierbare Teile davon nicht von der Bibliothek stammen und
-vern�nftigerweise als unabh�ngige und gesonderte Datenwerke f�r sich selbst
-zu betrachten sind, dann gelten diese Lizenz und Ihre Bedingungen nicht
-f�r die betreffenden Teile, wenn Sie diese als gesonderte Datenwerke
-weitergeben. Wenn Sie jedoch dieselben Teile als Teil eines Ganzen
-weitergeben, dass ein auf der Bibliothek basierendes Datenwerk darstellt,
-dann muss die Weitergabe dieses Ganzen nach den Bedingungen dieser Lizenz
-erfolgen, deren Bedingungen f�r weitere Lizenznehmer somit auf das
-gesamte Ganze ausgedehnt werden - und somit auf jeden einzelnen Teil,
-unabh�ngig vom jeweiligen Autor.
-
-Somit ist es nicht die Absicht dieses Abschnittes, Rechte f�r Datenwerke
-in Anspruch zu nehmen oder Ihnen Rechte f�r Datenwerke streitig zu
-machen, die komplett von Ihnen geschrieben wurden; vielmehr ist es die
-Absicht, die Rechte zur Kontrolle der Verbreitung von Datenwerken, die
-auf der Bibliothek basieren oder unter Ihrer auszugsweisen Verwendung
-zusammengestellt worden sind, auszu�ben.
+This is an empty placeholder file for the MySQL manual.
-Ferner bringt auch dass einfache Zusammenlegen eines anderen Datenwerkes,
-das nicht auf der Bibliothek basiert, mit der Bibliothek oder mit
-einem auf der Bibliothek basierenden Datenwerk auf ein- und demselben
-Speicher- oder Vertriebsmedium dieses andere Datenwerk nicht in den
-Anwendungsbereich dieser Lizenz.
+The MySQL manual is now maintained in a separate BitKeeper source tree!
+Please see @url{http://www.mysql.com/doc/en/Installing_source_tree.html}
+for more info on how to work with BitKeeper.
-@item
-Sie k�nnen sich f�r die Anwendung der Bedingungen der gew�hnlichen
-Allgemeinen �ffentlichen GNU-Lizenz (GNU-GPL) statt dieser Lizenz
-auf eine gegebene Kopie der Bibliothek entscheiden. Um dies zu tun,
-m�ssen Sie alle Eintragungen, die sich auf diese Lizenz beziehen,
-�ndern, so dass sie nun f�r die gew�hnliche GNU-GPL, Version 2,
-statt f�r diese Lizenz (LGPL) gelten. (Wenn eine neuere Version
-als Version 2 der gew�hnlichen GNU-GPL erschienen ist, k�nnen Sie
-diese angeben, wenn Sie das w�nschen.) Nehmen Sie keine anderen
-Ver�nderungen in diesen Eintragungen vor.
+Please do not attempt to edit this file to add NEWS entries or to add
+documentation! Use the one in the @code{mysqldoc} BK tree instead.
-Wenn diese Ver�nderung in einer gegebenen Kopie einmal vorgenommen
-ist, dann ist sie f�r diese Kopie nicht mehr zur�cknehmbar, und
-somit gilt dann die gew�hnliche GNU-GPL f�r alle nachfolgenden Kopien
-und abgeleiteten Datenwerke, die von dieser Kopie gemacht worden sind.
+This file will be replaced with the current @code{manual.de.texi} when building
+the official source distribution.
-Diese Option ist n�tzlich, wenn Sie einen Teil des Codes der Bibliothek
-in ein Programm kopieren wollen, das keine Bibliothek ist.
-
-@item
-Sie k�nnen die Bibliothek (oder einen Teil oder eine Ableitung von ihr,
-gem�� Paragraph 2) in Objektcode-Form oder in ausf�hrbarer Form unter
-den Bedingungen der obigen Paragraphen 1 und 2 kopieren und weitergeben,
-sofern Sie den vollst�ndigen entsprechenden maschinenlesbaren Quelltext
-beif�gen, der unter den Bedingungen der obigen Paragraphen 1 und 2
-auf einem Medium weitergegeben werden mu�, das �blicherweise zum
-Austausch von Software benutzt wird.
-
-Wenn die Weitergabe von Objektcode durch das Angebot eines Zugangs zum
-Kopienabruf von einem angegebenen Ort erfolgt, dann erf�llt das Angebot
-eines gleichwertigen Zugangs zum Kopieren des Quelltextes von demselben
-Ort die Anforderung, auch den Quelltext weiterzugeben, obwohl Dritte
-nicht verplichtet sind, den Quelltext zusammen mit dem Objektcode zu
-kopieren.
-
-@item
-Ein Programm, das nichts von irgendeinem Teil der Bibliothek
-Abgeleitetes enth�lt, aber darauf ausgelegt ist, mit der Bibliothek
-zusammenzuarbeiten, indem es mit ihr compiliert oder gelinkt wird,
-nennt man ein "Datenwerk, das die Bibliothek nutzt". Solch ein
-Datenwerk, f�r sich allein genommen, ist kein von der Bibliothek abgelei
-tetes Datenwerk und f�llt daher nicht unter diese Lizenz.
-
-Wird jedoch ein "Datenwerk, das die Bibliothek nutzt", mit der
-Bibliothek gelinkt, so entsteht ein ausf�hrbares Programm, dass ein
-von der Bibliothek abgeleitetes Datenwerk (weil es Teile der Bibliothek
-enth�lt) und kein "Datenwerk, das die Bibliothek nutzt" ist.
-Das ausf�hrbare Programm f�llt daher unter diese Lizenz.
-Paragraph 6 gibt die Bedingungen f�r die Weitergabe solcher
-ausf�hrbarer Programme an.
-
-Wenn ein "Datenwerk, das die Bibliothek nutzt", Material aus einer
-Header-Datei verwendet, die Teil der Bibliothek ist, dann kann der
-Objektcode f�r das Datenwerk ein von der Bibliothek abgeleitetes
-Datenwerk sein, selbst wenn der Quelltext dies nicht ist. Ob dies
-jeweils zutrifft, ist besonders dann von Bedeutung, wenn das Datenwerk
-ohne die Bibliothek gelinkt werden kann oder wenn das Datenwerk selbst
-eine Bibliothek ist. Die genaue Grenze, von der an dies zutrifft,
-ist rechtlich nicht genau definiert.
-
-Wenn solch eine Objektdatei nur numerische Parameter, Daten-
-struktur-Layouts und Zugriffsfunktionen sowie kleine Makros und kleine
-Inlinefunktionen (zehn Zeilen lang oder k�rzer) benutzt, dann
-unterliegt die Benutzung der Objektdatei keinen Beschr�nkungen, ohne
-R�cksicht darauf, ob es rechtlich gesehen ein abgeleitetes Datenwerk ist.
-(Ausf�hrbare Programme, welche diesen Objektcode plus Teile der
-Bibliothek enthalten, fallen jedoch weiterhin unter die Bestimmungen
-von Paragraph 6).
-
-Ansonsten k�nnen Sie, wenn das Datenwerk ein von der Bibliothek
-abgeleitetes ist, den Objektcode f�r das Datenwerk unter den Bedingungen
-von Paragraph 6 weitergeben. Alle ausf�hrbaren Programme, welche
-dieses Datenwerk enthalten, fallen ebenfalls unter Paragraph 6,
-gleichg�ltig, ob sie direkt mit der Bibliothek selbst gelinkt sind
-oder nicht.
-
-@item
-Als Ausnahme von den Bestimmungen der vorstehenden f�nf Paragraphen
-d�rfen Sie auch ein "Datenwerk, das die Bibliothek nutzt", mit der
-Bibliothek kombinieren oder linken, um ein Datenwerk zu erzeugen,
-das Teile der Bibliothek enth�lt, und dieses unter Bedingungen Ihrer
-eigenen Wahl weitergeben, sofern diese Bedingungen Bearbeitungen
-f�r den eigenen Gebrauch des Empf�ngers und ein R�ckbilden
-("reverse engineering") zum Beheben von M�ngeln solcher Bearbeitungen
-gestatten.
-
-Sie m�ssen bei jeder Kopie des Datenwerks deutlich erkennbar angeben,
-dass die Bibliothek darin genutzt wird und dass die Bibliothek und Ihre
-Benutzung durch die Lizenz abgedeckt sind. Sie m�ssen eine Kopie
-dieser Lizenz mitgeben. Wenn das Datenwerk bei seiner Ausf�hrung
-Copyright-Vermerke anzeigt, m�ssen Sie den Copyright-Vermerk f�r
-die Bibliothek mit anzeigen lassen und dem Benutzer einen Hinweis
-geben, der ihn zu einer Kopie dieser Lizenz f�hrt. Ferner m�ssen Sie
-eines der nachfolgend genannten f�nf Dinge tun:
-
-@enumerate a
-@item
-Liefern Sie das Datenwerk zusammen mit dem vollst�ndigen zugeh�rigen
-maschinenlesbaren Quelltext der Bibliothek aus, und zwar
-einschlie�lich jeglicher in dem Datenwerk angewandter �nderungen (wobei
-dessen Weitergabe gem�� den Bedingungen der Paragraphen 1 und 2
-erfolgen mu�); und wenn das Datenwerk ein ausf�hrbares, mit der
-Bibliothek gelinktes Programm ist, dann liefern Sie es zusammen
-mit dem vollst�ndigen maschinenlesbaren "Datenwerk, das die
-Bibliothek nutzt, in Form von Objektcode und/oder Quelltext, so dass
-der Benutzer die Bibliothek ver�ndern und dann erneut linken kann,
-um ein ver�ndertes ausf�hrbares Programm zu erzeugen, das die
-ver�nderte Bibliothek enth�lt. (Es versteht sich, dass der Benutzer,
-der die Inhalte von Definitionsdateien in der ver�nderten Bibliothek
-ver�ndert, nicht notwendigerweise in der Lage sein wird, die Anwendung
-neu zu compilieren, um die ver�nderten Definitionen zu benutzen.)
-
-@item
-Benutzen Sie einen geeigneten ,,shared-library-Mechanismus`` zum
-Linken mit der Bibliothek. Geeignet ist ein solcher Mechanismus,
-der erstens w�hrend der Laufzeit eine im Computersystem des Benutzers
-bereits vorhandene Kopie der Bibliothek benutzt, anstatt
-Bibliotheksfunktionen in das ausf�hrbare Programm zu kopieren, und der zweitens
-auch mit einer ver�nderten Version der Bibliothek, wenn der Benutzer
-eine solche installiert, richtig funktioniert, solange die ver�nderte
-Version schnittstellenkompatibel mit der Version ist, mit der das
-Datenwerk erstellt wurde.
-
-@item
-Liefern Sie das Datenwerk zusammen mit einem mindestens drei Jahre
-lang g�ltigen schriftlichen Angebot, demselben Benutzer die oben in
-Paragraph 6, Absatz (a) genannten Materialien zu Kosten, welche die
-reinen Weitergabekosten nicht �bersteigen, zur Verf�gung zu stellen.
-
-@item
-Wenn die Weitergabe des Datenwerks dadurch erfolgt, dass die
-M�glichkeit des Abrufens einer Kopie von einem bestimmten Ort
-angeboten wird, bieten Sie gleichwertigen Zugang zum Kopieren der
-oben angegebenen Materialien von dem gleichen Ort an.
-
-@item
-Sie vergewissern sich, dass der Benutzer bereits eine Kopie dieser
-Materialien erhalten hat oder dass Sie diesem Benutzer bereits eine
-Kopie geschickt haben.
-@end enumerate
-
-F�r ein ausf�hrbares Programm muss die verlangte Form des
-"Datenwerks, das die Bibliothek nutzt" alle Daten und Hilfsprogramme
-mit einschlie�en, die man braucht, um daraus das ausf�hrbare Programm
-zu reproduzieren. Doch gilt eine spezielle Ausnahme: Die
-weiterzugebenden Materialien brauchen nicht alles das zu enthalten, was
-normalerweise (in Quelltext-Form oder in bin�rer Form) mit den
-Hauptbestandteilen (Compiler, Kern usw.) des Betriebssystems,
-auf denen das ausf�hrbare Programm l�uft, weitergegeben wird, es
-sei denn, das ausf�hrbare Programm geh�rt selbst zu diesem
-Hauptbestandteil.
-
-Es kann vorkommen, dass diese Anforderung im Widerspruch zu
-Lizenzbeschr�nkungen anderer, propriet�rer Bibliotheken steht, die
-normalerweise nicht zum Betriebssystem geh�ren. Ein solcher
-Widerspruch bedeutet, dass Sie nicht gleichzeitig jene propriet�ren
-Bibliotheken und die vorliegende Bibliothek zusammen in einem
-ausf�hrbaren Programm, das Sie weitergeben, verwenden d�rfen.
-
-@item
-Sie d�rfen Bibliotheks-Funktionseinheiten, die ein auf der Bibliothek
-basierendes Datenwerk darstellen, zusammen mit anderen, nicht unter
-diese Lizenz fallenden Funktionseinheiten in eine einzelne Bibliothek
-einbauen und eine solche kombinierte Bibliothek weitergeben,
-vorausgesetzt, dass die gesonderte Weitergabe des auf der Bibliothek
-basierenden Datenwerks einerseits und der anderen Funktionseinheiten
-andererseits ansonsten gestattet ist, und vorausgesetzt, dass Sie
-folgende zwei Dinge tun:
-
-@enumerate a
-@item
-Geben Sie zusammen mit der kombinierten Bibliothek auch eine Kopie
-desselben auf der Bibliothek basierenden Datenwerks mit, die nicht
-mit irgendwelchen anderen Funktionseinheiten kombiniert ist.
-Dieses Datenwerk muss unter den Bedingungen der obigen Paragraphen
-weitergegeben werden.
-
-@item
-Weisen Sie bei der kombinierten Bibliothek an prominenter Stelle
-auf die Tatsache hin, dass ein Teil davon ein auf der Bibliothek
-basierendes Datenwerk ist, und erkl�ren Sie, wo man die mitgegebene
-unkombinierte Form desselben Datenwerks finden kann.
-@end enumerate
-
-@item
-Sie d�rfen die Bibliothek nicht vervielf�ltigen, ver�ndern, weiter
-lizenzieren oder verbreiten oder mit ihr linken, sofern es nicht durch
-diese Lizenz ausdr�cklich gestattet ist. Jeder anderweitige Versuch
-der Vervielf�ltigung, Modifizierung, Weiterlizenzierung und
-Verbreitung sowie des Linkens mit der Bibliothek ist unzul�ssig und
-beendet automatisch Ihre Rechte unter dieser Lizenz. Doch werden
-die Lizenzen Dritter, die von Ihnen Kopien oder Rechte unter dieser
-Lizenz erhalten haben, nicht beendet, solange diese Dritten die Lizenz
-voll anerkennen und befolgen.
-
-@item
-Sie sind nicht verpflichtet, diese Lizenz anzunehmen, da Sie diese
-nicht unterzeichnet haben. Doch gibt Ihnen sonst nichts die Erlaubnis,
-die Bibliothek oder von ihr abgeleitete Datenwerke zu ver�ndern oder
-zu verbreiten. Diese Handlungen sind gesetzlich verboten, wenn Sie
-diese Lizenz nicht annehmen. Indem Sie die Bibliothek (oder ein darauf
-basierendes Datenwerk) ver�ndern oder verbreiten, erkl�ren Sie Ihr
-Einverst�ndnis mit dieser Lizenz, die Ihnen das erlaubt, mit allen
-Ihren Bedingungen bez�glich der Vervielf�ltigung, Verbreitung und
-Ver�nderung der Bibliothek oder eines darauf basierenden Datenwerks.
-
-@item
-Jedesmal, wenn Sie die Bibliothek (oder irgendein auf der Bibliothek
-basierendes Datenwerk) weitergeben, erh�lt der Empf�nger automatisch
-vom urspr�nglichen Lizenzgeber die Lizenz, die Bibliothek entsprechend
-den hier festgelegten Bestimmungen zu vervielf�ltigen, zu verbreiten
-und zu ver�ndern und mit ihr zu linken. Sie d�rfen keine weiteren
-Einschr�nkungen der Aus�bung der hierin zugestandenen Rechte des
-Empf�ngers vornehmen. Sie sind nicht daf�r verantwortlich, die
-Einhaltung dieser Lizenz durch Dritte durchzusetzen.
-
-@item
-Sollten Ihnen infolge eines Gerichtsurteils, des Vorwurfs einer
-Patentverletzung oder aus einem anderen Grunde (nicht auf
-Patentfragen begrenzt) Bedingungen (durch Gerichtsbeschluss,
-Vergleich oder anderweitig) auferlegt werden, die den Bedingungen
-dieser Lizenz widersprechen, so befreien diese Umst�nde Sie nicht
-von den Bestimmungen dieser Lizenz. Wenn es Ihnen nicht m�glich ist,
-die Bibliothek unter gleichzeitiger Beachtung der Bedingungen in
-dieser Lizenz und Ihrer anderweitigen Verpflichtungen zu verbreiten,
-dann d�rfen Sie als Folge davon die Bibliothek �berhaupt nicht
-verbreiten. Wenn zum Beispiel ein Patent nicht die geb�hrenfreie
-Weiterverbreitung der Bibliothek durch diejenigen erlaubt, welche
-die Bibliothek direkt oder indirekt von Ihnen erhalten haben, dann
-besteht der einzige Weg, sowohl dem Patentrecht als auch dieser
-Lizenz zu gen�gen, darin, ganz auf die Verbreitung der Bibliothek
-zu verzichten.
-
-Sollte sich ein Teil dieses Paragraphen als ung�ltig oder unter
-bestimmten Umst�nden nicht durchsetzbar erweisen, so soll dieser
-Paragraph seinem Sinne nach angewandt werden; im �brigen soll
-dieser Paragraph als Ganzes gelten.
-
-Zweck dieses Paragraphen ist nicht, Sie dazu zu bringen, irgendwelche
-Patente oder andere Eigentumsanspr�che zu verletzen oder die G�ltigkeit
-solcher Anspr�che zu bestreiten; dieser Paragraph hat vielmehr einzig
-den Zweck, die Integrit�t des Verbreitungssystems der freien Software
-zu sch�tzen, das durch die Praxis �ffentlicher Lizenzen verwirklicht
-wird. Viele Leute haben gro�z�gige Beitr�ge zu dem weitreichenden
-Angebot der durch dieses System verbreiteten Software im Vertrauen
-auf die konsistente Anwendung dieses Systems geleistet; es obliegt
-dem Autor bzw. Geber, zu entscheiden, ob er die Software mittels
-irgendeines anderen Systems verbreiten will; ein Lizenznehmer jedoch
-darf dar�ber nicht entscheiden.
-
-Dieser Paragraph ist dazu gedacht, deutlich klarzustellen, was als
-Konsequenz aus den �brigen Bestimmungen dieser Lizenz zu betrachten
-ist.
-
-@item
-Wenn die Verbreitung und/oder die Benutzung der Bibliothek in
-bestimmten Staaten entweder durch Patente oder durch urheberrechtlich
-gesch�tzte Schnittstellen eingeschr�nkt ist, kann der
-Urheberrechtsinhaber, der die Bibliothek unter diese Lizenz gestellt
-hat, eine explizite geographische Beschr�nkung der Verbreitung angeben,
-in der diese Staaten ausgeschlossen werden, so dass die Verbreitung nur
-innerhalb und zwischen den Staaten erlaubt ist, die nicht demgem��
-ausgeschlossen sind. In einem solchen Fall beinhaltet diese Lizenz
-die Beschr�nkung, als w�re sie in diesem Text niedergeschrieben.
-
-@item
-Die Free Software Foundation kann von Zeit zu Zeit �berarbeitete
-und/oder neue Versionen der Lesser General Public License
-ver�ffentlichen. Solche neuen Versionen werden vom Grundprinzip her
-der gegenw�rtigen entsprechen, k�nnen aber im Detail abweichen, um
-neuen Problemen und Anforderungen gerecht zu werden.
-
-Jede Version dieser Lizenz hat eine eindeutige Versionsnummer.
-Wenn in einem Programm angegeben wird, dass es dieser Lizenz in einer
-bestimmten Versionsnummer oder "jeder sp�teren Version" ("any later
-version") unterliegt, so haben Sie die Wahl, entweder den Bestimmungen
-der genannten Version zu folgen oder denen jeder beliebigen sp�teren
-Version, die von der Free Software Foundation ver�ffentlicht wurde.
-Wenn die Bibliothek keine Lizenz-Versionsnummer angibt, k�nnen Sie
-eine beliebige Version w�hlen, die jemals von der Free Software
-Foundation ver�ffentlicht wurde.
-
-@item
-Wenn Sie den Wunsch haben, Teile der Bibliothek in anderen
-freien Programmen zu verwenden, deren Bedingungen f�r die Verbreitung
-anders sind, schreiben Sie an den Autor der Bibliothek, um ihn um die
-Erlaubnis zu bitten. F�r Software, die unter dem Copyright der Free
-Software Foundation steht, schreiben Sie an die Free Software
-Foundation; wir machen zu diesem Zweck gelegentlich Ausnahmen.
-Unsere Entscheidung wird von den beiden Zielen geleitet werden,
-zum einen den freien Status aller von unserer freien Software
-abgeleiteten Datenwerke zu erhalten und zum anderen das
-gemeinschaftliche Nutzen und Wiederverwenden von Software im
-allgemeinen zu f�rdern.
-
-@iftex
-@heading Keine Gew�hrleistung
-@end iftex
-@ifinfo
-@center Keine Gew�hrleistung
+You can find a specific manual for any older version of MySQL
+in the binary or source distribution for that version.
@end ifinfo
-@item
-Da die Bibliothek ohne jegliche Geb�hren lizenziert wird, besteht
-keinerlei Gew�hrleistung f�r die Bibliothek, soweit dies gesetzlich
-zul�ssig ist. Sofern nicht anderweitig schriftlich best�tigt, stellen
-die Copyright-Inhaber und/oder Dritte die Bibliothek "so, wie sie ist"
-zur Verf�gung, ohne Gew�hrleistung irgendeiner Art, weder ausdr�cklich
-noch implizit. Dieser Garantieausschluss gilt auch - ohne darauf
-beschr�nkt zu sein - f�r Marktreife oder Verwendbarkeit f�r einen
-bestimmten Zweck. Das volle Risiko bez�glich Qualit�t und Leistungs-
-f�higkeit der Bibliothek liegt bei Ihnen. Sollte sich die Bibliothek
-als fehlerhaft herausstellen, liegen die Kosten f�r notwendigen
-Service, Reparatur oder Korrektur s�mtlich bei Ihnen.
-
-@item
-In keinem Fall, au�er wenn dies durch geltendes Recht gefordert
-wird oder schriftlich zugesichert wurde, ist irgendein
-Copyright-Inhaber oder irgendein Dritter, der die Bibliothek wie oben
-erlaubt modifiziert oder verbreitet hat, Ihnen gegen�ber f�r
-irgendwelche Sch�den haftbar. Dies gilt auch f�r jegliche allgemeine
-oder spezielle Sch�den, f�r Sch�den durch Nebenwirkungen oder
-Folgesch�den, die sich aus der Benutzung oder der Unbenutzbarkeit
-der Bibliothek ergeben (das gilt insbesondere - ohne darauf
-beschr�nkt zu sein - f�r Datenverluste, das Hineinbringen von
-Ungenauigkeiten in irgendwelche Daten, f�r Verluste, die Sie oder
-Dritte erlitten haben oder f�r ein Unverm�gen der Bibliothek,
-mit irgendeiner anderen Software zusammenzuarbeiten), und zwar
-auch dann, wenn ein Copyright-Inhaber oder ein Dritter �ber die
-M�glichkeit solcher Sch�den informiert worden ist.
-
-@end enumerate
-
-@iftex
-@heading Ende der Bedingungen
-@end iftex
-@ifinfo
-@center Ende der Bedingungen
-@end ifinfo
-
-@appendixsec Anhang: Wie Sie diese Bedingungen auf Ihre eigenen, neuen Bibliotheken anwenden k�nnen
-
-Wenn Sie eine neue Bibliothek entwickeln und w�nschen, dass sie
-von gr��tm�glichem Nutzen f�r die Allgemeinheit ist, dann empfehlen
-wir Ihnen, sie zu einer freien Software zu machen, die jedermann
-weiterverteilen und ver�ndern kann. Dies k�nnen sie tun, indem Sie
-eine Weiterverteilung unter den Bedingungen dieser Lizenz, also
-der Lesser GPL erlauben (oder - als Alternative - unter den Bedingungen
-der gew�hnlichen Allgemeinen �ffentlichen GNU-Lizenz, der GPL).
-
-Zur Anwendung dieser Bedingungen f�gen Sie zu der Bibliothek die
-unten angegebenen Vermerke hinzu. Es ist am sichersten, sie an
-den Start jeder Quelldatei anzuf�gen, um so am wirksamsten den
-Garantieausschlu� bekannt zu machen; zumindest aber sollte jede
-Datei die Copyright-Zeile und eine Angabe enthalten, wo die
-vollst�ndigen Vermerke zu finden sind.
-
-
-
-@smallexample
-@var{eine Zeile mit dem Namen der Bibliothek und einer kurzen
-Beschreibung Ihres Zwecks}
-Copyright (C) @var{yyyy} @var{Name des Autors}
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public License
-as published by the Free Software Foundation; either version 2.1
-of the License oder (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but ohne ANY WARRANTY; ohne even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-See the GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General
-Public License along with this library; if not, write to the
-
-Free Software Foundation, Inc.,
-59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Auf Deutsch:
-
-Bibliothek ist freie Software; Sie d�rfen sie unter den Bedingungen
-der GNU Lesser General Public License, wie von der Free Software
-Foundation ver�ffentlicht, weiterverteilen und/oder modifizieren;
-entweder gem�� Version 2.1 der Lizenz oder (nach Ihrer Option)
-jeder sp�teren Version.
-
-Diese Bibliothek wird in der Hoffnung weiterverbreitet, dass sie
-n�tzlich sein wird, jedoch OHNE IRGENDEINE GARANTIE, auch ohne
-die implizierte Garantie der MARKTREIFE oder der VERWENDBARKEIT
-F�R EINEN BESTIMMTEN ZWECK. Mehr Details finden Sie in der
-GNU Lesser General Public License.
-
-Sie sollten eine Kopie der GNU Lesser General Public License
-zusammen mit dieser Bibliothek erhalten haben; falls nicht,
-schreiben Sie an die
-Free Software Foundation, Inc.,
-59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-@end smallexample
-
-F�gen Sie auch einen kurzen Hinweis hinzu, wie Sie elektronisch
-und per Brief erreichbar sind.
-
-@smallexample
-Soweit vorhanden, sollten Sie auch Ihren Arbeitgeber
-(wenn Sie als Programmierer arbeiten) oder Ihre Schule einen
-Copyright-Verzicht f�r die Bibliothek unterschreiben lassen.
-Hier ein Beispiel. Die Namen m�ssen Sie nat�rlich �ndern.
-
-Yoyodyne, Inc., hereby disclaims all copyright interest
-in the library "Frob" (a library for tweaking knobs)
-written by James Random Hacker.
-
-
-Unterschrift von Ty Coon , 1 April 1990
-Ty Coon, President of Vice
-
-Auf Deutsch:
-
-DIe Yoyodyne GmbH erhebt keinen urheberechtlichen Anspruch
-auf die von James Random Hacker geschriebene Bibliothek "Frob"
-(eine Bibliothek f�r das Zwicken von Kn�pfen).
-
-
-Unterschrift von Ty Coon, 1. April 1990
-Ty Coon, Vizepr�sident
-@end smallexample
-
-Das war schon alles!
-
-
-
-@c German FIX this node entry and section header were missing!
-@c I made a guess as to what the German section title should be like ;-)
-@node Function Index, Concept Index, LGPL license, Top
-@c German node Function Index
-@unnumbered SQL Command, Typ und Funktion Index
-
-@printindex fn
-
-@page
-
-
-@node Concept Index, , Function Index, Top
-@c German node Concept Index
-@unnumbered Concept Index
-
-@printindex cp
-
-
-
-
-
@bye
diff --git a/Docs/world.sql b/Docs/world.sql
deleted file mode 100644
index f253819da2e..00000000000
--- a/Docs/world.sql
+++ /dev/null
@@ -1,5386 +0,0 @@
--- MySQL dump 8.19
---
--- Host: localhost Database: world
----------------------------------------------------------
--- Server version 4.0.1-alpha-Max
-
---
--- Table structure for table 'City'
---
-
-CREATE TABLE City (
- ID int(11) NOT NULL auto_increment,
- name char(35) NOT NULL default '',
- Country char(3) NOT NULL default '',
- District char(20) NOT NULL default '',
- Population int(11) NOT NULL default '0',
- PRIMARY KEY (ID)
-) TYPE=MyISAM;
-
-/*!40000 ALTER TABLE City DISABLE KEYS */;
-
---
--- Dumping data for table 'City'
---
-
-
-INSERT INTO City VALUES (1,'Kabul','AFG','Kabol',1780000);
-INSERT INTO City VALUES (2,'Qandahar','AFG','Qandahar',237500);
-INSERT INTO City VALUES (3,'Herat','AFG','Herat',186800);
-INSERT INTO City VALUES (4,'Mazar-e-Sharif','AFG','Balkh',127800);
-INSERT INTO City VALUES (5,'Amsterdam','NLD','Noord-Holland',731200);
-INSERT INTO City VALUES (6,'Rotterdam','NLD','Zuid-Holland',593321);
-INSERT INTO City VALUES (7,'Haag','NLD','Zuid-Holland',440900);
-INSERT INTO City VALUES (8,'Utrecht','NLD','Utrecht',234323);
-INSERT INTO City VALUES (9,'Eindhoven','NLD','Noord-Brabant',201843);
-INSERT INTO City VALUES (10,'Tilburg','NLD','Noord-Brabant',193238);
-INSERT INTO City VALUES (11,'Groningen','NLD','Groningen',172701);
-INSERT INTO City VALUES (12,'Breda','NLD','Noord-Brabant',160398);
-INSERT INTO City VALUES (13,'Apeldoorn','NLD','Gelderland',153491);
-INSERT INTO City VALUES (14,'Nijmegen','NLD','Gelderland',152463);
-INSERT INTO City VALUES (15,'Enschede','NLD','Overijssel',149544);
-INSERT INTO City VALUES (16,'Haarlem','NLD','Noord-Holland',148772);
-INSERT INTO City VALUES (17,'Almere','NLD','Flevoland',142465);
-INSERT INTO City VALUES (18,'Arnhem','NLD','Gelderland',138020);
-INSERT INTO City VALUES (19,'Zaanstad','NLD','Noord-Holland',135621);
-INSERT INTO City VALUES (20,'�s-Hertogenbosch','NLD','Noord-Brabant',129170);
-INSERT INTO City VALUES (21,'Amersfoort','NLD','Utrecht',126270);
-INSERT INTO City VALUES (22,'Maastricht','NLD','Limburg',122087);
-INSERT INTO City VALUES (23,'Dordrecht','NLD','Zuid-Holland',119811);
-INSERT INTO City VALUES (24,'Leiden','NLD','Zuid-Holland',117196);
-INSERT INTO City VALUES (25,'Haarlemmermeer','NLD','Noord-Holland',110722);
-INSERT INTO City VALUES (26,'Zoetermeer','NLD','Zuid-Holland',110214);
-INSERT INTO City VALUES (27,'Emmen','NLD','Drenthe',105853);
-INSERT INTO City VALUES (28,'Zwolle','NLD','Overijssel',105819);
-INSERT INTO City VALUES (29,'Ede','NLD','Gelderland',101574);
-INSERT INTO City VALUES (30,'Delft','NLD','Zuid-Holland',95268);
-INSERT INTO City VALUES (31,'Heerlen','NLD','Limburg',95052);
-INSERT INTO City VALUES (32,'Alkmaar','NLD','Noord-Holland',92713);
-INSERT INTO City VALUES (33,'Willemstad','ANT','Cura�ao',2345);
-INSERT INTO City VALUES (34,'Tirana','ALB','Tirana',270000);
-INSERT INTO City VALUES (35,'Alger','DZA','Alger',2168000);
-INSERT INTO City VALUES (36,'Oran','DZA','Oran',609823);
-INSERT INTO City VALUES (37,'Constantine','DZA','Constantine',443727);
-INSERT INTO City VALUES (38,'Annaba','DZA','Annaba',222518);
-INSERT INTO City VALUES (39,'Batna','DZA','Batna',183377);
-INSERT INTO City VALUES (40,'S�tif','DZA','S�tif',179055);
-INSERT INTO City VALUES (41,'Sidi Bel Abb�s','DZA','Sidi Bel Abb�s',153106);
-INSERT INTO City VALUES (42,'Skikda','DZA','Skikda',128747);
-INSERT INTO City VALUES (43,'Biskra','DZA','Biskra',128281);
-INSERT INTO City VALUES (44,'Blida (el-Boulaida)','DZA','Blida',127284);
-INSERT INTO City VALUES (45,'B�ja�a','DZA','B�ja�a',117162);
-INSERT INTO City VALUES (46,'Mostaganem','DZA','Mostaganem',115212);
-INSERT INTO City VALUES (47,'T�bessa','DZA','T�bessa',112007);
-INSERT INTO City VALUES (48,'Tlemcen (Tilimsen)','DZA','Tlemcen',110242);
-INSERT INTO City VALUES (49,'B�char','DZA','B�char',107311);
-INSERT INTO City VALUES (50,'Tiaret','DZA','Tiaret',100118);
-INSERT INTO City VALUES (51,'Ech-Chleff (el-Asnam)','DZA','Chlef',96794);
-INSERT INTO City VALUES (52,'Gharda�a','DZA','Gharda�a',89415);
-INSERT INTO City VALUES (53,'Tafuna','ASM','Tutuila',5200);
-INSERT INTO City VALUES (54,'Fagatogo','ASM','Tutuila',2323);
-INSERT INTO City VALUES (55,'Andorra la Vella','AND','Andorra la Vella',21189);
-INSERT INTO City VALUES (56,'Luanda','AGO','Luanda',2022000);
-INSERT INTO City VALUES (57,'Huambo','AGO','Huambo',163100);
-INSERT INTO City VALUES (58,'Lobito','AGO','Benguela',130000);
-INSERT INTO City VALUES (59,'Benguela','AGO','Benguela',128300);
-INSERT INTO City VALUES (60,'Namibe','AGO','Namibe',118200);
-INSERT INTO City VALUES (61,'South Hill','AIA','�',961);
-INSERT INTO City VALUES (62,'The Valley','AIA','�',595);
-INSERT INTO City VALUES (63,'Saint John�s','ATG','St John',24000);
-INSERT INTO City VALUES (64,'Dubai','ARE','Dubai',669181);
-INSERT INTO City VALUES (65,'Abu Dhabi','ARE','Abu Dhabi',398695);
-INSERT INTO City VALUES (66,'Sharja','ARE','Sharja',320095);
-INSERT INTO City VALUES (67,'al-Ayn','ARE','Abu Dhabi',225970);
-INSERT INTO City VALUES (68,'Ajman','ARE','Ajman',114395);
-INSERT INTO City VALUES (69,'Buenos Aires','ARG','Distrito Federal',2982146);
-INSERT INTO City VALUES (70,'La Matanza','ARG','Buenos Aires',1266461);
-INSERT INTO City VALUES (71,'C�rdoba','ARG','C�rdoba',1157507);
-INSERT INTO City VALUES (72,'Rosario','ARG','Santa F�',907718);
-INSERT INTO City VALUES (73,'Lomas de Zamora','ARG','Buenos Aires',622013);
-INSERT INTO City VALUES (74,'Quilmes','ARG','Buenos Aires',559249);
-INSERT INTO City VALUES (75,'Almirante Brown','ARG','Buenos Aires',538918);
-INSERT INTO City VALUES (76,'La Plata','ARG','Buenos Aires',521936);
-INSERT INTO City VALUES (77,'Mar del Plata','ARG','Buenos Aires',512880);
-INSERT INTO City VALUES (78,'San Miguel de Tucum�n','ARG','Tucum�n',470809);
-INSERT INTO City VALUES (79,'Lan�s','ARG','Buenos Aires',469735);
-INSERT INTO City VALUES (80,'Merlo','ARG','Buenos Aires',463846);
-INSERT INTO City VALUES (81,'General San Mart�n','ARG','Buenos Aires',422542);
-INSERT INTO City VALUES (82,'Salta','ARG','Salta',367550);
-INSERT INTO City VALUES (83,'Moreno','ARG','Buenos Aires',356993);
-INSERT INTO City VALUES (84,'Santa F�','ARG','Santa F�',353063);
-INSERT INTO City VALUES (85,'Avellaneda','ARG','Buenos Aires',353046);
-INSERT INTO City VALUES (86,'Tres de Febrero','ARG','Buenos Aires',352311);
-INSERT INTO City VALUES (87,'Mor�n','ARG','Buenos Aires',349246);
-INSERT INTO City VALUES (88,'Florencio Varela','ARG','Buenos Aires',315432);
-INSERT INTO City VALUES (89,'San Isidro','ARG','Buenos Aires',306341);
-INSERT INTO City VALUES (90,'Tigre','ARG','Buenos Aires',296226);
-INSERT INTO City VALUES (91,'Malvinas Argentinas','ARG','Buenos Aires',290335);
-INSERT INTO City VALUES (92,'Vicente L�pez','ARG','Buenos Aires',288341);
-INSERT INTO City VALUES (93,'Berazategui','ARG','Buenos Aires',276916);
-INSERT INTO City VALUES (94,'Corrientes','ARG','Corrientes',258103);
-INSERT INTO City VALUES (95,'San Miguel','ARG','Buenos Aires',248700);
-INSERT INTO City VALUES (96,'Bah�a Blanca','ARG','Buenos Aires',239810);
-INSERT INTO City VALUES (97,'Esteban Echeverr�a','ARG','Buenos Aires',235760);
-INSERT INTO City VALUES (98,'Resistencia','ARG','Chaco',229212);
-INSERT INTO City VALUES (99,'Jos� C. Paz','ARG','Buenos Aires',221754);
-INSERT INTO City VALUES (100,'Paran�','ARG','Entre Rios',207041);
-INSERT INTO City VALUES (101,'Godoy Cruz','ARG','Mendoza',206998);
-INSERT INTO City VALUES (102,'Posadas','ARG','Misiones',201273);
-INSERT INTO City VALUES (103,'Guaymall�n','ARG','Mendoza',200595);
-INSERT INTO City VALUES (104,'Santiago del Estero','ARG','Santiago del Estero',189947);
-INSERT INTO City VALUES (105,'San Salvador de Jujuy','ARG','Jujuy',178748);
-INSERT INTO City VALUES (106,'Hurlingham','ARG','Buenos Aires',170028);
-INSERT INTO City VALUES (107,'Neuqu�n','ARG','Neuqu�n',167296);
-INSERT INTO City VALUES (108,'Ituzaing�','ARG','Buenos Aires',158197);
-INSERT INTO City VALUES (109,'San Fernando','ARG','Buenos Aires',153036);
-INSERT INTO City VALUES (110,'Formosa','ARG','Formosa',147636);
-INSERT INTO City VALUES (111,'Las Heras','ARG','Mendoza',145823);
-INSERT INTO City VALUES (112,'La Rioja','ARG','La Rioja',138117);
-INSERT INTO City VALUES (113,'San Fernando del Valle de Cata','ARG','Catamarca',134935);
-INSERT INTO City VALUES (114,'R�o Cuarto','ARG','C�rdoba',134355);
-INSERT INTO City VALUES (115,'Comodoro Rivadavia','ARG','Chubut',124104);
-INSERT INTO City VALUES (116,'Mendoza','ARG','Mendoza',123027);
-INSERT INTO City VALUES (117,'San Nicol�s de los Arroyos','ARG','Buenos Aires',119302);
-INSERT INTO City VALUES (118,'San Juan','ARG','San Juan',119152);
-INSERT INTO City VALUES (119,'Escobar','ARG','Buenos Aires',116675);
-INSERT INTO City VALUES (120,'Concordia','ARG','Entre Rios',116485);
-INSERT INTO City VALUES (121,'Pilar','ARG','Buenos Aires',113428);
-INSERT INTO City VALUES (122,'San Luis','ARG','San Luis',110136);
-INSERT INTO City VALUES (123,'Ezeiza','ARG','Buenos Aires',99578);
-INSERT INTO City VALUES (124,'San Rafael','ARG','Mendoza',94651);
-INSERT INTO City VALUES (125,'Tandil','ARG','Buenos Aires',91101);
-INSERT INTO City VALUES (126,'Yerevan','ARM','Yerevan',1248700);
-INSERT INTO City VALUES (127,'Gjumri','ARM','�irak',211700);
-INSERT INTO City VALUES (128,'Vanadzor','ARM','Lori',172700);
-INSERT INTO City VALUES (129,'Oranjestad','ABW','�',29034);
-INSERT INTO City VALUES (130,'Sydney','AUS','New South Wales',3276207);
-INSERT INTO City VALUES (131,'Melbourne','AUS','Victoria',2865329);
-INSERT INTO City VALUES (132,'Brisbane','AUS','Queensland',1291117);
-INSERT INTO City VALUES (133,'Perth','AUS','West Australia',1096829);
-INSERT INTO City VALUES (134,'Adelaide','AUS','South Australia',978100);
-INSERT INTO City VALUES (135,'Canberra','AUS','Capital Region',322723);
-INSERT INTO City VALUES (136,'Gold Coast','AUS','Queensland',311932);
-INSERT INTO City VALUES (137,'Newcastle','AUS','New South Wales',270324);
-INSERT INTO City VALUES (138,'Central Coast','AUS','New South Wales',227657);
-INSERT INTO City VALUES (139,'Wollongong','AUS','New South Wales',219761);
-INSERT INTO City VALUES (140,'Hobart','AUS','Tasmania',126118);
-INSERT INTO City VALUES (141,'Geelong','AUS','Victoria',125382);
-INSERT INTO City VALUES (142,'Townsville','AUS','Queensland',109914);
-INSERT INTO City VALUES (143,'Cairns','AUS','Queensland',92273);
-INSERT INTO City VALUES (144,'Baku','AZE','Baki',1787800);
-INSERT INTO City VALUES (145,'G�nc�','AZE','G�nc�',299300);
-INSERT INTO City VALUES (146,'Sumqayit','AZE','Sumqayit',283000);
-INSERT INTO City VALUES (147,'Ming��evir','AZE','Ming��evir',93900);
-INSERT INTO City VALUES (148,'Nassau','BHS','New Providence',172000);
-INSERT INTO City VALUES (149,'al-Manama','BHR','al-Manama',148000);
-INSERT INTO City VALUES (150,'Dhaka','BGD','Dhaka',3612850);
-INSERT INTO City VALUES (151,'Chittagong','BGD','Chittagong',1392860);
-INSERT INTO City VALUES (152,'Khulna','BGD','Khulna',663340);
-INSERT INTO City VALUES (153,'Rajshahi','BGD','Rajshahi',294056);
-INSERT INTO City VALUES (154,'Narayanganj','BGD','Dhaka',202134);
-INSERT INTO City VALUES (155,'Rangpur','BGD','Rajshahi',191398);
-INSERT INTO City VALUES (156,'Mymensingh','BGD','Dhaka',188713);
-INSERT INTO City VALUES (157,'Barisal','BGD','Barisal',170232);
-INSERT INTO City VALUES (158,'Tungi','BGD','Dhaka',168702);
-INSERT INTO City VALUES (159,'Jessore','BGD','Khulna',139710);
-INSERT INTO City VALUES (160,'Comilla','BGD','Chittagong',135313);
-INSERT INTO City VALUES (161,'Nawabganj','BGD','Rajshahi',130577);
-INSERT INTO City VALUES (162,'Dinajpur','BGD','Rajshahi',127815);
-INSERT INTO City VALUES (163,'Bogra','BGD','Rajshahi',120170);
-INSERT INTO City VALUES (164,'Sylhet','BGD','Sylhet',117396);
-INSERT INTO City VALUES (165,'Brahmanbaria','BGD','Chittagong',109032);
-INSERT INTO City VALUES (166,'Tangail','BGD','Dhaka',106004);
-INSERT INTO City VALUES (167,'Jamalpur','BGD','Dhaka',103556);
-INSERT INTO City VALUES (168,'Pabna','BGD','Rajshahi',103277);
-INSERT INTO City VALUES (169,'Naogaon','BGD','Rajshahi',101266);
-INSERT INTO City VALUES (170,'Sirajganj','BGD','Rajshahi',99669);
-INSERT INTO City VALUES (171,'Narsinghdi','BGD','Dhaka',98342);
-INSERT INTO City VALUES (172,'Saidpur','BGD','Rajshahi',96777);
-INSERT INTO City VALUES (173,'Gazipur','BGD','Dhaka',96717);
-INSERT INTO City VALUES (174,'Bridgetown','BRB','St Michael',6070);
-INSERT INTO City VALUES (175,'Antwerpen','BEL','Antwerpen',446525);
-INSERT INTO City VALUES (176,'Gent','BEL','East Flanderi',224180);
-INSERT INTO City VALUES (177,'Charleroi','BEL','Hainaut',200827);
-INSERT INTO City VALUES (178,'Li�ge','BEL','Li�ge',185639);
-INSERT INTO City VALUES (179,'Bruxelles [Brussel]','BEL','Bryssel',133859);
-INSERT INTO City VALUES (180,'Brugge','BEL','West Flanderi',116246);
-INSERT INTO City VALUES (181,'Schaerbeek','BEL','Bryssel',105692);
-INSERT INTO City VALUES (182,'Namur','BEL','Namur',105419);
-INSERT INTO City VALUES (183,'Mons','BEL','Hainaut',90935);
-INSERT INTO City VALUES (184,'Belize City','BLZ','Belize City',55810);
-INSERT INTO City VALUES (185,'Belmopan','BLZ','Cayo',7105);
-INSERT INTO City VALUES (186,'Cotonou','BEN','Atlantique',536827);
-INSERT INTO City VALUES (187,'Porto-Novo','BEN','Ou�m�',194000);
-INSERT INTO City VALUES (188,'Djougou','BEN','Atacora',134099);
-INSERT INTO City VALUES (189,'Parakou','BEN','Borgou',103577);
-INSERT INTO City VALUES (190,'Saint George','BMU','Saint George�s',1800);
-INSERT INTO City VALUES (191,'Hamilton','BMU','Hamilton',1200);
-INSERT INTO City VALUES (192,'Thimphu','BTN','Thimphu',22000);
-INSERT INTO City VALUES (193,'Santa Cruz de la Sierra','BOL','Santa Cruz',935361);
-INSERT INTO City VALUES (194,'La Paz','BOL','La Paz',758141);
-INSERT INTO City VALUES (195,'El Alto','BOL','La Paz',534466);
-INSERT INTO City VALUES (196,'Cochabamba','BOL','Cochabamba',482800);
-INSERT INTO City VALUES (197,'Oruro','BOL','Oruro',223553);
-INSERT INTO City VALUES (198,'Sucre','BOL','Chuquisaca',178426);
-INSERT INTO City VALUES (199,'Potos�','BOL','Potos�',140642);
-INSERT INTO City VALUES (200,'Tarija','BOL','Tarija',125255);
-INSERT INTO City VALUES (201,'Sarajevo','BIH','Federaatio',360000);
-INSERT INTO City VALUES (202,'Banja Luka','BIH','Republika Srpska',143079);
-INSERT INTO City VALUES (203,'Zenica','BIH','Federaatio',96027);
-INSERT INTO City VALUES (204,'Gaborone','BWA','Gaborone',213017);
-INSERT INTO City VALUES (205,'Francistown','BWA','Francistown',101805);
-INSERT INTO City VALUES (206,'S�o Paulo','BRA','S�o Paulo',9968485);
-INSERT INTO City VALUES (207,'Rio de Janeiro','BRA','Rio de Janeiro',5598953);
-INSERT INTO City VALUES (208,'Salvador','BRA','Bahia',2302832);
-INSERT INTO City VALUES (209,'Belo Horizonte','BRA','Minas Gerais',2139125);
-INSERT INTO City VALUES (210,'Fortaleza','BRA','Cear�',2097757);
-INSERT INTO City VALUES (211,'Bras�lia','BRA','Distrito Federal',1969868);
-INSERT INTO City VALUES (212,'Curitiba','BRA','Paran�',1584232);
-INSERT INTO City VALUES (213,'Recife','BRA','Pernambuco',1378087);
-INSERT INTO City VALUES (214,'Porto Alegre','BRA','Rio Grande do Sul',1314032);
-INSERT INTO City VALUES (215,'Manaus','BRA','Amazonas',1255049);
-INSERT INTO City VALUES (216,'Bel�m','BRA','Par�',1186926);
-INSERT INTO City VALUES (217,'Guarulhos','BRA','S�o Paulo',1095874);
-INSERT INTO City VALUES (218,'Goi�nia','BRA','Goi�s',1056330);
-INSERT INTO City VALUES (219,'Campinas','BRA','S�o Paulo',950043);
-INSERT INTO City VALUES (220,'S�o Gon�alo','BRA','Rio de Janeiro',869254);
-INSERT INTO City VALUES (221,'Nova Igua�u','BRA','Rio de Janeiro',862225);
-INSERT INTO City VALUES (222,'S�o Lu�s','BRA','Maranh�o',837588);
-INSERT INTO City VALUES (223,'Macei�','BRA','Alagoas',786288);
-INSERT INTO City VALUES (224,'Duque de Caxias','BRA','Rio de Janeiro',746758);
-INSERT INTO City VALUES (225,'S�o Bernardo do Campo','BRA','S�o Paulo',723132);
-INSERT INTO City VALUES (226,'Teresina','BRA','Piau�',691942);
-INSERT INTO City VALUES (227,'Natal','BRA','Rio Grande do Norte',688955);
-INSERT INTO City VALUES (228,'Osasco','BRA','S�o Paulo',659604);
-INSERT INTO City VALUES (229,'Campo Grande','BRA','Mato Grosso do Sul',649593);
-INSERT INTO City VALUES (230,'Santo Andr�','BRA','S�o Paulo',630073);
-INSERT INTO City VALUES (231,'Jo�o Pessoa','BRA','Para�ba',584029);
-INSERT INTO City VALUES (232,'Jaboat�o dos Guararapes','BRA','Pernambuco',558680);
-INSERT INTO City VALUES (233,'Contagem','BRA','Minas Gerais',520801);
-INSERT INTO City VALUES (234,'S�o Jos� dos Campos','BRA','S�o Paulo',515553);
-INSERT INTO City VALUES (235,'Uberl�ndia','BRA','Minas Gerais',487222);
-INSERT INTO City VALUES (236,'Feira de Santana','BRA','Bahia',479992);
-INSERT INTO City VALUES (237,'Ribeir�o Preto','BRA','S�o Paulo',473276);
-INSERT INTO City VALUES (238,'Sorocaba','BRA','S�o Paulo',466823);
-INSERT INTO City VALUES (239,'Niter�i','BRA','Rio de Janeiro',459884);
-INSERT INTO City VALUES (240,'Cuiab�','BRA','Mato Grosso',453813);
-INSERT INTO City VALUES (241,'Juiz de Fora','BRA','Minas Gerais',450288);
-INSERT INTO City VALUES (242,'Aracaju','BRA','Sergipe',445555);
-INSERT INTO City VALUES (243,'S�o Jo�o de Meriti','BRA','Rio de Janeiro',440052);
-INSERT INTO City VALUES (244,'Londrina','BRA','Paran�',432257);
-INSERT INTO City VALUES (245,'Joinville','BRA','Santa Catarina',428011);
-INSERT INTO City VALUES (246,'Belford Roxo','BRA','Rio de Janeiro',425194);
-INSERT INTO City VALUES (247,'Santos','BRA','S�o Paulo',408748);
-INSERT INTO City VALUES (248,'Ananindeua','BRA','Par�',400940);
-INSERT INTO City VALUES (249,'Campos dos Goytacazes','BRA','Rio de Janeiro',398418);
-INSERT INTO City VALUES (250,'Mau�','BRA','S�o Paulo',375055);
-INSERT INTO City VALUES (251,'Carapicu�ba','BRA','S�o Paulo',357552);
-INSERT INTO City VALUES (252,'Olinda','BRA','Pernambuco',354732);
-INSERT INTO City VALUES (253,'Campina Grande','BRA','Para�ba',352497);
-INSERT INTO City VALUES (254,'S�o Jos� do Rio Preto','BRA','S�o Paulo',351944);
-INSERT INTO City VALUES (255,'Caxias do Sul','BRA','Rio Grande do Sul',349581);
-INSERT INTO City VALUES (256,'Moji das Cruzes','BRA','S�o Paulo',339194);
-INSERT INTO City VALUES (257,'Diadema','BRA','S�o Paulo',335078);
-INSERT INTO City VALUES (258,'Aparecida de Goi�nia','BRA','Goi�s',324662);
-INSERT INTO City VALUES (259,'Piracicaba','BRA','S�o Paulo',319104);
-INSERT INTO City VALUES (260,'Cariacica','BRA','Esp�rito Santo',319033);
-INSERT INTO City VALUES (261,'Vila Velha','BRA','Esp�rito Santo',318758);
-INSERT INTO City VALUES (262,'Pelotas','BRA','Rio Grande do Sul',315415);
-INSERT INTO City VALUES (263,'Bauru','BRA','S�o Paulo',313670);
-INSERT INTO City VALUES (264,'Porto Velho','BRA','Rond�nia',309750);
-INSERT INTO City VALUES (265,'Serra','BRA','Esp�rito Santo',302666);
-INSERT INTO City VALUES (266,'Betim','BRA','Minas Gerais',302108);
-INSERT INTO City VALUES (267,'Jund�a�','BRA','S�o Paulo',296127);
-INSERT INTO City VALUES (268,'Canoas','BRA','Rio Grande do Sul',294125);
-INSERT INTO City VALUES (269,'Franca','BRA','S�o Paulo',290139);
-INSERT INTO City VALUES (270,'S�o Vicente','BRA','S�o Paulo',286848);
-INSERT INTO City VALUES (271,'Maring�','BRA','Paran�',286461);
-INSERT INTO City VALUES (272,'Montes Claros','BRA','Minas Gerais',286058);
-INSERT INTO City VALUES (273,'An�polis','BRA','Goi�s',282197);
-INSERT INTO City VALUES (274,'Florian�polis','BRA','Santa Catarina',281928);
-INSERT INTO City VALUES (275,'Petr�polis','BRA','Rio de Janeiro',279183);
-INSERT INTO City VALUES (276,'Itaquaquecetuba','BRA','S�o Paulo',270874);
-INSERT INTO City VALUES (277,'Vit�ria','BRA','Esp�rito Santo',270626);
-INSERT INTO City VALUES (278,'Ponta Grossa','BRA','Paran�',268013);
-INSERT INTO City VALUES (279,'Rio Branco','BRA','Acre',259537);
-INSERT INTO City VALUES (280,'Foz do Igua�u','BRA','Paran�',259425);
-INSERT INTO City VALUES (281,'Macap�','BRA','Amap�',256033);
-INSERT INTO City VALUES (282,'Ilh�us','BRA','Bahia',254970);
-INSERT INTO City VALUES (283,'Vit�ria da Conquista','BRA','Bahia',253587);
-INSERT INTO City VALUES (284,'Uberaba','BRA','Minas Gerais',249225);
-INSERT INTO City VALUES (285,'Paulista','BRA','Pernambuco',248473);
-INSERT INTO City VALUES (286,'Limeira','BRA','S�o Paulo',245497);
-INSERT INTO City VALUES (287,'Blumenau','BRA','Santa Catarina',244379);
-INSERT INTO City VALUES (288,'Caruaru','BRA','Pernambuco',244247);
-INSERT INTO City VALUES (289,'Santar�m','BRA','Par�',241771);
-INSERT INTO City VALUES (290,'Volta Redonda','BRA','Rio de Janeiro',240315);
-INSERT INTO City VALUES (291,'Novo Hamburgo','BRA','Rio Grande do Sul',239940);
-INSERT INTO City VALUES (292,'Caucaia','BRA','Cear�',238738);
-INSERT INTO City VALUES (293,'Santa Maria','BRA','Rio Grande do Sul',238473);
-INSERT INTO City VALUES (294,'Cascavel','BRA','Paran�',237510);
-INSERT INTO City VALUES (295,'Guaruj�','BRA','S�o Paulo',237206);
-INSERT INTO City VALUES (296,'Ribeir�o das Neves','BRA','Minas Gerais',232685);
-INSERT INTO City VALUES (297,'Governador Valadares','BRA','Minas Gerais',231724);
-INSERT INTO City VALUES (298,'Taubat�','BRA','S�o Paulo',229130);
-INSERT INTO City VALUES (299,'Imperatriz','BRA','Maranh�o',224564);
-INSERT INTO City VALUES (300,'Gravata�','BRA','Rio Grande do Sul',223011);
-INSERT INTO City VALUES (301,'Embu','BRA','S�o Paulo',222223);
-INSERT INTO City VALUES (302,'Mossor�','BRA','Rio Grande do Norte',214901);
-INSERT INTO City VALUES (303,'V�rzea Grande','BRA','Mato Grosso',214435);
-INSERT INTO City VALUES (304,'Petrolina','BRA','Pernambuco',210540);
-INSERT INTO City VALUES (305,'Barueri','BRA','S�o Paulo',208426);
-INSERT INTO City VALUES (306,'Viam�o','BRA','Rio Grande do Sul',207557);
-INSERT INTO City VALUES (307,'Ipatinga','BRA','Minas Gerais',206338);
-INSERT INTO City VALUES (308,'Juazeiro','BRA','Bahia',201073);
-INSERT INTO City VALUES (309,'Juazeiro do Norte','BRA','Cear�',199636);
-INSERT INTO City VALUES (310,'Tabo�o da Serra','BRA','S�o Paulo',197550);
-INSERT INTO City VALUES (311,'S�o Jos� dos Pinhais','BRA','Paran�',196884);
-INSERT INTO City VALUES (312,'Mag�','BRA','Rio de Janeiro',196147);
-INSERT INTO City VALUES (313,'Suzano','BRA','S�o Paulo',195434);
-INSERT INTO City VALUES (314,'S�o Leopoldo','BRA','Rio Grande do Sul',189258);
-INSERT INTO City VALUES (315,'Mar�lia','BRA','S�o Paulo',188691);
-INSERT INTO City VALUES (316,'S�o Carlos','BRA','S�o Paulo',187122);
-INSERT INTO City VALUES (317,'Sumar�','BRA','S�o Paulo',186205);
-INSERT INTO City VALUES (318,'Presidente Prudente','BRA','S�o Paulo',185340);
-INSERT INTO City VALUES (319,'Divin�polis','BRA','Minas Gerais',185047);
-INSERT INTO City VALUES (320,'Sete Lagoas','BRA','Minas Gerais',182984);
-INSERT INTO City VALUES (321,'Rio Grande','BRA','Rio Grande do Sul',182222);
-INSERT INTO City VALUES (322,'Itabuna','BRA','Bahia',182148);
-INSERT INTO City VALUES (323,'Jequi�','BRA','Bahia',179128);
-INSERT INTO City VALUES (324,'Arapiraca','BRA','Alagoas',178988);
-INSERT INTO City VALUES (325,'Colombo','BRA','Paran�',177764);
-INSERT INTO City VALUES (326,'Americana','BRA','S�o Paulo',177409);
-INSERT INTO City VALUES (327,'Alvorada','BRA','Rio Grande do Sul',175574);
-INSERT INTO City VALUES (328,'Araraquara','BRA','S�o Paulo',174381);
-INSERT INTO City VALUES (329,'Itabora�','BRA','Rio de Janeiro',173977);
-INSERT INTO City VALUES (330,'Santa B�rbara d�Oeste','BRA','S�o Paulo',171657);
-INSERT INTO City VALUES (331,'Nova Friburgo','BRA','Rio de Janeiro',170697);
-INSERT INTO City VALUES (332,'Jacare�','BRA','S�o Paulo',170356);
-INSERT INTO City VALUES (333,'Ara�atuba','BRA','S�o Paulo',169303);
-INSERT INTO City VALUES (334,'Barra Mansa','BRA','Rio de Janeiro',168953);
-INSERT INTO City VALUES (335,'Praia Grande','BRA','S�o Paulo',168434);
-INSERT INTO City VALUES (336,'Marab�','BRA','Par�',167795);
-INSERT INTO City VALUES (337,'Crici�ma','BRA','Santa Catarina',167661);
-INSERT INTO City VALUES (338,'Boa Vista','BRA','Roraima',167185);
-INSERT INTO City VALUES (339,'Passo Fundo','BRA','Rio Grande do Sul',166343);
-INSERT INTO City VALUES (340,'Dourados','BRA','Mato Grosso do Sul',164716);
-INSERT INTO City VALUES (341,'Santa Luzia','BRA','Minas Gerais',164704);
-INSERT INTO City VALUES (342,'Rio Claro','BRA','S�o Paulo',163551);
-INSERT INTO City VALUES (343,'Maracana�','BRA','Cear�',162022);
-INSERT INTO City VALUES (344,'Guarapuava','BRA','Paran�',160510);
-INSERT INTO City VALUES (345,'Rondon�polis','BRA','Mato Grosso',155115);
-INSERT INTO City VALUES (346,'S�o Jos�','BRA','Santa Catarina',155105);
-INSERT INTO City VALUES (347,'Cachoeiro de Itapemirim','BRA','Esp�rito Santo',155024);
-INSERT INTO City VALUES (348,'Nil�polis','BRA','Rio de Janeiro',153383);
-INSERT INTO City VALUES (349,'Itapevi','BRA','S�o Paulo',150664);
-INSERT INTO City VALUES (350,'Cabo de Santo Agostinho','BRA','Pernambuco',149964);
-INSERT INTO City VALUES (351,'Cama�ari','BRA','Bahia',149146);
-INSERT INTO City VALUES (352,'Sobral','BRA','Cear�',146005);
-INSERT INTO City VALUES (353,'Itaja�','BRA','Santa Catarina',145197);
-INSERT INTO City VALUES (354,'Chapec�','BRA','Santa Catarina',144158);
-INSERT INTO City VALUES (355,'Cotia','BRA','S�o Paulo',140042);
-INSERT INTO City VALUES (356,'Lages','BRA','Santa Catarina',139570);
-INSERT INTO City VALUES (357,'Ferraz de Vasconcelos','BRA','S�o Paulo',139283);
-INSERT INTO City VALUES (358,'Indaiatuba','BRA','S�o Paulo',135968);
-INSERT INTO City VALUES (359,'Hortol�ndia','BRA','S�o Paulo',135755);
-INSERT INTO City VALUES (360,'Caxias','BRA','Maranh�o',133980);
-INSERT INTO City VALUES (361,'S�o Caetano do Sul','BRA','S�o Paulo',133321);
-INSERT INTO City VALUES (362,'Itu','BRA','S�o Paulo',132736);
-INSERT INTO City VALUES (363,'Nossa Senhora do Socorro','BRA','Sergipe',131351);
-INSERT INTO City VALUES (364,'Parna�ba','BRA','Piau�',129756);
-INSERT INTO City VALUES (365,'Po�os de Caldas','BRA','Minas Gerais',129683);
-INSERT INTO City VALUES (366,'Teres�polis','BRA','Rio de Janeiro',128079);
-INSERT INTO City VALUES (367,'Barreiras','BRA','Bahia',127801);
-INSERT INTO City VALUES (368,'Castanhal','BRA','Par�',127634);
-INSERT INTO City VALUES (369,'Alagoinhas','BRA','Bahia',126820);
-INSERT INTO City VALUES (370,'Itapecerica da Serra','BRA','S�o Paulo',126672);
-INSERT INTO City VALUES (371,'Uruguaiana','BRA','Rio Grande do Sul',126305);
-INSERT INTO City VALUES (372,'Paranagu�','BRA','Paran�',126076);
-INSERT INTO City VALUES (373,'Ibirit�','BRA','Minas Gerais',125982);
-INSERT INTO City VALUES (374,'Timon','BRA','Maranh�o',125812);
-INSERT INTO City VALUES (375,'Luzi�nia','BRA','Goi�s',125597);
-INSERT INTO City VALUES (376,'Maca�','BRA','Rio de Janeiro',125597);
-INSERT INTO City VALUES (377,'Te�filo Otoni','BRA','Minas Gerais',124489);
-INSERT INTO City VALUES (378,'Moji-Gua�u','BRA','S�o Paulo',123782);
-INSERT INTO City VALUES (379,'Palmas','BRA','Tocantins',121919);
-INSERT INTO City VALUES (380,'Pindamonhangaba','BRA','S�o Paulo',121904);
-INSERT INTO City VALUES (381,'Francisco Morato','BRA','S�o Paulo',121197);
-INSERT INTO City VALUES (382,'Bag�','BRA','Rio Grande do Sul',120793);
-INSERT INTO City VALUES (383,'Sapucaia do Sul','BRA','Rio Grande do Sul',120217);
-INSERT INTO City VALUES (384,'Cabo Frio','BRA','Rio de Janeiro',119503);
-INSERT INTO City VALUES (385,'Itapetininga','BRA','S�o Paulo',119391);
-INSERT INTO City VALUES (386,'Patos de Minas','BRA','Minas Gerais',119262);
-INSERT INTO City VALUES (387,'Camaragibe','BRA','Pernambuco',118968);
-INSERT INTO City VALUES (388,'Bragan�a Paulista','BRA','S�o Paulo',116929);
-INSERT INTO City VALUES (389,'Queimados','BRA','Rio de Janeiro',115020);
-INSERT INTO City VALUES (390,'Aragua�na','BRA','Tocantins',114948);
-INSERT INTO City VALUES (391,'Garanhuns','BRA','Pernambuco',114603);
-INSERT INTO City VALUES (392,'Vit�ria de Santo Ant�o','BRA','Pernambuco',113595);
-INSERT INTO City VALUES (393,'Santa Rita','BRA','Para�ba',113135);
-INSERT INTO City VALUES (394,'Barbacena','BRA','Minas Gerais',113079);
-INSERT INTO City VALUES (395,'Abaetetuba','BRA','Par�',111258);
-INSERT INTO City VALUES (396,'Ja�','BRA','S�o Paulo',109965);
-INSERT INTO City VALUES (397,'Lauro de Freitas','BRA','Bahia',109236);
-INSERT INTO City VALUES (398,'Franco da Rocha','BRA','S�o Paulo',108964);
-INSERT INTO City VALUES (399,'Teixeira de Freitas','BRA','Bahia',108441);
-INSERT INTO City VALUES (400,'Varginha','BRA','Minas Gerais',108314);
-INSERT INTO City VALUES (401,'Ribeir�o Pires','BRA','S�o Paulo',108121);
-INSERT INTO City VALUES (402,'Sabar�','BRA','Minas Gerais',107781);
-INSERT INTO City VALUES (403,'Catanduva','BRA','S�o Paulo',107761);
-INSERT INTO City VALUES (404,'Rio Verde','BRA','Goi�s',107755);
-INSERT INTO City VALUES (405,'Botucatu','BRA','S�o Paulo',107663);
-INSERT INTO City VALUES (406,'Colatina','BRA','Esp�rito Santo',107354);
-INSERT INTO City VALUES (407,'Santa Cruz do Sul','BRA','Rio Grande do Sul',106734);
-INSERT INTO City VALUES (408,'Linhares','BRA','Esp�rito Santo',106278);
-INSERT INTO City VALUES (409,'Apucarana','BRA','Paran�',105114);
-INSERT INTO City VALUES (410,'Barretos','BRA','S�o Paulo',104156);
-INSERT INTO City VALUES (411,'Guaratinguet�','BRA','S�o Paulo',103433);
-INSERT INTO City VALUES (412,'Cachoeirinha','BRA','Rio Grande do Sul',103240);
-INSERT INTO City VALUES (413,'Cod�','BRA','Maranh�o',103153);
-INSERT INTO City VALUES (414,'Jaragu� do Sul','BRA','Santa Catarina',102580);
-INSERT INTO City VALUES (415,'Cubat�o','BRA','S�o Paulo',102372);
-INSERT INTO City VALUES (416,'Itabira','BRA','Minas Gerais',102217);
-INSERT INTO City VALUES (417,'Itaituba','BRA','Par�',101320);
-INSERT INTO City VALUES (418,'Araras','BRA','S�o Paulo',101046);
-INSERT INTO City VALUES (419,'Resende','BRA','Rio de Janeiro',100627);
-INSERT INTO City VALUES (420,'Atibaia','BRA','S�o Paulo',100356);
-INSERT INTO City VALUES (421,'Pouso Alegre','BRA','Minas Gerais',100028);
-INSERT INTO City VALUES (422,'Toledo','BRA','Paran�',99387);
-INSERT INTO City VALUES (423,'Crato','BRA','Cear�',98965);
-INSERT INTO City VALUES (424,'Passos','BRA','Minas Gerais',98570);
-INSERT INTO City VALUES (425,'Araguari','BRA','Minas Gerais',98399);
-INSERT INTO City VALUES (426,'S�o Jos� de Ribamar','BRA','Maranh�o',98318);
-INSERT INTO City VALUES (427,'Pinhais','BRA','Paran�',98198);
-INSERT INTO City VALUES (428,'Sert�ozinho','BRA','S�o Paulo',98140);
-INSERT INTO City VALUES (429,'Conselheiro Lafaiete','BRA','Minas Gerais',97507);
-INSERT INTO City VALUES (430,'Paulo Afonso','BRA','Bahia',97291);
-INSERT INTO City VALUES (431,'Angra dos Reis','BRA','Rio de Janeiro',96864);
-INSERT INTO City VALUES (432,'Eun�polis','BRA','Bahia',96610);
-INSERT INTO City VALUES (433,'Salto','BRA','S�o Paulo',96348);
-INSERT INTO City VALUES (434,'Ourinhos','BRA','S�o Paulo',96291);
-INSERT INTO City VALUES (435,'Parnamirim','BRA','Rio Grande do Norte',96210);
-INSERT INTO City VALUES (436,'Jacobina','BRA','Bahia',96131);
-INSERT INTO City VALUES (437,'Coronel Fabriciano','BRA','Minas Gerais',95933);
-INSERT INTO City VALUES (438,'Birigui','BRA','S�o Paulo',94685);
-INSERT INTO City VALUES (439,'Tatu�','BRA','S�o Paulo',93897);
-INSERT INTO City VALUES (440,'Ji-Paran�','BRA','Rond�nia',93346);
-INSERT INTO City VALUES (441,'Bacabal','BRA','Maranh�o',93121);
-INSERT INTO City VALUES (442,'Camet�','BRA','Par�',92779);
-INSERT INTO City VALUES (443,'Gua�ba','BRA','Rio Grande do Sul',92224);
-INSERT INTO City VALUES (444,'S�o Louren�o da Mata','BRA','Pernambuco',91999);
-INSERT INTO City VALUES (445,'Santana do Livramento','BRA','Rio Grande do Sul',91779);
-INSERT INTO City VALUES (446,'Votorantim','BRA','S�o Paulo',91777);
-INSERT INTO City VALUES (447,'Campo Largo','BRA','Paran�',91203);
-INSERT INTO City VALUES (448,'Patos','BRA','Para�ba',90519);
-INSERT INTO City VALUES (449,'Ituiutaba','BRA','Minas Gerais',90507);
-INSERT INTO City VALUES (450,'Corumb�','BRA','Mato Grosso do Sul',90111);
-INSERT INTO City VALUES (451,'Palho�a','BRA','Santa Catarina',89465);
-INSERT INTO City VALUES (452,'Barra do Pira�','BRA','Rio de Janeiro',89388);
-INSERT INTO City VALUES (453,'Bento Gon�alves','BRA','Rio Grande do Sul',89254);
-INSERT INTO City VALUES (454,'Po�','BRA','S�o Paulo',89236);
-INSERT INTO City VALUES (455,'�guas Lindas de Goi�s','BRA','Goi�s',89200);
-INSERT INTO City VALUES (456,'London','GBR','England',7285000);
-INSERT INTO City VALUES (457,'Birmingham','GBR','England',1013000);
-INSERT INTO City VALUES (458,'Glasgow','GBR','Scotland',619680);
-INSERT INTO City VALUES (459,'Liverpool','GBR','England',461000);
-INSERT INTO City VALUES (460,'Edinburgh','GBR','Scotland',450180);
-INSERT INTO City VALUES (461,'Sheffield','GBR','England',431607);
-INSERT INTO City VALUES (462,'Manchester','GBR','England',430000);
-INSERT INTO City VALUES (463,'Leeds','GBR','England',424194);
-INSERT INTO City VALUES (464,'Bristol','GBR','England',402000);
-INSERT INTO City VALUES (465,'Cardiff','GBR','Wales',321000);
-INSERT INTO City VALUES (466,'Coventry','GBR','England',304000);
-INSERT INTO City VALUES (467,'Leicester','GBR','England',294000);
-INSERT INTO City VALUES (468,'Bradford','GBR','England',289376);
-INSERT INTO City VALUES (469,'Belfast','GBR','North Ireland',287500);
-INSERT INTO City VALUES (470,'Nottingham','GBR','England',287000);
-INSERT INTO City VALUES (471,'Kingston upon Hull','GBR','England',262000);
-INSERT INTO City VALUES (472,'Plymouth','GBR','England',253000);
-INSERT INTO City VALUES (473,'Stoke-on-Trent','GBR','England',252000);
-INSERT INTO City VALUES (474,'Wolverhampton','GBR','England',242000);
-INSERT INTO City VALUES (475,'Derby','GBR','England',236000);
-INSERT INTO City VALUES (476,'Swansea','GBR','Wales',230000);
-INSERT INTO City VALUES (477,'Southampton','GBR','England',216000);
-INSERT INTO City VALUES (478,'Aberdeen','GBR','Scotland',213070);
-INSERT INTO City VALUES (479,'Northampton','GBR','England',196000);
-INSERT INTO City VALUES (480,'Dudley','GBR','England',192171);
-INSERT INTO City VALUES (481,'Portsmouth','GBR','England',190000);
-INSERT INTO City VALUES (482,'Newcastle upon Tyne','GBR','England',189150);
-INSERT INTO City VALUES (483,'Sunderland','GBR','England',183310);
-INSERT INTO City VALUES (484,'Luton','GBR','England',183000);
-INSERT INTO City VALUES (485,'Swindon','GBR','England',180000);
-INSERT INTO City VALUES (486,'Southend-on-Sea','GBR','England',176000);
-INSERT INTO City VALUES (487,'Walsall','GBR','England',174739);
-INSERT INTO City VALUES (488,'Bournemouth','GBR','England',162000);
-INSERT INTO City VALUES (489,'Peterborough','GBR','England',156000);
-INSERT INTO City VALUES (490,'Brighton','GBR','England',156124);
-INSERT INTO City VALUES (491,'Blackpool','GBR','England',151000);
-INSERT INTO City VALUES (492,'Dundee','GBR','Scotland',146690);
-INSERT INTO City VALUES (493,'West Bromwich','GBR','England',146386);
-INSERT INTO City VALUES (494,'Reading','GBR','England',148000);
-INSERT INTO City VALUES (495,'Oldbury/Smethwick (Warley)','GBR','England',145542);
-INSERT INTO City VALUES (496,'Middlesbrough','GBR','England',145000);
-INSERT INTO City VALUES (497,'Huddersfield','GBR','England',143726);
-INSERT INTO City VALUES (498,'Oxford','GBR','England',144000);
-INSERT INTO City VALUES (499,'Poole','GBR','England',141000);
-INSERT INTO City VALUES (500,'Bolton','GBR','England',139020);
-INSERT INTO City VALUES (501,'Blackburn','GBR','England',140000);
-INSERT INTO City VALUES (502,'Newport','GBR','Wales',139000);
-INSERT INTO City VALUES (503,'Preston','GBR','England',135000);
-INSERT INTO City VALUES (504,'Stockport','GBR','England',132813);
-INSERT INTO City VALUES (505,'Norwich','GBR','England',124000);
-INSERT INTO City VALUES (506,'Rotherham','GBR','England',121380);
-INSERT INTO City VALUES (507,'Cambridge','GBR','England',121000);
-INSERT INTO City VALUES (508,'Watford','GBR','England',113080);
-INSERT INTO City VALUES (509,'Ipswich','GBR','England',114000);
-INSERT INTO City VALUES (510,'Slough','GBR','England',112000);
-INSERT INTO City VALUES (511,'Exeter','GBR','England',111000);
-INSERT INTO City VALUES (512,'Cheltenham','GBR','England',106000);
-INSERT INTO City VALUES (513,'Gloucester','GBR','England',107000);
-INSERT INTO City VALUES (514,'Saint Helens','GBR','England',106293);
-INSERT INTO City VALUES (515,'Sutton Coldfield','GBR','England',106001);
-INSERT INTO City VALUES (516,'York','GBR','England',104425);
-INSERT INTO City VALUES (517,'Oldham','GBR','England',103931);
-INSERT INTO City VALUES (518,'Basildon','GBR','England',100924);
-INSERT INTO City VALUES (519,'Worthing','GBR','England',100000);
-INSERT INTO City VALUES (520,'Chelmsford','GBR','England',97451);
-INSERT INTO City VALUES (521,'Colchester','GBR','England',96063);
-INSERT INTO City VALUES (522,'Crawley','GBR','England',97000);
-INSERT INTO City VALUES (523,'Gillingham','GBR','England',92000);
-INSERT INTO City VALUES (524,'Solihull','GBR','England',94531);
-INSERT INTO City VALUES (525,'Rochdale','GBR','England',94313);
-INSERT INTO City VALUES (526,'Birkenhead','GBR','England',93087);
-INSERT INTO City VALUES (527,'Worcester','GBR','England',95000);
-INSERT INTO City VALUES (528,'Hartlepool','GBR','England',92000);
-INSERT INTO City VALUES (529,'Halifax','GBR','England',91069);
-INSERT INTO City VALUES (530,'Woking/Byfleet','GBR','England',92000);
-INSERT INTO City VALUES (531,'Southport','GBR','England',90959);
-INSERT INTO City VALUES (532,'Maidstone','GBR','England',90878);
-INSERT INTO City VALUES (533,'Eastbourne','GBR','England',90000);
-INSERT INTO City VALUES (534,'Grimsby','GBR','England',89000);
-INSERT INTO City VALUES (535,'Saint Helier','GBR','Jersey',27523);
-INSERT INTO City VALUES (536,'Douglas','GBR','�',23487);
-INSERT INTO City VALUES (537,'Road Town','VGB','Tortola',8000);
-INSERT INTO City VALUES (538,'Bandar Seri Begawan','BRN','Brunei and Muara',21484);
-INSERT INTO City VALUES (539,'Sofija','BGR','Grad Sofija',1122302);
-INSERT INTO City VALUES (540,'Plovdiv','BGR','Plovdiv',342584);
-INSERT INTO City VALUES (541,'Varna','BGR','Varna',299801);
-INSERT INTO City VALUES (542,'Burgas','BGR','Burgas',195255);
-INSERT INTO City VALUES (543,'Ruse','BGR','Ruse',166467);
-INSERT INTO City VALUES (544,'Stara Zagora','BGR','Haskovo',147939);
-INSERT INTO City VALUES (545,'Pleven','BGR','Lovec',121952);
-INSERT INTO City VALUES (546,'Sliven','BGR','Burgas',105530);
-INSERT INTO City VALUES (547,'Dobric','BGR','Varna',100399);
-INSERT INTO City VALUES (548,'�umen','BGR','Varna',94686);
-INSERT INTO City VALUES (549,'Ouagadougou','BFA','Kadiogo',824000);
-INSERT INTO City VALUES (550,'Bobo-Dioulasso','BFA','Houet',300000);
-INSERT INTO City VALUES (551,'Koudougou','BFA','Boulkiemd�',105000);
-INSERT INTO City VALUES (552,'Bujumbura','BDI','Bujumbura',300000);
-INSERT INTO City VALUES (553,'George Town','CYM','Grand Cayman',19600);
-INSERT INTO City VALUES (554,'Santiago de Chile','CHL','Santiago',4703954);
-INSERT INTO City VALUES (555,'Puente Alto','CHL','Santiago',386236);
-INSERT INTO City VALUES (556,'Vi�a del Mar','CHL','Valpara�so',312493);
-INSERT INTO City VALUES (557,'Valpara�so','CHL','Valpara�so',293800);
-INSERT INTO City VALUES (558,'Talcahuano','CHL','B�ob�o',277752);
-INSERT INTO City VALUES (559,'Antofagasta','CHL','Antofagasta',251429);
-INSERT INTO City VALUES (560,'San Bernardo','CHL','Santiago',241910);
-INSERT INTO City VALUES (561,'Temuco','CHL','La Araucan�a',233041);
-INSERT INTO City VALUES (562,'Concepci�n','CHL','B�ob�o',217664);
-INSERT INTO City VALUES (563,'Rancagua','CHL','O�Higgins',212977);
-INSERT INTO City VALUES (564,'Arica','CHL','Tarapac�',189036);
-INSERT INTO City VALUES (565,'Talca','CHL','Maule',187557);
-INSERT INTO City VALUES (566,'Chill�n','CHL','B�ob�o',178182);
-INSERT INTO City VALUES (567,'Iquique','CHL','Tarapac�',177892);
-INSERT INTO City VALUES (568,'Los Angeles','CHL','B�ob�o',158215);
-INSERT INTO City VALUES (569,'Puerto Montt','CHL','Los Lagos',152194);
-INSERT INTO City VALUES (570,'Coquimbo','CHL','Coquimbo',143353);
-INSERT INTO City VALUES (571,'Osorno','CHL','Los Lagos',141468);
-INSERT INTO City VALUES (572,'La Serena','CHL','Coquimbo',137409);
-INSERT INTO City VALUES (573,'Calama','CHL','Antofagasta',137265);
-INSERT INTO City VALUES (574,'Valdivia','CHL','Los Lagos',133106);
-INSERT INTO City VALUES (575,'Punta Arenas','CHL','Magallanes',125631);
-INSERT INTO City VALUES (576,'Copiap�','CHL','Atacama',120128);
-INSERT INTO City VALUES (577,'Quilpu�','CHL','Valpara�so',118857);
-INSERT INTO City VALUES (578,'Curic�','CHL','Maule',115766);
-INSERT INTO City VALUES (579,'Ovalle','CHL','Coquimbo',94854);
-INSERT INTO City VALUES (580,'Coronel','CHL','B�ob�o',93061);
-INSERT INTO City VALUES (581,'San Pedro de la Paz','CHL','B�ob�o',91684);
-INSERT INTO City VALUES (582,'Melipilla','CHL','Santiago',91056);
-INSERT INTO City VALUES (583,'Avarua','COK','Rarotonga',11900);
-INSERT INTO City VALUES (584,'San Jos�','CRI','San Jos�',339131);
-INSERT INTO City VALUES (585,'Djibouti','DJI','Djibouti',383000);
-INSERT INTO City VALUES (586,'Roseau','DMA','St George',16243);
-INSERT INTO City VALUES (587,'Santo Domingo de Guzm�n','DOM','Distrito Nacional',1609966);
-INSERT INTO City VALUES (588,'Santiago de los Caballeros','DOM','Santiago',365463);
-INSERT INTO City VALUES (589,'La Romana','DOM','La Romana',140204);
-INSERT INTO City VALUES (590,'San Pedro de Macor�s','DOM','San Pedro de Macor�s',124735);
-INSERT INTO City VALUES (591,'San Francisco de Macor�s','DOM','Duarte',108485);
-INSERT INTO City VALUES (592,'San Felipe de Puerto Plata','DOM','Puerto Plata',89423);
-INSERT INTO City VALUES (593,'Guayaquil','ECU','Guayas',2070040);
-INSERT INTO City VALUES (594,'Quito','ECU','Pichincha',1573458);
-INSERT INTO City VALUES (595,'Cuenca','ECU','Azuay',270353);
-INSERT INTO City VALUES (596,'Machala','ECU','El Oro',210368);
-INSERT INTO City VALUES (597,'Santo Domingo de los Colorados','ECU','Pichincha',202111);
-INSERT INTO City VALUES (598,'Portoviejo','ECU','Manab�',176413);
-INSERT INTO City VALUES (599,'Ambato','ECU','Tungurahua',169612);
-INSERT INTO City VALUES (600,'Manta','ECU','Manab�',164739);
-INSERT INTO City VALUES (601,'Duran [Eloy Alfaro]','ECU','Guayas',152514);
-INSERT INTO City VALUES (602,'Ibarra','ECU','Imbabura',130643);
-INSERT INTO City VALUES (603,'Quevedo','ECU','Los R�os',129631);
-INSERT INTO City VALUES (604,'Milagro','ECU','Guayas',124177);
-INSERT INTO City VALUES (605,'Loja','ECU','Loja',123875);
-INSERT INTO City VALUES (606,'R�obamba','ECU','Chimborazo',123163);
-INSERT INTO City VALUES (607,'Esmeraldas','ECU','Esmeraldas',123045);
-INSERT INTO City VALUES (608,'Cairo','EGY','Kairo',6789479);
-INSERT INTO City VALUES (609,'Alexandria','EGY','Aleksandria',3328196);
-INSERT INTO City VALUES (610,'Giza','EGY','Giza',2221868);
-INSERT INTO City VALUES (611,'Shubra al-Khayma','EGY','al-Qalyubiya',870716);
-INSERT INTO City VALUES (612,'Port Said','EGY','Port Said',469533);
-INSERT INTO City VALUES (613,'Suez','EGY','Suez',417610);
-INSERT INTO City VALUES (614,'al-Mahallat al-Kubra','EGY','al-Gharbiya',395402);
-INSERT INTO City VALUES (615,'Tanta','EGY','al-Gharbiya',371010);
-INSERT INTO City VALUES (616,'al-Mansura','EGY','al-Daqahliya',369621);
-INSERT INTO City VALUES (617,'Luxor','EGY','Luxor',360503);
-INSERT INTO City VALUES (618,'Asyut','EGY','Asyut',343498);
-INSERT INTO City VALUES (619,'Bahtim','EGY','al-Qalyubiya',275807);
-INSERT INTO City VALUES (620,'Zagazig','EGY','al-Sharqiya',267351);
-INSERT INTO City VALUES (621,'al-Faiyum','EGY','al-Faiyum',260964);
-INSERT INTO City VALUES (622,'Ismailia','EGY','Ismailia',254477);
-INSERT INTO City VALUES (623,'Kafr al-Dawwar','EGY','al-Buhayra',231978);
-INSERT INTO City VALUES (624,'Assuan','EGY','Assuan',219017);
-INSERT INTO City VALUES (625,'Damanhur','EGY','al-Buhayra',212203);
-INSERT INTO City VALUES (626,'al-Minya','EGY','al-Minya',201360);
-INSERT INTO City VALUES (627,'Bani Suwayf','EGY','Bani Suwayf',172032);
-INSERT INTO City VALUES (628,'Qina','EGY','Qina',171275);
-INSERT INTO City VALUES (629,'Sawhaj','EGY','Sawhaj',170125);
-INSERT INTO City VALUES (630,'Shibin al-Kawm','EGY','al-Minufiya',159909);
-INSERT INTO City VALUES (631,'Bulaq al-Dakrur','EGY','Giza',148787);
-INSERT INTO City VALUES (632,'Banha','EGY','al-Qalyubiya',145792);
-INSERT INTO City VALUES (633,'Warraq al-Arab','EGY','Giza',127108);
-INSERT INTO City VALUES (634,'Kafr al-Shaykh','EGY','Kafr al-Shaykh',124819);
-INSERT INTO City VALUES (635,'Mallawi','EGY','al-Minya',119283);
-INSERT INTO City VALUES (636,'Bilbays','EGY','al-Sharqiya',113608);
-INSERT INTO City VALUES (637,'Mit Ghamr','EGY','al-Daqahliya',101801);
-INSERT INTO City VALUES (638,'al-Arish','EGY','Shamal Sina',100447);
-INSERT INTO City VALUES (639,'Talkha','EGY','al-Daqahliya',97700);
-INSERT INTO City VALUES (640,'Qalyub','EGY','al-Qalyubiya',97200);
-INSERT INTO City VALUES (641,'Jirja','EGY','Sawhaj',95400);
-INSERT INTO City VALUES (642,'Idfu','EGY','Qina',94200);
-INSERT INTO City VALUES (643,'al-Hawamidiya','EGY','Giza',91700);
-INSERT INTO City VALUES (644,'Disuq','EGY','Kafr al-Shaykh',91300);
-INSERT INTO City VALUES (645,'San Salvador','SLV','San Salvador',415346);
-INSERT INTO City VALUES (646,'Santa Ana','SLV','Santa Ana',139389);
-INSERT INTO City VALUES (647,'Mejicanos','SLV','San Salvador',138800);
-INSERT INTO City VALUES (648,'Soyapango','SLV','San Salvador',129800);
-INSERT INTO City VALUES (649,'San Miguel','SLV','San Miguel',127696);
-INSERT INTO City VALUES (650,'Nueva San Salvador','SLV','La Libertad',98400);
-INSERT INTO City VALUES (651,'Apopa','SLV','San Salvador',88800);
-INSERT INTO City VALUES (652,'Asmara','ERI','Maekel',431000);
-INSERT INTO City VALUES (653,'Madrid','ESP','Madrid',2879052);
-INSERT INTO City VALUES (654,'Barcelona','ESP','Katalonia',1503451);
-INSERT INTO City VALUES (655,'Valencia','ESP','Valencia',739412);
-INSERT INTO City VALUES (656,'Sevilla','ESP','Andalusia',701927);
-INSERT INTO City VALUES (657,'Zaragoza','ESP','Aragonia',603367);
-INSERT INTO City VALUES (658,'M�laga','ESP','Andalusia',530553);
-INSERT INTO City VALUES (659,'Bilbao','ESP','Baskimaa',357589);
-INSERT INTO City VALUES (660,'Las Palmas de Gran Canaria','ESP','Canary Islands',354757);
-INSERT INTO City VALUES (661,'Murcia','ESP','Murcia',353504);
-INSERT INTO City VALUES (662,'Palma de Mallorca','ESP','Balears',326993);
-INSERT INTO City VALUES (663,'Valladolid','ESP','Castilla and Le�n',319998);
-INSERT INTO City VALUES (664,'C�rdoba','ESP','Andalusia',311708);
-INSERT INTO City VALUES (665,'Vigo','ESP','Galicia',283670);
-INSERT INTO City VALUES (666,'Alicante [Alacant]','ESP','Valencia',272432);
-INSERT INTO City VALUES (667,'Gij�n','ESP','Asturia',267980);
-INSERT INTO City VALUES (668,'L�Hospitalet de Llobregat','ESP','Katalonia',247986);
-INSERT INTO City VALUES (669,'Granada','ESP','Andalusia',244767);
-INSERT INTO City VALUES (670,'A Coru�a (La Coru�a)','ESP','Galicia',243402);
-INSERT INTO City VALUES (671,'Vitoria-Gasteiz','ESP','Baskimaa',217154);
-INSERT INTO City VALUES (672,'Santa Cruz de Tenerife','ESP','Canary Islands',213050);
-INSERT INTO City VALUES (673,'Badalona','ESP','Katalonia',209635);
-INSERT INTO City VALUES (674,'Oviedo','ESP','Asturia',200453);
-INSERT INTO City VALUES (675,'M�stoles','ESP','Madrid',195351);
-INSERT INTO City VALUES (676,'Elche [Elx]','ESP','Valencia',193174);
-INSERT INTO City VALUES (677,'Sabadell','ESP','Katalonia',184859);
-INSERT INTO City VALUES (678,'Santander','ESP','Cantabria',184165);
-INSERT INTO City VALUES (679,'Jerez de la Frontera','ESP','Andalusia',182660);
-INSERT INTO City VALUES (680,'Pamplona [Iru�a]','ESP','Navarra',180483);
-INSERT INTO City VALUES (681,'Donostia-San Sebasti�n','ESP','Baskimaa',179208);
-INSERT INTO City VALUES (682,'Cartagena','ESP','Murcia',177709);
-INSERT INTO City VALUES (683,'Legan�s','ESP','Madrid',173163);
-INSERT INTO City VALUES (684,'Fuenlabrada','ESP','Madrid',171173);
-INSERT INTO City VALUES (685,'Almer�a','ESP','Andalusia',169027);
-INSERT INTO City VALUES (686,'Terrassa','ESP','Katalonia',168695);
-INSERT INTO City VALUES (687,'Alcal� de Henares','ESP','Madrid',164463);
-INSERT INTO City VALUES (688,'Burgos','ESP','Castilla and Le�n',162802);
-INSERT INTO City VALUES (689,'Salamanca','ESP','Castilla and Le�n',158720);
-INSERT INTO City VALUES (690,'Albacete','ESP','Kastilia-La Mancha',147527);
-INSERT INTO City VALUES (691,'Getafe','ESP','Madrid',145371);
-INSERT INTO City VALUES (692,'C�diz','ESP','Andalusia',142449);
-INSERT INTO City VALUES (693,'Alcorc�n','ESP','Madrid',142048);
-INSERT INTO City VALUES (694,'Huelva','ESP','Andalusia',140583);
-INSERT INTO City VALUES (695,'Le�n','ESP','Castilla and Le�n',139809);
-INSERT INTO City VALUES (696,'Castell�n de la Plana [Castell','ESP','Valencia',139712);
-INSERT INTO City VALUES (697,'Badajoz','ESP','Extremadura',136613);
-INSERT INTO City VALUES (698,'[San Crist�bal de] la Laguna','ESP','Canary Islands',127945);
-INSERT INTO City VALUES (699,'Logro�o','ESP','La Rioja',127093);
-INSERT INTO City VALUES (700,'Santa Coloma de Gramenet','ESP','Katalonia',120802);
-INSERT INTO City VALUES (701,'Tarragona','ESP','Katalonia',113016);
-INSERT INTO City VALUES (702,'Lleida (L�rida)','ESP','Katalonia',112207);
-INSERT INTO City VALUES (703,'Ja�n','ESP','Andalusia',109247);
-INSERT INTO City VALUES (704,'Ourense (Orense)','ESP','Galicia',109120);
-INSERT INTO City VALUES (705,'Matar�','ESP','Katalonia',104095);
-INSERT INTO City VALUES (706,'Algeciras','ESP','Andalusia',103106);
-INSERT INTO City VALUES (707,'Marbella','ESP','Andalusia',101144);
-INSERT INTO City VALUES (708,'Barakaldo','ESP','Baskimaa',98212);
-INSERT INTO City VALUES (709,'Dos Hermanas','ESP','Andalusia',94591);
-INSERT INTO City VALUES (710,'Santiago de Compostela','ESP','Galicia',93745);
-INSERT INTO City VALUES (711,'Torrej�n de Ardoz','ESP','Madrid',92262);
-INSERT INTO City VALUES (712,'Cape Town','ZAF','Western Cape',2352121);
-INSERT INTO City VALUES (713,'Soweto','ZAF','Gauteng',904165);
-INSERT INTO City VALUES (714,'Johannesburg','ZAF','Gauteng',756653);
-INSERT INTO City VALUES (715,'Port Elizabeth','ZAF','Eastern Cape',752319);
-INSERT INTO City VALUES (716,'Pretoria','ZAF','Gauteng',658630);
-INSERT INTO City VALUES (717,'Inanda','ZAF','KwaZulu-Natal',634065);
-INSERT INTO City VALUES (718,'Durban','ZAF','KwaZulu-Natal',566120);
-INSERT INTO City VALUES (719,'Vanderbijlpark','ZAF','Gauteng',468931);
-INSERT INTO City VALUES (720,'Kempton Park','ZAF','Gauteng',442633);
-INSERT INTO City VALUES (721,'Alberton','ZAF','Gauteng',410102);
-INSERT INTO City VALUES (722,'Pinetown','ZAF','KwaZulu-Natal',378810);
-INSERT INTO City VALUES (723,'Pietermaritzburg','ZAF','KwaZulu-Natal',370190);
-INSERT INTO City VALUES (724,'Benoni','ZAF','Gauteng',365467);
-INSERT INTO City VALUES (725,'Randburg','ZAF','Gauteng',341288);
-INSERT INTO City VALUES (726,'Umlazi','ZAF','KwaZulu-Natal',339233);
-INSERT INTO City VALUES (727,'Bloemfontein','ZAF','Free State',334341);
-INSERT INTO City VALUES (728,'Vereeniging','ZAF','Gauteng',328535);
-INSERT INTO City VALUES (729,'Wonderboom','ZAF','Gauteng',283289);
-INSERT INTO City VALUES (730,'Roodepoort','ZAF','Gauteng',279340);
-INSERT INTO City VALUES (731,'Boksburg','ZAF','Gauteng',262648);
-INSERT INTO City VALUES (732,'Klerksdorp','ZAF','North West',261911);
-INSERT INTO City VALUES (733,'Soshanguve','ZAF','Gauteng',242727);
-INSERT INTO City VALUES (734,'Newcastle','ZAF','KwaZulu-Natal',222993);
-INSERT INTO City VALUES (735,'East London','ZAF','Eastern Cape',221047);
-INSERT INTO City VALUES (736,'Welkom','ZAF','Free State',203296);
-INSERT INTO City VALUES (737,'Kimberley','ZAF','Northern Cape',197254);
-INSERT INTO City VALUES (738,'Uitenhage','ZAF','Eastern Cape',192120);
-INSERT INTO City VALUES (739,'Chatsworth','ZAF','KwaZulu-Natal',189885);
-INSERT INTO City VALUES (740,'Mdantsane','ZAF','Eastern Cape',182639);
-INSERT INTO City VALUES (741,'Krugersdorp','ZAF','Gauteng',181503);
-INSERT INTO City VALUES (742,'Botshabelo','ZAF','Free State',177971);
-INSERT INTO City VALUES (743,'Brakpan','ZAF','Gauteng',171363);
-INSERT INTO City VALUES (744,'Witbank','ZAF','Mpumalanga',167183);
-INSERT INTO City VALUES (745,'Oberholzer','ZAF','Gauteng',164367);
-INSERT INTO City VALUES (746,'Germiston','ZAF','Gauteng',164252);
-INSERT INTO City VALUES (747,'Springs','ZAF','Gauteng',162072);
-INSERT INTO City VALUES (748,'Westonaria','ZAF','Gauteng',159632);
-INSERT INTO City VALUES (749,'Randfontein','ZAF','Gauteng',120838);
-INSERT INTO City VALUES (750,'Paarl','ZAF','Western Cape',105768);
-INSERT INTO City VALUES (751,'Potchefstroom','ZAF','North West',101817);
-INSERT INTO City VALUES (752,'Rustenburg','ZAF','North West',97008);
-INSERT INTO City VALUES (753,'Nigel','ZAF','Gauteng',96734);
-INSERT INTO City VALUES (754,'George','ZAF','Western Cape',93818);
-INSERT INTO City VALUES (755,'Ladysmith','ZAF','KwaZulu-Natal',89292);
-INSERT INTO City VALUES (756,'Addis Abeba','ETH','Addis Abeba',2495000);
-INSERT INTO City VALUES (757,'Dire Dawa','ETH','Dire Dawa',164851);
-INSERT INTO City VALUES (758,'Nazret','ETH','Oromia',127842);
-INSERT INTO City VALUES (759,'Gonder','ETH','Amhara',112249);
-INSERT INTO City VALUES (760,'Dese','ETH','Amhara',97314);
-INSERT INTO City VALUES (761,'Mekele','ETH','Tigray',96938);
-INSERT INTO City VALUES (762,'Bahir Dar','ETH','Amhara',96140);
-INSERT INTO City VALUES (763,'Stanley','FLK','East Falkland',1636);
-INSERT INTO City VALUES (764,'Suva','FJI','Central',77366);
-INSERT INTO City VALUES (765,'Quezon','PHL','National Capital Reg',2173831);
-INSERT INTO City VALUES (766,'Manila','PHL','National Capital Reg',1581082);
-INSERT INTO City VALUES (767,'Kalookan','PHL','National Capital Reg',1177604);
-INSERT INTO City VALUES (768,'Davao','PHL','Southern Mindanao',1147116);
-INSERT INTO City VALUES (769,'Cebu','PHL','Central Visayas',718821);
-INSERT INTO City VALUES (770,'Zamboanga','PHL','Western Mindanao',601794);
-INSERT INTO City VALUES (771,'Pasig','PHL','National Capital Reg',505058);
-INSERT INTO City VALUES (772,'Valenzuela','PHL','National Capital Reg',485433);
-INSERT INTO City VALUES (773,'Las Pi�as','PHL','National Capital Reg',472780);
-INSERT INTO City VALUES (774,'Antipolo','PHL','Southern Tagalog',470866);
-INSERT INTO City VALUES (775,'Taguig','PHL','National Capital Reg',467375);
-INSERT INTO City VALUES (776,'Cagayan de Oro','PHL','Northern Mindanao',461877);
-INSERT INTO City VALUES (777,'Para�aque','PHL','National Capital Reg',449811);
-INSERT INTO City VALUES (778,'Makati','PHL','National Capital Reg',444867);
-INSERT INTO City VALUES (779,'Bacolod','PHL','Western Visayas',429076);
-INSERT INTO City VALUES (780,'General Santos','PHL','Southern Mindanao',411822);
-INSERT INTO City VALUES (781,'Marikina','PHL','National Capital Reg',391170);
-INSERT INTO City VALUES (782,'Dasmari�as','PHL','Southern Tagalog',379520);
-INSERT INTO City VALUES (783,'Muntinlupa','PHL','National Capital Reg',379310);
-INSERT INTO City VALUES (784,'Iloilo','PHL','Western Visayas',365820);
-INSERT INTO City VALUES (785,'Pasay','PHL','National Capital Reg',354908);
-INSERT INTO City VALUES (786,'Malabon','PHL','National Capital Reg',338855);
-INSERT INTO City VALUES (787,'San Jos� del Monte','PHL','Central Luzon',315807);
-INSERT INTO City VALUES (788,'Bacoor','PHL','Southern Tagalog',305699);
-INSERT INTO City VALUES (789,'Iligan','PHL','Central Mindanao',285061);
-INSERT INTO City VALUES (790,'Calamba','PHL','Southern Tagalog',281146);
-INSERT INTO City VALUES (791,'Mandaluyong','PHL','National Capital Reg',278474);
-INSERT INTO City VALUES (792,'Butuan','PHL','Caraga',267279);
-INSERT INTO City VALUES (793,'Angeles','PHL','Central Luzon',263971);
-INSERT INTO City VALUES (794,'Tarlac','PHL','Central Luzon',262481);
-INSERT INTO City VALUES (795,'Mandaue','PHL','Central Visayas',259728);
-INSERT INTO City VALUES (796,'Baguio','PHL','CAR',252386);
-INSERT INTO City VALUES (797,'Batangas','PHL','Southern Tagalog',247588);
-INSERT INTO City VALUES (798,'Cainta','PHL','Southern Tagalog',242511);
-INSERT INTO City VALUES (799,'San Pedro','PHL','Southern Tagalog',231403);
-INSERT INTO City VALUES (800,'Navotas','PHL','National Capital Reg',230403);
-INSERT INTO City VALUES (801,'Cabanatuan','PHL','Central Luzon',222859);
-INSERT INTO City VALUES (802,'San Fernando','PHL','Central Luzon',221857);
-INSERT INTO City VALUES (803,'Lipa','PHL','Southern Tagalog',218447);
-INSERT INTO City VALUES (804,'Lapu-Lapu','PHL','Central Visayas',217019);
-INSERT INTO City VALUES (805,'San Pablo','PHL','Southern Tagalog',207927);
-INSERT INTO City VALUES (806,'Bi�an','PHL','Southern Tagalog',201186);
-INSERT INTO City VALUES (807,'Taytay','PHL','Southern Tagalog',198183);
-INSERT INTO City VALUES (808,'Lucena','PHL','Southern Tagalog',196075);
-INSERT INTO City VALUES (809,'Imus','PHL','Southern Tagalog',195482);
-INSERT INTO City VALUES (810,'Olongapo','PHL','Central Luzon',194260);
-INSERT INTO City VALUES (811,'Binangonan','PHL','Southern Tagalog',187691);
-INSERT INTO City VALUES (812,'Santa Rosa','PHL','Southern Tagalog',185633);
-INSERT INTO City VALUES (813,'Tagum','PHL','Southern Mindanao',179531);
-INSERT INTO City VALUES (814,'Tacloban','PHL','Eastern Visayas',178639);
-INSERT INTO City VALUES (815,'Malolos','PHL','Central Luzon',175291);
-INSERT INTO City VALUES (816,'Mabalacat','PHL','Central Luzon',171045);
-INSERT INTO City VALUES (817,'Cotabato','PHL','Central Mindanao',163849);
-INSERT INTO City VALUES (818,'Meycauayan','PHL','Central Luzon',163037);
-INSERT INTO City VALUES (819,'Puerto Princesa','PHL','Southern Tagalog',161912);
-INSERT INTO City VALUES (820,'Legazpi','PHL','Bicol',157010);
-INSERT INTO City VALUES (821,'Silang','PHL','Southern Tagalog',156137);
-INSERT INTO City VALUES (822,'Ormoc','PHL','Eastern Visayas',154297);
-INSERT INTO City VALUES (823,'San Carlos','PHL','Ilocos',154264);
-INSERT INTO City VALUES (824,'Kabankalan','PHL','Western Visayas',149769);
-INSERT INTO City VALUES (825,'Talisay','PHL','Central Visayas',148110);
-INSERT INTO City VALUES (826,'Valencia','PHL','Northern Mindanao',147924);
-INSERT INTO City VALUES (827,'Calbayog','PHL','Eastern Visayas',147187);
-INSERT INTO City VALUES (828,'Santa Maria','PHL','Central Luzon',144282);
-INSERT INTO City VALUES (829,'Pagadian','PHL','Western Mindanao',142515);
-INSERT INTO City VALUES (830,'Cadiz','PHL','Western Visayas',141954);
-INSERT INTO City VALUES (831,'Bago','PHL','Western Visayas',141721);
-INSERT INTO City VALUES (832,'Toledo','PHL','Central Visayas',141174);
-INSERT INTO City VALUES (833,'Naga','PHL','Bicol',137810);
-INSERT INTO City VALUES (834,'San Mateo','PHL','Southern Tagalog',135603);
-INSERT INTO City VALUES (835,'Panabo','PHL','Southern Mindanao',133950);
-INSERT INTO City VALUES (836,'Koronadal','PHL','Southern Mindanao',133786);
-INSERT INTO City VALUES (837,'Marawi','PHL','Central Mindanao',131090);
-INSERT INTO City VALUES (838,'Dagupan','PHL','Ilocos',130328);
-INSERT INTO City VALUES (839,'Sagay','PHL','Western Visayas',129765);
-INSERT INTO City VALUES (840,'Roxas','PHL','Western Visayas',126352);
-INSERT INTO City VALUES (841,'Lubao','PHL','Central Luzon',125699);
-INSERT INTO City VALUES (842,'Digos','PHL','Southern Mindanao',125171);
-INSERT INTO City VALUES (843,'San Miguel','PHL','Central Luzon',123824);
-INSERT INTO City VALUES (844,'Malaybalay','PHL','Northern Mindanao',123672);
-INSERT INTO City VALUES (845,'Tuguegarao','PHL','Cagayan Valley',120645);
-INSERT INTO City VALUES (846,'Ilagan','PHL','Cagayan Valley',119990);
-INSERT INTO City VALUES (847,'Baliuag','PHL','Central Luzon',119675);
-INSERT INTO City VALUES (848,'Surigao','PHL','Caraga',118534);
-INSERT INTO City VALUES (849,'San Carlos','PHL','Western Visayas',118259);
-INSERT INTO City VALUES (850,'San Juan del Monte','PHL','National Capital Reg',117680);
-INSERT INTO City VALUES (851,'Tanauan','PHL','Southern Tagalog',117539);
-INSERT INTO City VALUES (852,'Concepcion','PHL','Central Luzon',115171);
-INSERT INTO City VALUES (853,'Rodriguez (Montalban)','PHL','Southern Tagalog',115167);
-INSERT INTO City VALUES (854,'Sariaya','PHL','Southern Tagalog',114568);
-INSERT INTO City VALUES (855,'Malasiqui','PHL','Ilocos',113190);
-INSERT INTO City VALUES (856,'General Mariano Alvarez','PHL','Southern Tagalog',112446);
-INSERT INTO City VALUES (857,'Urdaneta','PHL','Ilocos',111582);
-INSERT INTO City VALUES (858,'Hagonoy','PHL','Central Luzon',111425);
-INSERT INTO City VALUES (859,'San Jose','PHL','Southern Tagalog',111009);
-INSERT INTO City VALUES (860,'Polomolok','PHL','Southern Mindanao',110709);
-INSERT INTO City VALUES (861,'Santiago','PHL','Cagayan Valley',110531);
-INSERT INTO City VALUES (862,'Tanza','PHL','Southern Tagalog',110517);
-INSERT INTO City VALUES (863,'Ozamis','PHL','Northern Mindanao',110420);
-INSERT INTO City VALUES (864,'Mexico','PHL','Central Luzon',109481);
-INSERT INTO City VALUES (865,'San Jose','PHL','Central Luzon',108254);
-INSERT INTO City VALUES (866,'Silay','PHL','Western Visayas',107722);
-INSERT INTO City VALUES (867,'General Trias','PHL','Southern Tagalog',107691);
-INSERT INTO City VALUES (868,'Tabaco','PHL','Bicol',107166);
-INSERT INTO City VALUES (869,'Cabuyao','PHL','Southern Tagalog',106630);
-INSERT INTO City VALUES (870,'Calapan','PHL','Southern Tagalog',105910);
-INSERT INTO City VALUES (871,'Mati','PHL','Southern Mindanao',105908);
-INSERT INTO City VALUES (872,'Midsayap','PHL','Central Mindanao',105760);
-INSERT INTO City VALUES (873,'Cauayan','PHL','Cagayan Valley',103952);
-INSERT INTO City VALUES (874,'Gingoog','PHL','Northern Mindanao',102379);
-INSERT INTO City VALUES (875,'Dumaguete','PHL','Central Visayas',102265);
-INSERT INTO City VALUES (876,'San Fernando','PHL','Ilocos',102082);
-INSERT INTO City VALUES (877,'Arayat','PHL','Central Luzon',101792);
-INSERT INTO City VALUES (878,'Bayawan (Tulong)','PHL','Central Visayas',101391);
-INSERT INTO City VALUES (879,'Kidapawan','PHL','Central Mindanao',101205);
-INSERT INTO City VALUES (880,'Daraga (Locsin)','PHL','Bicol',101031);
-INSERT INTO City VALUES (881,'Marilao','PHL','Central Luzon',101017);
-INSERT INTO City VALUES (882,'Malita','PHL','Southern Mindanao',100000);
-INSERT INTO City VALUES (883,'Dipolog','PHL','Western Mindanao',99862);
-INSERT INTO City VALUES (884,'Cavite','PHL','Southern Tagalog',99367);
-INSERT INTO City VALUES (885,'Danao','PHL','Central Visayas',98781);
-INSERT INTO City VALUES (886,'Bislig','PHL','Caraga',97860);
-INSERT INTO City VALUES (887,'Talavera','PHL','Central Luzon',97329);
-INSERT INTO City VALUES (888,'Guagua','PHL','Central Luzon',96858);
-INSERT INTO City VALUES (889,'Bayambang','PHL','Ilocos',96609);
-INSERT INTO City VALUES (890,'Nasugbu','PHL','Southern Tagalog',96113);
-INSERT INTO City VALUES (891,'Baybay','PHL','Eastern Visayas',95630);
-INSERT INTO City VALUES (892,'Capas','PHL','Central Luzon',95219);
-INSERT INTO City VALUES (893,'Sultan Kudarat','PHL','ARMM',94861);
-INSERT INTO City VALUES (894,'Laoag','PHL','Ilocos',94466);
-INSERT INTO City VALUES (895,'Bayugan','PHL','Caraga',93623);
-INSERT INTO City VALUES (896,'Malungon','PHL','Southern Mindanao',93232);
-INSERT INTO City VALUES (897,'Santa Cruz','PHL','Southern Tagalog',92694);
-INSERT INTO City VALUES (898,'Sorsogon','PHL','Bicol',92512);
-INSERT INTO City VALUES (899,'Candelaria','PHL','Southern Tagalog',92429);
-INSERT INTO City VALUES (900,'Ligao','PHL','Bicol',90603);
-INSERT INTO City VALUES (901,'T�rshavn','FRO','Streymoyar',14542);
-INSERT INTO City VALUES (902,'Libreville','GAB','Estuaire',419000);
-INSERT INTO City VALUES (903,'Serekunda','GMB','Kombo St Mary',102600);
-INSERT INTO City VALUES (904,'Banjul','GMB','Banjul',42326);
-INSERT INTO City VALUES (905,'Tbilisi','GEO','Tbilisi',1235200);
-INSERT INTO City VALUES (906,'Kutaisi','GEO','Imereti',240900);
-INSERT INTO City VALUES (907,'Rustavi','GEO','Kvemo Kartli',155400);
-INSERT INTO City VALUES (908,'Batumi','GEO','Adzaria [At�ara]',137700);
-INSERT INTO City VALUES (909,'Sohumi','GEO','Abhasia [Aphazeti]',111700);
-INSERT INTO City VALUES (910,'Accra','GHA','Greater Accra',1070000);
-INSERT INTO City VALUES (911,'Kumasi','GHA','Ashanti',385192);
-INSERT INTO City VALUES (912,'Tamale','GHA','Northern',151069);
-INSERT INTO City VALUES (913,'Tema','GHA','Greater Accra',109975);
-INSERT INTO City VALUES (914,'Sekondi-Takoradi','GHA','Western',103653);
-INSERT INTO City VALUES (915,'Gibraltar','GIB','�',27025);
-INSERT INTO City VALUES (916,'Saint George�s','GRD','St George',4621);
-INSERT INTO City VALUES (917,'Nuuk','GRL','Kitaa',13445);
-INSERT INTO City VALUES (918,'Les Abymes','GLP','Grande-Terre',62947);
-INSERT INTO City VALUES (919,'Basse-Terre','GLP','Basse-Terre',12433);
-INSERT INTO City VALUES (920,'Tamuning','GUM','�',9500);
-INSERT INTO City VALUES (921,'Aga�a','GUM','�',1139);
-INSERT INTO City VALUES (922,'Ciudad de Guatemala','GTM','Guatemala',823301);
-INSERT INTO City VALUES (923,'Mixco','GTM','Guatemala',209791);
-INSERT INTO City VALUES (924,'Villa Nueva','GTM','Guatemala',101295);
-INSERT INTO City VALUES (925,'Quetzaltenango','GTM','Quetzaltenango',90801);
-INSERT INTO City VALUES (926,'Conakry','GIN','Conakry',1090610);
-INSERT INTO City VALUES (927,'Bissau','GNB','Bissau',241000);
-INSERT INTO City VALUES (928,'Georgetown','GUY','Georgetown',254000);
-INSERT INTO City VALUES (929,'Port-au-Prince','HTI','Ouest',884472);
-INSERT INTO City VALUES (930,'Carrefour','HTI','Ouest',290204);
-INSERT INTO City VALUES (931,'Delmas','HTI','Ouest',240429);
-INSERT INTO City VALUES (932,'Le-Cap-Ha�tien','HTI','Nord',102233);
-INSERT INTO City VALUES (933,'Tegucigalpa','HND','Distrito Central',813900);
-INSERT INTO City VALUES (934,'San Pedro Sula','HND','Cort�s',383900);
-INSERT INTO City VALUES (935,'La Ceiba','HND','Atl�ntida',89200);
-INSERT INTO City VALUES (936,'Kowloon and New Kowloon','HKG','Kowloon and New Kowl',1987996);
-INSERT INTO City VALUES (937,'Victoria','HKG','Hongkong',1312637);
-INSERT INTO City VALUES (938,'Longyearbyen','SJM','L�nsimaa',1438);
-INSERT INTO City VALUES (939,'Jakarta','IDN','Jakarta Raya',9604900);
-INSERT INTO City VALUES (940,'Surabaya','IDN','East Java',2663820);
-INSERT INTO City VALUES (941,'Bandung','IDN','West Java',2429000);
-INSERT INTO City VALUES (942,'Medan','IDN','Sumatera Utara',1843919);
-INSERT INTO City VALUES (943,'Palembang','IDN','Sumatera Selatan',1222764);
-INSERT INTO City VALUES (944,'Tangerang','IDN','West Java',1198300);
-INSERT INTO City VALUES (945,'Semarang','IDN','Central Java',1104405);
-INSERT INTO City VALUES (946,'Ujung Pandang','IDN','Sulawesi Selatan',1060257);
-INSERT INTO City VALUES (947,'Malang','IDN','East Java',716862);
-INSERT INTO City VALUES (948,'Bandar Lampung','IDN','Lampung',680332);
-INSERT INTO City VALUES (949,'Bekasi','IDN','West Java',644300);
-INSERT INTO City VALUES (950,'Padang','IDN','Sumatera Barat',534474);
-INSERT INTO City VALUES (951,'Surakarta','IDN','Central Java',518600);
-INSERT INTO City VALUES (952,'Banjarmasin','IDN','Kalimantan Selatan',482931);
-INSERT INTO City VALUES (953,'Pekan Baru','IDN','Riau',438638);
-INSERT INTO City VALUES (954,'Denpasar','IDN','Bali',435000);
-INSERT INTO City VALUES (955,'Yogyakarta','IDN','Yogyakarta',418944);
-INSERT INTO City VALUES (956,'Pontianak','IDN','Kalimantan Barat',409632);
-INSERT INTO City VALUES (957,'Samarinda','IDN','Kalimantan Timur',399175);
-INSERT INTO City VALUES (958,'Jambi','IDN','Jambi',385201);
-INSERT INTO City VALUES (959,'Depok','IDN','West Java',365200);
-INSERT INTO City VALUES (960,'Cimahi','IDN','West Java',344600);
-INSERT INTO City VALUES (961,'Balikpapan','IDN','Kalimantan Timur',338752);
-INSERT INTO City VALUES (962,'Manado','IDN','Sulawesi Utara',332288);
-INSERT INTO City VALUES (963,'Mataram','IDN','Nusa Tenggara Barat',306600);
-INSERT INTO City VALUES (964,'Pekalongan','IDN','Central Java',301504);
-INSERT INTO City VALUES (965,'Tegal','IDN','Central Java',289744);
-INSERT INTO City VALUES (966,'Bogor','IDN','West Java',285114);
-INSERT INTO City VALUES (967,'Ciputat','IDN','West Java',270800);
-INSERT INTO City VALUES (968,'Pondokgede','IDN','West Java',263200);
-INSERT INTO City VALUES (969,'Cirebon','IDN','West Java',254406);
-INSERT INTO City VALUES (970,'Kediri','IDN','East Java',253760);
-INSERT INTO City VALUES (971,'Ambon','IDN','Molukit',249312);
-INSERT INTO City VALUES (972,'Jember','IDN','East Java',218500);
-INSERT INTO City VALUES (973,'Cilacap','IDN','Central Java',206900);
-INSERT INTO City VALUES (974,'Cimanggis','IDN','West Java',205100);
-INSERT INTO City VALUES (975,'Pematang Siantar','IDN','Sumatera Utara',203056);
-INSERT INTO City VALUES (976,'Purwokerto','IDN','Central Java',202500);
-INSERT INTO City VALUES (977,'Ciomas','IDN','West Java',187400);
-INSERT INTO City VALUES (978,'Tasikmalaya','IDN','West Java',179800);
-INSERT INTO City VALUES (979,'Madiun','IDN','East Java',171532);
-INSERT INTO City VALUES (980,'Bengkulu','IDN','Bengkulu',146439);
-INSERT INTO City VALUES (981,'Karawang','IDN','West Java',145000);
-INSERT INTO City VALUES (982,'Banda Aceh','IDN','Aceh',143409);
-INSERT INTO City VALUES (983,'Palu','IDN','Sulawesi Tengah',142800);
-INSERT INTO City VALUES (984,'Pasuruan','IDN','East Java',134019);
-INSERT INTO City VALUES (985,'Kupang','IDN','Nusa Tenggara Timur',129300);
-INSERT INTO City VALUES (986,'Tebing Tinggi','IDN','Sumatera Utara',129300);
-INSERT INTO City VALUES (987,'Percut Sei Tuan','IDN','Sumatera Utara',129000);
-INSERT INTO City VALUES (988,'Binjai','IDN','Sumatera Utara',127222);
-INSERT INTO City VALUES (989,'Sukabumi','IDN','West Java',125766);
-INSERT INTO City VALUES (990,'Waru','IDN','East Java',124300);
-INSERT INTO City VALUES (991,'Pangkal Pinang','IDN','Sumatera Selatan',124000);
-INSERT INTO City VALUES (992,'Magelang','IDN','Central Java',123800);
-INSERT INTO City VALUES (993,'Blitar','IDN','East Java',122600);
-INSERT INTO City VALUES (994,'Serang','IDN','West Java',122400);
-INSERT INTO City VALUES (995,'Probolinggo','IDN','East Java',120770);
-INSERT INTO City VALUES (996,'Cilegon','IDN','West Java',117000);
-INSERT INTO City VALUES (997,'Cianjur','IDN','West Java',114300);
-INSERT INTO City VALUES (998,'Ciparay','IDN','West Java',111500);
-INSERT INTO City VALUES (999,'Lhokseumawe','IDN','Aceh',109600);
-INSERT INTO City VALUES (1000,'Taman','IDN','East Java',107000);
-INSERT INTO City VALUES (1001,'Depok','IDN','Yogyakarta',106800);
-INSERT INTO City VALUES (1002,'Citeureup','IDN','West Java',105100);
-INSERT INTO City VALUES (1003,'Pemalang','IDN','Central Java',103500);
-INSERT INTO City VALUES (1004,'Klaten','IDN','Central Java',103300);
-INSERT INTO City VALUES (1005,'Salatiga','IDN','Central Java',103000);
-INSERT INTO City VALUES (1006,'Cibinong','IDN','West Java',101300);
-INSERT INTO City VALUES (1007,'Palangka Raya','IDN','Kalimantan Tengah',99693);
-INSERT INTO City VALUES (1008,'Mojokerto','IDN','East Java',96626);
-INSERT INTO City VALUES (1009,'Purwakarta','IDN','West Java',95900);
-INSERT INTO City VALUES (1010,'Garut','IDN','West Java',95800);
-INSERT INTO City VALUES (1011,'Kudus','IDN','Central Java',95300);
-INSERT INTO City VALUES (1012,'Kendari','IDN','Sulawesi Tenggara',94800);
-INSERT INTO City VALUES (1013,'Jaya Pura','IDN','West Irian',94700);
-INSERT INTO City VALUES (1014,'Gorontalo','IDN','Sulawesi Utara',94058);
-INSERT INTO City VALUES (1015,'Majalaya','IDN','West Java',93200);
-INSERT INTO City VALUES (1016,'Pondok Aren','IDN','West Java',92700);
-INSERT INTO City VALUES (1017,'Jombang','IDN','East Java',92600);
-INSERT INTO City VALUES (1018,'Sunggal','IDN','Sumatera Utara',92300);
-INSERT INTO City VALUES (1019,'Batam','IDN','Riau',91871);
-INSERT INTO City VALUES (1020,'Padang Sidempuan','IDN','Sumatera Utara',91200);
-INSERT INTO City VALUES (1021,'Sawangan','IDN','West Java',91100);
-INSERT INTO City VALUES (1022,'Banyuwangi','IDN','East Java',89900);
-INSERT INTO City VALUES (1023,'Tanjung Pinang','IDN','Riau',89900);
-INSERT INTO City VALUES (1024,'Mumbai (Bombay)','IND','Maharashtra',10500000);
-INSERT INTO City VALUES (1025,'Delhi','IND','Delhi',7206704);
-INSERT INTO City VALUES (1026,'Calcutta [Kolkata]','IND','West Bengali',4399819);
-INSERT INTO City VALUES (1027,'Chennai (Madras)','IND','Tamil Nadu',3841396);
-INSERT INTO City VALUES (1028,'Hyderabad','IND','Andhra Pradesh',2964638);
-INSERT INTO City VALUES (1029,'Ahmedabad','IND','Gujarat',2876710);
-INSERT INTO City VALUES (1030,'Bangalore','IND','Karnataka',2660088);
-INSERT INTO City VALUES (1031,'Kanpur','IND','Uttar Pradesh',1874409);
-INSERT INTO City VALUES (1032,'Nagpur','IND','Maharashtra',1624752);
-INSERT INTO City VALUES (1033,'Lucknow','IND','Uttar Pradesh',1619115);
-INSERT INTO City VALUES (1034,'Pune','IND','Maharashtra',1566651);
-INSERT INTO City VALUES (1035,'Surat','IND','Gujarat',1498817);
-INSERT INTO City VALUES (1036,'Jaipur','IND','Rajasthan',1458483);
-INSERT INTO City VALUES (1037,'Indore','IND','Madhya Pradesh',1091674);
-INSERT INTO City VALUES (1038,'Bhopal','IND','Madhya Pradesh',1062771);
-INSERT INTO City VALUES (1039,'Ludhiana','IND','Punjab',1042740);
-INSERT INTO City VALUES (1040,'Vadodara (Baroda)','IND','Gujarat',1031346);
-INSERT INTO City VALUES (1041,'Kalyan','IND','Maharashtra',1014557);
-INSERT INTO City VALUES (1042,'Madurai','IND','Tamil Nadu',977856);
-INSERT INTO City VALUES (1043,'Haora (Howrah)','IND','West Bengali',950435);
-INSERT INTO City VALUES (1044,'Varanasi (Benares)','IND','Uttar Pradesh',929270);
-INSERT INTO City VALUES (1045,'Patna','IND','Bihar',917243);
-INSERT INTO City VALUES (1046,'Srinagar','IND','Jammu and Kashmir',892506);
-INSERT INTO City VALUES (1047,'Agra','IND','Uttar Pradesh',891790);
-INSERT INTO City VALUES (1048,'Coimbatore','IND','Tamil Nadu',816321);
-INSERT INTO City VALUES (1049,'Thane (Thana)','IND','Maharashtra',803389);
-INSERT INTO City VALUES (1050,'Allahabad','IND','Uttar Pradesh',792858);
-INSERT INTO City VALUES (1051,'Meerut','IND','Uttar Pradesh',753778);
-INSERT INTO City VALUES (1052,'Vishakhapatnam','IND','Andhra Pradesh',752037);
-INSERT INTO City VALUES (1053,'Jabalpur','IND','Madhya Pradesh',741927);
-INSERT INTO City VALUES (1054,'Amritsar','IND','Punjab',708835);
-INSERT INTO City VALUES (1055,'Faridabad','IND','Haryana',703592);
-INSERT INTO City VALUES (1056,'Vijayawada','IND','Andhra Pradesh',701827);
-INSERT INTO City VALUES (1057,'Gwalior','IND','Madhya Pradesh',690765);
-INSERT INTO City VALUES (1058,'Jodhpur','IND','Rajasthan',666279);
-INSERT INTO City VALUES (1059,'Nashik (Nasik)','IND','Maharashtra',656925);
-INSERT INTO City VALUES (1060,'Hubli-Dharwad','IND','Karnataka',648298);
-INSERT INTO City VALUES (1061,'Solapur (Sholapur)','IND','Maharashtra',604215);
-INSERT INTO City VALUES (1062,'Ranchi','IND','Jharkhand',599306);
-INSERT INTO City VALUES (1063,'Bareilly','IND','Uttar Pradesh',587211);
-INSERT INTO City VALUES (1064,'Guwahati (Gauhati)','IND','Assam',584342);
-INSERT INTO City VALUES (1065,'Shambajinagar (Aurangabad)','IND','Maharashtra',573272);
-INSERT INTO City VALUES (1066,'Cochin (Kochi)','IND','Kerala',564589);
-INSERT INTO City VALUES (1067,'Rajkot','IND','Gujarat',559407);
-INSERT INTO City VALUES (1068,'Kota','IND','Rajasthan',537371);
-INSERT INTO City VALUES (1069,'Thiruvananthapuram (Trivandrum','IND','Kerala',524006);
-INSERT INTO City VALUES (1070,'Pimpri-Chinchwad','IND','Maharashtra',517083);
-INSERT INTO City VALUES (1071,'Jalandhar (Jullundur)','IND','Punjab',509510);
-INSERT INTO City VALUES (1072,'Gorakhpur','IND','Uttar Pradesh',505566);
-INSERT INTO City VALUES (1073,'Chandigarh','IND','Chandigarh',504094);
-INSERT INTO City VALUES (1074,'Mysore','IND','Karnataka',480692);
-INSERT INTO City VALUES (1075,'Aligarh','IND','Uttar Pradesh',480520);
-INSERT INTO City VALUES (1076,'Guntur','IND','Andhra Pradesh',471051);
-INSERT INTO City VALUES (1077,'Jamshedpur','IND','Jharkhand',460577);
-INSERT INTO City VALUES (1078,'Ghaziabad','IND','Uttar Pradesh',454156);
-INSERT INTO City VALUES (1079,'Warangal','IND','Andhra Pradesh',447657);
-INSERT INTO City VALUES (1080,'Raipur','IND','Chhatisgarh',438639);
-INSERT INTO City VALUES (1081,'Moradabad','IND','Uttar Pradesh',429214);
-INSERT INTO City VALUES (1082,'Durgapur','IND','West Bengali',425836);
-INSERT INTO City VALUES (1083,'Amravati','IND','Maharashtra',421576);
-INSERT INTO City VALUES (1084,'Calicut (Kozhikode)','IND','Kerala',419831);
-INSERT INTO City VALUES (1085,'Bikaner','IND','Rajasthan',416289);
-INSERT INTO City VALUES (1086,'Bhubaneswar','IND','Orissa',411542);
-INSERT INTO City VALUES (1087,'Kolhapur','IND','Maharashtra',406370);
-INSERT INTO City VALUES (1088,'Kataka (Cuttack)','IND','Orissa',403418);
-INSERT INTO City VALUES (1089,'Ajmer','IND','Rajasthan',402700);
-INSERT INTO City VALUES (1090,'Bhavnagar','IND','Gujarat',402338);
-INSERT INTO City VALUES (1091,'Tiruchirapalli','IND','Tamil Nadu',387223);
-INSERT INTO City VALUES (1092,'Bhilai','IND','Chhatisgarh',386159);
-INSERT INTO City VALUES (1093,'Bhiwandi','IND','Maharashtra',379070);
-INSERT INTO City VALUES (1094,'Saharanpur','IND','Uttar Pradesh',374945);
-INSERT INTO City VALUES (1095,'Ulhasnagar','IND','Maharashtra',369077);
-INSERT INTO City VALUES (1096,'Salem','IND','Tamil Nadu',366712);
-INSERT INTO City VALUES (1097,'Ujjain','IND','Madhya Pradesh',362266);
-INSERT INTO City VALUES (1098,'Malegaon','IND','Maharashtra',342595);
-INSERT INTO City VALUES (1099,'Jamnagar','IND','Gujarat',341637);
-INSERT INTO City VALUES (1100,'Bokaro Steel City','IND','Jharkhand',333683);
-INSERT INTO City VALUES (1101,'Akola','IND','Maharashtra',328034);
-INSERT INTO City VALUES (1102,'Belgaum','IND','Karnataka',326399);
-INSERT INTO City VALUES (1103,'Rajahmundry','IND','Andhra Pradesh',324851);
-INSERT INTO City VALUES (1104,'Nellore','IND','Andhra Pradesh',316606);
-INSERT INTO City VALUES (1105,'Udaipur','IND','Rajasthan',308571);
-INSERT INTO City VALUES (1106,'New Bombay','IND','Maharashtra',307297);
-INSERT INTO City VALUES (1107,'Bhatpara','IND','West Bengali',304952);
-INSERT INTO City VALUES (1108,'Gulbarga','IND','Karnataka',304099);
-INSERT INTO City VALUES (1109,'New Delhi','IND','Delhi',301297);
-INSERT INTO City VALUES (1110,'Jhansi','IND','Uttar Pradesh',300850);
-INSERT INTO City VALUES (1111,'Gaya','IND','Bihar',291675);
-INSERT INTO City VALUES (1112,'Kakinada','IND','Andhra Pradesh',279980);
-INSERT INTO City VALUES (1113,'Dhule (Dhulia)','IND','Maharashtra',278317);
-INSERT INTO City VALUES (1114,'Panihati','IND','West Bengali',275990);
-INSERT INTO City VALUES (1115,'Nanded (Nander)','IND','Maharashtra',275083);
-INSERT INTO City VALUES (1116,'Mangalore','IND','Karnataka',273304);
-INSERT INTO City VALUES (1117,'Dehra Dun','IND','Uttaranchal',270159);
-INSERT INTO City VALUES (1118,'Kamarhati','IND','West Bengali',266889);
-INSERT INTO City VALUES (1119,'Davangere','IND','Karnataka',266082);
-INSERT INTO City VALUES (1120,'Asansol','IND','West Bengali',262188);
-INSERT INTO City VALUES (1121,'Bhagalpur','IND','Bihar',253225);
-INSERT INTO City VALUES (1122,'Bellary','IND','Karnataka',245391);
-INSERT INTO City VALUES (1123,'Barddhaman (Burdwan)','IND','West Bengali',245079);
-INSERT INTO City VALUES (1124,'Rampur','IND','Uttar Pradesh',243742);
-INSERT INTO City VALUES (1125,'Jalgaon','IND','Maharashtra',242193);
-INSERT INTO City VALUES (1126,'Muzaffarpur','IND','Bihar',241107);
-INSERT INTO City VALUES (1127,'Nizamabad','IND','Andhra Pradesh',241034);
-INSERT INTO City VALUES (1128,'Muzaffarnagar','IND','Uttar Pradesh',240609);
-INSERT INTO City VALUES (1129,'Patiala','IND','Punjab',238368);
-INSERT INTO City VALUES (1130,'Shahjahanpur','IND','Uttar Pradesh',237713);
-INSERT INTO City VALUES (1131,'Kurnool','IND','Andhra Pradesh',236800);
-INSERT INTO City VALUES (1132,'Tiruppur (Tirupper)','IND','Tamil Nadu',235661);
-INSERT INTO City VALUES (1133,'Rohtak','IND','Haryana',233400);
-INSERT INTO City VALUES (1134,'South Dum Dum','IND','West Bengali',232811);
-INSERT INTO City VALUES (1135,'Mathura','IND','Uttar Pradesh',226691);
-INSERT INTO City VALUES (1136,'Chandrapur','IND','Maharashtra',226105);
-INSERT INTO City VALUES (1137,'Barahanagar (Baranagar)','IND','West Bengali',224821);
-INSERT INTO City VALUES (1138,'Darbhanga','IND','Bihar',218391);
-INSERT INTO City VALUES (1139,'Siliguri (Shiliguri)','IND','West Bengali',216950);
-INSERT INTO City VALUES (1140,'Raurkela','IND','Orissa',215489);
-INSERT INTO City VALUES (1141,'Ambattur','IND','Tamil Nadu',215424);
-INSERT INTO City VALUES (1142,'Panipat','IND','Haryana',215218);
-INSERT INTO City VALUES (1143,'Firozabad','IND','Uttar Pradesh',215128);
-INSERT INTO City VALUES (1144,'Ichalkaranji','IND','Maharashtra',214950);
-INSERT INTO City VALUES (1145,'Jammu','IND','Jammu and Kashmir',214737);
-INSERT INTO City VALUES (1146,'Ramagundam','IND','Andhra Pradesh',214384);
-INSERT INTO City VALUES (1147,'Eluru','IND','Andhra Pradesh',212866);
-INSERT INTO City VALUES (1148,'Brahmapur','IND','Orissa',210418);
-INSERT INTO City VALUES (1149,'Alwar','IND','Rajasthan',205086);
-INSERT INTO City VALUES (1150,'Pondicherry','IND','Pondicherry',203065);
-INSERT INTO City VALUES (1151,'Thanjavur','IND','Tamil Nadu',202013);
-INSERT INTO City VALUES (1152,'Bihar Sharif','IND','Bihar',201323);
-INSERT INTO City VALUES (1153,'Tuticorin','IND','Tamil Nadu',199854);
-INSERT INTO City VALUES (1154,'Imphal','IND','Manipur',198535);
-INSERT INTO City VALUES (1155,'Latur','IND','Maharashtra',197408);
-INSERT INTO City VALUES (1156,'Sagar','IND','Madhya Pradesh',195346);
-INSERT INTO City VALUES (1157,'Farrukhabad-cum-Fatehgarh','IND','Uttar Pradesh',194567);
-INSERT INTO City VALUES (1158,'Sangli','IND','Maharashtra',193197);
-INSERT INTO City VALUES (1159,'Parbhani','IND','Maharashtra',190255);
-INSERT INTO City VALUES (1160,'Nagar Coil','IND','Tamil Nadu',190084);
-INSERT INTO City VALUES (1161,'Bijapur','IND','Karnataka',186939);
-INSERT INTO City VALUES (1162,'Kukatpalle','IND','Andhra Pradesh',185378);
-INSERT INTO City VALUES (1163,'Bally','IND','West Bengali',184474);
-INSERT INTO City VALUES (1164,'Bhilwara','IND','Rajasthan',183965);
-INSERT INTO City VALUES (1165,'Ratlam','IND','Madhya Pradesh',183375);
-INSERT INTO City VALUES (1166,'Avadi','IND','Tamil Nadu',183215);
-INSERT INTO City VALUES (1167,'Dindigul','IND','Tamil Nadu',182477);
-INSERT INTO City VALUES (1168,'Ahmadnagar','IND','Maharashtra',181339);
-INSERT INTO City VALUES (1169,'Bilaspur','IND','Chhatisgarh',179833);
-INSERT INTO City VALUES (1170,'Shimoga','IND','Karnataka',179258);
-INSERT INTO City VALUES (1171,'Kharagpur','IND','West Bengali',177989);
-INSERT INTO City VALUES (1172,'Mira Bhayandar','IND','Maharashtra',175372);
-INSERT INTO City VALUES (1173,'Vellore','IND','Tamil Nadu',175061);
-INSERT INTO City VALUES (1174,'Jalna','IND','Maharashtra',174985);
-INSERT INTO City VALUES (1175,'Burnpur','IND','West Bengali',174933);
-INSERT INTO City VALUES (1176,'Anantapur','IND','Andhra Pradesh',174924);
-INSERT INTO City VALUES (1177,'Allappuzha (Alleppey)','IND','Kerala',174666);
-INSERT INTO City VALUES (1178,'Tirupati','IND','Andhra Pradesh',174369);
-INSERT INTO City VALUES (1179,'Karnal','IND','Haryana',173751);
-INSERT INTO City VALUES (1180,'Burhanpur','IND','Madhya Pradesh',172710);
-INSERT INTO City VALUES (1181,'Hisar (Hissar)','IND','Haryana',172677);
-INSERT INTO City VALUES (1182,'Tiruvottiyur','IND','Tamil Nadu',172562);
-INSERT INTO City VALUES (1183,'Mirzapur-cum-Vindhyachal','IND','Uttar Pradesh',169336);
-INSERT INTO City VALUES (1184,'Secunderabad','IND','Andhra Pradesh',167461);
-INSERT INTO City VALUES (1185,'Nadiad','IND','Gujarat',167051);
-INSERT INTO City VALUES (1186,'Dewas','IND','Madhya Pradesh',164364);
-INSERT INTO City VALUES (1187,'Murwara (Katni)','IND','Madhya Pradesh',163431);
-INSERT INTO City VALUES (1188,'Ganganagar','IND','Rajasthan',161482);
-INSERT INTO City VALUES (1189,'Vizianagaram','IND','Andhra Pradesh',160359);
-INSERT INTO City VALUES (1190,'Erode','IND','Tamil Nadu',159232);
-INSERT INTO City VALUES (1191,'Machilipatnam (Masulipatam)','IND','Andhra Pradesh',159110);
-INSERT INTO City VALUES (1192,'Bhatinda (Bathinda)','IND','Punjab',159042);
-INSERT INTO City VALUES (1193,'Raichur','IND','Karnataka',157551);
-INSERT INTO City VALUES (1194,'Agartala','IND','Tripura',157358);
-INSERT INTO City VALUES (1195,'Arrah (Ara)','IND','Bihar',157082);
-INSERT INTO City VALUES (1196,'Satna','IND','Madhya Pradesh',156630);
-INSERT INTO City VALUES (1197,'Lalbahadur Nagar','IND','Andhra Pradesh',155500);
-INSERT INTO City VALUES (1198,'Aizawl','IND','Mizoram',155240);
-INSERT INTO City VALUES (1199,'Uluberia','IND','West Bengali',155172);
-INSERT INTO City VALUES (1200,'Katihar','IND','Bihar',154367);
-INSERT INTO City VALUES (1201,'Cuddalore','IND','Tamil Nadu',153086);
-INSERT INTO City VALUES (1202,'Hugli-Chinsurah','IND','West Bengali',151806);
-INSERT INTO City VALUES (1203,'Dhanbad','IND','Jharkhand',151789);
-INSERT INTO City VALUES (1204,'Raiganj','IND','West Bengali',151045);
-INSERT INTO City VALUES (1205,'Sambhal','IND','Uttar Pradesh',150869);
-INSERT INTO City VALUES (1206,'Durg','IND','Chhatisgarh',150645);
-INSERT INTO City VALUES (1207,'Munger (Monghyr)','IND','Bihar',150112);
-INSERT INTO City VALUES (1208,'Kanchipuram','IND','Tamil Nadu',150100);
-INSERT INTO City VALUES (1209,'North Dum Dum','IND','West Bengali',149965);
-INSERT INTO City VALUES (1210,'Karimnagar','IND','Andhra Pradesh',148583);
-INSERT INTO City VALUES (1211,'Bharatpur','IND','Rajasthan',148519);
-INSERT INTO City VALUES (1212,'Sikar','IND','Rajasthan',148272);
-INSERT INTO City VALUES (1213,'Hardwar (Haridwar)','IND','Uttaranchal',147305);
-INSERT INTO City VALUES (1214,'Dabgram','IND','West Bengali',147217);
-INSERT INTO City VALUES (1215,'Morena','IND','Madhya Pradesh',147124);
-INSERT INTO City VALUES (1216,'Noida','IND','Uttar Pradesh',146514);
-INSERT INTO City VALUES (1217,'Hapur','IND','Uttar Pradesh',146262);
-INSERT INTO City VALUES (1218,'Bhusawal','IND','Maharashtra',145143);
-INSERT INTO City VALUES (1219,'Khandwa','IND','Madhya Pradesh',145133);
-INSERT INTO City VALUES (1220,'Yamuna Nagar','IND','Haryana',144346);
-INSERT INTO City VALUES (1221,'Sonipat (Sonepat)','IND','Haryana',143922);
-INSERT INTO City VALUES (1222,'Tenali','IND','Andhra Pradesh',143726);
-INSERT INTO City VALUES (1223,'Raurkela Civil Township','IND','Orissa',140408);
-INSERT INTO City VALUES (1224,'Kollam (Quilon)','IND','Kerala',139852);
-INSERT INTO City VALUES (1225,'Kumbakonam','IND','Tamil Nadu',139483);
-INSERT INTO City VALUES (1226,'Ingraj Bazar (English Bazar)','IND','West Bengali',139204);
-INSERT INTO City VALUES (1227,'Timkur','IND','Karnataka',138903);
-INSERT INTO City VALUES (1228,'Amroha','IND','Uttar Pradesh',137061);
-INSERT INTO City VALUES (1229,'Serampore','IND','West Bengali',137028);
-INSERT INTO City VALUES (1230,'Chapra','IND','Bihar',136877);
-INSERT INTO City VALUES (1231,'Pali','IND','Rajasthan',136842);
-INSERT INTO City VALUES (1232,'Maunath Bhanjan','IND','Uttar Pradesh',136697);
-INSERT INTO City VALUES (1233,'Adoni','IND','Andhra Pradesh',136182);
-INSERT INTO City VALUES (1234,'Jaunpur','IND','Uttar Pradesh',136062);
-INSERT INTO City VALUES (1235,'Tirunelveli','IND','Tamil Nadu',135825);
-INSERT INTO City VALUES (1236,'Bahraich','IND','Uttar Pradesh',135400);
-INSERT INTO City VALUES (1237,'Gadag Betigeri','IND','Karnataka',134051);
-INSERT INTO City VALUES (1238,'Proddatur','IND','Andhra Pradesh',133914);
-INSERT INTO City VALUES (1239,'Chittoor','IND','Andhra Pradesh',133462);
-INSERT INTO City VALUES (1240,'Barrackpur','IND','West Bengali',133265);
-INSERT INTO City VALUES (1241,'Bharuch (Broach)','IND','Gujarat',133102);
-INSERT INTO City VALUES (1242,'Naihati','IND','West Bengali',132701);
-INSERT INTO City VALUES (1243,'Shillong','IND','Meghalaya',131719);
-INSERT INTO City VALUES (1244,'Sambalpur','IND','Orissa',131138);
-INSERT INTO City VALUES (1245,'Junagadh','IND','Gujarat',130484);
-INSERT INTO City VALUES (1246,'Rae Bareli','IND','Uttar Pradesh',129904);
-INSERT INTO City VALUES (1247,'Rewa','IND','Madhya Pradesh',128981);
-INSERT INTO City VALUES (1248,'Gurgaon','IND','Haryana',128608);
-INSERT INTO City VALUES (1249,'Khammam','IND','Andhra Pradesh',127992);
-INSERT INTO City VALUES (1250,'Bulandshahr','IND','Uttar Pradesh',127201);
-INSERT INTO City VALUES (1251,'Navsari','IND','Gujarat',126089);
-INSERT INTO City VALUES (1252,'Malkajgiri','IND','Andhra Pradesh',126066);
-INSERT INTO City VALUES (1253,'Midnapore (Medinipur)','IND','West Bengali',125498);
-INSERT INTO City VALUES (1254,'Miraj','IND','Maharashtra',125407);
-INSERT INTO City VALUES (1255,'Raj Nandgaon','IND','Chhatisgarh',125371);
-INSERT INTO City VALUES (1256,'Alandur','IND','Tamil Nadu',125244);
-INSERT INTO City VALUES (1257,'Puri','IND','Orissa',125199);
-INSERT INTO City VALUES (1258,'Navadwip','IND','West Bengali',125037);
-INSERT INTO City VALUES (1259,'Sirsa','IND','Haryana',125000);
-INSERT INTO City VALUES (1260,'Korba','IND','Chhatisgarh',124501);
-INSERT INTO City VALUES (1261,'Faizabad','IND','Uttar Pradesh',124437);
-INSERT INTO City VALUES (1262,'Etawah','IND','Uttar Pradesh',124072);
-INSERT INTO City VALUES (1263,'Pathankot','IND','Punjab',123930);
-INSERT INTO City VALUES (1264,'Gandhinagar','IND','Gujarat',123359);
-INSERT INTO City VALUES (1265,'Palghat (Palakkad)','IND','Kerala',123289);
-INSERT INTO City VALUES (1266,'Veraval','IND','Gujarat',123000);
-INSERT INTO City VALUES (1267,'Hoshiarpur','IND','Punjab',122705);
-INSERT INTO City VALUES (1268,'Ambala','IND','Haryana',122596);
-INSERT INTO City VALUES (1269,'Sitapur','IND','Uttar Pradesh',121842);
-INSERT INTO City VALUES (1270,'Bhiwani','IND','Haryana',121629);
-INSERT INTO City VALUES (1271,'Cuddapah','IND','Andhra Pradesh',121463);
-INSERT INTO City VALUES (1272,'Bhimavaram','IND','Andhra Pradesh',121314);
-INSERT INTO City VALUES (1273,'Krishnanagar','IND','West Bengali',121110);
-INSERT INTO City VALUES (1274,'Chandannagar','IND','West Bengali',120378);
-INSERT INTO City VALUES (1275,'Mandya','IND','Karnataka',120265);
-INSERT INTO City VALUES (1276,'Dibrugarh','IND','Assam',120127);
-INSERT INTO City VALUES (1277,'Nandyal','IND','Andhra Pradesh',119813);
-INSERT INTO City VALUES (1278,'Balurghat','IND','West Bengali',119796);
-INSERT INTO City VALUES (1279,'Neyveli','IND','Tamil Nadu',118080);
-INSERT INTO City VALUES (1280,'Fatehpur','IND','Uttar Pradesh',117675);
-INSERT INTO City VALUES (1281,'Mahbubnagar','IND','Andhra Pradesh',116833);
-INSERT INTO City VALUES (1282,'Budaun','IND','Uttar Pradesh',116695);
-INSERT INTO City VALUES (1283,'Porbandar','IND','Gujarat',116671);
-INSERT INTO City VALUES (1284,'Silchar','IND','Assam',115483);
-INSERT INTO City VALUES (1285,'Berhampore (Baharampur)','IND','West Bengali',115144);
-INSERT INTO City VALUES (1286,'Purnea (Purnia)','IND','Jharkhand',114912);
-INSERT INTO City VALUES (1287,'Bankura','IND','West Bengali',114876);
-INSERT INTO City VALUES (1288,'Rajapalaiyam','IND','Tamil Nadu',114202);
-INSERT INTO City VALUES (1289,'Titagarh','IND','West Bengali',114085);
-INSERT INTO City VALUES (1290,'Halisahar','IND','West Bengali',114028);
-INSERT INTO City VALUES (1291,'Hathras','IND','Uttar Pradesh',113285);
-INSERT INTO City VALUES (1292,'Bhir (Bid)','IND','Maharashtra',112434);
-INSERT INTO City VALUES (1293,'Pallavaram','IND','Tamil Nadu',111866);
-INSERT INTO City VALUES (1294,'Anand','IND','Gujarat',110266);
-INSERT INTO City VALUES (1295,'Mango','IND','Jharkhand',110024);
-INSERT INTO City VALUES (1296,'Santipur','IND','West Bengali',109956);
-INSERT INTO City VALUES (1297,'Bhind','IND','Madhya Pradesh',109755);
-INSERT INTO City VALUES (1298,'Gondiya','IND','Maharashtra',109470);
-INSERT INTO City VALUES (1299,'Tiruvannamalai','IND','Tamil Nadu',109196);
-INSERT INTO City VALUES (1300,'Yeotmal (Yavatmal)','IND','Maharashtra',108578);
-INSERT INTO City VALUES (1301,'Kulti-Barakar','IND','West Bengali',108518);
-INSERT INTO City VALUES (1302,'Moga','IND','Punjab',108304);
-INSERT INTO City VALUES (1303,'Shivapuri','IND','Madhya Pradesh',108277);
-INSERT INTO City VALUES (1304,'Bidar','IND','Karnataka',108016);
-INSERT INTO City VALUES (1305,'Guntakal','IND','Andhra Pradesh',107592);
-INSERT INTO City VALUES (1306,'Unnao','IND','Uttar Pradesh',107425);
-INSERT INTO City VALUES (1307,'Barasat','IND','West Bengali',107365);
-INSERT INTO City VALUES (1308,'Tambaram','IND','Tamil Nadu',107187);
-INSERT INTO City VALUES (1309,'Abohar','IND','Punjab',107163);
-INSERT INTO City VALUES (1310,'Pilibhit','IND','Uttar Pradesh',106605);
-INSERT INTO City VALUES (1311,'Valparai','IND','Tamil Nadu',106523);
-INSERT INTO City VALUES (1312,'Gonda','IND','Uttar Pradesh',106078);
-INSERT INTO City VALUES (1313,'Surendranagar','IND','Gujarat',105973);
-INSERT INTO City VALUES (1314,'Qutubullapur','IND','Andhra Pradesh',105380);
-INSERT INTO City VALUES (1315,'Beawar','IND','Rajasthan',105363);
-INSERT INTO City VALUES (1316,'Hindupur','IND','Andhra Pradesh',104651);
-INSERT INTO City VALUES (1317,'Gandhidham','IND','Gujarat',104585);
-INSERT INTO City VALUES (1318,'Haldwani-cum-Kathgodam','IND','Uttaranchal',104195);
-INSERT INTO City VALUES (1319,'Tellicherry (Thalassery)','IND','Kerala',103579);
-INSERT INTO City VALUES (1320,'Wardha','IND','Maharashtra',102985);
-INSERT INTO City VALUES (1321,'Rishra','IND','West Bengali',102649);
-INSERT INTO City VALUES (1322,'Bhuj','IND','Gujarat',102176);
-INSERT INTO City VALUES (1323,'Modinagar','IND','Uttar Pradesh',101660);
-INSERT INTO City VALUES (1324,'Gudivada','IND','Andhra Pradesh',101656);
-INSERT INTO City VALUES (1325,'Basirhat','IND','West Bengali',101409);
-INSERT INTO City VALUES (1326,'Uttarpara-Kotrung','IND','West Bengali',100867);
-INSERT INTO City VALUES (1327,'Ongole','IND','Andhra Pradesh',100836);
-INSERT INTO City VALUES (1328,'North Barrackpur','IND','West Bengali',100513);
-INSERT INTO City VALUES (1329,'Guna','IND','Madhya Pradesh',100490);
-INSERT INTO City VALUES (1330,'Haldia','IND','West Bengali',100347);
-INSERT INTO City VALUES (1331,'Habra','IND','West Bengali',100223);
-INSERT INTO City VALUES (1332,'Kanchrapara','IND','West Bengali',100194);
-INSERT INTO City VALUES (1333,'Tonk','IND','Rajasthan',100079);
-INSERT INTO City VALUES (1334,'Champdani','IND','West Bengali',98818);
-INSERT INTO City VALUES (1335,'Orai','IND','Uttar Pradesh',98640);
-INSERT INTO City VALUES (1336,'Pudukkottai','IND','Tamil Nadu',98619);
-INSERT INTO City VALUES (1337,'Sasaram','IND','Bihar',98220);
-INSERT INTO City VALUES (1338,'Hazaribag','IND','Jharkhand',97712);
-INSERT INTO City VALUES (1339,'Palayankottai','IND','Tamil Nadu',97662);
-INSERT INTO City VALUES (1340,'Banda','IND','Uttar Pradesh',97227);
-INSERT INTO City VALUES (1341,'Godhra','IND','Gujarat',96813);
-INSERT INTO City VALUES (1342,'Hospet','IND','Karnataka',96322);
-INSERT INTO City VALUES (1343,'Ashoknagar-Kalyangarh','IND','West Bengali',96315);
-INSERT INTO City VALUES (1344,'Achalpur','IND','Maharashtra',96216);
-INSERT INTO City VALUES (1345,'Patan','IND','Gujarat',96109);
-INSERT INTO City VALUES (1346,'Mandasor','IND','Madhya Pradesh',95758);
-INSERT INTO City VALUES (1347,'Damoh','IND','Madhya Pradesh',95661);
-INSERT INTO City VALUES (1348,'Satara','IND','Maharashtra',95133);
-INSERT INTO City VALUES (1349,'Meerut Cantonment','IND','Uttar Pradesh',94876);
-INSERT INTO City VALUES (1350,'Dehri','IND','Bihar',94526);
-INSERT INTO City VALUES (1351,'Delhi Cantonment','IND','Delhi',94326);
-INSERT INTO City VALUES (1352,'Chhindwara','IND','Madhya Pradesh',93731);
-INSERT INTO City VALUES (1353,'Bansberia','IND','West Bengali',93447);
-INSERT INTO City VALUES (1354,'Nagaon','IND','Assam',93350);
-INSERT INTO City VALUES (1355,'Kanpur Cantonment','IND','Uttar Pradesh',93109);
-INSERT INTO City VALUES (1356,'Vidisha','IND','Madhya Pradesh',92917);
-INSERT INTO City VALUES (1357,'Bettiah','IND','Bihar',92583);
-INSERT INTO City VALUES (1358,'Purulia','IND','Jharkhand',92574);
-INSERT INTO City VALUES (1359,'Hassan','IND','Karnataka',90803);
-INSERT INTO City VALUES (1360,'Ambala Sadar','IND','Haryana',90712);
-INSERT INTO City VALUES (1361,'Baidyabati','IND','West Bengali',90601);
-INSERT INTO City VALUES (1362,'Morvi','IND','Gujarat',90357);
-INSERT INTO City VALUES (1363,'Raigarh','IND','Chhatisgarh',89166);
-INSERT INTO City VALUES (1364,'Vejalpur','IND','Gujarat',89053);
-INSERT INTO City VALUES (1365,'Baghdad','IRQ','Baghdad',4336000);
-INSERT INTO City VALUES (1366,'Mosul','IRQ','Ninawa',879000);
-INSERT INTO City VALUES (1367,'Irbil','IRQ','Irbil',485968);
-INSERT INTO City VALUES (1368,'Kirkuk','IRQ','al-Tamim',418624);
-INSERT INTO City VALUES (1369,'Basra','IRQ','Basra',406296);
-INSERT INTO City VALUES (1370,'al-Sulaymaniya','IRQ','al-Sulaymaniya',364096);
-INSERT INTO City VALUES (1371,'al-Najaf','IRQ','al-Najaf',309010);
-INSERT INTO City VALUES (1372,'Karbala','IRQ','Karbala',296705);
-INSERT INTO City VALUES (1373,'al-Hilla','IRQ','Babil',268834);
-INSERT INTO City VALUES (1374,'al-Nasiriya','IRQ','DhiQar',265937);
-INSERT INTO City VALUES (1375,'al-Amara','IRQ','Maysan',208797);
-INSERT INTO City VALUES (1376,'al-Diwaniya','IRQ','al-Qadisiya',196519);
-INSERT INTO City VALUES (1377,'al-Ramadi','IRQ','al-Anbar',192556);
-INSERT INTO City VALUES (1378,'al-Kut','IRQ','Wasit',183183);
-INSERT INTO City VALUES (1379,'Baquba','IRQ','Diyala',114516);
-INSERT INTO City VALUES (1380,'Teheran','IRN','Teheran',6758845);
-INSERT INTO City VALUES (1381,'Mashhad','IRN','Khorasan',1887405);
-INSERT INTO City VALUES (1382,'Esfahan','IRN','Esfahan',1266072);
-INSERT INTO City VALUES (1383,'Tabriz','IRN','East Azerbaidzan',1191043);
-INSERT INTO City VALUES (1384,'Shiraz','IRN','Fars',1053025);
-INSERT INTO City VALUES (1385,'Karaj','IRN','Teheran',940968);
-INSERT INTO City VALUES (1386,'Ahvaz','IRN','Khuzestan',804980);
-INSERT INTO City VALUES (1387,'Qom','IRN','Qom',777677);
-INSERT INTO City VALUES (1388,'Kermanshah','IRN','Kermanshah',692986);
-INSERT INTO City VALUES (1389,'Urmia','IRN','West Azerbaidzan',435200);
-INSERT INTO City VALUES (1390,'Zahedan','IRN','Sistan va Baluchesta',419518);
-INSERT INTO City VALUES (1391,'Rasht','IRN','Gilan',417748);
-INSERT INTO City VALUES (1392,'Hamadan','IRN','Hamadan',401281);
-INSERT INTO City VALUES (1393,'Kerman','IRN','Kerman',384991);
-INSERT INTO City VALUES (1394,'Arak','IRN','Markazi',380755);
-INSERT INTO City VALUES (1395,'Ardebil','IRN','Ardebil',340386);
-INSERT INTO City VALUES (1396,'Yazd','IRN','Yazd',326776);
-INSERT INTO City VALUES (1397,'Qazvin','IRN','Qazvin',291117);
-INSERT INTO City VALUES (1398,'Zanjan','IRN','Zanjan',286295);
-INSERT INTO City VALUES (1399,'Sanandaj','IRN','Kordestan',277808);
-INSERT INTO City VALUES (1400,'Bandar-e-Abbas','IRN','Hormozgan',273578);
-INSERT INTO City VALUES (1401,'Khorramabad','IRN','Lorestan',272815);
-INSERT INTO City VALUES (1402,'Eslamshahr','IRN','Teheran',265450);
-INSERT INTO City VALUES (1403,'Borujerd','IRN','Lorestan',217804);
-INSERT INTO City VALUES (1404,'Abadan','IRN','Khuzestan',206073);
-INSERT INTO City VALUES (1405,'Dezful','IRN','Khuzestan',202639);
-INSERT INTO City VALUES (1406,'Kashan','IRN','Esfahan',201372);
-INSERT INTO City VALUES (1407,'Sari','IRN','Mazandaran',195882);
-INSERT INTO City VALUES (1408,'Gorgan','IRN','Golestan',188710);
-INSERT INTO City VALUES (1409,'Najafabad','IRN','Esfahan',178498);
-INSERT INTO City VALUES (1410,'Sabzevar','IRN','Khorasan',170738);
-INSERT INTO City VALUES (1411,'Khomeynishahr','IRN','Esfahan',165888);
-INSERT INTO City VALUES (1412,'Amol','IRN','Mazandaran',159092);
-INSERT INTO City VALUES (1413,'Neyshabur','IRN','Khorasan',158847);
-INSERT INTO City VALUES (1414,'Babol','IRN','Mazandaran',158346);
-INSERT INTO City VALUES (1415,'Khoy','IRN','West Azerbaidzan',148944);
-INSERT INTO City VALUES (1416,'Malayer','IRN','Hamadan',144373);
-INSERT INTO City VALUES (1417,'Bushehr','IRN','Bushehr',143641);
-INSERT INTO City VALUES (1418,'Qaemshahr','IRN','Mazandaran',143286);
-INSERT INTO City VALUES (1419,'Qarchak','IRN','Teheran',142690);
-INSERT INTO City VALUES (1420,'Qods','IRN','Teheran',138278);
-INSERT INTO City VALUES (1421,'Sirjan','IRN','Kerman',135024);
-INSERT INTO City VALUES (1422,'Bojnurd','IRN','Khorasan',134835);
-INSERT INTO City VALUES (1423,'Maragheh','IRN','East Azerbaidzan',132318);
-INSERT INTO City VALUES (1424,'Birjand','IRN','Khorasan',127608);
-INSERT INTO City VALUES (1425,'Ilam','IRN','Ilam',126346);
-INSERT INTO City VALUES (1426,'Bukan','IRN','West Azerbaidzan',120020);
-INSERT INTO City VALUES (1427,'Masjed-e-Soleyman','IRN','Khuzestan',116883);
-INSERT INTO City VALUES (1428,'Saqqez','IRN','Kordestan',115394);
-INSERT INTO City VALUES (1429,'Gonbad-e Qabus','IRN','Mazandaran',111253);
-INSERT INTO City VALUES (1430,'Saveh','IRN','Qom',111245);
-INSERT INTO City VALUES (1431,'Mahabad','IRN','West Azerbaidzan',107799);
-INSERT INTO City VALUES (1432,'Varamin','IRN','Teheran',107233);
-INSERT INTO City VALUES (1433,'Andimeshk','IRN','Khuzestan',106923);
-INSERT INTO City VALUES (1434,'Khorramshahr','IRN','Khuzestan',105636);
-INSERT INTO City VALUES (1435,'Shahrud','IRN','Semnan',104765);
-INSERT INTO City VALUES (1436,'Marv Dasht','IRN','Fars',103579);
-INSERT INTO City VALUES (1437,'Zabol','IRN','Sistan va Baluchesta',100887);
-INSERT INTO City VALUES (1438,'Shahr-e Kord','IRN','Chaharmahal va Bakht',100477);
-INSERT INTO City VALUES (1439,'Bandar-e Anzali','IRN','Gilan',98500);
-INSERT INTO City VALUES (1440,'Rafsanjan','IRN','Kerman',98300);
-INSERT INTO City VALUES (1441,'Marand','IRN','East Azerbaidzan',96400);
-INSERT INTO City VALUES (1442,'Torbat-e Heydariyeh','IRN','Khorasan',94600);
-INSERT INTO City VALUES (1443,'Jahrom','IRN','Fars',94200);
-INSERT INTO City VALUES (1444,'Semnan','IRN','Semnan',91045);
-INSERT INTO City VALUES (1445,'Miandoab','IRN','West Azerbaidzan',90100);
-INSERT INTO City VALUES (1446,'Qomsheh','IRN','Esfahan',89800);
-INSERT INTO City VALUES (1447,'Dublin','IRL','Leinster',481854);
-INSERT INTO City VALUES (1448,'Cork','IRL','Munster',127187);
-INSERT INTO City VALUES (1449,'Reykjav�k','ISL','H�fu�borgarsv��i',109184);
-INSERT INTO City VALUES (1450,'Jerusalem','ISR','Jerusalem',633700);
-INSERT INTO City VALUES (1451,'Tel Aviv-Jaffa','ISR','Tel Aviv',348100);
-INSERT INTO City VALUES (1452,'Haifa','ISR','Haifa',265700);
-INSERT INTO City VALUES (1453,'Rishon Le Ziyyon','ISR','Ha Merkaz',188200);
-INSERT INTO City VALUES (1454,'Beerseba','ISR','Ha Darom',163700);
-INSERT INTO City VALUES (1455,'Holon','ISR','Tel Aviv',163100);
-INSERT INTO City VALUES (1456,'Petah Tiqwa','ISR','Ha Merkaz',159400);
-INSERT INTO City VALUES (1457,'Ashdod','ISR','Ha Darom',155800);
-INSERT INTO City VALUES (1458,'Netanya','ISR','Ha Merkaz',154900);
-INSERT INTO City VALUES (1459,'Bat Yam','ISR','Tel Aviv',137000);
-INSERT INTO City VALUES (1460,'Bene Beraq','ISR','Tel Aviv',133900);
-INSERT INTO City VALUES (1461,'Ramat Gan','ISR','Tel Aviv',126900);
-INSERT INTO City VALUES (1462,'Ashqelon','ISR','Ha Darom',92300);
-INSERT INTO City VALUES (1463,'Rehovot','ISR','Ha Merkaz',90300);
-INSERT INTO City VALUES (1464,'Roma','ITA','Latium',2643581);
-INSERT INTO City VALUES (1465,'Milano','ITA','Lombardia',1300977);
-INSERT INTO City VALUES (1466,'Napoli','ITA','Campania',1002619);
-INSERT INTO City VALUES (1467,'Torino','ITA','Piemonte',903705);
-INSERT INTO City VALUES (1468,'Palermo','ITA','Sisilia',683794);
-INSERT INTO City VALUES (1469,'Genova','ITA','Liguria',636104);
-INSERT INTO City VALUES (1470,'Bologna','ITA','Emilia-Romagna',381161);
-INSERT INTO City VALUES (1471,'Firenze','ITA','Toscana',376662);
-INSERT INTO City VALUES (1472,'Catania','ITA','Sisilia',337862);
-INSERT INTO City VALUES (1473,'Bari','ITA','Apulia',331848);
-INSERT INTO City VALUES (1474,'Venezia','ITA','Veneto',277305);
-INSERT INTO City VALUES (1475,'Messina','ITA','Sisilia',259156);
-INSERT INTO City VALUES (1476,'Verona','ITA','Veneto',255268);
-INSERT INTO City VALUES (1477,'Trieste','ITA','Friuli-Venezia Giuli',216459);
-INSERT INTO City VALUES (1478,'Padova','ITA','Veneto',211391);
-INSERT INTO City VALUES (1479,'Taranto','ITA','Apulia',208214);
-INSERT INTO City VALUES (1480,'Brescia','ITA','Lombardia',191317);
-INSERT INTO City VALUES (1481,'Reggio di Calabria','ITA','Calabria',179617);
-INSERT INTO City VALUES (1482,'Modena','ITA','Emilia-Romagna',176022);
-INSERT INTO City VALUES (1483,'Prato','ITA','Toscana',172473);
-INSERT INTO City VALUES (1484,'Parma','ITA','Emilia-Romagna',168717);
-INSERT INTO City VALUES (1485,'Cagliari','ITA','Sardinia',165926);
-INSERT INTO City VALUES (1486,'Livorno','ITA','Toscana',161673);
-INSERT INTO City VALUES (1487,'Perugia','ITA','Umbria',156673);
-INSERT INTO City VALUES (1488,'Foggia','ITA','Apulia',154891);
-INSERT INTO City VALUES (1489,'Reggio nell� Emilia','ITA','Emilia-Romagna',143664);
-INSERT INTO City VALUES (1490,'Salerno','ITA','Campania',142055);
-INSERT INTO City VALUES (1491,'Ravenna','ITA','Emilia-Romagna',138418);
-INSERT INTO City VALUES (1492,'Ferrara','ITA','Emilia-Romagna',132127);
-INSERT INTO City VALUES (1493,'Rimini','ITA','Emilia-Romagna',131062);
-INSERT INTO City VALUES (1494,'Syrakusa','ITA','Sisilia',126282);
-INSERT INTO City VALUES (1495,'Sassari','ITA','Sardinia',120803);
-INSERT INTO City VALUES (1496,'Monza','ITA','Lombardia',119516);
-INSERT INTO City VALUES (1497,'Bergamo','ITA','Lombardia',117837);
-INSERT INTO City VALUES (1498,'Pescara','ITA','Abruzzit',115698);
-INSERT INTO City VALUES (1499,'Latina','ITA','Latium',114099);
-INSERT INTO City VALUES (1500,'Vicenza','ITA','Veneto',109738);
-INSERT INTO City VALUES (1501,'Terni','ITA','Umbria',107770);
-INSERT INTO City VALUES (1502,'Forl�','ITA','Emilia-Romagna',107475);
-INSERT INTO City VALUES (1503,'Trento','ITA','Trentino-Alto Adige',104906);
-INSERT INTO City VALUES (1504,'Novara','ITA','Piemonte',102037);
-INSERT INTO City VALUES (1505,'Piacenza','ITA','Emilia-Romagna',98384);
-INSERT INTO City VALUES (1506,'Ancona','ITA','Marche',98329);
-INSERT INTO City VALUES (1507,'Lecce','ITA','Apulia',98208);
-INSERT INTO City VALUES (1508,'Bolzano','ITA','Trentino-Alto Adige',97232);
-INSERT INTO City VALUES (1509,'Catanzaro','ITA','Calabria',96700);
-INSERT INTO City VALUES (1510,'La Spezia','ITA','Liguria',95504);
-INSERT INTO City VALUES (1511,'Udine','ITA','Friuli-Venezia Giuli',94932);
-INSERT INTO City VALUES (1512,'Torre del Greco','ITA','Campania',94505);
-INSERT INTO City VALUES (1513,'Andria','ITA','Apulia',94443);
-INSERT INTO City VALUES (1514,'Brindisi','ITA','Apulia',93454);
-INSERT INTO City VALUES (1515,'Giugliano in Campania','ITA','Campania',93286);
-INSERT INTO City VALUES (1516,'Pisa','ITA','Toscana',92379);
-INSERT INTO City VALUES (1517,'Barletta','ITA','Apulia',91904);
-INSERT INTO City VALUES (1518,'Arezzo','ITA','Toscana',91729);
-INSERT INTO City VALUES (1519,'Alessandria','ITA','Piemonte',90289);
-INSERT INTO City VALUES (1520,'Cesena','ITA','Emilia-Romagna',89852);
-INSERT INTO City VALUES (1521,'Pesaro','ITA','Marche',88987);
-INSERT INTO City VALUES (1522,'Dili','TMP','Dili',47900);
-INSERT INTO City VALUES (1523,'Wien','AUT','Wien',1608144);
-INSERT INTO City VALUES (1524,'Graz','AUT','Steiermark',240967);
-INSERT INTO City VALUES (1525,'Linz','AUT','North Austria',188022);
-INSERT INTO City VALUES (1526,'Salzburg','AUT','Salzburg',144247);
-INSERT INTO City VALUES (1527,'Innsbruck','AUT','Tiroli',111752);
-INSERT INTO City VALUES (1528,'Klagenfurt','AUT','K�rnten',91141);
-INSERT INTO City VALUES (1529,'Spanish Town','JAM','St. Catherine',110379);
-INSERT INTO City VALUES (1530,'Kingston','JAM','St. Andrew',103962);
-INSERT INTO City VALUES (1531,'Portmore','JAM','St. Andrew',99799);
-INSERT INTO City VALUES (1532,'Tokyo','JPN','Tokyo-to',7980230);
-INSERT INTO City VALUES (1533,'Jokohama [Yokohama]','JPN','Kanagawa',3339594);
-INSERT INTO City VALUES (1534,'Osaka','JPN','Osaka',2595674);
-INSERT INTO City VALUES (1535,'Nagoya','JPN','Aichi',2154376);
-INSERT INTO City VALUES (1536,'Sapporo','JPN','Hokkaido',1790886);
-INSERT INTO City VALUES (1537,'Kioto','JPN','Kyoto',1461974);
-INSERT INTO City VALUES (1538,'Kobe','JPN','Hyogo',1425139);
-INSERT INTO City VALUES (1539,'Fukuoka','JPN','Fukuoka',1308379);
-INSERT INTO City VALUES (1540,'Kawasaki','JPN','Kanagawa',1217359);
-INSERT INTO City VALUES (1541,'Hiroshima','JPN','Hiroshima',1119117);
-INSERT INTO City VALUES (1542,'Kitakyushu','JPN','Fukuoka',1016264);
-INSERT INTO City VALUES (1543,'Sendai','JPN','Miyagi',989975);
-INSERT INTO City VALUES (1544,'Chiba','JPN','Chiba',863930);
-INSERT INTO City VALUES (1545,'Sakai','JPN','Osaka',797735);
-INSERT INTO City VALUES (1546,'Kumamoto','JPN','Kumamoto',656734);
-INSERT INTO City VALUES (1547,'Okayama','JPN','Okayama',624269);
-INSERT INTO City VALUES (1548,'Sagamihara','JPN','Kanagawa',586300);
-INSERT INTO City VALUES (1549,'Hamamatsu','JPN','Shizuoka',568796);
-INSERT INTO City VALUES (1550,'Kagoshima','JPN','Kagoshima',549977);
-INSERT INTO City VALUES (1551,'Funabashi','JPN','Chiba',545299);
-INSERT INTO City VALUES (1552,'Higashiosaka','JPN','Osaka',517785);
-INSERT INTO City VALUES (1553,'Hachioji','JPN','Tokyo-to',513451);
-INSERT INTO City VALUES (1554,'Niigata','JPN','Niigata',497464);
-INSERT INTO City VALUES (1555,'Amagasaki','JPN','Hyogo',481434);
-INSERT INTO City VALUES (1556,'Himeji','JPN','Hyogo',475167);
-INSERT INTO City VALUES (1557,'Shizuoka','JPN','Shizuoka',473854);
-INSERT INTO City VALUES (1558,'Urawa','JPN','Saitama',469675);
-INSERT INTO City VALUES (1559,'Matsuyama','JPN','Ehime',466133);
-INSERT INTO City VALUES (1560,'Matsudo','JPN','Chiba',461126);
-INSERT INTO City VALUES (1561,'Kanazawa','JPN','Ishikawa',455386);
-INSERT INTO City VALUES (1562,'Kawaguchi','JPN','Saitama',452155);
-INSERT INTO City VALUES (1563,'Ichikawa','JPN','Chiba',441893);
-INSERT INTO City VALUES (1564,'Omiya','JPN','Saitama',441649);
-INSERT INTO City VALUES (1565,'Utsunomiya','JPN','Tochigi',440353);
-INSERT INTO City VALUES (1566,'Oita','JPN','Oita',433401);
-INSERT INTO City VALUES (1567,'Nagasaki','JPN','Nagasaki',432759);
-INSERT INTO City VALUES (1568,'Yokosuka','JPN','Kanagawa',430200);
-INSERT INTO City VALUES (1569,'Kurashiki','JPN','Okayama',425103);
-INSERT INTO City VALUES (1570,'Gifu','JPN','Gifu',408007);
-INSERT INTO City VALUES (1571,'Hirakata','JPN','Osaka',403151);
-INSERT INTO City VALUES (1572,'Nishinomiya','JPN','Hyogo',397618);
-INSERT INTO City VALUES (1573,'Toyonaka','JPN','Osaka',396689);
-INSERT INTO City VALUES (1574,'Wakayama','JPN','Wakayama',391233);
-INSERT INTO City VALUES (1575,'Fukuyama','JPN','Hiroshima',376921);
-INSERT INTO City VALUES (1576,'Fujisawa','JPN','Kanagawa',372840);
-INSERT INTO City VALUES (1577,'Asahikawa','JPN','Hokkaido',364813);
-INSERT INTO City VALUES (1578,'Machida','JPN','Tokyo-to',364197);
-INSERT INTO City VALUES (1579,'Nara','JPN','Nara',362812);
-INSERT INTO City VALUES (1580,'Takatsuki','JPN','Osaka',361747);
-INSERT INTO City VALUES (1581,'Iwaki','JPN','Fukushima',361737);
-INSERT INTO City VALUES (1582,'Nagano','JPN','Nagano',361391);
-INSERT INTO City VALUES (1583,'Toyohashi','JPN','Aichi',360066);
-INSERT INTO City VALUES (1584,'Toyota','JPN','Aichi',346090);
-INSERT INTO City VALUES (1585,'Suita','JPN','Osaka',345750);
-INSERT INTO City VALUES (1586,'Takamatsu','JPN','Kagawa',332471);
-INSERT INTO City VALUES (1587,'Koriyama','JPN','Fukushima',330335);
-INSERT INTO City VALUES (1588,'Okazaki','JPN','Aichi',328711);
-INSERT INTO City VALUES (1589,'Kawagoe','JPN','Saitama',327211);
-INSERT INTO City VALUES (1590,'Tokorozawa','JPN','Saitama',325809);
-INSERT INTO City VALUES (1591,'Toyama','JPN','Toyama',325790);
-INSERT INTO City VALUES (1592,'Kochi','JPN','Kochi',324710);
-INSERT INTO City VALUES (1593,'Kashiwa','JPN','Chiba',320296);
-INSERT INTO City VALUES (1594,'Akita','JPN','Akita',314440);
-INSERT INTO City VALUES (1595,'Miyazaki','JPN','Miyazaki',303784);
-INSERT INTO City VALUES (1596,'Koshigaya','JPN','Saitama',301446);
-INSERT INTO City VALUES (1597,'Naha','JPN','Okinawa',299851);
-INSERT INTO City VALUES (1598,'Aomori','JPN','Aomori',295969);
-INSERT INTO City VALUES (1599,'Hakodate','JPN','Hokkaido',294788);
-INSERT INTO City VALUES (1600,'Akashi','JPN','Hyogo',292253);
-INSERT INTO City VALUES (1601,'Yokkaichi','JPN','Mie',288173);
-INSERT INTO City VALUES (1602,'Fukushima','JPN','Fukushima',287525);
-INSERT INTO City VALUES (1603,'Morioka','JPN','Iwate',287353);
-INSERT INTO City VALUES (1604,'Maebashi','JPN','Gumma',284473);
-INSERT INTO City VALUES (1605,'Kasugai','JPN','Aichi',282348);
-INSERT INTO City VALUES (1606,'Otsu','JPN','Shiga',282070);
-INSERT INTO City VALUES (1607,'Ichihara','JPN','Chiba',279280);
-INSERT INTO City VALUES (1608,'Yao','JPN','Osaka',276421);
-INSERT INTO City VALUES (1609,'Ichinomiya','JPN','Aichi',270828);
-INSERT INTO City VALUES (1610,'Tokushima','JPN','Tokushima',269649);
-INSERT INTO City VALUES (1611,'Kakogawa','JPN','Hyogo',266281);
-INSERT INTO City VALUES (1612,'Ibaraki','JPN','Osaka',261020);
-INSERT INTO City VALUES (1613,'Neyagawa','JPN','Osaka',257315);
-INSERT INTO City VALUES (1614,'Shimonoseki','JPN','Yamaguchi',257263);
-INSERT INTO City VALUES (1615,'Yamagata','JPN','Yamagata',255617);
-INSERT INTO City VALUES (1616,'Fukui','JPN','Fukui',254818);
-INSERT INTO City VALUES (1617,'Hiratsuka','JPN','Kanagawa',254207);
-INSERT INTO City VALUES (1618,'Mito','JPN','Ibaragi',246559);
-INSERT INTO City VALUES (1619,'Sasebo','JPN','Nagasaki',244240);
-INSERT INTO City VALUES (1620,'Hachinohe','JPN','Aomori',242979);
-INSERT INTO City VALUES (1621,'Takasaki','JPN','Gumma',239124);
-INSERT INTO City VALUES (1622,'Shimizu','JPN','Shizuoka',239123);
-INSERT INTO City VALUES (1623,'Kurume','JPN','Fukuoka',235611);
-INSERT INTO City VALUES (1624,'Fuji','JPN','Shizuoka',231527);
-INSERT INTO City VALUES (1625,'Soka','JPN','Saitama',222768);
-INSERT INTO City VALUES (1626,'Fuchu','JPN','Tokyo-to',220576);
-INSERT INTO City VALUES (1627,'Chigasaki','JPN','Kanagawa',216015);
-INSERT INTO City VALUES (1628,'Atsugi','JPN','Kanagawa',212407);
-INSERT INTO City VALUES (1629,'Numazu','JPN','Shizuoka',211382);
-INSERT INTO City VALUES (1630,'Ageo','JPN','Saitama',209442);
-INSERT INTO City VALUES (1631,'Yamato','JPN','Kanagawa',208234);
-INSERT INTO City VALUES (1632,'Matsumoto','JPN','Nagano',206801);
-INSERT INTO City VALUES (1633,'Kure','JPN','Hiroshima',206504);
-INSERT INTO City VALUES (1634,'Takarazuka','JPN','Hyogo',205993);
-INSERT INTO City VALUES (1635,'Kasukabe','JPN','Saitama',201838);
-INSERT INTO City VALUES (1636,'Chofu','JPN','Tokyo-to',201585);
-INSERT INTO City VALUES (1637,'Odawara','JPN','Kanagawa',200171);
-INSERT INTO City VALUES (1638,'Kofu','JPN','Yamanashi',199753);
-INSERT INTO City VALUES (1639,'Kushiro','JPN','Hokkaido',197608);
-INSERT INTO City VALUES (1640,'Kishiwada','JPN','Osaka',197276);
-INSERT INTO City VALUES (1641,'Hitachi','JPN','Ibaragi',196622);
-INSERT INTO City VALUES (1642,'Nagaoka','JPN','Niigata',192407);
-INSERT INTO City VALUES (1643,'Itami','JPN','Hyogo',190886);
-INSERT INTO City VALUES (1644,'Uji','JPN','Kyoto',188735);
-INSERT INTO City VALUES (1645,'Suzuka','JPN','Mie',184061);
-INSERT INTO City VALUES (1646,'Hirosaki','JPN','Aomori',177522);
-INSERT INTO City VALUES (1647,'Ube','JPN','Yamaguchi',175206);
-INSERT INTO City VALUES (1648,'Kodaira','JPN','Tokyo-to',174984);
-INSERT INTO City VALUES (1649,'Takaoka','JPN','Toyama',174380);
-INSERT INTO City VALUES (1650,'Obihiro','JPN','Hokkaido',173685);
-INSERT INTO City VALUES (1651,'Tomakomai','JPN','Hokkaido',171958);
-INSERT INTO City VALUES (1652,'Saga','JPN','Saga',170034);
-INSERT INTO City VALUES (1653,'Sakura','JPN','Chiba',168072);
-INSERT INTO City VALUES (1654,'Kamakura','JPN','Kanagawa',167661);
-INSERT INTO City VALUES (1655,'Mitaka','JPN','Tokyo-to',167268);
-INSERT INTO City VALUES (1656,'Izumi','JPN','Osaka',166979);
-INSERT INTO City VALUES (1657,'Hino','JPN','Tokyo-to',166770);
-INSERT INTO City VALUES (1658,'Hadano','JPN','Kanagawa',166512);
-INSERT INTO City VALUES (1659,'Ashikaga','JPN','Tochigi',165243);
-INSERT INTO City VALUES (1660,'Tsu','JPN','Mie',164543);
-INSERT INTO City VALUES (1661,'Sayama','JPN','Saitama',162472);
-INSERT INTO City VALUES (1662,'Yachiyo','JPN','Chiba',161222);
-INSERT INTO City VALUES (1663,'Tsukuba','JPN','Ibaragi',160768);
-INSERT INTO City VALUES (1664,'Tachikawa','JPN','Tokyo-to',159430);
-INSERT INTO City VALUES (1665,'Kumagaya','JPN','Saitama',157171);
-INSERT INTO City VALUES (1666,'Moriguchi','JPN','Osaka',155941);
-INSERT INTO City VALUES (1667,'Otaru','JPN','Hokkaido',155784);
-INSERT INTO City VALUES (1668,'Anjo','JPN','Aichi',153823);
-INSERT INTO City VALUES (1669,'Narashino','JPN','Chiba',152849);
-INSERT INTO City VALUES (1670,'Oyama','JPN','Tochigi',152820);
-INSERT INTO City VALUES (1671,'Ogaki','JPN','Gifu',151758);
-INSERT INTO City VALUES (1672,'Matsue','JPN','Shimane',149821);
-INSERT INTO City VALUES (1673,'Kawanishi','JPN','Hyogo',149794);
-INSERT INTO City VALUES (1674,'Hitachinaka','JPN','Tokyo-to',148006);
-INSERT INTO City VALUES (1675,'Niiza','JPN','Saitama',147744);
-INSERT INTO City VALUES (1676,'Nagareyama','JPN','Chiba',147738);
-INSERT INTO City VALUES (1677,'Tottori','JPN','Tottori',147523);
-INSERT INTO City VALUES (1678,'Tama','JPN','Ibaragi',146712);
-INSERT INTO City VALUES (1679,'Iruma','JPN','Saitama',145922);
-INSERT INTO City VALUES (1680,'Ota','JPN','Gumma',145317);
-INSERT INTO City VALUES (1681,'Omuta','JPN','Fukuoka',142889);
-INSERT INTO City VALUES (1682,'Komaki','JPN','Aichi',139827);
-INSERT INTO City VALUES (1683,'Ome','JPN','Tokyo-to',139216);
-INSERT INTO City VALUES (1684,'Kadoma','JPN','Osaka',138953);
-INSERT INTO City VALUES (1685,'Yamaguchi','JPN','Yamaguchi',138210);
-INSERT INTO City VALUES (1686,'Higashimurayama','JPN','Tokyo-to',136970);
-INSERT INTO City VALUES (1687,'Yonago','JPN','Tottori',136461);
-INSERT INTO City VALUES (1688,'Matsubara','JPN','Osaka',135010);
-INSERT INTO City VALUES (1689,'Musashino','JPN','Tokyo-to',134426);
-INSERT INTO City VALUES (1690,'Tsuchiura','JPN','Ibaragi',134072);
-INSERT INTO City VALUES (1691,'Joetsu','JPN','Niigata',133505);
-INSERT INTO City VALUES (1692,'Miyakonojo','JPN','Miyazaki',133183);
-INSERT INTO City VALUES (1693,'Misato','JPN','Saitama',132957);
-INSERT INTO City VALUES (1694,'Kakamigahara','JPN','Gifu',131831);
-INSERT INTO City VALUES (1695,'Daito','JPN','Osaka',130594);
-INSERT INTO City VALUES (1696,'Seto','JPN','Aichi',130470);
-INSERT INTO City VALUES (1697,'Kariya','JPN','Aichi',127969);
-INSERT INTO City VALUES (1698,'Urayasu','JPN','Chiba',127550);
-INSERT INTO City VALUES (1699,'Beppu','JPN','Oita',127486);
-INSERT INTO City VALUES (1700,'Niihama','JPN','Ehime',127207);
-INSERT INTO City VALUES (1701,'Minoo','JPN','Osaka',127026);
-INSERT INTO City VALUES (1702,'Fujieda','JPN','Shizuoka',126897);
-INSERT INTO City VALUES (1703,'Abiko','JPN','Chiba',126670);
-INSERT INTO City VALUES (1704,'Nobeoka','JPN','Miyazaki',125547);
-INSERT INTO City VALUES (1705,'Tondabayashi','JPN','Osaka',125094);
-INSERT INTO City VALUES (1706,'Ueda','JPN','Nagano',124217);
-INSERT INTO City VALUES (1707,'Kashihara','JPN','Nara',124013);
-INSERT INTO City VALUES (1708,'Matsusaka','JPN','Mie',123582);
-INSERT INTO City VALUES (1709,'Isesaki','JPN','Gumma',123285);
-INSERT INTO City VALUES (1710,'Zama','JPN','Kanagawa',122046);
-INSERT INTO City VALUES (1711,'Kisarazu','JPN','Chiba',121967);
-INSERT INTO City VALUES (1712,'Noda','JPN','Chiba',121030);
-INSERT INTO City VALUES (1713,'Ishinomaki','JPN','Miyagi',120963);
-INSERT INTO City VALUES (1714,'Fujinomiya','JPN','Shizuoka',119714);
-INSERT INTO City VALUES (1715,'Kawachinagano','JPN','Osaka',119666);
-INSERT INTO City VALUES (1716,'Imabari','JPN','Ehime',119357);
-INSERT INTO City VALUES (1717,'Aizuwakamatsu','JPN','Fukushima',119287);
-INSERT INTO City VALUES (1718,'Higashihiroshima','JPN','Hiroshima',119166);
-INSERT INTO City VALUES (1719,'Habikino','JPN','Osaka',118968);
-INSERT INTO City VALUES (1720,'Ebetsu','JPN','Hokkaido',118805);
-INSERT INTO City VALUES (1721,'Hofu','JPN','Yamaguchi',118751);
-INSERT INTO City VALUES (1722,'Kiryu','JPN','Gumma',118326);
-INSERT INTO City VALUES (1723,'Okinawa','JPN','Okinawa',117748);
-INSERT INTO City VALUES (1724,'Yaizu','JPN','Shizuoka',117258);
-INSERT INTO City VALUES (1725,'Toyokawa','JPN','Aichi',115781);
-INSERT INTO City VALUES (1726,'Ebina','JPN','Kanagawa',115571);
-INSERT INTO City VALUES (1727,'Asaka','JPN','Saitama',114815);
-INSERT INTO City VALUES (1728,'Higashikurume','JPN','Tokyo-to',111666);
-INSERT INTO City VALUES (1729,'Ikoma','JPN','Nara',111645);
-INSERT INTO City VALUES (1730,'Kitami','JPN','Hokkaido',111295);
-INSERT INTO City VALUES (1731,'Koganei','JPN','Tokyo-to',110969);
-INSERT INTO City VALUES (1732,'Iwatsuki','JPN','Saitama',110034);
-INSERT INTO City VALUES (1733,'Mishima','JPN','Shizuoka',109699);
-INSERT INTO City VALUES (1734,'Handa','JPN','Aichi',108600);
-INSERT INTO City VALUES (1735,'Muroran','JPN','Hokkaido',108275);
-INSERT INTO City VALUES (1736,'Komatsu','JPN','Ishikawa',107937);
-INSERT INTO City VALUES (1737,'Yatsushiro','JPN','Kumamoto',107661);
-INSERT INTO City VALUES (1738,'Iida','JPN','Nagano',107583);
-INSERT INTO City VALUES (1739,'Tokuyama','JPN','Yamaguchi',107078);
-INSERT INTO City VALUES (1740,'Kokubunji','JPN','Tokyo-to',106996);
-INSERT INTO City VALUES (1741,'Akishima','JPN','Tokyo-to',106914);
-INSERT INTO City VALUES (1742,'Iwakuni','JPN','Yamaguchi',106647);
-INSERT INTO City VALUES (1743,'Kusatsu','JPN','Shiga',106232);
-INSERT INTO City VALUES (1744,'Kuwana','JPN','Mie',106121);
-INSERT INTO City VALUES (1745,'Sanda','JPN','Hyogo',105643);
-INSERT INTO City VALUES (1746,'Hikone','JPN','Shiga',105508);
-INSERT INTO City VALUES (1747,'Toda','JPN','Saitama',103969);
-INSERT INTO City VALUES (1748,'Tajimi','JPN','Gifu',103171);
-INSERT INTO City VALUES (1749,'Ikeda','JPN','Osaka',102710);
-INSERT INTO City VALUES (1750,'Fukaya','JPN','Saitama',102156);
-INSERT INTO City VALUES (1751,'Ise','JPN','Mie',101732);
-INSERT INTO City VALUES (1752,'Sakata','JPN','Yamagata',101651);
-INSERT INTO City VALUES (1753,'Kasuga','JPN','Fukuoka',101344);
-INSERT INTO City VALUES (1754,'Kamagaya','JPN','Chiba',100821);
-INSERT INTO City VALUES (1755,'Tsuruoka','JPN','Yamagata',100713);
-INSERT INTO City VALUES (1756,'Hoya','JPN','Tokyo-to',100313);
-INSERT INTO City VALUES (1757,'Nishio','JPN','Chiba',100032);
-INSERT INTO City VALUES (1758,'Tokai','JPN','Aichi',99738);
-INSERT INTO City VALUES (1759,'Inazawa','JPN','Aichi',98746);
-INSERT INTO City VALUES (1760,'Sakado','JPN','Saitama',98221);
-INSERT INTO City VALUES (1761,'Isehara','JPN','Kanagawa',98123);
-INSERT INTO City VALUES (1762,'Takasago','JPN','Hyogo',97632);
-INSERT INTO City VALUES (1763,'Fujimi','JPN','Saitama',96972);
-INSERT INTO City VALUES (1764,'Urasoe','JPN','Okinawa',96002);
-INSERT INTO City VALUES (1765,'Yonezawa','JPN','Yamagata',95592);
-INSERT INTO City VALUES (1766,'Konan','JPN','Aichi',95521);
-INSERT INTO City VALUES (1767,'Yamatokoriyama','JPN','Nara',95165);
-INSERT INTO City VALUES (1768,'Maizuru','JPN','Kyoto',94784);
-INSERT INTO City VALUES (1769,'Onomichi','JPN','Hiroshima',93756);
-INSERT INTO City VALUES (1770,'Higashimatsuyama','JPN','Saitama',93342);
-INSERT INTO City VALUES (1771,'Kimitsu','JPN','Chiba',93216);
-INSERT INTO City VALUES (1772,'Isahaya','JPN','Nagasaki',93058);
-INSERT INTO City VALUES (1773,'Kanuma','JPN','Tochigi',93053);
-INSERT INTO City VALUES (1774,'Izumisano','JPN','Osaka',92583);
-INSERT INTO City VALUES (1775,'Kameoka','JPN','Kyoto',92398);
-INSERT INTO City VALUES (1776,'Mobara','JPN','Chiba',91664);
-INSERT INTO City VALUES (1777,'Narita','JPN','Chiba',91470);
-INSERT INTO City VALUES (1778,'Kashiwazaki','JPN','Niigata',91229);
-INSERT INTO City VALUES (1779,'Tsuyama','JPN','Okayama',91170);
-INSERT INTO City VALUES (1780,'Sanaa','YEM','Sanaa',503600);
-INSERT INTO City VALUES (1781,'Aden','YEM','Aden',398300);
-INSERT INTO City VALUES (1782,'Taizz','YEM','Taizz',317600);
-INSERT INTO City VALUES (1783,'Hodeida','YEM','Hodeida',298500);
-INSERT INTO City VALUES (1784,'al-Mukalla','YEM','Hadramawt',122400);
-INSERT INTO City VALUES (1785,'Ibb','YEM','Ibb',103300);
-INSERT INTO City VALUES (1786,'Amman','JOR','Amman',1000000);
-INSERT INTO City VALUES (1787,'al-Zarqa','JOR','al-Zarqa',389815);
-INSERT INTO City VALUES (1788,'Irbid','JOR','Irbid',231511);
-INSERT INTO City VALUES (1789,'al-Rusayfa','JOR','al-Zarqa',137247);
-INSERT INTO City VALUES (1790,'Wadi al-Sir','JOR','Amman',89104);
-INSERT INTO City VALUES (1791,'Flying Fish Cove','CXR','�',700);
-INSERT INTO City VALUES (1792,'Beograd','YUG','Central Serbia',1204000);
-INSERT INTO City VALUES (1793,'Novi Sad','YUG','Vojvodina',179626);
-INSERT INTO City VALUES (1794,'Ni�','YUG','Central Serbia',175391);
-INSERT INTO City VALUES (1795,'Pri�tina','YUG','Kosovo and Metohija',155496);
-INSERT INTO City VALUES (1796,'Kragujevac','YUG','Central Serbia',147305);
-INSERT INTO City VALUES (1797,'Podgorica','YUG','Montenegro',135000);
-INSERT INTO City VALUES (1798,'Subotica','YUG','Vojvodina',100386);
-INSERT INTO City VALUES (1799,'Prizren','YUG','Kosovo and Metohija',92303);
-INSERT INTO City VALUES (1800,'Phnom Penh','KHM','Phnom Penh',570155);
-INSERT INTO City VALUES (1801,'Battambang','KHM','Battambang',129800);
-INSERT INTO City VALUES (1802,'Siem Reap','KHM','Siem Reap',105100);
-INSERT INTO City VALUES (1803,'Douala','CMR','Littoral',1448300);
-INSERT INTO City VALUES (1804,'Yaound�','CMR','Centre',1372800);
-INSERT INTO City VALUES (1805,'Garoua','CMR','Nord',177000);
-INSERT INTO City VALUES (1806,'Maroua','CMR','Extr�me-Nord',143000);
-INSERT INTO City VALUES (1807,'Bamenda','CMR','Nord-Ouest',138000);
-INSERT INTO City VALUES (1808,'Bafoussam','CMR','Ouest',131000);
-INSERT INTO City VALUES (1809,'Nkongsamba','CMR','Littoral',112454);
-INSERT INTO City VALUES (1810,'Montr�al','CAN','Qu�bec',1016376);
-INSERT INTO City VALUES (1811,'Calgary','CAN','Alberta',768082);
-INSERT INTO City VALUES (1812,'Toronto','CAN','Ontario',688275);
-INSERT INTO City VALUES (1813,'North York','CAN','Ontario',622632);
-INSERT INTO City VALUES (1814,'Winnipeg','CAN','Manitoba',618477);
-INSERT INTO City VALUES (1815,'Edmonton','CAN','Alberta',616306);
-INSERT INTO City VALUES (1816,'Mississauga','CAN','Ontario',608072);
-INSERT INTO City VALUES (1817,'Scarborough','CAN','Ontario',594501);
-INSERT INTO City VALUES (1818,'Vancouver','CAN','British Colombia',514008);
-INSERT INTO City VALUES (1819,'Etobicoke','CAN','Ontario',348845);
-INSERT INTO City VALUES (1820,'London','CAN','Ontario',339917);
-INSERT INTO City VALUES (1821,'Hamilton','CAN','Ontario',335614);
-INSERT INTO City VALUES (1822,'Ottawa','CAN','Ontario',335277);
-INSERT INTO City VALUES (1823,'Laval','CAN','Qu�bec',330393);
-INSERT INTO City VALUES (1824,'Surrey','CAN','British Colombia',304477);
-INSERT INTO City VALUES (1825,'Brampton','CAN','Ontario',296711);
-INSERT INTO City VALUES (1826,'Windsor','CAN','Ontario',207588);
-INSERT INTO City VALUES (1827,'Saskatoon','CAN','Saskatchewan',193647);
-INSERT INTO City VALUES (1828,'Kitchener','CAN','Ontario',189959);
-INSERT INTO City VALUES (1829,'Markham','CAN','Ontario',189098);
-INSERT INTO City VALUES (1830,'Regina','CAN','Saskatchewan',180400);
-INSERT INTO City VALUES (1831,'Burnaby','CAN','British Colombia',179209);
-INSERT INTO City VALUES (1832,'Qu�bec','CAN','Qu�bec',167264);
-INSERT INTO City VALUES (1833,'York','CAN','Ontario',154980);
-INSERT INTO City VALUES (1834,'Richmond','CAN','British Colombia',148867);
-INSERT INTO City VALUES (1835,'Vaughan','CAN','Ontario',147889);
-INSERT INTO City VALUES (1836,'Burlington','CAN','Ontario',145150);
-INSERT INTO City VALUES (1837,'Oshawa','CAN','Ontario',140173);
-INSERT INTO City VALUES (1838,'Oakville','CAN','Ontario',139192);
-INSERT INTO City VALUES (1839,'Saint Catharines','CAN','Ontario',136216);
-INSERT INTO City VALUES (1840,'Longueuil','CAN','Qu�bec',127977);
-INSERT INTO City VALUES (1841,'Richmond Hill','CAN','Ontario',116428);
-INSERT INTO City VALUES (1842,'Thunder Bay','CAN','Ontario',115913);
-INSERT INTO City VALUES (1843,'Nepean','CAN','Ontario',115100);
-INSERT INTO City VALUES (1844,'Cape Breton','CAN','Nova Scotia',114733);
-INSERT INTO City VALUES (1845,'East York','CAN','Ontario',114034);
-INSERT INTO City VALUES (1846,'Halifax','CAN','Nova Scotia',113910);
-INSERT INTO City VALUES (1847,'Cambridge','CAN','Ontario',109186);
-INSERT INTO City VALUES (1848,'Gloucester','CAN','Ontario',107314);
-INSERT INTO City VALUES (1849,'Abbotsford','CAN','British Colombia',105403);
-INSERT INTO City VALUES (1850,'Guelph','CAN','Ontario',103593);
-INSERT INTO City VALUES (1851,'Saint John�s','CAN','Newfoundland',101936);
-INSERT INTO City VALUES (1852,'Coquitlam','CAN','British Colombia',101820);
-INSERT INTO City VALUES (1853,'Saanich','CAN','British Colombia',101388);
-INSERT INTO City VALUES (1854,'Gatineau','CAN','Qu�bec',100702);
-INSERT INTO City VALUES (1855,'Delta','CAN','British Colombia',95411);
-INSERT INTO City VALUES (1856,'Sudbury','CAN','Ontario',92686);
-INSERT INTO City VALUES (1857,'Kelowna','CAN','British Colombia',89442);
-INSERT INTO City VALUES (1858,'Barrie','CAN','Ontario',89269);
-INSERT INTO City VALUES (1859,'Praia','CPV','S�o Tiago',94800);
-INSERT INTO City VALUES (1860,'Almaty','KAZ','Almaty Qalasy',1129400);
-INSERT INTO City VALUES (1861,'Qaraghandy','KAZ','Qaraghandy',436900);
-INSERT INTO City VALUES (1862,'Shymkent','KAZ','South Kazakstan',360100);
-INSERT INTO City VALUES (1863,'Taraz','KAZ','Taraz',330100);
-INSERT INTO City VALUES (1864,'Astana','KAZ','Astana',311200);
-INSERT INTO City VALUES (1865,'�skemen','KAZ','East Kazakstan',311000);
-INSERT INTO City VALUES (1866,'Pavlodar','KAZ','Pavlodar',300500);
-INSERT INTO City VALUES (1867,'Semey','KAZ','East Kazakstan',269600);
-INSERT INTO City VALUES (1868,'Aqt�be','KAZ','Aqt�be',253100);
-INSERT INTO City VALUES (1869,'Qostanay','KAZ','Qostanay',221400);
-INSERT INTO City VALUES (1870,'Petropavl','KAZ','North Kazakstan',203500);
-INSERT INTO City VALUES (1871,'Oral','KAZ','West Kazakstan',195500);
-INSERT INTO City VALUES (1872,'Temirtau','KAZ','Qaraghandy',170500);
-INSERT INTO City VALUES (1873,'Qyzylorda','KAZ','Qyzylorda',157400);
-INSERT INTO City VALUES (1874,'Aqtau','KAZ','Mangghystau',143400);
-INSERT INTO City VALUES (1875,'Atyrau','KAZ','Atyrau',142500);
-INSERT INTO City VALUES (1876,'Ekibastuz','KAZ','Pavlodar',127200);
-INSERT INTO City VALUES (1877,'K�kshetau','KAZ','North Kazakstan',123400);
-INSERT INTO City VALUES (1878,'Rudnyy','KAZ','Qostanay',109500);
-INSERT INTO City VALUES (1879,'Taldyqorghan','KAZ','Almaty',98000);
-INSERT INTO City VALUES (1880,'Zhezqazghan','KAZ','Qaraghandy',90000);
-INSERT INTO City VALUES (1881,'Nairobi','KEN','Nairobi',2290000);
-INSERT INTO City VALUES (1882,'Mombasa','KEN','Coast',461753);
-INSERT INTO City VALUES (1883,'Kisumu','KEN','Nyanza',192733);
-INSERT INTO City VALUES (1884,'Nakuru','KEN','Rift Valley',163927);
-INSERT INTO City VALUES (1885,'Machakos','KEN','Eastern',116293);
-INSERT INTO City VALUES (1886,'Eldoret','KEN','Rift Valley',111882);
-INSERT INTO City VALUES (1887,'Meru','KEN','Eastern',94947);
-INSERT INTO City VALUES (1888,'Nyeri','KEN','Central',91258);
-INSERT INTO City VALUES (1889,'Bangui','CAF','Bangui',524000);
-INSERT INTO City VALUES (1890,'Shanghai','CHN','Shanghai',9696300);
-INSERT INTO City VALUES (1891,'Peking','CHN','Peking',7472000);
-INSERT INTO City VALUES (1892,'Chongqing','CHN','Chongqing',6351600);
-INSERT INTO City VALUES (1893,'Tianjin','CHN','Tianjin',5286800);
-INSERT INTO City VALUES (1894,'Wuhan','CHN','Hubei',4344600);
-INSERT INTO City VALUES (1895,'Harbin','CHN','Heilongjiang',4289800);
-INSERT INTO City VALUES (1896,'Shenyang','CHN','Liaoning',4265200);
-INSERT INTO City VALUES (1897,'Kanton [Guangzhou]','CHN','Guangdong',4256300);
-INSERT INTO City VALUES (1898,'Chengdu','CHN','Sichuan',3361500);
-INSERT INTO City VALUES (1899,'Nanking [Nanjing]','CHN','Jiangsu',2870300);
-INSERT INTO City VALUES (1900,'Changchun','CHN','Jilin',2812000);
-INSERT INTO City VALUES (1901,'Xi�an','CHN','Shaanxi',2761400);
-INSERT INTO City VALUES (1902,'Dalian','CHN','Liaoning',2697000);
-INSERT INTO City VALUES (1903,'Qingdao','CHN','Shandong',2596000);
-INSERT INTO City VALUES (1904,'Jinan','CHN','Shandong',2278100);
-INSERT INTO City VALUES (1905,'Hangzhou','CHN','Zhejiang',2190500);
-INSERT INTO City VALUES (1906,'Zhengzhou','CHN','Henan',2107200);
-INSERT INTO City VALUES (1907,'Shijiazhuang','CHN','Hebei',2041500);
-INSERT INTO City VALUES (1908,'Taiyuan','CHN','Shanxi',1968400);
-INSERT INTO City VALUES (1909,'Kunming','CHN','Yunnan',1829500);
-INSERT INTO City VALUES (1910,'Changsha','CHN','Hunan',1809800);
-INSERT INTO City VALUES (1911,'Nanchang','CHN','Jiangxi',1691600);
-INSERT INTO City VALUES (1912,'Fuzhou','CHN','Fujian',1593800);
-INSERT INTO City VALUES (1913,'Lanzhou','CHN','Gansu',1565800);
-INSERT INTO City VALUES (1914,'Guiyang','CHN','Guizhou',1465200);
-INSERT INTO City VALUES (1915,'Ningbo','CHN','Zhejiang',1371200);
-INSERT INTO City VALUES (1916,'Hefei','CHN','Anhui',1369100);
-INSERT INTO City VALUES (1917,'Urumt�i [�r�mqi]','CHN','Xinxiang',1310100);
-INSERT INTO City VALUES (1918,'Anshan','CHN','Liaoning',1200000);
-INSERT INTO City VALUES (1919,'Fushun','CHN','Liaoning',1200000);
-INSERT INTO City VALUES (1920,'Nanning','CHN','Guangxi',1161800);
-INSERT INTO City VALUES (1921,'Zibo','CHN','Shandong',1140000);
-INSERT INTO City VALUES (1922,'Qiqihar','CHN','Heilongjiang',1070000);
-INSERT INTO City VALUES (1923,'Jilin','CHN','Jilin',1040000);
-INSERT INTO City VALUES (1924,'Tangshan','CHN','Hebei',1040000);
-INSERT INTO City VALUES (1925,'Baotou','CHN','Inner Mongolia',980000);
-INSERT INTO City VALUES (1926,'Shenzhen','CHN','Guangdong',950500);
-INSERT INTO City VALUES (1927,'Hohhot','CHN','Inner Mongolia',916700);
-INSERT INTO City VALUES (1928,'Handan','CHN','Hebei',840000);
-INSERT INTO City VALUES (1929,'Wuxi','CHN','Jiangsu',830000);
-INSERT INTO City VALUES (1930,'Xuzhou','CHN','Jiangsu',810000);
-INSERT INTO City VALUES (1931,'Datong','CHN','Shanxi',800000);
-INSERT INTO City VALUES (1932,'Yichun','CHN','Heilongjiang',800000);
-INSERT INTO City VALUES (1933,'Benxi','CHN','Liaoning',770000);
-INSERT INTO City VALUES (1934,'Luoyang','CHN','Henan',760000);
-INSERT INTO City VALUES (1935,'Suzhou','CHN','Jiangsu',710000);
-INSERT INTO City VALUES (1936,'Xining','CHN','Qinghai',700200);
-INSERT INTO City VALUES (1937,'Huainan','CHN','Anhui',700000);
-INSERT INTO City VALUES (1938,'Jixi','CHN','Heilongjiang',683885);
-INSERT INTO City VALUES (1939,'Daqing','CHN','Heilongjiang',660000);
-INSERT INTO City VALUES (1940,'Fuxin','CHN','Liaoning',640000);
-INSERT INTO City VALUES (1941,'Amoy [Xiamen]','CHN','Fujian',627500);
-INSERT INTO City VALUES (1942,'Liuzhou','CHN','Guangxi',610000);
-INSERT INTO City VALUES (1943,'Shantou','CHN','Guangdong',580000);
-INSERT INTO City VALUES (1944,'Jinzhou','CHN','Liaoning',570000);
-INSERT INTO City VALUES (1945,'Mudanjiang','CHN','Heilongjiang',570000);
-INSERT INTO City VALUES (1946,'Yinchuan','CHN','Ningxia',544500);
-INSERT INTO City VALUES (1947,'Changzhou','CHN','Jiangsu',530000);
-INSERT INTO City VALUES (1948,'Zhangjiakou','CHN','Hebei',530000);
-INSERT INTO City VALUES (1949,'Dandong','CHN','Liaoning',520000);
-INSERT INTO City VALUES (1950,'Hegang','CHN','Heilongjiang',520000);
-INSERT INTO City VALUES (1951,'Kaifeng','CHN','Henan',510000);
-INSERT INTO City VALUES (1952,'Jiamusi','CHN','Heilongjiang',493409);
-INSERT INTO City VALUES (1953,'Liaoyang','CHN','Liaoning',492559);
-INSERT INTO City VALUES (1954,'Hengyang','CHN','Hunan',487148);
-INSERT INTO City VALUES (1955,'Baoding','CHN','Hebei',483155);
-INSERT INTO City VALUES (1956,'Hunjiang','CHN','Jilin',482043);
-INSERT INTO City VALUES (1957,'Xinxiang','CHN','Henan',473762);
-INSERT INTO City VALUES (1958,'Huangshi','CHN','Hubei',457601);
-INSERT INTO City VALUES (1959,'Haikou','CHN','Hainan',454300);
-INSERT INTO City VALUES (1960,'Yantai','CHN','Shandong',452127);
-INSERT INTO City VALUES (1961,'Bengbu','CHN','Anhui',449245);
-INSERT INTO City VALUES (1962,'Xiangtan','CHN','Hunan',441968);
-INSERT INTO City VALUES (1963,'Weifang','CHN','Shandong',428522);
-INSERT INTO City VALUES (1964,'Wuhu','CHN','Anhui',425740);
-INSERT INTO City VALUES (1965,'Pingxiang','CHN','Jiangxi',425579);
-INSERT INTO City VALUES (1966,'Yingkou','CHN','Liaoning',421589);
-INSERT INTO City VALUES (1967,'Anyang','CHN','Henan',420332);
-INSERT INTO City VALUES (1968,'Panzhihua','CHN','Sichuan',415466);
-INSERT INTO City VALUES (1969,'Pingdingshan','CHN','Henan',410775);
-INSERT INTO City VALUES (1970,'Xiangfan','CHN','Hubei',410407);
-INSERT INTO City VALUES (1971,'Zhuzhou','CHN','Hunan',409924);
-INSERT INTO City VALUES (1972,'Jiaozuo','CHN','Henan',409100);
-INSERT INTO City VALUES (1973,'Wenzhou','CHN','Zhejiang',401871);
-INSERT INTO City VALUES (1974,'Zhangjiang','CHN','Guangdong',400997);
-INSERT INTO City VALUES (1975,'Zigong','CHN','Sichuan',393184);
-INSERT INTO City VALUES (1976,'Shuangyashan','CHN','Heilongjiang',386081);
-INSERT INTO City VALUES (1977,'Zaozhuang','CHN','Shandong',380846);
-INSERT INTO City VALUES (1978,'Yakeshi','CHN','Inner Mongolia',377869);
-INSERT INTO City VALUES (1979,'Yichang','CHN','Hubei',371601);
-INSERT INTO City VALUES (1980,'Zhenjiang','CHN','Jiangsu',368316);
-INSERT INTO City VALUES (1981,'Huaibei','CHN','Anhui',366549);
-INSERT INTO City VALUES (1982,'Qinhuangdao','CHN','Hebei',364972);
-INSERT INTO City VALUES (1983,'Guilin','CHN','Guangxi',364130);
-INSERT INTO City VALUES (1984,'Liupanshui','CHN','Guizhou',363954);
-INSERT INTO City VALUES (1985,'Panjin','CHN','Liaoning',362773);
-INSERT INTO City VALUES (1986,'Yangquan','CHN','Shanxi',362268);
-INSERT INTO City VALUES (1987,'Jinxi','CHN','Liaoning',357052);
-INSERT INTO City VALUES (1988,'Liaoyuan','CHN','Jilin',354141);
-INSERT INTO City VALUES (1989,'Lianyungang','CHN','Jiangsu',354139);
-INSERT INTO City VALUES (1990,'Xianyang','CHN','Shaanxi',352125);
-INSERT INTO City VALUES (1991,'Tai�an','CHN','Shandong',350696);
-INSERT INTO City VALUES (1992,'Chifeng','CHN','Inner Mongolia',350077);
-INSERT INTO City VALUES (1993,'Shaoguan','CHN','Guangdong',350043);
-INSERT INTO City VALUES (1994,'Nantong','CHN','Jiangsu',343341);
-INSERT INTO City VALUES (1995,'Leshan','CHN','Sichuan',341128);
-INSERT INTO City VALUES (1996,'Baoji','CHN','Shaanxi',337765);
-INSERT INTO City VALUES (1997,'Linyi','CHN','Shandong',324720);
-INSERT INTO City VALUES (1998,'Tonghua','CHN','Jilin',324600);
-INSERT INTO City VALUES (1999,'Siping','CHN','Jilin',317223);
-INSERT INTO City VALUES (2000,'Changzhi','CHN','Shanxi',317144);
-INSERT INTO City VALUES (2001,'Tengzhou','CHN','Shandong',315083);
-INSERT INTO City VALUES (2002,'Chaozhou','CHN','Guangdong',313469);
-INSERT INTO City VALUES (2003,'Yangzhou','CHN','Jiangsu',312892);
-INSERT INTO City VALUES (2004,'Dongwan','CHN','Guangdong',308669);
-INSERT INTO City VALUES (2005,'Ma�anshan','CHN','Anhui',305421);
-INSERT INTO City VALUES (2006,'Foshan','CHN','Guangdong',303160);
-INSERT INTO City VALUES (2007,'Yueyang','CHN','Hunan',302800);
-INSERT INTO City VALUES (2008,'Xingtai','CHN','Hebei',302789);
-INSERT INTO City VALUES (2009,'Changde','CHN','Hunan',301276);
-INSERT INTO City VALUES (2010,'Shihezi','CHN','Xinxiang',299676);
-INSERT INTO City VALUES (2011,'Yancheng','CHN','Jiangsu',296831);
-INSERT INTO City VALUES (2012,'Jiujiang','CHN','Jiangxi',291187);
-INSERT INTO City VALUES (2013,'Dongying','CHN','Shandong',281728);
-INSERT INTO City VALUES (2014,'Shashi','CHN','Hubei',281352);
-INSERT INTO City VALUES (2015,'Xintai','CHN','Shandong',281248);
-INSERT INTO City VALUES (2016,'Jingdezhen','CHN','Jiangxi',281183);
-INSERT INTO City VALUES (2017,'Tongchuan','CHN','Shaanxi',280657);
-INSERT INTO City VALUES (2018,'Zhongshan','CHN','Guangdong',278829);
-INSERT INTO City VALUES (2019,'Shiyan','CHN','Hubei',273786);
-INSERT INTO City VALUES (2020,'Tieli','CHN','Heilongjiang',265683);
-INSERT INTO City VALUES (2021,'Jining','CHN','Shandong',265248);
-INSERT INTO City VALUES (2022,'Wuhai','CHN','Inner Mongolia',264081);
-INSERT INTO City VALUES (2023,'Mianyang','CHN','Sichuan',262947);
-INSERT INTO City VALUES (2024,'Luzhou','CHN','Sichuan',262892);
-INSERT INTO City VALUES (2025,'Zunyi','CHN','Guizhou',261862);
-INSERT INTO City VALUES (2026,'Shizuishan','CHN','Ningxia',257862);
-INSERT INTO City VALUES (2027,'Neijiang','CHN','Sichuan',256012);
-INSERT INTO City VALUES (2028,'Tongliao','CHN','Inner Mongolia',255129);
-INSERT INTO City VALUES (2029,'Tieling','CHN','Liaoning',254842);
-INSERT INTO City VALUES (2030,'Wafangdian','CHN','Liaoning',251733);
-INSERT INTO City VALUES (2031,'Anqing','CHN','Anhui',250718);
-INSERT INTO City VALUES (2032,'Shaoyang','CHN','Hunan',247227);
-INSERT INTO City VALUES (2033,'Laiwu','CHN','Shandong',246833);
-INSERT INTO City VALUES (2034,'Chengde','CHN','Hebei',246799);
-INSERT INTO City VALUES (2035,'Tianshui','CHN','Gansu',244974);
-INSERT INTO City VALUES (2036,'Nanyang','CHN','Henan',243303);
-INSERT INTO City VALUES (2037,'Cangzhou','CHN','Hebei',242708);
-INSERT INTO City VALUES (2038,'Yibin','CHN','Sichuan',241019);
-INSERT INTO City VALUES (2039,'Huaiyin','CHN','Jiangsu',239675);
-INSERT INTO City VALUES (2040,'Dunhua','CHN','Jilin',235100);
-INSERT INTO City VALUES (2041,'Yanji','CHN','Jilin',230892);
-INSERT INTO City VALUES (2042,'Jiangmen','CHN','Guangdong',230587);
-INSERT INTO City VALUES (2043,'Tongling','CHN','Anhui',228017);
-INSERT INTO City VALUES (2044,'Suihua','CHN','Heilongjiang',227881);
-INSERT INTO City VALUES (2045,'Gongziling','CHN','Jilin',226569);
-INSERT INTO City VALUES (2046,'Xiantao','CHN','Hubei',222884);
-INSERT INTO City VALUES (2047,'Chaoyang','CHN','Liaoning',222394);
-INSERT INTO City VALUES (2048,'Ganzhou','CHN','Jiangxi',220129);
-INSERT INTO City VALUES (2049,'Huzhou','CHN','Zhejiang',218071);
-INSERT INTO City VALUES (2050,'Baicheng','CHN','Jilin',217987);
-INSERT INTO City VALUES (2051,'Shangzi','CHN','Heilongjiang',215373);
-INSERT INTO City VALUES (2052,'Yangjiang','CHN','Guangdong',215196);
-INSERT INTO City VALUES (2053,'Qitaihe','CHN','Heilongjiang',214957);
-INSERT INTO City VALUES (2054,'Gejiu','CHN','Yunnan',214294);
-INSERT INTO City VALUES (2055,'Jiangyin','CHN','Jiangsu',213659);
-INSERT INTO City VALUES (2056,'Hebi','CHN','Henan',212976);
-INSERT INTO City VALUES (2057,'Jiaxing','CHN','Zhejiang',211526);
-INSERT INTO City VALUES (2058,'Wuzhou','CHN','Guangxi',210452);
-INSERT INTO City VALUES (2059,'Meihekou','CHN','Jilin',209038);
-INSERT INTO City VALUES (2060,'Xuchang','CHN','Henan',208815);
-INSERT INTO City VALUES (2061,'Liaocheng','CHN','Shandong',207844);
-INSERT INTO City VALUES (2062,'Haicheng','CHN','Liaoning',205560);
-INSERT INTO City VALUES (2063,'Qianjiang','CHN','Hubei',205504);
-INSERT INTO City VALUES (2064,'Baiyin','CHN','Gansu',204970);
-INSERT INTO City VALUES (2065,'Bei�an','CHN','Heilongjiang',204899);
-INSERT INTO City VALUES (2066,'Yixing','CHN','Jiangsu',200824);
-INSERT INTO City VALUES (2067,'Laizhou','CHN','Shandong',198664);
-INSERT INTO City VALUES (2068,'Qaramay','CHN','Xinxiang',197602);
-INSERT INTO City VALUES (2069,'Acheng','CHN','Heilongjiang',197595);
-INSERT INTO City VALUES (2070,'Dezhou','CHN','Shandong',195485);
-INSERT INTO City VALUES (2071,'Nanping','CHN','Fujian',195064);
-INSERT INTO City VALUES (2072,'Zhaoqing','CHN','Guangdong',194784);
-INSERT INTO City VALUES (2073,'Beipiao','CHN','Liaoning',194301);
-INSERT INTO City VALUES (2074,'Fengcheng','CHN','Jiangxi',193784);
-INSERT INTO City VALUES (2075,'Fuyu','CHN','Jilin',192981);
-INSERT INTO City VALUES (2076,'Xinyang','CHN','Henan',192509);
-INSERT INTO City VALUES (2077,'Dongtai','CHN','Jiangsu',192247);
-INSERT INTO City VALUES (2078,'Yuci','CHN','Shanxi',191356);
-INSERT INTO City VALUES (2079,'Honghu','CHN','Hubei',190772);
-INSERT INTO City VALUES (2080,'Ezhou','CHN','Hubei',190123);
-INSERT INTO City VALUES (2081,'Heze','CHN','Shandong',189293);
-INSERT INTO City VALUES (2082,'Daxian','CHN','Sichuan',188101);
-INSERT INTO City VALUES (2083,'Linfen','CHN','Shanxi',187309);
-INSERT INTO City VALUES (2084,'Tianmen','CHN','Hubei',186332);
-INSERT INTO City VALUES (2085,'Yiyang','CHN','Hunan',185818);
-INSERT INTO City VALUES (2086,'Quanzhou','CHN','Fujian',185154);
-INSERT INTO City VALUES (2087,'Rizhao','CHN','Shandong',185048);
-INSERT INTO City VALUES (2088,'Deyang','CHN','Sichuan',182488);
-INSERT INTO City VALUES (2089,'Guangyuan','CHN','Sichuan',182241);
-INSERT INTO City VALUES (2090,'Changshu','CHN','Jiangsu',181805);
-INSERT INTO City VALUES (2091,'Zhangzhou','CHN','Fujian',181424);
-INSERT INTO City VALUES (2092,'Hailar','CHN','Inner Mongolia',180650);
-INSERT INTO City VALUES (2093,'Nanchong','CHN','Sichuan',180273);
-INSERT INTO City VALUES (2094,'Jiutai','CHN','Jilin',180130);
-INSERT INTO City VALUES (2095,'Zhaodong','CHN','Heilongjiang',179976);
-INSERT INTO City VALUES (2096,'Shaoxing','CHN','Zhejiang',179818);
-INSERT INTO City VALUES (2097,'Fuyang','CHN','Anhui',179572);
-INSERT INTO City VALUES (2098,'Maoming','CHN','Guangdong',178683);
-INSERT INTO City VALUES (2099,'Qujing','CHN','Yunnan',178669);
-INSERT INTO City VALUES (2100,'Ghulja','CHN','Xinxiang',177193);
-INSERT INTO City VALUES (2101,'Jiaohe','CHN','Jilin',176367);
-INSERT INTO City VALUES (2102,'Puyang','CHN','Henan',175988);
-INSERT INTO City VALUES (2103,'Huadian','CHN','Jilin',175873);
-INSERT INTO City VALUES (2104,'Jiangyou','CHN','Sichuan',175753);
-INSERT INTO City VALUES (2105,'Qashqar','CHN','Xinxiang',174570);
-INSERT INTO City VALUES (2106,'Anshun','CHN','Guizhou',174142);
-INSERT INTO City VALUES (2107,'Fuling','CHN','Sichuan',173878);
-INSERT INTO City VALUES (2108,'Xinyu','CHN','Jiangxi',173524);
-INSERT INTO City VALUES (2109,'Hanzhong','CHN','Shaanxi',169930);
-INSERT INTO City VALUES (2110,'Danyang','CHN','Jiangsu',169603);
-INSERT INTO City VALUES (2111,'Chenzhou','CHN','Hunan',169400);
-INSERT INTO City VALUES (2112,'Xiaogan','CHN','Hubei',166280);
-INSERT INTO City VALUES (2113,'Shangqiu','CHN','Henan',164880);
-INSERT INTO City VALUES (2114,'Zhuhai','CHN','Guangdong',164747);
-INSERT INTO City VALUES (2115,'Qingyuan','CHN','Guangdong',164641);
-INSERT INTO City VALUES (2116,'Aqsu','CHN','Xinxiang',164092);
-INSERT INTO City VALUES (2117,'Jining','CHN','Inner Mongolia',163552);
-INSERT INTO City VALUES (2118,'Xiaoshan','CHN','Zhejiang',162930);
-INSERT INTO City VALUES (2119,'Zaoyang','CHN','Hubei',162198);
-INSERT INTO City VALUES (2120,'Xinghua','CHN','Jiangsu',161910);
-INSERT INTO City VALUES (2121,'Hami','CHN','Xinxiang',161315);
-INSERT INTO City VALUES (2122,'Huizhou','CHN','Guangdong',161023);
-INSERT INTO City VALUES (2123,'Jinmen','CHN','Hubei',160794);
-INSERT INTO City VALUES (2124,'Sanming','CHN','Fujian',160691);
-INSERT INTO City VALUES (2125,'Ulanhot','CHN','Inner Mongolia',159538);
-INSERT INTO City VALUES (2126,'Korla','CHN','Xinxiang',159344);
-INSERT INTO City VALUES (2127,'Wanxian','CHN','Sichuan',156823);
-INSERT INTO City VALUES (2128,'Rui�an','CHN','Zhejiang',156468);
-INSERT INTO City VALUES (2129,'Zhoushan','CHN','Zhejiang',156317);
-INSERT INTO City VALUES (2130,'Liangcheng','CHN','Shandong',156307);
-INSERT INTO City VALUES (2131,'Jiaozhou','CHN','Shandong',153364);
-INSERT INTO City VALUES (2132,'Taizhou','CHN','Jiangsu',152442);
-INSERT INTO City VALUES (2133,'Suzhou','CHN','Anhui',151862);
-INSERT INTO City VALUES (2134,'Yichun','CHN','Jiangxi',151585);
-INSERT INTO City VALUES (2135,'Taonan','CHN','Jilin',150168);
-INSERT INTO City VALUES (2136,'Pingdu','CHN','Shandong',150123);
-INSERT INTO City VALUES (2137,'Ji�an','CHN','Jiangxi',148583);
-INSERT INTO City VALUES (2138,'Longkou','CHN','Shandong',148362);
-INSERT INTO City VALUES (2139,'Langfang','CHN','Hebei',148105);
-INSERT INTO City VALUES (2140,'Zhoukou','CHN','Henan',146288);
-INSERT INTO City VALUES (2141,'Suining','CHN','Sichuan',146086);
-INSERT INTO City VALUES (2142,'Yulin','CHN','Guangxi',144467);
-INSERT INTO City VALUES (2143,'Jinhua','CHN','Zhejiang',144280);
-INSERT INTO City VALUES (2144,'Liu�an','CHN','Anhui',144248);
-INSERT INTO City VALUES (2145,'Shuangcheng','CHN','Heilongjiang',142659);
-INSERT INTO City VALUES (2146,'Suizhou','CHN','Hubei',142302);
-INSERT INTO City VALUES (2147,'Ankang','CHN','Shaanxi',142170);
-INSERT INTO City VALUES (2148,'Weinan','CHN','Shaanxi',140169);
-INSERT INTO City VALUES (2149,'Longjing','CHN','Jilin',139417);
-INSERT INTO City VALUES (2150,'Da�an','CHN','Jilin',138963);
-INSERT INTO City VALUES (2151,'Lengshuijiang','CHN','Hunan',137994);
-INSERT INTO City VALUES (2152,'Laiyang','CHN','Shandong',137080);
-INSERT INTO City VALUES (2153,'Xianning','CHN','Hubei',136811);
-INSERT INTO City VALUES (2154,'Dali','CHN','Yunnan',136554);
-INSERT INTO City VALUES (2155,'Anda','CHN','Heilongjiang',136446);
-INSERT INTO City VALUES (2156,'Jincheng','CHN','Shanxi',136396);
-INSERT INTO City VALUES (2157,'Longyan','CHN','Fujian',134481);
-INSERT INTO City VALUES (2158,'Xichang','CHN','Sichuan',134419);
-INSERT INTO City VALUES (2159,'Wendeng','CHN','Shandong',133910);
-INSERT INTO City VALUES (2160,'Hailun','CHN','Heilongjiang',133565);
-INSERT INTO City VALUES (2161,'Binzhou','CHN','Shandong',133555);
-INSERT INTO City VALUES (2162,'Linhe','CHN','Inner Mongolia',133183);
-INSERT INTO City VALUES (2163,'Wuwei','CHN','Gansu',133101);
-INSERT INTO City VALUES (2164,'Duyun','CHN','Guizhou',132971);
-INSERT INTO City VALUES (2165,'Mishan','CHN','Heilongjiang',132744);
-INSERT INTO City VALUES (2166,'Shangrao','CHN','Jiangxi',132455);
-INSERT INTO City VALUES (2167,'Changji','CHN','Xinxiang',132260);
-INSERT INTO City VALUES (2168,'Meixian','CHN','Guangdong',132156);
-INSERT INTO City VALUES (2169,'Yushu','CHN','Jilin',131861);
-INSERT INTO City VALUES (2170,'Tiefa','CHN','Liaoning',131807);
-INSERT INTO City VALUES (2171,'Huai�an','CHN','Jiangsu',131149);
-INSERT INTO City VALUES (2172,'Leiyang','CHN','Hunan',130115);
-INSERT INTO City VALUES (2173,'Zalantun','CHN','Inner Mongolia',130031);
-INSERT INTO City VALUES (2174,'Weihai','CHN','Shandong',128888);
-INSERT INTO City VALUES (2175,'Loudi','CHN','Hunan',128418);
-INSERT INTO City VALUES (2176,'Qingzhou','CHN','Shandong',128258);
-INSERT INTO City VALUES (2177,'Qidong','CHN','Jiangsu',126872);
-INSERT INTO City VALUES (2178,'Huaihua','CHN','Hunan',126785);
-INSERT INTO City VALUES (2179,'Luohe','CHN','Henan',126438);
-INSERT INTO City VALUES (2180,'Chuzhou','CHN','Anhui',125341);
-INSERT INTO City VALUES (2181,'Kaiyuan','CHN','Liaoning',124219);
-INSERT INTO City VALUES (2182,'Linqing','CHN','Shandong',123958);
-INSERT INTO City VALUES (2183,'Chaohu','CHN','Anhui',123676);
-INSERT INTO City VALUES (2184,'Laohekou','CHN','Hubei',123366);
-INSERT INTO City VALUES (2185,'Dujiangyan','CHN','Sichuan',123357);
-INSERT INTO City VALUES (2186,'Zhumadian','CHN','Henan',123232);
-INSERT INTO City VALUES (2187,'Linchuan','CHN','Jiangxi',121949);
-INSERT INTO City VALUES (2188,'Jiaonan','CHN','Shandong',121397);
-INSERT INTO City VALUES (2189,'Sanmenxia','CHN','Henan',120523);
-INSERT INTO City VALUES (2190,'Heyuan','CHN','Guangdong',120101);
-INSERT INTO City VALUES (2191,'Manzhouli','CHN','Inner Mongolia',120023);
-INSERT INTO City VALUES (2192,'Lhasa','CHN','Tibet',120000);
-INSERT INTO City VALUES (2193,'Lianyuan','CHN','Hunan',118858);
-INSERT INTO City VALUES (2194,'Kuytun','CHN','Xinxiang',118553);
-INSERT INTO City VALUES (2195,'Puqi','CHN','Hubei',117264);
-INSERT INTO City VALUES (2196,'Hongjiang','CHN','Hunan',116188);
-INSERT INTO City VALUES (2197,'Qinzhou','CHN','Guangxi',114586);
-INSERT INTO City VALUES (2198,'Renqiu','CHN','Hebei',114256);
-INSERT INTO City VALUES (2199,'Yuyao','CHN','Zhejiang',114065);
-INSERT INTO City VALUES (2200,'Guigang','CHN','Guangxi',114025);
-INSERT INTO City VALUES (2201,'Kaili','CHN','Guizhou',113958);
-INSERT INTO City VALUES (2202,'Yan�an','CHN','Shaanxi',113277);
-INSERT INTO City VALUES (2203,'Beihai','CHN','Guangxi',112673);
-INSERT INTO City VALUES (2204,'Xuangzhou','CHN','Anhui',112673);
-INSERT INTO City VALUES (2205,'Quzhou','CHN','Zhejiang',112373);
-INSERT INTO City VALUES (2206,'Yong�an','CHN','Fujian',111762);
-INSERT INTO City VALUES (2207,'Zixing','CHN','Hunan',110048);
-INSERT INTO City VALUES (2208,'Liyang','CHN','Jiangsu',109520);
-INSERT INTO City VALUES (2209,'Yizheng','CHN','Jiangsu',109268);
-INSERT INTO City VALUES (2210,'Yumen','CHN','Gansu',109234);
-INSERT INTO City VALUES (2211,'Liling','CHN','Hunan',108504);
-INSERT INTO City VALUES (2212,'Yuncheng','CHN','Shanxi',108359);
-INSERT INTO City VALUES (2213,'Shanwei','CHN','Guangdong',107847);
-INSERT INTO City VALUES (2214,'Cixi','CHN','Zhejiang',107329);
-INSERT INTO City VALUES (2215,'Yuanjiang','CHN','Hunan',107004);
-INSERT INTO City VALUES (2216,'Bozhou','CHN','Anhui',106346);
-INSERT INTO City VALUES (2217,'Jinchang','CHN','Gansu',105287);
-INSERT INTO City VALUES (2218,'Fu�an','CHN','Fujian',105265);
-INSERT INTO City VALUES (2219,'Suqian','CHN','Jiangsu',105021);
-INSERT INTO City VALUES (2220,'Shishou','CHN','Hubei',104571);
-INSERT INTO City VALUES (2221,'Hengshui','CHN','Hebei',104269);
-INSERT INTO City VALUES (2222,'Danjiangkou','CHN','Hubei',103211);
-INSERT INTO City VALUES (2223,'Fujin','CHN','Heilongjiang',103104);
-INSERT INTO City VALUES (2224,'Sanya','CHN','Hainan',102820);
-INSERT INTO City VALUES (2225,'Guangshui','CHN','Hubei',102770);
-INSERT INTO City VALUES (2226,'Huangshan','CHN','Anhui',102628);
-INSERT INTO City VALUES (2227,'Xingcheng','CHN','Liaoning',102384);
-INSERT INTO City VALUES (2228,'Zhucheng','CHN','Shandong',102134);
-INSERT INTO City VALUES (2229,'Kunshan','CHN','Jiangsu',102052);
-INSERT INTO City VALUES (2230,'Haining','CHN','Zhejiang',100478);
-INSERT INTO City VALUES (2231,'Pingliang','CHN','Gansu',99265);
-INSERT INTO City VALUES (2232,'Fuqing','CHN','Fujian',99193);
-INSERT INTO City VALUES (2233,'Xinzhou','CHN','Shanxi',98667);
-INSERT INTO City VALUES (2234,'Jieyang','CHN','Guangdong',98531);
-INSERT INTO City VALUES (2235,'Zhangjiagang','CHN','Jiangsu',97994);
-INSERT INTO City VALUES (2236,'Tong Xian','CHN','Peking',97168);
-INSERT INTO City VALUES (2237,'Ya�an','CHN','Sichuan',95900);
-INSERT INTO City VALUES (2238,'Jinzhou','CHN','Liaoning',95761);
-INSERT INTO City VALUES (2239,'Emeishan','CHN','Sichuan',94000);
-INSERT INTO City VALUES (2240,'Enshi','CHN','Hubei',93056);
-INSERT INTO City VALUES (2241,'Bose','CHN','Guangxi',93009);
-INSERT INTO City VALUES (2242,'Yuzhou','CHN','Henan',92889);
-INSERT INTO City VALUES (2243,'Kaiyuan','CHN','Yunnan',91999);
-INSERT INTO City VALUES (2244,'Tumen','CHN','Jilin',91471);
-INSERT INTO City VALUES (2245,'Putian','CHN','Fujian',91030);
-INSERT INTO City VALUES (2246,'Linhai','CHN','Zhejiang',90870);
-INSERT INTO City VALUES (2247,'Xilin Hot','CHN','Inner Mongolia',90646);
-INSERT INTO City VALUES (2248,'Shaowu','CHN','Fujian',90286);
-INSERT INTO City VALUES (2249,'Junan','CHN','Shandong',90222);
-INSERT INTO City VALUES (2250,'Huaying','CHN','Sichuan',89400);
-INSERT INTO City VALUES (2251,'Pingyi','CHN','Shandong',89373);
-INSERT INTO City VALUES (2252,'Huangyan','CHN','Zhejiang',89288);
-INSERT INTO City VALUES (2253,'Bishkek','KGZ','Bishkek shaary',589400);
-INSERT INTO City VALUES (2254,'Osh','KGZ','Osh',222700);
-INSERT INTO City VALUES (2255,'Bikenibeu','KIR','South Tarawa',5055);
-INSERT INTO City VALUES (2256,'Bairiki','KIR','South Tarawa',2226);
-INSERT INTO City VALUES (2257,'Santaf� de Bogot�','COL','Santaf� de Bogot�',6260862);
-INSERT INTO City VALUES (2258,'Cali','COL','Valle',2077386);
-INSERT INTO City VALUES (2259,'Medell�n','COL','Antioquia',1861265);
-INSERT INTO City VALUES (2260,'Barranquilla','COL','Atl�ntico',1223260);
-INSERT INTO City VALUES (2261,'Cartagena','COL','Bol�var',805757);
-INSERT INTO City VALUES (2262,'C�cuta','COL','Norte de Santander',606932);
-INSERT INTO City VALUES (2263,'Bucaramanga','COL','Santander',515555);
-INSERT INTO City VALUES (2264,'Ibagu�','COL','Tolima',393664);
-INSERT INTO City VALUES (2265,'Pereira','COL','Risaralda',381725);
-INSERT INTO City VALUES (2266,'Santa Marta','COL','Magdalena',359147);
-INSERT INTO City VALUES (2267,'Manizales','COL','Caldas',337580);
-INSERT INTO City VALUES (2268,'Bello','COL','Antioquia',333470);
-INSERT INTO City VALUES (2269,'Pasto','COL','Nari�o',332396);
-INSERT INTO City VALUES (2270,'Neiva','COL','Huila',300052);
-INSERT INTO City VALUES (2271,'Soledad','COL','Atl�ntico',295058);
-INSERT INTO City VALUES (2272,'Armenia','COL','Quind�o',288977);
-INSERT INTO City VALUES (2273,'Villavicencio','COL','Meta',273140);
-INSERT INTO City VALUES (2274,'Soacha','COL','Cundinamarca',272058);
-INSERT INTO City VALUES (2275,'Valledupar','COL','Cesar',263247);
-INSERT INTO City VALUES (2276,'Monter�a','COL','C�rdoba',248245);
-INSERT INTO City VALUES (2277,'Itag��','COL','Antioquia',228985);
-INSERT INTO City VALUES (2278,'Palmira','COL','Valle',226509);
-INSERT INTO City VALUES (2279,'Buenaventura','COL','Valle',224336);
-INSERT INTO City VALUES (2280,'Floridablanca','COL','Santander',221913);
-INSERT INTO City VALUES (2281,'Sincelejo','COL','Sucre',220704);
-INSERT INTO City VALUES (2282,'Popay�n','COL','Cauca',200719);
-INSERT INTO City VALUES (2283,'Barrancabermeja','COL','Santander',178020);
-INSERT INTO City VALUES (2284,'Dos Quebradas','COL','Risaralda',159363);
-INSERT INTO City VALUES (2285,'Tulu�','COL','Valle',152488);
-INSERT INTO City VALUES (2286,'Envigado','COL','Antioquia',135848);
-INSERT INTO City VALUES (2287,'Cartago','COL','Valle',125884);
-INSERT INTO City VALUES (2288,'Girardot','COL','Cundinamarca',110963);
-INSERT INTO City VALUES (2289,'Buga','COL','Valle',110699);
-INSERT INTO City VALUES (2290,'Tunja','COL','Boyac�',109740);
-INSERT INTO City VALUES (2291,'Florencia','COL','Caquet�',108574);
-INSERT INTO City VALUES (2292,'Maicao','COL','La Guajira',108053);
-INSERT INTO City VALUES (2293,'Sogamoso','COL','Boyac�',107728);
-INSERT INTO City VALUES (2294,'Giron','COL','Santander',90688);
-INSERT INTO City VALUES (2295,'Moroni','COM','Njazidja',36000);
-INSERT INTO City VALUES (2296,'Brazzaville','COG','Brazzaville',950000);
-INSERT INTO City VALUES (2297,'Pointe-Noire','COG','Kouilou',500000);
-INSERT INTO City VALUES (2298,'Kinshasa','COD','Kinshasa',5064000);
-INSERT INTO City VALUES (2299,'Lubumbashi','COD','Shaba',851381);
-INSERT INTO City VALUES (2300,'Mbuji-Mayi','COD','East Kasai',806475);
-INSERT INTO City VALUES (2301,'Kolwezi','COD','Shaba',417810);
-INSERT INTO City VALUES (2302,'Kisangani','COD','Haute-Za�re',417517);
-INSERT INTO City VALUES (2303,'Kananga','COD','West Kasai',393030);
-INSERT INTO City VALUES (2304,'Likasi','COD','Shaba',299118);
-INSERT INTO City VALUES (2305,'Bukavu','COD','South Kivu',201569);
-INSERT INTO City VALUES (2306,'Kikwit','COD','Bandundu',182142);
-INSERT INTO City VALUES (2307,'Tshikapa','COD','West Kasai',180860);
-INSERT INTO City VALUES (2308,'Matadi','COD','Bas-Za�re',172730);
-INSERT INTO City VALUES (2309,'Mbandaka','COD','Equateur',169841);
-INSERT INTO City VALUES (2310,'Mwene-Ditu','COD','East Kasai',137459);
-INSERT INTO City VALUES (2311,'Boma','COD','Bas-Za�re',135284);
-INSERT INTO City VALUES (2312,'Uvira','COD','South Kivu',115590);
-INSERT INTO City VALUES (2313,'Butembo','COD','North Kivu',109406);
-INSERT INTO City VALUES (2314,'Goma','COD','North Kivu',109094);
-INSERT INTO City VALUES (2315,'Kalemie','COD','Shaba',101309);
-INSERT INTO City VALUES (2316,'Bantam','CCK','Home Island',503);
-INSERT INTO City VALUES (2317,'West Island','CCK','West Island',167);
-INSERT INTO City VALUES (2318,'Pyongyang','PRK','Pyongyang-si',2484000);
-INSERT INTO City VALUES (2319,'Hamhung','PRK','Hamgyong N',709730);
-INSERT INTO City VALUES (2320,'Chongjin','PRK','Hamgyong P',582480);
-INSERT INTO City VALUES (2321,'Nampo','PRK','Nampo-si',566200);
-INSERT INTO City VALUES (2322,'Sinuiju','PRK','Pyongan P',326011);
-INSERT INTO City VALUES (2323,'Wonsan','PRK','Kangwon',300148);
-INSERT INTO City VALUES (2324,'Phyongsong','PRK','Pyongan N',272934);
-INSERT INTO City VALUES (2325,'Sariwon','PRK','Hwanghae P',254146);
-INSERT INTO City VALUES (2326,'Haeju','PRK','Hwanghae N',229172);
-INSERT INTO City VALUES (2327,'Kanggye','PRK','Chagang',223410);
-INSERT INTO City VALUES (2328,'Kimchaek','PRK','Hamgyong P',179000);
-INSERT INTO City VALUES (2329,'Hyesan','PRK','Yanggang',178020);
-INSERT INTO City VALUES (2330,'Kaesong','PRK','Kaesong-si',171500);
-INSERT INTO City VALUES (2331,'Seoul','KOR','Seoul',9981619);
-INSERT INTO City VALUES (2332,'Pusan','KOR','Pusan',3804522);
-INSERT INTO City VALUES (2333,'Inchon','KOR','Inchon',2559424);
-INSERT INTO City VALUES (2334,'Taegu','KOR','Taegu',2548568);
-INSERT INTO City VALUES (2335,'Taejon','KOR','Taejon',1425835);
-INSERT INTO City VALUES (2336,'Kwangju','KOR','Kwangju',1368341);
-INSERT INTO City VALUES (2337,'Ulsan','KOR','Kyongsangnam',1084891);
-INSERT INTO City VALUES (2338,'Songnam','KOR','Kyonggi',869094);
-INSERT INTO City VALUES (2339,'Puchon','KOR','Kyonggi',779412);
-INSERT INTO City VALUES (2340,'Suwon','KOR','Kyonggi',755550);
-INSERT INTO City VALUES (2341,'Anyang','KOR','Kyonggi',591106);
-INSERT INTO City VALUES (2342,'Chonju','KOR','Chollabuk',563153);
-INSERT INTO City VALUES (2343,'Chongju','KOR','Chungchongbuk',531376);
-INSERT INTO City VALUES (2344,'Koyang','KOR','Kyonggi',518282);
-INSERT INTO City VALUES (2345,'Ansan','KOR','Kyonggi',510314);
-INSERT INTO City VALUES (2346,'Pohang','KOR','Kyongsangbuk',508899);
-INSERT INTO City VALUES (2347,'Chang-won','KOR','Kyongsangnam',481694);
-INSERT INTO City VALUES (2348,'Masan','KOR','Kyongsangnam',441242);
-INSERT INTO City VALUES (2349,'Kwangmyong','KOR','Kyonggi',350914);
-INSERT INTO City VALUES (2350,'Chonan','KOR','Chungchongnam',330259);
-INSERT INTO City VALUES (2351,'Chinju','KOR','Kyongsangnam',329886);
-INSERT INTO City VALUES (2352,'Iksan','KOR','Chollabuk',322685);
-INSERT INTO City VALUES (2353,'Pyongtaek','KOR','Kyonggi',312927);
-INSERT INTO City VALUES (2354,'Kumi','KOR','Kyongsangbuk',311431);
-INSERT INTO City VALUES (2355,'Uijongbu','KOR','Kyonggi',276111);
-INSERT INTO City VALUES (2356,'Kyongju','KOR','Kyongsangbuk',272968);
-INSERT INTO City VALUES (2357,'Kunsan','KOR','Chollabuk',266569);
-INSERT INTO City VALUES (2358,'Cheju','KOR','Cheju',258511);
-INSERT INTO City VALUES (2359,'Kimhae','KOR','Kyongsangnam',256370);
-INSERT INTO City VALUES (2360,'Sunchon','KOR','Chollanam',249263);
-INSERT INTO City VALUES (2361,'Mokpo','KOR','Chollanam',247452);
-INSERT INTO City VALUES (2362,'Yong-in','KOR','Kyonggi',242643);
-INSERT INTO City VALUES (2363,'Wonju','KOR','Kang-won',237460);
-INSERT INTO City VALUES (2364,'Kunpo','KOR','Kyonggi',235233);
-INSERT INTO City VALUES (2365,'Chunchon','KOR','Kang-won',234528);
-INSERT INTO City VALUES (2366,'Namyangju','KOR','Kyonggi',229060);
-INSERT INTO City VALUES (2367,'Kangnung','KOR','Kang-won',220403);
-INSERT INTO City VALUES (2368,'Chungju','KOR','Chungchongbuk',205206);
-INSERT INTO City VALUES (2369,'Andong','KOR','Kyongsangbuk',188443);
-INSERT INTO City VALUES (2370,'Yosu','KOR','Chollanam',183596);
-INSERT INTO City VALUES (2371,'Kyongsan','KOR','Kyongsangbuk',173746);
-INSERT INTO City VALUES (2372,'Paju','KOR','Kyonggi',163379);
-INSERT INTO City VALUES (2373,'Yangsan','KOR','Kyongsangnam',163351);
-INSERT INTO City VALUES (2374,'Ichon','KOR','Kyonggi',155332);
-INSERT INTO City VALUES (2375,'Asan','KOR','Chungchongnam',154663);
-INSERT INTO City VALUES (2376,'Koje','KOR','Kyongsangnam',147562);
-INSERT INTO City VALUES (2377,'Kimchon','KOR','Kyongsangbuk',147027);
-INSERT INTO City VALUES (2378,'Nonsan','KOR','Chungchongnam',146619);
-INSERT INTO City VALUES (2379,'Kuri','KOR','Kyonggi',142173);
-INSERT INTO City VALUES (2380,'Chong-up','KOR','Chollabuk',139111);
-INSERT INTO City VALUES (2381,'Chechon','KOR','Chungchongbuk',137070);
-INSERT INTO City VALUES (2382,'Sosan','KOR','Chungchongnam',134746);
-INSERT INTO City VALUES (2383,'Shihung','KOR','Kyonggi',133443);
-INSERT INTO City VALUES (2384,'Tong-yong','KOR','Kyongsangnam',131717);
-INSERT INTO City VALUES (2385,'Kongju','KOR','Chungchongnam',131229);
-INSERT INTO City VALUES (2386,'Yongju','KOR','Kyongsangbuk',131097);
-INSERT INTO City VALUES (2387,'Chinhae','KOR','Kyongsangnam',125997);
-INSERT INTO City VALUES (2388,'Sangju','KOR','Kyongsangbuk',124116);
-INSERT INTO City VALUES (2389,'Poryong','KOR','Chungchongnam',122604);
-INSERT INTO City VALUES (2390,'Kwang-yang','KOR','Chollanam',122052);
-INSERT INTO City VALUES (2391,'Miryang','KOR','Kyongsangnam',121501);
-INSERT INTO City VALUES (2392,'Hanam','KOR','Kyonggi',115812);
-INSERT INTO City VALUES (2393,'Kimje','KOR','Chollabuk',115427);
-INSERT INTO City VALUES (2394,'Yongchon','KOR','Kyongsangbuk',113511);
-INSERT INTO City VALUES (2395,'Sachon','KOR','Kyongsangnam',113494);
-INSERT INTO City VALUES (2396,'Uiwang','KOR','Kyonggi',108788);
-INSERT INTO City VALUES (2397,'Naju','KOR','Chollanam',107831);
-INSERT INTO City VALUES (2398,'Namwon','KOR','Chollabuk',103544);
-INSERT INTO City VALUES (2399,'Tonghae','KOR','Kang-won',95472);
-INSERT INTO City VALUES (2400,'Mun-gyong','KOR','Kyongsangbuk',92239);
-INSERT INTO City VALUES (2401,'Athenai','GRC','Attika',772072);
-INSERT INTO City VALUES (2402,'Thessaloniki','GRC','Central Macedonia',383967);
-INSERT INTO City VALUES (2403,'Pireus','GRC','Attika',182671);
-INSERT INTO City VALUES (2404,'Patras','GRC','West Greece',153344);
-INSERT INTO City VALUES (2405,'Peristerion','GRC','Attika',137288);
-INSERT INTO City VALUES (2406,'Herakleion','GRC','Crete',116178);
-INSERT INTO City VALUES (2407,'Kallithea','GRC','Attika',114233);
-INSERT INTO City VALUES (2408,'Larisa','GRC','Thessalia',113090);
-INSERT INTO City VALUES (2409,'Zagreb','HRV','Grad Zagreb',706770);
-INSERT INTO City VALUES (2410,'Split','HRV','Split-Dalmatia',189388);
-INSERT INTO City VALUES (2411,'Rijeka','HRV','Primorje-Gorski Kota',167964);
-INSERT INTO City VALUES (2412,'Osijek','HRV','Osijek-Baranja',104761);
-INSERT INTO City VALUES (2413,'La Habana','CUB','La Habana',2256000);
-INSERT INTO City VALUES (2414,'Santiago de Cuba','CUB','Santiago de Cuba',433180);
-INSERT INTO City VALUES (2415,'Camag�ey','CUB','Camag�ey',298726);
-INSERT INTO City VALUES (2416,'Holgu�n','CUB','Holgu�n',249492);
-INSERT INTO City VALUES (2417,'Santa Clara','CUB','Villa Clara',207350);
-INSERT INTO City VALUES (2418,'Guant�namo','CUB','Guant�namo',205078);
-INSERT INTO City VALUES (2419,'Pinar del R�o','CUB','Pinar del R�o',142100);
-INSERT INTO City VALUES (2420,'Bayamo','CUB','Granma',141000);
-INSERT INTO City VALUES (2421,'Cienfuegos','CUB','Cienfuegos',132770);
-INSERT INTO City VALUES (2422,'Victoria de las Tunas','CUB','Las Tunas',132350);
-INSERT INTO City VALUES (2423,'Matanzas','CUB','Matanzas',123273);
-INSERT INTO City VALUES (2424,'Manzanillo','CUB','Granma',109350);
-INSERT INTO City VALUES (2425,'Sancti-Sp�ritus','CUB','Sancti-Sp�ritus',100751);
-INSERT INTO City VALUES (2426,'Ciego de �vila','CUB','Ciego de �vila',98505);
-INSERT INTO City VALUES (2427,'al-Salimiya','KWT','Hawalli',130215);
-INSERT INTO City VALUES (2428,'Jalib al-Shuyukh','KWT','Hawalli',102178);
-INSERT INTO City VALUES (2429,'Kuwait','KWT','al-Asima',28859);
-INSERT INTO City VALUES (2430,'Nicosia','CYP','Nicosia',195000);
-INSERT INTO City VALUES (2431,'Limassol','CYP','Limassol',154400);
-INSERT INTO City VALUES (2432,'Vientiane','LAO','Viangchan',531800);
-INSERT INTO City VALUES (2433,'Savannakhet','LAO','Savannakhet',96652);
-INSERT INTO City VALUES (2434,'Riga','LVA','Riika',764328);
-INSERT INTO City VALUES (2435,'Daugavpils','LVA','Daugavpils',114829);
-INSERT INTO City VALUES (2436,'Liepaja','LVA','Liepaja',89439);
-INSERT INTO City VALUES (2437,'Maseru','LSO','Maseru',297000);
-INSERT INTO City VALUES (2438,'Beirut','LBN','Beirut',1100000);
-INSERT INTO City VALUES (2439,'Tripoli','LBN','al-Shamal',240000);
-INSERT INTO City VALUES (2440,'Monrovia','LBR','Montserrado',850000);
-INSERT INTO City VALUES (2441,'Tripoli','LBY','Tripoli',1682000);
-INSERT INTO City VALUES (2442,'Bengasi','LBY','Bengasi',804000);
-INSERT INTO City VALUES (2443,'Misrata','LBY','Misrata',121669);
-INSERT INTO City VALUES (2444,'al-Zawiya','LBY','al-Zawiya',89338);
-INSERT INTO City VALUES (2445,'Schaan','LIE','Schaan',5346);
-INSERT INTO City VALUES (2446,'Vaduz','LIE','Vaduz',5043);
-INSERT INTO City VALUES (2447,'Vilnius','LTU','Vilna',577969);
-INSERT INTO City VALUES (2448,'Kaunas','LTU','Kaunas',412639);
-INSERT INTO City VALUES (2449,'Klaipeda','LTU','Klaipeda',202451);
-INSERT INTO City VALUES (2450,'�iauliai','LTU','�iauliai',146563);
-INSERT INTO City VALUES (2451,'Panevezys','LTU','Panevezys',133695);
-INSERT INTO City VALUES (2452,'Luxembourg [Luxemburg/L�tzebuerg]','LUX','Luxembourg',80700);
-INSERT INTO City VALUES (2453,'El-Aai�n','ESH','El-Aai�n',169000);
-INSERT INTO City VALUES (2454,'Macao','MAC','Macau',437500);
-INSERT INTO City VALUES (2455,'Antananarivo','MDG','Antananarivo',675669);
-INSERT INTO City VALUES (2456,'Toamasina','MDG','Toamasina',127441);
-INSERT INTO City VALUES (2457,'Antsirab�','MDG','Antananarivo',120239);
-INSERT INTO City VALUES (2458,'Mahajanga','MDG','Mahajanga',100807);
-INSERT INTO City VALUES (2459,'Fianarantsoa','MDG','Fianarantsoa',99005);
-INSERT INTO City VALUES (2460,'Skopje','MKD','Skopje',444299);
-INSERT INTO City VALUES (2461,'Blantyre','MWI','Blantyre',478155);
-INSERT INTO City VALUES (2462,'Lilongwe','MWI','Lilongwe',435964);
-INSERT INTO City VALUES (2463,'Male','MDV','Maale',71000);
-INSERT INTO City VALUES (2464,'Kuala Lumpur','MYS','Wilayah Persekutuan',1297526);
-INSERT INTO City VALUES (2465,'Ipoh','MYS','Perak',382853);
-INSERT INTO City VALUES (2466,'Johor Baharu','MYS','Johor',328436);
-INSERT INTO City VALUES (2467,'Petaling Jaya','MYS','Selangor',254350);
-INSERT INTO City VALUES (2468,'Kelang','MYS','Selangor',243355);
-INSERT INTO City VALUES (2469,'Kuala Terengganu','MYS','Terengganu',228119);
-INSERT INTO City VALUES (2470,'Pinang','MYS','Pulau Pinang',219603);
-INSERT INTO City VALUES (2471,'Kota Bharu','MYS','Kelantan',219582);
-INSERT INTO City VALUES (2472,'Kuantan','MYS','Pahang',199484);
-INSERT INTO City VALUES (2473,'Taiping','MYS','Perak',183261);
-INSERT INTO City VALUES (2474,'Seremban','MYS','Negeri Sembilan',182869);
-INSERT INTO City VALUES (2475,'Kuching','MYS','Sarawak',148059);
-INSERT INTO City VALUES (2476,'Sibu','MYS','Sarawak',126381);
-INSERT INTO City VALUES (2477,'Sandakan','MYS','Sabah',125841);
-INSERT INTO City VALUES (2478,'Alor Setar','MYS','Kedah',124412);
-INSERT INTO City VALUES (2479,'Selayang Baru','MYS','Selangor',124228);
-INSERT INTO City VALUES (2480,'Sungai Petani','MYS','Kedah',114763);
-INSERT INTO City VALUES (2481,'Shah Alam','MYS','Selangor',102019);
-INSERT INTO City VALUES (2482,'Bamako','MLI','Bamako',809552);
-INSERT INTO City VALUES (2483,'Birkirkara','MLT','Outer Harbour',21445);
-INSERT INTO City VALUES (2484,'Valletta','MLT','Inner Harbour',7073);
-INSERT INTO City VALUES (2485,'Casablanca','MAR','Casablanca',2940623);
-INSERT INTO City VALUES (2486,'Rabat','MAR','Rabat-Sal�-Zammour-Z',623457);
-INSERT INTO City VALUES (2487,'Marrakech','MAR','Marrakech-Tensift-Al',621914);
-INSERT INTO City VALUES (2488,'F�s','MAR','F�s-Boulemane',541162);
-INSERT INTO City VALUES (2489,'Tanger','MAR','Tanger-T�touan',521735);
-INSERT INTO City VALUES (2490,'Sal�','MAR','Rabat-Sal�-Zammour-Z',504420);
-INSERT INTO City VALUES (2491,'Mekn�s','MAR','Mekn�s-Tafilalet',460000);
-INSERT INTO City VALUES (2492,'Oujda','MAR','Oriental',365382);
-INSERT INTO City VALUES (2493,'K�nitra','MAR','Gharb-Chrarda-B�ni H',292600);
-INSERT INTO City VALUES (2494,'T�touan','MAR','Tanger-T�touan',277516);
-INSERT INTO City VALUES (2495,'Safi','MAR','Doukkala-Abda',262300);
-INSERT INTO City VALUES (2496,'Agadir','MAR','Souss Massa-Dra�',155244);
-INSERT INTO City VALUES (2497,'Mohammedia','MAR','Casablanca',154706);
-INSERT INTO City VALUES (2498,'Khouribga','MAR','Chaouia-Ouardigha',152090);
-INSERT INTO City VALUES (2499,'Beni-Mellal','MAR','Tadla-Azilal',140212);
-INSERT INTO City VALUES (2500,'T�mara','MAR','Rabat-Sal�-Zammour-Z',126303);
-INSERT INTO City VALUES (2501,'El Jadida','MAR','Doukkala-Abda',119083);
-INSERT INTO City VALUES (2502,'Nador','MAR','Oriental',112450);
-INSERT INTO City VALUES (2503,'Ksar el Kebir','MAR','Tanger-T�touan',107065);
-INSERT INTO City VALUES (2504,'Settat','MAR','Chaouia-Ouardigha',96200);
-INSERT INTO City VALUES (2505,'Taza','MAR','Taza-Al Hoceima-Taou',92700);
-INSERT INTO City VALUES (2506,'El Araich','MAR','Tanger-T�touan',90400);
-INSERT INTO City VALUES (2507,'Dalap-Uliga-Darrit','MHL','Majuro',28000);
-INSERT INTO City VALUES (2508,'Fort-de-France','MTQ','Fort-de-France',94050);
-INSERT INTO City VALUES (2509,'Nouakchott','MRT','Nouakchott',667300);
-INSERT INTO City VALUES (2510,'Nou�dhibou','MRT','Dakhlet Nou�dhibou',97600);
-INSERT INTO City VALUES (2511,'Port-Louis','MUS','Port-Louis',138200);
-INSERT INTO City VALUES (2512,'Beau Bassin-Rose Hill','MUS','Plaines Wilhelms',100616);
-INSERT INTO City VALUES (2513,'Vacoas-Phoenix','MUS','Plaines Wilhelms',98464);
-INSERT INTO City VALUES (2514,'Mamoutzou','MYT','Mamoutzou',12000);
-INSERT INTO City VALUES (2515,'Ciudad de M�xico','MEX','Distrito Federal',8591309);
-INSERT INTO City VALUES (2516,'Guadalajara','MEX','Jalisco',1647720);
-INSERT INTO City VALUES (2517,'Ecatepec de Morelos','MEX','M�xico',1620303);
-INSERT INTO City VALUES (2518,'Puebla','MEX','Puebla',1346176);
-INSERT INTO City VALUES (2519,'Nezahualc�yotl','MEX','M�xico',1224924);
-INSERT INTO City VALUES (2520,'Ju�rez','MEX','Chihuahua',1217818);
-INSERT INTO City VALUES (2521,'Tijuana','MEX','Baja California',1212232);
-INSERT INTO City VALUES (2522,'Le�n','MEX','Guanajuato',1133576);
-INSERT INTO City VALUES (2523,'Monterrey','MEX','Nuevo Le�n',1108499);
-INSERT INTO City VALUES (2524,'Zapopan','MEX','Jalisco',1002239);
-INSERT INTO City VALUES (2525,'Naucalpan de Ju�rez','MEX','M�xico',857511);
-INSERT INTO City VALUES (2526,'Mexicali','MEX','Baja California',764902);
-INSERT INTO City VALUES (2527,'Culiac�n','MEX','Sinaloa',744859);
-INSERT INTO City VALUES (2528,'Acapulco de Ju�rez','MEX','Guerrero',721011);
-INSERT INTO City VALUES (2529,'Tlalnepantla de Baz','MEX','M�xico',720755);
-INSERT INTO City VALUES (2530,'M�rida','MEX','Yucat�n',703324);
-INSERT INTO City VALUES (2531,'Chihuahua','MEX','Chihuahua',670208);
-INSERT INTO City VALUES (2532,'San Luis Potos�','MEX','San Luis Potos�',669353);
-INSERT INTO City VALUES (2533,'Guadalupe','MEX','Nuevo Le�n',668780);
-INSERT INTO City VALUES (2534,'Toluca','MEX','M�xico',665617);
-INSERT INTO City VALUES (2535,'Aguascalientes','MEX','Aguascalientes',643360);
-INSERT INTO City VALUES (2536,'Quer�taro','MEX','Quer�taro de Arteaga',639839);
-INSERT INTO City VALUES (2537,'Morelia','MEX','Michoac�n de Ocampo',619958);
-INSERT INTO City VALUES (2538,'Hermosillo','MEX','Sonora',608697);
-INSERT INTO City VALUES (2539,'Saltillo','MEX','Coahuila de Zaragoza',577352);
-INSERT INTO City VALUES (2540,'Torre�n','MEX','Coahuila de Zaragoza',529093);
-INSERT INTO City VALUES (2541,'Centro (Villahermosa)','MEX','Tabasco',519873);
-INSERT INTO City VALUES (2542,'San Nicol�s de los Garza','MEX','Nuevo Le�n',495540);
-INSERT INTO City VALUES (2543,'Durango','MEX','Durango',490524);
-INSERT INTO City VALUES (2544,'Chimalhuac�n','MEX','M�xico',490245);
-INSERT INTO City VALUES (2545,'Tlaquepaque','MEX','Jalisco',475472);
-INSERT INTO City VALUES (2546,'Atizap�n de Zaragoza','MEX','M�xico',467262);
-INSERT INTO City VALUES (2547,'Veracruz','MEX','Veracruz',457119);
-INSERT INTO City VALUES (2548,'Cuautitl�n Izcalli','MEX','M�xico',452976);
-INSERT INTO City VALUES (2549,'Irapuato','MEX','Guanajuato',440039);
-INSERT INTO City VALUES (2550,'Tuxtla Guti�rrez','MEX','Chiapas',433544);
-INSERT INTO City VALUES (2551,'Tultitl�n','MEX','M�xico',432411);
-INSERT INTO City VALUES (2552,'Reynosa','MEX','Tamaulipas',419776);
-INSERT INTO City VALUES (2553,'Benito Ju�rez','MEX','Quintana Roo',419276);
-INSERT INTO City VALUES (2554,'Matamoros','MEX','Tamaulipas',416428);
-INSERT INTO City VALUES (2555,'Xalapa','MEX','Veracruz',390058);
-INSERT INTO City VALUES (2556,'Celaya','MEX','Guanajuato',382140);
-INSERT INTO City VALUES (2557,'Mazatl�n','MEX','Sinaloa',380265);
-INSERT INTO City VALUES (2558,'Ensenada','MEX','Baja California',369573);
-INSERT INTO City VALUES (2559,'Ahome','MEX','Sinaloa',358663);
-INSERT INTO City VALUES (2560,'Cajeme','MEX','Sonora',355679);
-INSERT INTO City VALUES (2561,'Cuernavaca','MEX','Morelos',337966);
-INSERT INTO City VALUES (2562,'Tonal�','MEX','Jalisco',336109);
-INSERT INTO City VALUES (2563,'Valle de Chalco Solidaridad','MEX','M�xico',323113);
-INSERT INTO City VALUES (2564,'Nuevo Laredo','MEX','Tamaulipas',310277);
-INSERT INTO City VALUES (2565,'Tepic','MEX','Nayarit',305025);
-INSERT INTO City VALUES (2566,'Tampico','MEX','Tamaulipas',294789);
-INSERT INTO City VALUES (2567,'Ixtapaluca','MEX','M�xico',293160);
-INSERT INTO City VALUES (2568,'Apodaca','MEX','Nuevo Le�n',282941);
-INSERT INTO City VALUES (2569,'Guasave','MEX','Sinaloa',277201);
-INSERT INTO City VALUES (2570,'G�mez Palacio','MEX','Durango',272806);
-INSERT INTO City VALUES (2571,'Tapachula','MEX','Chiapas',271141);
-INSERT INTO City VALUES (2572,'Nicol�s Romero','MEX','M�xico',269393);
-INSERT INTO City VALUES (2573,'Coatzacoalcos','MEX','Veracruz',267037);
-INSERT INTO City VALUES (2574,'Uruapan','MEX','Michoac�n de Ocampo',265211);
-INSERT INTO City VALUES (2575,'Victoria','MEX','Tamaulipas',262686);
-INSERT INTO City VALUES (2576,'Oaxaca de Ju�rez','MEX','Oaxaca',256848);
-INSERT INTO City VALUES (2577,'Coacalco de Berrioz�bal','MEX','M�xico',252270);
-INSERT INTO City VALUES (2578,'Pachuca de Soto','MEX','Hidalgo',244688);
-INSERT INTO City VALUES (2579,'General Escobedo','MEX','Nuevo Le�n',232961);
-INSERT INTO City VALUES (2580,'Salamanca','MEX','Guanajuato',226864);
-INSERT INTO City VALUES (2581,'Santa Catarina','MEX','Nuevo Le�n',226573);
-INSERT INTO City VALUES (2582,'Tehuac�n','MEX','Puebla',225943);
-INSERT INTO City VALUES (2583,'Chalco','MEX','M�xico',222201);
-INSERT INTO City VALUES (2584,'C�rdenas','MEX','Tabasco',216903);
-INSERT INTO City VALUES (2585,'Campeche','MEX','Campeche',216735);
-INSERT INTO City VALUES (2586,'La Paz','MEX','M�xico',213045);
-INSERT INTO City VALUES (2587,'Oth�n P. Blanco (Chetumal)','MEX','Quintana Roo',208014);
-INSERT INTO City VALUES (2588,'Texcoco','MEX','M�xico',203681);
-INSERT INTO City VALUES (2589,'La Paz','MEX','Baja California Sur',196708);
-INSERT INTO City VALUES (2590,'Metepec','MEX','M�xico',194265);
-INSERT INTO City VALUES (2591,'Monclova','MEX','Coahuila de Zaragoza',193657);
-INSERT INTO City VALUES (2592,'Huixquilucan','MEX','M�xico',193156);
-INSERT INTO City VALUES (2593,'Chilpancingo de los Bravo','MEX','Guerrero',192509);
-INSERT INTO City VALUES (2594,'Puerto Vallarta','MEX','Jalisco',183741);
-INSERT INTO City VALUES (2595,'Fresnillo','MEX','Zacatecas',182744);
-INSERT INTO City VALUES (2596,'Ciudad Madero','MEX','Tamaulipas',182012);
-INSERT INTO City VALUES (2597,'Soledad de Graciano S�nchez','MEX','San Luis Potos�',179956);
-INSERT INTO City VALUES (2598,'San Juan del R�o','MEX','Quer�taro',179300);
-INSERT INTO City VALUES (2599,'San Felipe del Progreso','MEX','M�xico',177330);
-INSERT INTO City VALUES (2600,'C�rdoba','MEX','Veracruz',176952);
-INSERT INTO City VALUES (2601,'Tec�mac','MEX','M�xico',172410);
-INSERT INTO City VALUES (2602,'Ocosingo','MEX','Chiapas',171495);
-INSERT INTO City VALUES (2603,'Carmen','MEX','Campeche',171367);
-INSERT INTO City VALUES (2604,'L�zaro C�rdenas','MEX','Michoac�n de Ocampo',170878);
-INSERT INTO City VALUES (2605,'Jiutepec','MEX','Morelos',170428);
-INSERT INTO City VALUES (2606,'Papantla','MEX','Veracruz',170123);
-INSERT INTO City VALUES (2607,'Comalcalco','MEX','Tabasco',164640);
-INSERT INTO City VALUES (2608,'Zamora','MEX','Michoac�n de Ocampo',161191);
-INSERT INTO City VALUES (2609,'Nogales','MEX','Sonora',159103);
-INSERT INTO City VALUES (2610,'Huimanguillo','MEX','Tabasco',158335);
-INSERT INTO City VALUES (2611,'Cuautla','MEX','Morelos',153132);
-INSERT INTO City VALUES (2612,'Minatitl�n','MEX','Veracruz',152983);
-INSERT INTO City VALUES (2613,'Poza Rica de Hidalgo','MEX','Veracruz',152678);
-INSERT INTO City VALUES (2614,'Ciudad Valles','MEX','San Luis Potos�',146411);
-INSERT INTO City VALUES (2615,'Navolato','MEX','Sinaloa',145396);
-INSERT INTO City VALUES (2616,'San Luis R�o Colorado','MEX','Sonora',145276);
-INSERT INTO City VALUES (2617,'P�njamo','MEX','Guanajuato',143927);
-INSERT INTO City VALUES (2618,'San Andr�s Tuxtla','MEX','Veracruz',142251);
-INSERT INTO City VALUES (2619,'Guanajuato','MEX','Guanajuato',141215);
-INSERT INTO City VALUES (2620,'Navojoa','MEX','Sonora',140495);
-INSERT INTO City VALUES (2621,'Zit�cuaro','MEX','Michoac�n de Ocampo',137970);
-INSERT INTO City VALUES (2622,'Boca del R�o','MEX','Veracruz-Llave',135721);
-INSERT INTO City VALUES (2623,'Allende','MEX','Guanajuato',134645);
-INSERT INTO City VALUES (2624,'Silao','MEX','Guanajuato',134037);
-INSERT INTO City VALUES (2625,'Macuspana','MEX','Tabasco',133795);
-INSERT INTO City VALUES (2626,'San Juan Bautista Tuxtepec','MEX','Oaxaca',133675);
-INSERT INTO City VALUES (2627,'San Crist�bal de las Casas','MEX','Chiapas',132317);
-INSERT INTO City VALUES (2628,'Valle de Santiago','MEX','Guanajuato',130557);
-INSERT INTO City VALUES (2629,'Guaymas','MEX','Sonora',130108);
-INSERT INTO City VALUES (2630,'Colima','MEX','Colima',129454);
-INSERT INTO City VALUES (2631,'Dolores Hidalgo','MEX','Guanajuato',128675);
-INSERT INTO City VALUES (2632,'Lagos de Moreno','MEX','Jalisco',127949);
-INSERT INTO City VALUES (2633,'Piedras Negras','MEX','Coahuila de Zaragoza',127898);
-INSERT INTO City VALUES (2634,'Altamira','MEX','Tamaulipas',127490);
-INSERT INTO City VALUES (2635,'T�xpam','MEX','Veracruz',126475);
-INSERT INTO City VALUES (2636,'San Pedro Garza Garc�a','MEX','Nuevo Le�n',126147);
-INSERT INTO City VALUES (2637,'Cuauht�moc','MEX','Chihuahua',124279);
-INSERT INTO City VALUES (2638,'Manzanillo','MEX','Colima',124014);
-INSERT INTO City VALUES (2639,'Iguala de la Independencia','MEX','Guerrero',123883);
-INSERT INTO City VALUES (2640,'Zacatecas','MEX','Zacatecas',123700);
-INSERT INTO City VALUES (2641,'Tlajomulco de Z��iga','MEX','Jalisco',123220);
-INSERT INTO City VALUES (2642,'Tulancingo de Bravo','MEX','Hidalgo',121946);
-INSERT INTO City VALUES (2643,'Zinacantepec','MEX','M�xico',121715);
-INSERT INTO City VALUES (2644,'San Mart�n Texmelucan','MEX','Puebla',121093);
-INSERT INTO City VALUES (2645,'Tepatitl�n de Morelos','MEX','Jalisco',118948);
-INSERT INTO City VALUES (2646,'Mart�nez de la Torre','MEX','Veracruz',118815);
-INSERT INTO City VALUES (2647,'Orizaba','MEX','Veracruz',118488);
-INSERT INTO City VALUES (2648,'Apatzing�n','MEX','Michoac�n de Ocampo',117849);
-INSERT INTO City VALUES (2649,'Atlixco','MEX','Puebla',117019);
-INSERT INTO City VALUES (2650,'Delicias','MEX','Chihuahua',116132);
-INSERT INTO City VALUES (2651,'Ixtlahuaca','MEX','M�xico',115548);
-INSERT INTO City VALUES (2652,'El Mante','MEX','Tamaulipas',112453);
-INSERT INTO City VALUES (2653,'Lerdo','MEX','Durango',112272);
-INSERT INTO City VALUES (2654,'Almoloya de Ju�rez','MEX','M�xico',110550);
-INSERT INTO City VALUES (2655,'Ac�mbaro','MEX','Guanajuato',110487);
-INSERT INTO City VALUES (2656,'Acu�a','MEX','Coahuila de Zaragoza',110388);
-INSERT INTO City VALUES (2657,'Guadalupe','MEX','Zacatecas',108881);
-INSERT INTO City VALUES (2658,'Huejutla de Reyes','MEX','Hidalgo',108017);
-INSERT INTO City VALUES (2659,'Hidalgo','MEX','Michoac�n de Ocampo',106198);
-INSERT INTO City VALUES (2660,'Los Cabos','MEX','Baja California Sur',105199);
-INSERT INTO City VALUES (2661,'Comit�n de Dom�nguez','MEX','Chiapas',104986);
-INSERT INTO City VALUES (2662,'Cunduac�n','MEX','Tabasco',104164);
-INSERT INTO City VALUES (2663,'R�o Bravo','MEX','Tamaulipas',103901);
-INSERT INTO City VALUES (2664,'Temapache','MEX','Veracruz',102824);
-INSERT INTO City VALUES (2665,'Chilapa de Alvarez','MEX','Guerrero',102716);
-INSERT INTO City VALUES (2666,'Hidalgo del Parral','MEX','Chihuahua',100881);
-INSERT INTO City VALUES (2667,'San Francisco del Rinc�n','MEX','Guanajuato',100149);
-INSERT INTO City VALUES (2668,'Taxco de Alarc�n','MEX','Guerrero',99907);
-INSERT INTO City VALUES (2669,'Zumpango','MEX','M�xico',99781);
-INSERT INTO City VALUES (2670,'San Pedro Cholula','MEX','Puebla',99734);
-INSERT INTO City VALUES (2671,'Lerma','MEX','M�xico',99714);
-INSERT INTO City VALUES (2672,'Tecom�n','MEX','Colima',99296);
-INSERT INTO City VALUES (2673,'Las Margaritas','MEX','Chiapas',97389);
-INSERT INTO City VALUES (2674,'Cosoleacaque','MEX','Veracruz',97199);
-INSERT INTO City VALUES (2675,'San Luis de la Paz','MEX','Guanajuato',96763);
-INSERT INTO City VALUES (2676,'Jos� Azueta','MEX','Guerrero',95448);
-INSERT INTO City VALUES (2677,'Santiago Ixcuintla','MEX','Nayarit',95311);
-INSERT INTO City VALUES (2678,'San Felipe','MEX','Guanajuato',95305);
-INSERT INTO City VALUES (2679,'Tejupilco','MEX','M�xico',94934);
-INSERT INTO City VALUES (2680,'Tantoyuca','MEX','Veracruz',94709);
-INSERT INTO City VALUES (2681,'Salvatierra','MEX','Guanajuato',94322);
-INSERT INTO City VALUES (2682,'Tultepec','MEX','M�xico',93364);
-INSERT INTO City VALUES (2683,'Temixco','MEX','Morelos',92686);
-INSERT INTO City VALUES (2684,'Matamoros','MEX','Coahuila de Zaragoza',91858);
-INSERT INTO City VALUES (2685,'P�nuco','MEX','Veracruz',90551);
-INSERT INTO City VALUES (2686,'El Fuerte','MEX','Sinaloa',89556);
-INSERT INTO City VALUES (2687,'Tierra Blanca','MEX','Veracruz',89143);
-INSERT INTO City VALUES (2688,'Weno','FSM','Chuuk',22000);
-INSERT INTO City VALUES (2689,'Palikir','FSM','Pohnpei',8600);
-INSERT INTO City VALUES (2690,'Chisinau','MDA','Chisinau',719900);
-INSERT INTO City VALUES (2691,'Tiraspol','MDA','Dnjestria',194300);
-INSERT INTO City VALUES (2692,'Balti','MDA','Balti',153400);
-INSERT INTO City VALUES (2693,'Bender (T�ghina)','MDA','Bender (T�ghina)',125700);
-INSERT INTO City VALUES (2694,'Monte-Carlo','MCO','�',13154);
-INSERT INTO City VALUES (2695,'Monaco-Ville','MCO','�',1234);
-INSERT INTO City VALUES (2696,'Ulan Bator','MNG','Ulaanbaatar',773700);
-INSERT INTO City VALUES (2697,'Plymouth','MSR','Plymouth',2000);
-INSERT INTO City VALUES (2698,'Maputo','MOZ','Maputo',1018938);
-INSERT INTO City VALUES (2699,'Matola','MOZ','Maputo',424662);
-INSERT INTO City VALUES (2700,'Beira','MOZ','Sofala',397368);
-INSERT INTO City VALUES (2701,'Nampula','MOZ','Nampula',303346);
-INSERT INTO City VALUES (2702,'Chimoio','MOZ','Manica',171056);
-INSERT INTO City VALUES (2703,'Na�ala-Porto','MOZ','Nampula',158248);
-INSERT INTO City VALUES (2704,'Quelimane','MOZ','Zamb�zia',150116);
-INSERT INTO City VALUES (2705,'Mocuba','MOZ','Zamb�zia',124700);
-INSERT INTO City VALUES (2706,'Tete','MOZ','Tete',101984);
-INSERT INTO City VALUES (2707,'Xai-Xai','MOZ','Gaza',99442);
-INSERT INTO City VALUES (2708,'Gurue','MOZ','Zamb�zia',99300);
-INSERT INTO City VALUES (2709,'Maxixe','MOZ','Inhambane',93985);
-INSERT INTO City VALUES (2710,'Rangoon (Yangon)','MMR','Rangoon [Yangon]',3361700);
-INSERT INTO City VALUES (2711,'Mandalay','MMR','Mandalay',885300);
-INSERT INTO City VALUES (2712,'Moulmein (Mawlamyine)','MMR','Mon',307900);
-INSERT INTO City VALUES (2713,'Pegu (Bago)','MMR','Pegu [Bago]',190900);
-INSERT INTO City VALUES (2714,'Bassein (Pathein)','MMR','Irrawaddy [Ayeyarwad',183900);
-INSERT INTO City VALUES (2715,'Monywa','MMR','Sagaing',138600);
-INSERT INTO City VALUES (2716,'Sittwe (Akyab)','MMR','Rakhine',137600);
-INSERT INTO City VALUES (2717,'Taunggyi (Taunggye)','MMR','Shan',131500);
-INSERT INTO City VALUES (2718,'Meikhtila','MMR','Mandalay',129700);
-INSERT INTO City VALUES (2719,'Mergui (Myeik)','MMR','Tenasserim [Tanintha',122700);
-INSERT INTO City VALUES (2720,'Lashio (Lasho)','MMR','Shan',107600);
-INSERT INTO City VALUES (2721,'Prome (Pyay)','MMR','Pegu [Bago]',105700);
-INSERT INTO City VALUES (2722,'Henzada (Hinthada)','MMR','Irrawaddy [Ayeyarwad',104700);
-INSERT INTO City VALUES (2723,'Myingyan','MMR','Mandalay',103600);
-INSERT INTO City VALUES (2724,'Tavoy (Dawei)','MMR','Tenasserim [Tanintha',96800);
-INSERT INTO City VALUES (2725,'Pagakku (Pakokku)','MMR','Magwe [Magway]',94800);
-INSERT INTO City VALUES (2726,'Windhoek','NAM','Khomas',169000);
-INSERT INTO City VALUES (2727,'Yangor','NRU','�',4050);
-INSERT INTO City VALUES (2728,'Yaren','NRU','�',559);
-INSERT INTO City VALUES (2729,'Kathmandu','NPL','Central',591835);
-INSERT INTO City VALUES (2730,'Biratnagar','NPL','Eastern',157764);
-INSERT INTO City VALUES (2731,'Pokhara','NPL','Western',146318);
-INSERT INTO City VALUES (2732,'Lalitapur','NPL','Central',145847);
-INSERT INTO City VALUES (2733,'Birgunj','NPL','Central',90639);
-INSERT INTO City VALUES (2734,'Managua','NIC','Managua',959000);
-INSERT INTO City VALUES (2735,'Le�n','NIC','Le�n',123865);
-INSERT INTO City VALUES (2736,'Chinandega','NIC','Chinandega',97387);
-INSERT INTO City VALUES (2737,'Masaya','NIC','Masaya',88971);
-INSERT INTO City VALUES (2738,'Niamey','NER','Niamey',420000);
-INSERT INTO City VALUES (2739,'Zinder','NER','Zinder',120892);
-INSERT INTO City VALUES (2740,'Maradi','NER','Maradi',112965);
-INSERT INTO City VALUES (2741,'Lagos','NGA','Lagos',1518000);
-INSERT INTO City VALUES (2742,'Ibadan','NGA','Oyo & Osun',1432000);
-INSERT INTO City VALUES (2743,'Ogbomosho','NGA','Oyo & Osun',730000);
-INSERT INTO City VALUES (2744,'Kano','NGA','Kano & Jigawa',674100);
-INSERT INTO City VALUES (2745,'Oshogbo','NGA','Oyo & Osun',476800);
-INSERT INTO City VALUES (2746,'Ilorin','NGA','Kwara & Kogi',475800);
-INSERT INTO City VALUES (2747,'Abeokuta','NGA','Ogun',427400);
-INSERT INTO City VALUES (2748,'Port Harcourt','NGA','Rivers & Bayelsa',410000);
-INSERT INTO City VALUES (2749,'Zaria','NGA','Kaduna',379200);
-INSERT INTO City VALUES (2750,'Ilesha','NGA','Oyo & Osun',378400);
-INSERT INTO City VALUES (2751,'Onitsha','NGA','Anambra & Enugu & Eb',371900);
-INSERT INTO City VALUES (2752,'Iwo','NGA','Oyo & Osun',362000);
-INSERT INTO City VALUES (2753,'Ado-Ekiti','NGA','Ondo & Ekiti',359400);
-INSERT INTO City VALUES (2754,'Abuja','NGA','Federal Capital Dist',350100);
-INSERT INTO City VALUES (2755,'Kaduna','NGA','Kaduna',342200);
-INSERT INTO City VALUES (2756,'Mushin','NGA','Lagos',333200);
-INSERT INTO City VALUES (2757,'Maiduguri','NGA','Borno & Yobe',320000);
-INSERT INTO City VALUES (2758,'Enugu','NGA','Anambra & Enugu & Eb',316100);
-INSERT INTO City VALUES (2759,'Ede','NGA','Oyo & Osun',307100);
-INSERT INTO City VALUES (2760,'Aba','NGA','Imo & Abia',298900);
-INSERT INTO City VALUES (2761,'Ife','NGA','Oyo & Osun',296800);
-INSERT INTO City VALUES (2762,'Ila','NGA','Oyo & Osun',264000);
-INSERT INTO City VALUES (2763,'Oyo','NGA','Oyo & Osun',256400);
-INSERT INTO City VALUES (2764,'Ikerre','NGA','Ondo & Ekiti',244600);
-INSERT INTO City VALUES (2765,'Benin City','NGA','Edo & Delta',229400);
-INSERT INTO City VALUES (2766,'Iseyin','NGA','Oyo & Osun',217300);
-INSERT INTO City VALUES (2767,'Katsina','NGA','Katsina',206500);
-INSERT INTO City VALUES (2768,'Jos','NGA','Plateau & Nassarawa',206300);
-INSERT INTO City VALUES (2769,'Sokoto','NGA','Sokoto & Kebbi & Zam',204900);
-INSERT INTO City VALUES (2770,'Ilobu','NGA','Oyo & Osun',199000);
-INSERT INTO City VALUES (2771,'Offa','NGA','Kwara & Kogi',197200);
-INSERT INTO City VALUES (2772,'Ikorodu','NGA','Lagos',184900);
-INSERT INTO City VALUES (2773,'Ilawe-Ekiti','NGA','Ondo & Ekiti',184500);
-INSERT INTO City VALUES (2774,'Owo','NGA','Ondo & Ekiti',183500);
-INSERT INTO City VALUES (2775,'Ikirun','NGA','Oyo & Osun',181400);
-INSERT INTO City VALUES (2776,'Shaki','NGA','Oyo & Osun',174500);
-INSERT INTO City VALUES (2777,'Calabar','NGA','Cross River',174400);
-INSERT INTO City VALUES (2778,'Ondo','NGA','Ondo & Ekiti',173600);
-INSERT INTO City VALUES (2779,'Akure','NGA','Ondo & Ekiti',162300);
-INSERT INTO City VALUES (2780,'Gusau','NGA','Sokoto & Kebbi & Zam',158000);
-INSERT INTO City VALUES (2781,'Ijebu-Ode','NGA','Ogun',156400);
-INSERT INTO City VALUES (2782,'Effon-Alaiye','NGA','Oyo & Osun',153100);
-INSERT INTO City VALUES (2783,'Kumo','NGA','Bauchi & Gombe',148000);
-INSERT INTO City VALUES (2784,'Shomolu','NGA','Lagos',147700);
-INSERT INTO City VALUES (2785,'Oka-Akoko','NGA','Ondo & Ekiti',142900);
-INSERT INTO City VALUES (2786,'Ikare','NGA','Ondo & Ekiti',140800);
-INSERT INTO City VALUES (2787,'Sapele','NGA','Edo & Delta',139200);
-INSERT INTO City VALUES (2788,'Deba Habe','NGA','Bauchi & Gombe',138600);
-INSERT INTO City VALUES (2789,'Minna','NGA','Niger',136900);
-INSERT INTO City VALUES (2790,'Warri','NGA','Edo & Delta',126100);
-INSERT INTO City VALUES (2791,'Bida','NGA','Niger',125500);
-INSERT INTO City VALUES (2792,'Ikire','NGA','Oyo & Osun',123300);
-INSERT INTO City VALUES (2793,'Makurdi','NGA','Benue',123100);
-INSERT INTO City VALUES (2794,'Lafia','NGA','Plateau & Nassarawa',122500);
-INSERT INTO City VALUES (2795,'Inisa','NGA','Oyo & Osun',119800);
-INSERT INTO City VALUES (2796,'Shagamu','NGA','Ogun',117200);
-INSERT INTO City VALUES (2797,'Awka','NGA','Anambra & Enugu & Eb',111200);
-INSERT INTO City VALUES (2798,'Gombe','NGA','Bauchi & Gombe',107800);
-INSERT INTO City VALUES (2799,'Igboho','NGA','Oyo & Osun',106800);
-INSERT INTO City VALUES (2800,'Ejigbo','NGA','Oyo & Osun',105900);
-INSERT INTO City VALUES (2801,'Agege','NGA','Lagos',105000);
-INSERT INTO City VALUES (2802,'Ise-Ekiti','NGA','Ondo & Ekiti',103400);
-INSERT INTO City VALUES (2803,'Ugep','NGA','Cross River',102600);
-INSERT INTO City VALUES (2804,'Epe','NGA','Lagos',101000);
-INSERT INTO City VALUES (2805,'Alofi','NIU','�',682);
-INSERT INTO City VALUES (2806,'Kingston','NFK','�',800);
-INSERT INTO City VALUES (2807,'Oslo','NOR','Oslo',508726);
-INSERT INTO City VALUES (2808,'Bergen','NOR','Hordaland',230948);
-INSERT INTO City VALUES (2809,'Trondheim','NOR','S�r-Tr�ndelag',150166);
-INSERT INTO City VALUES (2810,'Stavanger','NOR','Rogaland',108848);
-INSERT INTO City VALUES (2811,'B�rum','NOR','Akershus',101340);
-INSERT INTO City VALUES (2812,'Abidjan','CIV','Abidjan',2500000);
-INSERT INTO City VALUES (2813,'Bouak�','CIV','Bouak�',329850);
-INSERT INTO City VALUES (2814,'Yamoussoukro','CIV','Yamoussoukro',130000);
-INSERT INTO City VALUES (2815,'Daloa','CIV','Daloa',121842);
-INSERT INTO City VALUES (2816,'Korhogo','CIV','Korhogo',109445);
-INSERT INTO City VALUES (2817,'al-Sib','OMN','Masqat',155000);
-INSERT INTO City VALUES (2818,'Salala','OMN','Zufar',131813);
-INSERT INTO City VALUES (2819,'Bawshar','OMN','Masqat',107500);
-INSERT INTO City VALUES (2820,'Suhar','OMN','al-Batina',90814);
-INSERT INTO City VALUES (2821,'Masqat','OMN','Masqat',51969);
-INSERT INTO City VALUES (2822,'Karachi','PAK','Sindh',9269265);
-INSERT INTO City VALUES (2823,'Lahore','PAK','Punjab',5063499);
-INSERT INTO City VALUES (2824,'Faisalabad','PAK','Punjab',1977246);
-INSERT INTO City VALUES (2825,'Rawalpindi','PAK','Punjab',1406214);
-INSERT INTO City VALUES (2826,'Multan','PAK','Punjab',1182441);
-INSERT INTO City VALUES (2827,'Hyderabad','PAK','Sindh',1151274);
-INSERT INTO City VALUES (2828,'Gujranwala','PAK','Punjab',1124749);
-INSERT INTO City VALUES (2829,'Peshawar','PAK','Nothwest Border Prov',988005);
-INSERT INTO City VALUES (2830,'Quetta','PAK','Baluchistan',560307);
-INSERT INTO City VALUES (2831,'Islamabad','PAK','Islamabad',524500);
-INSERT INTO City VALUES (2832,'Sargodha','PAK','Punjab',455360);
-INSERT INTO City VALUES (2833,'Sialkot','PAK','Punjab',417597);
-INSERT INTO City VALUES (2834,'Bahawalpur','PAK','Punjab',403408);
-INSERT INTO City VALUES (2835,'Sukkur','PAK','Sindh',329176);
-INSERT INTO City VALUES (2836,'Jhang','PAK','Punjab',292214);
-INSERT INTO City VALUES (2837,'Sheikhupura','PAK','Punjab',271875);
-INSERT INTO City VALUES (2838,'Larkana','PAK','Sindh',270366);
-INSERT INTO City VALUES (2839,'Gujrat','PAK','Punjab',250121);
-INSERT INTO City VALUES (2840,'Mardan','PAK','Nothwest Border Prov',244511);
-INSERT INTO City VALUES (2841,'Kasur','PAK','Punjab',241649);
-INSERT INTO City VALUES (2842,'Rahim Yar Khan','PAK','Punjab',228479);
-INSERT INTO City VALUES (2843,'Sahiwal','PAK','Punjab',207388);
-INSERT INTO City VALUES (2844,'Okara','PAK','Punjab',200901);
-INSERT INTO City VALUES (2845,'Wah','PAK','Punjab',198400);
-INSERT INTO City VALUES (2846,'Dera Ghazi Khan','PAK','Punjab',188100);
-INSERT INTO City VALUES (2847,'Mirpur Khas','PAK','Sind',184500);
-INSERT INTO City VALUES (2848,'Nawabshah','PAK','Sind',183100);
-INSERT INTO City VALUES (2849,'Mingora','PAK','Nothwest Border Prov',174500);
-INSERT INTO City VALUES (2850,'Chiniot','PAK','Punjab',169300);
-INSERT INTO City VALUES (2851,'Kamoke','PAK','Punjab',151000);
-INSERT INTO City VALUES (2852,'Mandi Burewala','PAK','Punjab',149900);
-INSERT INTO City VALUES (2853,'Jhelum','PAK','Punjab',145800);
-INSERT INTO City VALUES (2854,'Sadiqabad','PAK','Punjab',141500);
-INSERT INTO City VALUES (2855,'Jacobabad','PAK','Sind',137700);
-INSERT INTO City VALUES (2856,'Shikarpur','PAK','Sind',133300);
-INSERT INTO City VALUES (2857,'Khanewal','PAK','Punjab',133000);
-INSERT INTO City VALUES (2858,'Hafizabad','PAK','Punjab',130200);
-INSERT INTO City VALUES (2859,'Kohat','PAK','Nothwest Border Prov',125300);
-INSERT INTO City VALUES (2860,'Muzaffargarh','PAK','Punjab',121600);
-INSERT INTO City VALUES (2861,'Khanpur','PAK','Punjab',117800);
-INSERT INTO City VALUES (2862,'Gojra','PAK','Punjab',115000);
-INSERT INTO City VALUES (2863,'Bahawalnagar','PAK','Punjab',109600);
-INSERT INTO City VALUES (2864,'Muridke','PAK','Punjab',108600);
-INSERT INTO City VALUES (2865,'Pak Pattan','PAK','Punjab',107800);
-INSERT INTO City VALUES (2866,'Abottabad','PAK','Nothwest Border Prov',106000);
-INSERT INTO City VALUES (2867,'Tando Adam','PAK','Sind',103400);
-INSERT INTO City VALUES (2868,'Jaranwala','PAK','Punjab',103300);
-INSERT INTO City VALUES (2869,'Khairpur','PAK','Sind',102200);
-INSERT INTO City VALUES (2870,'Chishtian Mandi','PAK','Punjab',101700);
-INSERT INTO City VALUES (2871,'Daska','PAK','Punjab',101500);
-INSERT INTO City VALUES (2872,'Dadu','PAK','Sind',98600);
-INSERT INTO City VALUES (2873,'Mandi Bahauddin','PAK','Punjab',97300);
-INSERT INTO City VALUES (2874,'Ahmadpur East','PAK','Punjab',96000);
-INSERT INTO City VALUES (2875,'Kamalia','PAK','Punjab',95300);
-INSERT INTO City VALUES (2876,'Khuzdar','PAK','Baluchistan',93100);
-INSERT INTO City VALUES (2877,'Vihari','PAK','Punjab',92300);
-INSERT INTO City VALUES (2878,'Dera Ismail Khan','PAK','Nothwest Border Prov',90400);
-INSERT INTO City VALUES (2879,'Wazirabad','PAK','Punjab',89700);
-INSERT INTO City VALUES (2880,'Nowshera','PAK','Nothwest Border Prov',89400);
-INSERT INTO City VALUES (2881,'Koror','PLW','Koror',12000);
-INSERT INTO City VALUES (2882,'Ciudad de Panam�','PAN','Panam�',471373);
-INSERT INTO City VALUES (2883,'San Miguelito','PAN','San Miguelito',315382);
-INSERT INTO City VALUES (2884,'Port Moresby','PNG','National Capital Dis',247000);
-INSERT INTO City VALUES (2885,'Asunci�n','PRY','Asunci�n',557776);
-INSERT INTO City VALUES (2886,'Ciudad del Este','PRY','Alto Paran�',133881);
-INSERT INTO City VALUES (2887,'San Lorenzo','PRY','Central',133395);
-INSERT INTO City VALUES (2888,'Lambar�','PRY','Central',99681);
-INSERT INTO City VALUES (2889,'Fernando de la Mora','PRY','Central',95287);
-INSERT INTO City VALUES (2890,'Lima','PER','Lima',6464693);
-INSERT INTO City VALUES (2891,'Arequipa','PER','Arequipa',762000);
-INSERT INTO City VALUES (2892,'Trujillo','PER','La Libertad',652000);
-INSERT INTO City VALUES (2893,'Chiclayo','PER','Lambayeque',517000);
-INSERT INTO City VALUES (2894,'Callao','PER','Callao',424294);
-INSERT INTO City VALUES (2895,'Iquitos','PER','Loreto',367000);
-INSERT INTO City VALUES (2896,'Chimbote','PER','Ancash',336000);
-INSERT INTO City VALUES (2897,'Huancayo','PER','Jun�n',327000);
-INSERT INTO City VALUES (2898,'Piura','PER','Piura',325000);
-INSERT INTO City VALUES (2899,'Cusco','PER','Cusco',291000);
-INSERT INTO City VALUES (2900,'Pucallpa','PER','Ucayali',220866);
-INSERT INTO City VALUES (2901,'Tacna','PER','Tacna',215683);
-INSERT INTO City VALUES (2902,'Ica','PER','Ica',194820);
-INSERT INTO City VALUES (2903,'Sullana','PER','Piura',147361);
-INSERT INTO City VALUES (2904,'Juliaca','PER','Puno',142576);
-INSERT INTO City VALUES (2905,'Hu�nuco','PER','Huanuco',129688);
-INSERT INTO City VALUES (2906,'Ayacucho','PER','Ayacucho',118960);
-INSERT INTO City VALUES (2907,'Chincha Alta','PER','Ica',110016);
-INSERT INTO City VALUES (2908,'Cajamarca','PER','Cajamarca',108009);
-INSERT INTO City VALUES (2909,'Puno','PER','Puno',101578);
-INSERT INTO City VALUES (2910,'Ventanilla','PER','Callao',101056);
-INSERT INTO City VALUES (2911,'Castilla','PER','Piura',90642);
-INSERT INTO City VALUES (2912,'Adamstown','PCN','�',42);
-INSERT INTO City VALUES (2913,'Garapan','MNP','Saipan',9200);
-INSERT INTO City VALUES (2914,'Lisboa','PRT','Lisboa',563210);
-INSERT INTO City VALUES (2915,'Porto','PRT','Porto',273060);
-INSERT INTO City VALUES (2916,'Amadora','PRT','Lisboa',122106);
-INSERT INTO City VALUES (2917,'Co�mbra','PRT','Co�mbra',96100);
-INSERT INTO City VALUES (2918,'Braga','PRT','Braga',90535);
-INSERT INTO City VALUES (2919,'San Juan','PRI','San Juan',434374);
-INSERT INTO City VALUES (2920,'Bayam�n','PRI','Bayam�n',224044);
-INSERT INTO City VALUES (2921,'Ponce','PRI','Ponce',186475);
-INSERT INTO City VALUES (2922,'Carolina','PRI','Carolina',186076);
-INSERT INTO City VALUES (2923,'Caguas','PRI','Caguas',140502);
-INSERT INTO City VALUES (2924,'Arecibo','PRI','Arecibo',100131);
-INSERT INTO City VALUES (2925,'Guaynabo','PRI','Guaynabo',100053);
-INSERT INTO City VALUES (2926,'Mayag�ez','PRI','Mayag�ez',98434);
-INSERT INTO City VALUES (2927,'Toa Baja','PRI','Toa Baja',94085);
-INSERT INTO City VALUES (2928,'Warszawa','POL','Mazowieckie',1615369);
-INSERT INTO City VALUES (2929,'L�dz','POL','Lodzkie',800110);
-INSERT INTO City VALUES (2930,'Krak�w','POL','Malopolskie',738150);
-INSERT INTO City VALUES (2931,'Wroclaw','POL','Dolnoslaskie',636765);
-INSERT INTO City VALUES (2932,'Poznan','POL','Wielkopolskie',576899);
-INSERT INTO City VALUES (2933,'Gdansk','POL','Pomorskie',458988);
-INSERT INTO City VALUES (2934,'Szczecin','POL','Zachodnio-Pomorskie',416988);
-INSERT INTO City VALUES (2935,'Bydgoszcz','POL','Kujawsko-Pomorskie',386855);
-INSERT INTO City VALUES (2936,'Lublin','POL','Lubelskie',356251);
-INSERT INTO City VALUES (2937,'Katowice','POL','Slaskie',345934);
-INSERT INTO City VALUES (2938,'Bialystok','POL','Podlaskie',283937);
-INSERT INTO City VALUES (2939,'Czestochowa','POL','Slaskie',257812);
-INSERT INTO City VALUES (2940,'Gdynia','POL','Pomorskie',253521);
-INSERT INTO City VALUES (2941,'Sosnowiec','POL','Slaskie',244102);
-INSERT INTO City VALUES (2942,'Radom','POL','Mazowieckie',232262);
-INSERT INTO City VALUES (2943,'Kielce','POL','Swietokrzyskie',212383);
-INSERT INTO City VALUES (2944,'Gliwice','POL','Slaskie',212164);
-INSERT INTO City VALUES (2945,'Torun','POL','Kujawsko-Pomorskie',206158);
-INSERT INTO City VALUES (2946,'Bytom','POL','Slaskie',205560);
-INSERT INTO City VALUES (2947,'Zabrze','POL','Slaskie',200177);
-INSERT INTO City VALUES (2948,'Bielsko-Biala','POL','Slaskie',180307);
-INSERT INTO City VALUES (2949,'Olsztyn','POL','Warminsko-Mazurskie',170904);
-INSERT INTO City VALUES (2950,'Rzesz�w','POL','Podkarpackie',162049);
-INSERT INTO City VALUES (2951,'Ruda Slaska','POL','Slaskie',159665);
-INSERT INTO City VALUES (2952,'Rybnik','POL','Slaskie',144582);
-INSERT INTO City VALUES (2953,'Walbrzych','POL','Dolnoslaskie',136923);
-INSERT INTO City VALUES (2954,'Tychy','POL','Slaskie',133178);
-INSERT INTO City VALUES (2955,'Dabrowa G�rnicza','POL','Slaskie',131037);
-INSERT INTO City VALUES (2956,'Plock','POL','Mazowieckie',131011);
-INSERT INTO City VALUES (2957,'Elblag','POL','Warminsko-Mazurskie',129782);
-INSERT INTO City VALUES (2958,'Opole','POL','Opolskie',129553);
-INSERT INTO City VALUES (2959,'Gorz�w Wielkopolski','POL','Lubuskie',126019);
-INSERT INTO City VALUES (2960,'Wloclawek','POL','Kujawsko-Pomorskie',123373);
-INSERT INTO City VALUES (2961,'Chorz�w','POL','Slaskie',121708);
-INSERT INTO City VALUES (2962,'Tarn�w','POL','Malopolskie',121494);
-INSERT INTO City VALUES (2963,'Zielona G�ra','POL','Lubuskie',118182);
-INSERT INTO City VALUES (2964,'Koszalin','POL','Zachodnio-Pomorskie',112375);
-INSERT INTO City VALUES (2965,'Legnica','POL','Dolnoslaskie',109335);
-INSERT INTO City VALUES (2966,'Kalisz','POL','Wielkopolskie',106641);
-INSERT INTO City VALUES (2967,'Grudziadz','POL','Kujawsko-Pomorskie',102434);
-INSERT INTO City VALUES (2968,'Slupsk','POL','Pomorskie',102370);
-INSERT INTO City VALUES (2969,'Jastrzebie-Zdr�j','POL','Slaskie',102294);
-INSERT INTO City VALUES (2970,'Jaworzno','POL','Slaskie',97929);
-INSERT INTO City VALUES (2971,'Jelenia G�ra','POL','Dolnoslaskie',93901);
-INSERT INTO City VALUES (2972,'Malabo','GNQ','Bioko',40000);
-INSERT INTO City VALUES (2973,'Doha','QAT','Doha',355000);
-INSERT INTO City VALUES (2974,'Paris','FRA','�le-de-France',2125246);
-INSERT INTO City VALUES (2975,'Marseille','FRA','Provence-Alpes-C�te',798430);
-INSERT INTO City VALUES (2976,'Lyon','FRA','Rh�ne-Alpes',445452);
-INSERT INTO City VALUES (2977,'Toulouse','FRA','Midi-Pyr�n�es',390350);
-INSERT INTO City VALUES (2978,'Nice','FRA','Provence-Alpes-C�te',342738);
-INSERT INTO City VALUES (2979,'Nantes','FRA','Pays de la Loire',270251);
-INSERT INTO City VALUES (2980,'Strasbourg','FRA','Alsace',264115);
-INSERT INTO City VALUES (2981,'Montpellier','FRA','Languedoc-Roussillon',225392);
-INSERT INTO City VALUES (2982,'Bordeaux','FRA','Aquitaine',215363);
-INSERT INTO City VALUES (2983,'Rennes','FRA','Haute-Normandie',206229);
-INSERT INTO City VALUES (2984,'Le Havre','FRA','Champagne-Ardenne',190905);
-INSERT INTO City VALUES (2985,'Reims','FRA','Nord-Pas-de-Calais',187206);
-INSERT INTO City VALUES (2986,'Lille','FRA','Rh�ne-Alpes',184657);
-INSERT INTO City VALUES (2987,'St-�tienne','FRA','Bretagne',180210);
-INSERT INTO City VALUES (2988,'Toulon','FRA','Provence-Alpes-C�te',160639);
-INSERT INTO City VALUES (2989,'Grenoble','FRA','Rh�ne-Alpes',153317);
-INSERT INTO City VALUES (2990,'Angers','FRA','Pays de la Loire',151279);
-INSERT INTO City VALUES (2991,'Dijon','FRA','Bourgogne',149867);
-INSERT INTO City VALUES (2992,'Brest','FRA','Bretagne',149634);
-INSERT INTO City VALUES (2993,'Le Mans','FRA','Pays de la Loire',146105);
-INSERT INTO City VALUES (2994,'Clermont-Ferrand','FRA','Auvergne',137140);
-INSERT INTO City VALUES (2995,'Amiens','FRA','Picardie',135501);
-INSERT INTO City VALUES (2996,'Aix-en-Provence','FRA','Provence-Alpes-C�te',134222);
-INSERT INTO City VALUES (2997,'Limoges','FRA','Limousin',133968);
-INSERT INTO City VALUES (2998,'N�mes','FRA','Languedoc-Roussillon',133424);
-INSERT INTO City VALUES (2999,'Tours','FRA','Centre',132820);
-INSERT INTO City VALUES (3000,'Villeurbanne','FRA','Rh�ne-Alpes',124215);
-INSERT INTO City VALUES (3001,'Metz','FRA','Lorraine',123776);
-INSERT INTO City VALUES (3002,'Besan�on','FRA','Franche-Comt�',117733);
-INSERT INTO City VALUES (3003,'Caen','FRA','Basse-Normandie',113987);
-INSERT INTO City VALUES (3004,'Orl�ans','FRA','Centre',113126);
-INSERT INTO City VALUES (3005,'Mulhouse','FRA','Alsace',110359);
-INSERT INTO City VALUES (3006,'Rouen','FRA','Haute-Normandie',106592);
-INSERT INTO City VALUES (3007,'Boulogne-Billancourt','FRA','�le-de-France',106367);
-INSERT INTO City VALUES (3008,'Perpignan','FRA','Languedoc-Roussillon',105115);
-INSERT INTO City VALUES (3009,'Nancy','FRA','Lorraine',103605);
-INSERT INTO City VALUES (3010,'Roubaix','FRA','Nord-Pas-de-Calais',96984);
-INSERT INTO City VALUES (3011,'Argenteuil','FRA','�le-de-France',93961);
-INSERT INTO City VALUES (3012,'Tourcoing','FRA','Nord-Pas-de-Calais',93540);
-INSERT INTO City VALUES (3013,'Montreuil','FRA','�le-de-France',90674);
-INSERT INTO City VALUES (3014,'Cayenne','GUF','Cayenne',50699);
-INSERT INTO City VALUES (3015,'Faaa','PYF','Tahiti',25888);
-INSERT INTO City VALUES (3016,'Papeete','PYF','Tahiti',25553);
-INSERT INTO City VALUES (3017,'Saint-Denis','REU','Saint-Denis',131480);
-INSERT INTO City VALUES (3018,'Bucuresti','ROM','Bukarest',2016131);
-INSERT INTO City VALUES (3019,'Iasi','ROM','Iasi',348070);
-INSERT INTO City VALUES (3020,'Constanta','ROM','Constanta',342264);
-INSERT INTO City VALUES (3021,'Cluj-Napoca','ROM','Cluj',332498);
-INSERT INTO City VALUES (3022,'Galati','ROM','Galati',330276);
-INSERT INTO City VALUES (3023,'Timisoara','ROM','Timis',324304);
-INSERT INTO City VALUES (3024,'Brasov','ROM','Brasov',314225);
-INSERT INTO City VALUES (3025,'Craiova','ROM','Dolj',313530);
-INSERT INTO City VALUES (3026,'Ploiesti','ROM','Prahova',251348);
-INSERT INTO City VALUES (3027,'Braila','ROM','Braila',233756);
-INSERT INTO City VALUES (3028,'Oradea','ROM','Bihor',222239);
-INSERT INTO City VALUES (3029,'Bacau','ROM','Bacau',209235);
-INSERT INTO City VALUES (3030,'Pitesti','ROM','Arges',187170);
-INSERT INTO City VALUES (3031,'Arad','ROM','Arad',184408);
-INSERT INTO City VALUES (3032,'Sibiu','ROM','Sibiu',169611);
-INSERT INTO City VALUES (3033,'T�rgu Mures','ROM','Mures',165153);
-INSERT INTO City VALUES (3034,'Baia Mare','ROM','Maramures',149665);
-INSERT INTO City VALUES (3035,'Buzau','ROM','Buzau',148372);
-INSERT INTO City VALUES (3036,'Satu Mare','ROM','Satu Mare',130059);
-INSERT INTO City VALUES (3037,'Botosani','ROM','Botosani',128730);
-INSERT INTO City VALUES (3038,'Piatra Neamt','ROM','Neamt',125070);
-INSERT INTO City VALUES (3039,'R�mnicu V�lcea','ROM','V�lcea',119741);
-INSERT INTO City VALUES (3040,'Suceava','ROM','Suceava',118549);
-INSERT INTO City VALUES (3041,'Drobeta-Turnu Severin','ROM','Mehedinti',117865);
-INSERT INTO City VALUES (3042,'T�rgoviste','ROM','D�mbovita',98980);
-INSERT INTO City VALUES (3043,'Focsani','ROM','Vrancea',98979);
-INSERT INTO City VALUES (3044,'T�rgu Jiu','ROM','Gorj',98524);
-INSERT INTO City VALUES (3045,'Tulcea','ROM','Tulcea',96278);
-INSERT INTO City VALUES (3046,'Resita','ROM','Caras-Severin',93976);
-INSERT INTO City VALUES (3047,'Kigali','RWA','Kigali',286000);
-INSERT INTO City VALUES (3048,'Stockholm','SWE','Lisboa',750348);
-INSERT INTO City VALUES (3049,'Gothenburg [G�teborg]','SWE','West G�tanmaan l�n',466990);
-INSERT INTO City VALUES (3050,'Malm�','SWE','Sk�ne l�n',259579);
-INSERT INTO City VALUES (3051,'Uppsala','SWE','Uppsala l�n',189569);
-INSERT INTO City VALUES (3052,'Link�ping','SWE','East G�tanmaan l�n',133168);
-INSERT INTO City VALUES (3053,'V�ster�s','SWE','V�stmanlands l�n',126328);
-INSERT INTO City VALUES (3054,'�rebro','SWE','�rebros l�n',124207);
-INSERT INTO City VALUES (3055,'Norrk�ping','SWE','East G�tanmaan l�n',122199);
-INSERT INTO City VALUES (3056,'Helsingborg','SWE','Sk�ne l�n',117737);
-INSERT INTO City VALUES (3057,'J�nk�ping','SWE','J�nk�pings l�n',117095);
-INSERT INTO City VALUES (3058,'Ume�','SWE','V�sterbottens l�n',104512);
-INSERT INTO City VALUES (3059,'Lund','SWE','Sk�ne l�n',98948);
-INSERT INTO City VALUES (3060,'Bor�s','SWE','West G�tanmaan l�n',96883);
-INSERT INTO City VALUES (3061,'Sundsvall','SWE','V�sternorrlands l�n',93126);
-INSERT INTO City VALUES (3062,'G�vle','SWE','G�vleborgs l�n',90742);
-INSERT INTO City VALUES (3063,'Jamestown','SHN','Saint Helena',1500);
-INSERT INTO City VALUES (3064,'Basseterre','KNA','St George Basseterre',11600);
-INSERT INTO City VALUES (3065,'Castries','LCA','Castries',2301);
-INSERT INTO City VALUES (3066,'Kingstown','VCT','St George',17100);
-INSERT INTO City VALUES (3067,'Saint-Pierre','SPM','Saint-Pierre',5808);
-INSERT INTO City VALUES (3068,'Berlin','DEU','Berliini',3386667);
-INSERT INTO City VALUES (3069,'Hamburg','DEU','Hamburg',1704735);
-INSERT INTO City VALUES (3070,'Munich [M�nchen]','DEU','Baijeri',1194560);
-INSERT INTO City VALUES (3071,'K�ln','DEU','Nordrhein-Westfalen',962507);
-INSERT INTO City VALUES (3072,'Frankfurt am Main','DEU','Hessen',643821);
-INSERT INTO City VALUES (3073,'Essen','DEU','Nordrhein-Westfalen',599515);
-INSERT INTO City VALUES (3074,'Dortmund','DEU','Nordrhein-Westfalen',590213);
-INSERT INTO City VALUES (3075,'Stuttgart','DEU','Baden-W�rttemberg',582443);
-INSERT INTO City VALUES (3076,'D�sseldorf','DEU','Nordrhein-Westfalen',568855);
-INSERT INTO City VALUES (3077,'Bremen','DEU','Bremen',540330);
-INSERT INTO City VALUES (3078,'Duisburg','DEU','Nordrhein-Westfalen',519793);
-INSERT INTO City VALUES (3079,'Hannover','DEU','Niedersachsen',514718);
-INSERT INTO City VALUES (3080,'Leipzig','DEU','Saksi',489532);
-INSERT INTO City VALUES (3081,'N�rnberg','DEU','Baijeri',486628);
-INSERT INTO City VALUES (3082,'Dresden','DEU','Saksi',476668);
-INSERT INTO City VALUES (3083,'Bochum','DEU','Nordrhein-Westfalen',392830);
-INSERT INTO City VALUES (3084,'Wuppertal','DEU','Nordrhein-Westfalen',368993);
-INSERT INTO City VALUES (3085,'Bielefeld','DEU','Nordrhein-Westfalen',321125);
-INSERT INTO City VALUES (3086,'Mannheim','DEU','Baden-W�rttemberg',307730);
-INSERT INTO City VALUES (3087,'Bonn','DEU','Nordrhein-Westfalen',301048);
-INSERT INTO City VALUES (3088,'Gelsenkirchen','DEU','Nordrhein-Westfalen',281979);
-INSERT INTO City VALUES (3089,'Karlsruhe','DEU','Baden-W�rttemberg',277204);
-INSERT INTO City VALUES (3090,'Wiesbaden','DEU','Hessen',268716);
-INSERT INTO City VALUES (3091,'M�nster','DEU','Nordrhein-Westfalen',264670);
-INSERT INTO City VALUES (3092,'M�nchengladbach','DEU','Nordrhein-Westfalen',263697);
-INSERT INTO City VALUES (3093,'Chemnitz','DEU','Saksi',263222);
-INSERT INTO City VALUES (3094,'Augsburg','DEU','Baijeri',254867);
-INSERT INTO City VALUES (3095,'Halle/Saale','DEU','Anhalt Sachsen',254360);
-INSERT INTO City VALUES (3096,'Braunschweig','DEU','Niedersachsen',246322);
-INSERT INTO City VALUES (3097,'Aachen','DEU','Nordrhein-Westfalen',243825);
-INSERT INTO City VALUES (3098,'Krefeld','DEU','Nordrhein-Westfalen',241769);
-INSERT INTO City VALUES (3099,'Magdeburg','DEU','Anhalt Sachsen',235073);
-INSERT INTO City VALUES (3100,'Kiel','DEU','Schleswig-Holstein',233795);
-INSERT INTO City VALUES (3101,'Oberhausen','DEU','Nordrhein-Westfalen',222349);
-INSERT INTO City VALUES (3102,'L�beck','DEU','Schleswig-Holstein',213326);
-INSERT INTO City VALUES (3103,'Hagen','DEU','Nordrhein-Westfalen',205201);
-INSERT INTO City VALUES (3104,'Rostock','DEU','Mecklenburg-Vorpomme',203279);
-INSERT INTO City VALUES (3105,'Freiburg im Breisgau','DEU','Baden-W�rttemberg',202455);
-INSERT INTO City VALUES (3106,'Erfurt','DEU','Th�ringen',201267);
-INSERT INTO City VALUES (3107,'Kassel','DEU','Hessen',196211);
-INSERT INTO City VALUES (3108,'Saarbr�cken','DEU','Saarland',183836);
-INSERT INTO City VALUES (3109,'Mainz','DEU','Rheinland-Pfalz',183134);
-INSERT INTO City VALUES (3110,'Hamm','DEU','Nordrhein-Westfalen',181804);
-INSERT INTO City VALUES (3111,'Herne','DEU','Nordrhein-Westfalen',175661);
-INSERT INTO City VALUES (3112,'M�lheim an der Ruhr','DEU','Nordrhein-Westfalen',173895);
-INSERT INTO City VALUES (3113,'Solingen','DEU','Nordrhein-Westfalen',165583);
-INSERT INTO City VALUES (3114,'Osnabr�ck','DEU','Niedersachsen',164539);
-INSERT INTO City VALUES (3115,'Ludwigshafen am Rhein','DEU','Rheinland-Pfalz',163771);
-INSERT INTO City VALUES (3116,'Leverkusen','DEU','Nordrhein-Westfalen',160841);
-INSERT INTO City VALUES (3117,'Oldenburg','DEU','Niedersachsen',154125);
-INSERT INTO City VALUES (3118,'Neuss','DEU','Nordrhein-Westfalen',149702);
-INSERT INTO City VALUES (3119,'Heidelberg','DEU','Baden-W�rttemberg',139672);
-INSERT INTO City VALUES (3120,'Darmstadt','DEU','Hessen',137776);
-INSERT INTO City VALUES (3121,'Paderborn','DEU','Nordrhein-Westfalen',137647);
-INSERT INTO City VALUES (3122,'Potsdam','DEU','Brandenburg',128983);
-INSERT INTO City VALUES (3123,'W�rzburg','DEU','Baijeri',127350);
-INSERT INTO City VALUES (3124,'Regensburg','DEU','Baijeri',125236);
-INSERT INTO City VALUES (3125,'Recklinghausen','DEU','Nordrhein-Westfalen',125022);
-INSERT INTO City VALUES (3126,'G�ttingen','DEU','Niedersachsen',124775);
-INSERT INTO City VALUES (3127,'Bremerhaven','DEU','Bremen',122735);
-INSERT INTO City VALUES (3128,'Wolfsburg','DEU','Niedersachsen',121954);
-INSERT INTO City VALUES (3129,'Bottrop','DEU','Nordrhein-Westfalen',121097);
-INSERT INTO City VALUES (3130,'Remscheid','DEU','Nordrhein-Westfalen',120125);
-INSERT INTO City VALUES (3131,'Heilbronn','DEU','Baden-W�rttemberg',119526);
-INSERT INTO City VALUES (3132,'Pforzheim','DEU','Baden-W�rttemberg',117227);
-INSERT INTO City VALUES (3133,'Offenbach am Main','DEU','Hessen',116627);
-INSERT INTO City VALUES (3134,'Ulm','DEU','Baden-W�rttemberg',116103);
-INSERT INTO City VALUES (3135,'Ingolstadt','DEU','Baijeri',114826);
-INSERT INTO City VALUES (3136,'Gera','DEU','Th�ringen',114718);
-INSERT INTO City VALUES (3137,'Salzgitter','DEU','Niedersachsen',112934);
-INSERT INTO City VALUES (3138,'Cottbus','DEU','Brandenburg',110894);
-INSERT INTO City VALUES (3139,'Reutlingen','DEU','Baden-W�rttemberg',110343);
-INSERT INTO City VALUES (3140,'F�rth','DEU','Baijeri',109771);
-INSERT INTO City VALUES (3141,'Siegen','DEU','Nordrhein-Westfalen',109225);
-INSERT INTO City VALUES (3142,'Koblenz','DEU','Rheinland-Pfalz',108003);
-INSERT INTO City VALUES (3143,'Moers','DEU','Nordrhein-Westfalen',106837);
-INSERT INTO City VALUES (3144,'Bergisch Gladbach','DEU','Nordrhein-Westfalen',106150);
-INSERT INTO City VALUES (3145,'Zwickau','DEU','Saksi',104146);
-INSERT INTO City VALUES (3146,'Hildesheim','DEU','Niedersachsen',104013);
-INSERT INTO City VALUES (3147,'Witten','DEU','Nordrhein-Westfalen',103384);
-INSERT INTO City VALUES (3148,'Schwerin','DEU','Mecklenburg-Vorpomme',102878);
-INSERT INTO City VALUES (3149,'Erlangen','DEU','Baijeri',100750);
-INSERT INTO City VALUES (3150,'Kaiserslautern','DEU','Rheinland-Pfalz',100025);
-INSERT INTO City VALUES (3151,'Trier','DEU','Rheinland-Pfalz',99891);
-INSERT INTO City VALUES (3152,'Jena','DEU','Th�ringen',99779);
-INSERT INTO City VALUES (3153,'Iserlohn','DEU','Nordrhein-Westfalen',99474);
-INSERT INTO City VALUES (3154,'G�tersloh','DEU','Nordrhein-Westfalen',95028);
-INSERT INTO City VALUES (3155,'Marl','DEU','Nordrhein-Westfalen',93735);
-INSERT INTO City VALUES (3156,'L�nen','DEU','Nordrhein-Westfalen',92044);
-INSERT INTO City VALUES (3157,'D�ren','DEU','Nordrhein-Westfalen',91092);
-INSERT INTO City VALUES (3158,'Ratingen','DEU','Nordrhein-Westfalen',90951);
-INSERT INTO City VALUES (3159,'Velbert','DEU','Nordrhein-Westfalen',89881);
-INSERT INTO City VALUES (3160,'Esslingen am Neckar','DEU','Baden-W�rttemberg',89667);
-INSERT INTO City VALUES (3161,'Honiara','SLB','Honiara',50100);
-INSERT INTO City VALUES (3162,'Lusaka','ZMB','Lusaka',1317000);
-INSERT INTO City VALUES (3163,'Ndola','ZMB','Copperbelt',329200);
-INSERT INTO City VALUES (3164,'Kitwe','ZMB','Copperbelt',288600);
-INSERT INTO City VALUES (3165,'Kabwe','ZMB','Central',154300);
-INSERT INTO City VALUES (3166,'Chingola','ZMB','Copperbelt',142400);
-INSERT INTO City VALUES (3167,'Mufulira','ZMB','Copperbelt',123900);
-INSERT INTO City VALUES (3168,'Luanshya','ZMB','Copperbelt',118100);
-INSERT INTO City VALUES (3169,'Apia','WSM','Upolu',35900);
-INSERT INTO City VALUES (3170,'Serravalle','SMR','Serravalle/Dogano',4802);
-INSERT INTO City VALUES (3171,'San Marino','SMR','San Marino',2294);
-INSERT INTO City VALUES (3172,'S�o Tom�','STP','Aqua Grande',49541);
-INSERT INTO City VALUES (3173,'Riyadh','SAU','Riyadh',3324000);
-INSERT INTO City VALUES (3174,'Jedda','SAU','Mekka',2046300);
-INSERT INTO City VALUES (3175,'Mekka','SAU','Mekka',965700);
-INSERT INTO City VALUES (3176,'Medina','SAU','Medina',608300);
-INSERT INTO City VALUES (3177,'al-Dammam','SAU','al-Sharqiya',482300);
-INSERT INTO City VALUES (3178,'al-Taif','SAU','Mekka',416100);
-INSERT INTO City VALUES (3179,'Tabuk','SAU','Tabuk',292600);
-INSERT INTO City VALUES (3180,'Burayda','SAU','al-Qasim',248600);
-INSERT INTO City VALUES (3181,'al-Hufuf','SAU','al-Sharqiya',225800);
-INSERT INTO City VALUES (3182,'al-Mubarraz','SAU','al-Sharqiya',219100);
-INSERT INTO City VALUES (3183,'Khamis Mushayt','SAU','Asir',217900);
-INSERT INTO City VALUES (3184,'Hail','SAU','Hail',176800);
-INSERT INTO City VALUES (3185,'al-Kharj','SAU','Riad',152100);
-INSERT INTO City VALUES (3186,'al-Khubar','SAU','al-Sharqiya',141700);
-INSERT INTO City VALUES (3187,'Jubayl','SAU','al-Sharqiya',140800);
-INSERT INTO City VALUES (3188,'Hafar al-Batin','SAU','al-Sharqiya',137800);
-INSERT INTO City VALUES (3189,'al-Tuqba','SAU','al-Sharqiya',125700);
-INSERT INTO City VALUES (3190,'Yanbu','SAU','Medina',119800);
-INSERT INTO City VALUES (3191,'Abha','SAU','Asir',112300);
-INSERT INTO City VALUES (3192,'Ara�ar','SAU','al-Khudud al-Samaliy',108100);
-INSERT INTO City VALUES (3193,'al-Qatif','SAU','al-Sharqiya',98900);
-INSERT INTO City VALUES (3194,'al-Hawiya','SAU','Mekka',93900);
-INSERT INTO City VALUES (3195,'Unayza','SAU','Qasim',91100);
-INSERT INTO City VALUES (3196,'Najran','SAU','Najran',91000);
-INSERT INTO City VALUES (3197,'Pikine','SEN','Cap-Vert',855287);
-INSERT INTO City VALUES (3198,'Dakar','SEN','Cap-Vert',785071);
-INSERT INTO City VALUES (3199,'Thi�s','SEN','Thi�s',248000);
-INSERT INTO City VALUES (3200,'Kaolack','SEN','Kaolack',199000);
-INSERT INTO City VALUES (3201,'Ziguinchor','SEN','Ziguinchor',192000);
-INSERT INTO City VALUES (3202,'Rufisque','SEN','Cap-Vert',150000);
-INSERT INTO City VALUES (3203,'Saint-Louis','SEN','Saint-Louis',132400);
-INSERT INTO City VALUES (3204,'Mbour','SEN','Thi�s',109300);
-INSERT INTO City VALUES (3205,'Diourbel','SEN','Diourbel',99400);
-INSERT INTO City VALUES (3206,'Victoria','SYC','Mah�',41000);
-INSERT INTO City VALUES (3207,'Freetown','SLE','Western',850000);
-INSERT INTO City VALUES (3208,'Singapore','SGP','�',4017733);
-INSERT INTO City VALUES (3209,'Bratislava','SVK','Bratislava',448292);
-INSERT INTO City VALUES (3210,'Ko�ice','SVK','V�chodn� Slovensko',241874);
-INSERT INTO City VALUES (3211,'Pre�ov','SVK','V�chodn� Slovensko',93977);
-INSERT INTO City VALUES (3212,'Ljubljana','SVN','Osrednjeslovenska',270986);
-INSERT INTO City VALUES (3213,'Maribor','SVN','Podravska',115532);
-INSERT INTO City VALUES (3214,'Mogadishu','SOM','Banaadir',997000);
-INSERT INTO City VALUES (3215,'Hargeysa','SOM','Woqooyi Galbeed',90000);
-INSERT INTO City VALUES (3216,'Kismaayo','SOM','Jubbada Hoose',90000);
-INSERT INTO City VALUES (3217,'Colombo','LKA','Western',645000);
-INSERT INTO City VALUES (3218,'Dehiwala','LKA','Western',203000);
-INSERT INTO City VALUES (3219,'Moratuwa','LKA','Western',190000);
-INSERT INTO City VALUES (3220,'Jaffna','LKA','Northern',149000);
-INSERT INTO City VALUES (3221,'Kandy','LKA','Central',140000);
-INSERT INTO City VALUES (3222,'Sri Jayawardenepura Kotte','LKA','Western',118000);
-INSERT INTO City VALUES (3223,'Negombo','LKA','Western',100000);
-INSERT INTO City VALUES (3224,'Omdurman','SDN','Khartum',1271403);
-INSERT INTO City VALUES (3225,'Khartum','SDN','Khartum',947483);
-INSERT INTO City VALUES (3226,'Sharq al-Nil','SDN','Khartum',700887);
-INSERT INTO City VALUES (3227,'Port Sudan','SDN','al-Bahr al-Ahmar',308195);
-INSERT INTO City VALUES (3228,'Kassala','SDN','Kassala',234622);
-INSERT INTO City VALUES (3229,'Obeid','SDN','Kurdufan al-Shamaliy',229425);
-INSERT INTO City VALUES (3230,'Nyala','SDN','Darfur al-Janubiya',227183);
-INSERT INTO City VALUES (3231,'Wad Madani','SDN','al-Jazira',211362);
-INSERT INTO City VALUES (3232,'al-Qadarif','SDN','al-Qadarif',191164);
-INSERT INTO City VALUES (3233,'Kusti','SDN','al-Bahr al-Abyad',173599);
-INSERT INTO City VALUES (3234,'al-Fashir','SDN','Darfur al-Shamaliya',141884);
-INSERT INTO City VALUES (3235,'Juba','SDN','Bahr al-Jabal',114980);
-INSERT INTO City VALUES (3236,'Helsinki [Helsingfors]','FIN','Newmaa',555474);
-INSERT INTO City VALUES (3237,'Espoo','FIN','Newmaa',213271);
-INSERT INTO City VALUES (3238,'Tampere','FIN','Pirkanmaa',195468);
-INSERT INTO City VALUES (3239,'Vantaa','FIN','Newmaa',178471);
-INSERT INTO City VALUES (3240,'Turku [�bo]','FIN','Varsinais-Suomi',172561);
-INSERT INTO City VALUES (3241,'Oulu','FIN','Pohjois-Pohjanmaa',120753);
-INSERT INTO City VALUES (3242,'Lahti','FIN','P�ij�t-H�me',96921);
-INSERT INTO City VALUES (3243,'Paramaribo','SUR','Paramaribo',112000);
-INSERT INTO City VALUES (3244,'Mbabane','SWZ','Hhohho',61000);
-INSERT INTO City VALUES (3245,'Z�rich','CHE','Z�rich',336800);
-INSERT INTO City VALUES (3246,'Geneve','CHE','Geneve',173500);
-INSERT INTO City VALUES (3247,'Basel','CHE','Basel-Stadt',166700);
-INSERT INTO City VALUES (3248,'Bern','CHE','Bern',122700);
-INSERT INTO City VALUES (3249,'Lausanne','CHE','Vaud',114500);
-INSERT INTO City VALUES (3250,'Damascus','SYR','Damascus',1347000);
-INSERT INTO City VALUES (3251,'Aleppo','SYR','Aleppo',1261983);
-INSERT INTO City VALUES (3252,'Hims','SYR','Hims',507404);
-INSERT INTO City VALUES (3253,'Hama','SYR','Hama',343361);
-INSERT INTO City VALUES (3254,'Latakia','SYR','Latakia',264563);
-INSERT INTO City VALUES (3255,'al-Qamishliya','SYR','al-Hasaka',144286);
-INSERT INTO City VALUES (3256,'Dayr al-Zawr','SYR','Dayr al-Zawr',140459);
-INSERT INTO City VALUES (3257,'Jaramana','SYR','Damaskos',138469);
-INSERT INTO City VALUES (3258,'Duma','SYR','Damaskos',131158);
-INSERT INTO City VALUES (3259,'al-Raqqa','SYR','al-Raqqa',108020);
-INSERT INTO City VALUES (3260,'Idlib','SYR','Idlib',91081);
-INSERT INTO City VALUES (3261,'Dushanbe','TJK','Karotegin',524000);
-INSERT INTO City VALUES (3262,'Khujand','TJK','Khujand',161500);
-INSERT INTO City VALUES (3263,'Taipei','TWN','Taipei',2641312);
-INSERT INTO City VALUES (3264,'Kaohsiung','TWN','Kaohsiung',1475505);
-INSERT INTO City VALUES (3265,'Taichung','TWN','Taichung',940589);
-INSERT INTO City VALUES (3266,'Tainan','TWN','Tainan',728060);
-INSERT INTO City VALUES (3267,'Panchiao','TWN','Taipei',523850);
-INSERT INTO City VALUES (3268,'Chungho','TWN','Taipei',392176);
-INSERT INTO City VALUES (3269,'Keelung (Chilung)','TWN','Keelung',385201);
-INSERT INTO City VALUES (3270,'Sanchung','TWN','Taipei',380084);
-INSERT INTO City VALUES (3271,'Hsinchuang','TWN','Taipei',365048);
-INSERT INTO City VALUES (3272,'Hsinchu','TWN','Hsinchu',361958);
-INSERT INTO City VALUES (3273,'Chungli','TWN','Taoyuan',318649);
-INSERT INTO City VALUES (3274,'Fengshan','TWN','Kaohsiung',318562);
-INSERT INTO City VALUES (3275,'Taoyuan','TWN','Taoyuan',316438);
-INSERT INTO City VALUES (3276,'Chiayi','TWN','Chiayi',265109);
-INSERT INTO City VALUES (3277,'Hsintien','TWN','Taipei',263603);
-INSERT INTO City VALUES (3278,'Changhwa','TWN','Changhwa',227715);
-INSERT INTO City VALUES (3279,'Yungho','TWN','Taipei',227700);
-INSERT INTO City VALUES (3280,'Tucheng','TWN','Taipei',224897);
-INSERT INTO City VALUES (3281,'Pingtung','TWN','Pingtung',214727);
-INSERT INTO City VALUES (3282,'Yungkang','TWN','Tainan',193005);
-INSERT INTO City VALUES (3283,'Pingchen','TWN','Taoyuan',188344);
-INSERT INTO City VALUES (3284,'Tali','TWN','Taichung',171940);
-INSERT INTO City VALUES (3285,'Taiping','TWN','',165524);
-INSERT INTO City VALUES (3286,'Pate','TWN','Taoyuan',161700);
-INSERT INTO City VALUES (3287,'Fengyuan','TWN','Taichung',161032);
-INSERT INTO City VALUES (3288,'Luchou','TWN','Taipei',160516);
-INSERT INTO City VALUES (3289,'Hsichuh','TWN','Taipei',154976);
-INSERT INTO City VALUES (3290,'Shulin','TWN','Taipei',151260);
-INSERT INTO City VALUES (3291,'Yuanlin','TWN','Changhwa',126402);
-INSERT INTO City VALUES (3292,'Yangmei','TWN','Taoyuan',126323);
-INSERT INTO City VALUES (3293,'Taliao','TWN','',115897);
-INSERT INTO City VALUES (3294,'Kueishan','TWN','',112195);
-INSERT INTO City VALUES (3295,'Tanshui','TWN','Taipei',111882);
-INSERT INTO City VALUES (3296,'Taitung','TWN','Taitung',111039);
-INSERT INTO City VALUES (3297,'Hualien','TWN','Hualien',108407);
-INSERT INTO City VALUES (3298,'Nantou','TWN','Nantou',104723);
-INSERT INTO City VALUES (3299,'Lungtan','TWN','Taipei',103088);
-INSERT INTO City VALUES (3300,'Touliu','TWN','Y�nlin',98900);
-INSERT INTO City VALUES (3301,'Tsaotun','TWN','Nantou',96800);
-INSERT INTO City VALUES (3302,'Kangshan','TWN','Kaohsiung',92200);
-INSERT INTO City VALUES (3303,'Ilan','TWN','Ilan',92000);
-INSERT INTO City VALUES (3304,'Miaoli','TWN','Miaoli',90000);
-INSERT INTO City VALUES (3305,'Dar es Salaam','TZA','Dar es Salaam',1747000);
-INSERT INTO City VALUES (3306,'Dodoma','TZA','Dodoma',189000);
-INSERT INTO City VALUES (3307,'Mwanza','TZA','Mwanza',172300);
-INSERT INTO City VALUES (3308,'Zanzibar','TZA','Zanzibar West',157634);
-INSERT INTO City VALUES (3309,'Tanga','TZA','Tanga',137400);
-INSERT INTO City VALUES (3310,'Mbeya','TZA','Mbeya',130800);
-INSERT INTO City VALUES (3311,'Morogoro','TZA','Morogoro',117800);
-INSERT INTO City VALUES (3312,'Arusha','TZA','Arusha',102500);
-INSERT INTO City VALUES (3313,'Moshi','TZA','Kilimanjaro',96800);
-INSERT INTO City VALUES (3314,'Tabora','TZA','Tabora',92800);
-INSERT INTO City VALUES (3315,'K�benhavn','DNK','K�benhavn',495699);
-INSERT INTO City VALUES (3316,'�rhus','DNK','�rhus',284846);
-INSERT INTO City VALUES (3317,'Odense','DNK','Fyn',183912);
-INSERT INTO City VALUES (3318,'Aalborg','DNK','Nordjylland',161161);
-INSERT INTO City VALUES (3319,'Frederiksberg','DNK','Frederiksberg',90327);
-INSERT INTO City VALUES (3320,'Bangkok','THA','Bangkok',6320174);
-INSERT INTO City VALUES (3321,'Nonthaburi','THA','Nonthaburi',292100);
-INSERT INTO City VALUES (3322,'Nakhon Ratchasima','THA','Nakhon Ratchasima',181400);
-INSERT INTO City VALUES (3323,'Chiang Mai','THA','Chiang Mai',171100);
-INSERT INTO City VALUES (3324,'Udon Thani','THA','Udon Thani',158100);
-INSERT INTO City VALUES (3325,'Hat Yai','THA','Songkhla',148632);
-INSERT INTO City VALUES (3326,'Khon Kaen','THA','Khon Kaen',126500);
-INSERT INTO City VALUES (3327,'Pak Kret','THA','Nonthaburi',126055);
-INSERT INTO City VALUES (3328,'Nakhon Sawan','THA','Nakhon Sawan',123800);
-INSERT INTO City VALUES (3329,'Ubon Ratchathani','THA','Ubon Ratchathani',116300);
-INSERT INTO City VALUES (3330,'Songkhla','THA','Songkhla',94900);
-INSERT INTO City VALUES (3331,'Nakhon Pathom','THA','Nakhon Pathom',94100);
-INSERT INTO City VALUES (3332,'Lom�','TGO','Maritime',375000);
-INSERT INTO City VALUES (3333,'Fakaofo','TKL','Fakaofo',300);
-INSERT INTO City VALUES (3334,'Nuku�alofa','TON','Tongatapu',22400);
-INSERT INTO City VALUES (3335,'Chaguanas','TTO','Caroni',56601);
-INSERT INTO City VALUES (3336,'Port-of-Spain','TTO','Port-of-Spain',43396);
-INSERT INTO City VALUES (3337,'N�Djam�na','TCD','Chari-Baguirmi',530965);
-INSERT INTO City VALUES (3338,'Moundou','TCD','Logone Occidental',99500);
-INSERT INTO City VALUES (3339,'Praha','CZE','Hlavn� mesto Praha',1181126);
-INSERT INTO City VALUES (3340,'Brno','CZE','Jizn� Morava',381862);
-INSERT INTO City VALUES (3341,'Ostrava','CZE','Severn� Morava',320041);
-INSERT INTO City VALUES (3342,'Plzen','CZE','Zapadn� Cechy',166759);
-INSERT INTO City VALUES (3343,'Olomouc','CZE','Severn� Morava',102702);
-INSERT INTO City VALUES (3344,'Liberec','CZE','Severn� Cechy',99155);
-INSERT INTO City VALUES (3345,'Cesk� Budejovice','CZE','Jizn� Cechy',98186);
-INSERT INTO City VALUES (3346,'Hradec Kr�lov�','CZE','V�chodn� Cechy',98080);
-INSERT INTO City VALUES (3347,'�st� nad Labem','CZE','Severn� Cechy',95491);
-INSERT INTO City VALUES (3348,'Pardubice','CZE','V�chodn� Cechy',91309);
-INSERT INTO City VALUES (3349,'Tunis','TUN','Tunis',690600);
-INSERT INTO City VALUES (3350,'Sfax','TUN','Sfax',257800);
-INSERT INTO City VALUES (3351,'Ariana','TUN','Ariana',197000);
-INSERT INTO City VALUES (3352,'Ettadhamen','TUN','Ariana',178600);
-INSERT INTO City VALUES (3353,'Sousse','TUN','Sousse',145900);
-INSERT INTO City VALUES (3354,'Kairouan','TUN','Kairouan',113100);
-INSERT INTO City VALUES (3355,'Biserta','TUN','Biserta',108900);
-INSERT INTO City VALUES (3356,'Gab�s','TUN','Gab�s',106600);
-INSERT INTO City VALUES (3357,'Istanbul','TUR','Istanbul',8787958);
-INSERT INTO City VALUES (3358,'Ankara','TUR','Ankara',3038159);
-INSERT INTO City VALUES (3359,'Izmir','TUR','Izmir',2130359);
-INSERT INTO City VALUES (3360,'Adana','TUR','Adana',1131198);
-INSERT INTO City VALUES (3361,'Bursa','TUR','Bursa',1095842);
-INSERT INTO City VALUES (3362,'Gaziantep','TUR','Gaziantep',789056);
-INSERT INTO City VALUES (3363,'Konya','TUR','Konya',628364);
-INSERT INTO City VALUES (3364,'Mersin (I�el)','TUR','I�el',587212);
-INSERT INTO City VALUES (3365,'Antalya','TUR','Antalya',564914);
-INSERT INTO City VALUES (3366,'Diyarbakir','TUR','Diyarbakir',479884);
-INSERT INTO City VALUES (3367,'Kayseri','TUR','Kayseri',475657);
-INSERT INTO City VALUES (3368,'Eskisehir','TUR','Eskisehir',470781);
-INSERT INTO City VALUES (3369,'Sanliurfa','TUR','Sanliurfa',405905);
-INSERT INTO City VALUES (3370,'Samsun','TUR','Samsun',339871);
-INSERT INTO City VALUES (3371,'Malatya','TUR','Malatya',330312);
-INSERT INTO City VALUES (3372,'Gebze','TUR','Kocaeli',264170);
-INSERT INTO City VALUES (3373,'Denizli','TUR','Denizli',253848);
-INSERT INTO City VALUES (3374,'Sivas','TUR','Sivas',246642);
-INSERT INTO City VALUES (3375,'Erzurum','TUR','Erzurum',246535);
-INSERT INTO City VALUES (3376,'Tarsus','TUR','Adana',246206);
-INSERT INTO City VALUES (3377,'Kahramanmaras','TUR','Kahramanmaras',245772);
-INSERT INTO City VALUES (3378,'El�zig','TUR','El�zig',228815);
-INSERT INTO City VALUES (3379,'Van','TUR','Van',219319);
-INSERT INTO City VALUES (3380,'Sultanbeyli','TUR','Istanbul',211068);
-INSERT INTO City VALUES (3381,'Izmit (Kocaeli)','TUR','Kocaeli',210068);
-INSERT INTO City VALUES (3382,'Manisa','TUR','Manisa',207148);
-INSERT INTO City VALUES (3383,'Batman','TUR','Batman',203793);
-INSERT INTO City VALUES (3384,'Balikesir','TUR','Balikesir',196382);
-INSERT INTO City VALUES (3385,'Sakarya (Adapazari)','TUR','Sakarya',190641);
-INSERT INTO City VALUES (3386,'Iskenderun','TUR','Hatay',153022);
-INSERT INTO City VALUES (3387,'Osmaniye','TUR','Osmaniye',146003);
-INSERT INTO City VALUES (3388,'�orum','TUR','�orum',145495);
-INSERT INTO City VALUES (3389,'K�tahya','TUR','K�tahya',144761);
-INSERT INTO City VALUES (3390,'Hatay (Antakya)','TUR','Hatay',143982);
-INSERT INTO City VALUES (3391,'Kirikkale','TUR','Kirikkale',142044);
-INSERT INTO City VALUES (3392,'Adiyaman','TUR','Adiyaman',141529);
-INSERT INTO City VALUES (3393,'Trabzon','TUR','Trabzon',138234);
-INSERT INTO City VALUES (3394,'Ordu','TUR','Ordu',133642);
-INSERT INTO City VALUES (3395,'Aydin','TUR','Aydin',128651);
-INSERT INTO City VALUES (3396,'Usak','TUR','Usak',128162);
-INSERT INTO City VALUES (3397,'Edirne','TUR','Edirne',123383);
-INSERT INTO City VALUES (3398,'�orlu','TUR','Tekirdag',123300);
-INSERT INTO City VALUES (3399,'Isparta','TUR','Isparta',121911);
-INSERT INTO City VALUES (3400,'Karab�k','TUR','Karab�k',118285);
-INSERT INTO City VALUES (3401,'Kilis','TUR','Kilis',118245);
-INSERT INTO City VALUES (3402,'Alanya','TUR','Antalya',117300);
-INSERT INTO City VALUES (3403,'Kiziltepe','TUR','Mardin',112000);
-INSERT INTO City VALUES (3404,'Zonguldak','TUR','Zonguldak',111542);
-INSERT INTO City VALUES (3405,'Siirt','TUR','Siirt',107100);
-INSERT INTO City VALUES (3406,'Viransehir','TUR','Sanliurfa',106400);
-INSERT INTO City VALUES (3407,'Tekirdag','TUR','Tekirdag',106077);
-INSERT INTO City VALUES (3408,'Karaman','TUR','Karaman',104200);
-INSERT INTO City VALUES (3409,'Afyon','TUR','Afyon',103984);
-INSERT INTO City VALUES (3410,'Aksaray','TUR','Aksaray',102681);
-INSERT INTO City VALUES (3411,'Ceyhan','TUR','Adana',102412);
-INSERT INTO City VALUES (3412,'Erzincan','TUR','Erzincan',102304);
-INSERT INTO City VALUES (3413,'Bismil','TUR','Diyarbakir',101400);
-INSERT INTO City VALUES (3414,'Nazilli','TUR','Aydin',99900);
-INSERT INTO City VALUES (3415,'Tokat','TUR','Tokat',99500);
-INSERT INTO City VALUES (3416,'Kars','TUR','Kars',93000);
-INSERT INTO City VALUES (3417,'Ineg�l','TUR','Bursa',90500);
-INSERT INTO City VALUES (3418,'Bandirma','TUR','Balikesir',90200);
-INSERT INTO City VALUES (3419,'Ashgabat','TKM','Ahal',540600);
-INSERT INTO City VALUES (3420,'Ch�rjew','TKM','Lebap',189200);
-INSERT INTO City VALUES (3421,'Dashhowuz','TKM','Dashhowuz',141800);
-INSERT INTO City VALUES (3422,'Mary','TKM','Mary',101000);
-INSERT INTO City VALUES (3423,'Cockburn Town','TCA','Grand Turk',4800);
-INSERT INTO City VALUES (3424,'Funafuti','TUV','Funafuti',4600);
-INSERT INTO City VALUES (3425,'Kampala','UGA','Central',890800);
-INSERT INTO City VALUES (3426,'Kyiv','UKR','Kiova',2624000);
-INSERT INTO City VALUES (3427,'Harkova [Harkiv]','UKR','Harkova',1500000);
-INSERT INTO City VALUES (3428,'Dnipropetrovsk','UKR','Dnipropetrovsk',1103000);
-INSERT INTO City VALUES (3429,'Donetsk','UKR','Donetsk',1050000);
-INSERT INTO City VALUES (3430,'Odesa','UKR','Odesa',1011000);
-INSERT INTO City VALUES (3431,'Zaporizzja','UKR','Zaporizzja',848000);
-INSERT INTO City VALUES (3432,'Lviv','UKR','Lviv',788000);
-INSERT INTO City VALUES (3433,'Kryvyi Rig','UKR','Dnipropetrovsk',703000);
-INSERT INTO City VALUES (3434,'Mykolajiv','UKR','Mykolajiv',508000);
-INSERT INTO City VALUES (3435,'Mariupol','UKR','Donetsk',490000);
-INSERT INTO City VALUES (3436,'Lugansk','UKR','Lugansk',469000);
-INSERT INTO City VALUES (3437,'Vinnytsja','UKR','Vinnytsja',391000);
-INSERT INTO City VALUES (3438,'Makijivka','UKR','Donetsk',384000);
-INSERT INTO City VALUES (3439,'Herson','UKR','Herson',353000);
-INSERT INTO City VALUES (3440,'Sevastopol','UKR','Krim',348000);
-INSERT INTO City VALUES (3441,'Simferopol','UKR','Krim',339000);
-INSERT INTO City VALUES (3442,'Pultava [Poltava]','UKR','Pultava',313000);
-INSERT INTO City VALUES (3443,'T�ernigiv','UKR','T�ernigiv',313000);
-INSERT INTO City VALUES (3444,'T�erkasy','UKR','T�erkasy',309000);
-INSERT INTO City VALUES (3445,'Gorlivka','UKR','Donetsk',299000);
-INSERT INTO City VALUES (3446,'Zytomyr','UKR','Zytomyr',297000);
-INSERT INTO City VALUES (3447,'Sumy','UKR','Sumy',294000);
-INSERT INTO City VALUES (3448,'Dniprodzerzynsk','UKR','Dnipropetrovsk',270000);
-INSERT INTO City VALUES (3449,'Kirovograd','UKR','Kirovograd',265000);
-INSERT INTO City VALUES (3450,'Hmelnytskyi','UKR','Hmelnytskyi',262000);
-INSERT INTO City VALUES (3451,'T�ernivtsi','UKR','T�ernivtsi',259000);
-INSERT INTO City VALUES (3452,'Rivne','UKR','Rivne',245000);
-INSERT INTO City VALUES (3453,'Krement�uk','UKR','Pultava',239000);
-INSERT INTO City VALUES (3454,'Ivano-Frankivsk','UKR','Ivano-Frankivsk',237000);
-INSERT INTO City VALUES (3455,'Ternopil','UKR','Ternopil',236000);
-INSERT INTO City VALUES (3456,'Lutsk','UKR','Volynia',217000);
-INSERT INTO City VALUES (3457,'Bila Tserkva','UKR','Kiova',215000);
-INSERT INTO City VALUES (3458,'Kramatorsk','UKR','Donetsk',186000);
-INSERT INTO City VALUES (3459,'Melitopol','UKR','Zaporizzja',169000);
-INSERT INTO City VALUES (3460,'Kert�','UKR','Krim',162000);
-INSERT INTO City VALUES (3461,'Nikopol','UKR','Dnipropetrovsk',149000);
-INSERT INTO City VALUES (3462,'Berdjansk','UKR','Zaporizzja',130000);
-INSERT INTO City VALUES (3463,'Pavlograd','UKR','Dnipropetrovsk',127000);
-INSERT INTO City VALUES (3464,'Sjeverodonetsk','UKR','Lugansk',127000);
-INSERT INTO City VALUES (3465,'Slovjansk','UKR','Donetsk',127000);
-INSERT INTO City VALUES (3466,'Uzgorod','UKR','Taka-Karpatia',127000);
-INSERT INTO City VALUES (3467,'Alt�evsk','UKR','Lugansk',119000);
-INSERT INTO City VALUES (3468,'Lysyt�ansk','UKR','Lugansk',116000);
-INSERT INTO City VALUES (3469,'Jevpatorija','UKR','Krim',112000);
-INSERT INTO City VALUES (3470,'Kamjanets-Podilskyi','UKR','Hmelnytskyi',109000);
-INSERT INTO City VALUES (3471,'Jenakijeve','UKR','Donetsk',105000);
-INSERT INTO City VALUES (3472,'Krasnyi Lut�','UKR','Lugansk',101000);
-INSERT INTO City VALUES (3473,'Stahanov','UKR','Lugansk',101000);
-INSERT INTO City VALUES (3474,'Oleksandrija','UKR','Kirovograd',99000);
-INSERT INTO City VALUES (3475,'Konotop','UKR','Sumy',96000);
-INSERT INTO City VALUES (3476,'Kostjantynivka','UKR','Donetsk',95000);
-INSERT INTO City VALUES (3477,'Berdyt�iv','UKR','Zytomyr',90000);
-INSERT INTO City VALUES (3478,'Izmajil','UKR','Odesa',90000);
-INSERT INTO City VALUES (3479,'�ostka','UKR','Sumy',90000);
-INSERT INTO City VALUES (3480,'Uman','UKR','T�erkasy',90000);
-INSERT INTO City VALUES (3481,'Brovary','UKR','Kiova',89000);
-INSERT INTO City VALUES (3482,'Mukat�eve','UKR','Taka-Karpatia',89000);
-INSERT INTO City VALUES (3483,'Budapest','HUN','Budapest',1811552);
-INSERT INTO City VALUES (3484,'Debrecen','HUN','Hajd�-Bihar',203648);
-INSERT INTO City VALUES (3485,'Miskolc','HUN','Borsod-Aba�j-Zempl�n',172357);
-INSERT INTO City VALUES (3486,'Szeged','HUN','Csongr�d',158158);
-INSERT INTO City VALUES (3487,'P�cs','HUN','Baranya',157332);
-INSERT INTO City VALUES (3488,'Gy�r','HUN','Gy�r-Moson-Sopron',127119);
-INSERT INTO City VALUES (3489,'Nyiregyh�za','HUN','Szabolcs-Szatm�r-Ber',112419);
-INSERT INTO City VALUES (3490,'Kecskem�t','HUN','B�cs-Kiskun',105606);
-INSERT INTO City VALUES (3491,'Sz�kesfeh�rv�r','HUN','Fej�r',105119);
-INSERT INTO City VALUES (3492,'Montevideo','URY','Montevideo',1236000);
-INSERT INTO City VALUES (3493,'Noum�a','NCL','�',76293);
-INSERT INTO City VALUES (3494,'Auckland','NZL','Auckland',381800);
-INSERT INTO City VALUES (3495,'Christchurch','NZL','Canterbury',324200);
-INSERT INTO City VALUES (3496,'Manukau','NZL','Auckland',281800);
-INSERT INTO City VALUES (3497,'North Shore','NZL','Auckland',187700);
-INSERT INTO City VALUES (3498,'Waitakere','NZL','Auckland',170600);
-INSERT INTO City VALUES (3499,'Wellington','NZL','Wellington',166700);
-INSERT INTO City VALUES (3500,'Dunedin','NZL','Dunedin',119600);
-INSERT INTO City VALUES (3501,'Hamilton','NZL','Hamilton',117100);
-INSERT INTO City VALUES (3502,'Lower Hutt','NZL','Wellington',98100);
-INSERT INTO City VALUES (3503,'Toskent','UZB','Toskent Shahri',2117500);
-INSERT INTO City VALUES (3504,'Namangan','UZB','Namangan',370500);
-INSERT INTO City VALUES (3505,'Samarkand','UZB','Samarkand',361800);
-INSERT INTO City VALUES (3506,'Andijon','UZB','Andijon',318600);
-INSERT INTO City VALUES (3507,'Buhoro','UZB','Buhoro',237100);
-INSERT INTO City VALUES (3508,'Karsi','UZB','Qashqadaryo',194100);
-INSERT INTO City VALUES (3509,'Nukus','UZB','Karakalpakistan',194100);
-INSERT INTO City VALUES (3510,'K�kon','UZB','Fargona',190100);
-INSERT INTO City VALUES (3511,'Fargona','UZB','Fargona',180500);
-INSERT INTO City VALUES (3512,'Circik','UZB','Toskent',146400);
-INSERT INTO City VALUES (3513,'Margilon','UZB','Fargona',140800);
-INSERT INTO City VALUES (3514,'�rgenc','UZB','Khorazm',138900);
-INSERT INTO City VALUES (3515,'Angren','UZB','Toskent',128000);
-INSERT INTO City VALUES (3516,'Cizah','UZB','Cizah',124800);
-INSERT INTO City VALUES (3517,'Navoi','UZB','Navoi',116300);
-INSERT INTO City VALUES (3518,'Olmalik','UZB','Toskent',114900);
-INSERT INTO City VALUES (3519,'Termiz','UZB','Surkhondaryo',109500);
-INSERT INTO City VALUES (3520,'Minsk','BLR','Horad Minsk',1674000);
-INSERT INTO City VALUES (3521,'Gomel','BLR','Gomel',475000);
-INSERT INTO City VALUES (3522,'Mogiljov','BLR','Mogiljov',356000);
-INSERT INTO City VALUES (3523,'Vitebsk','BLR','Vitebsk',340000);
-INSERT INTO City VALUES (3524,'Grodno','BLR','Grodno',302000);
-INSERT INTO City VALUES (3525,'Brest','BLR','Brest',286000);
-INSERT INTO City VALUES (3526,'Bobruisk','BLR','Mogiljov',221000);
-INSERT INTO City VALUES (3527,'Baranovit�i','BLR','Brest',167000);
-INSERT INTO City VALUES (3528,'Borisov','BLR','Minsk',151000);
-INSERT INTO City VALUES (3529,'Pinsk','BLR','Brest',130000);
-INSERT INTO City VALUES (3530,'Or�a','BLR','Vitebsk',124000);
-INSERT INTO City VALUES (3531,'Mozyr','BLR','Gomel',110000);
-INSERT INTO City VALUES (3532,'Novopolotsk','BLR','Vitebsk',106000);
-INSERT INTO City VALUES (3533,'Lida','BLR','Grodno',101000);
-INSERT INTO City VALUES (3534,'Soligorsk','BLR','Minsk',101000);
-INSERT INTO City VALUES (3535,'Molodet�no','BLR','Minsk',97000);
-INSERT INTO City VALUES (3536,'Mata-Utu','WLF','Wallis',1137);
-INSERT INTO City VALUES (3537,'Port-Vila','VUT','Shefa',33700);
-INSERT INTO City VALUES (3538,'Citt� del Vaticano','VAT','�',455);
-INSERT INTO City VALUES (3539,'Caracas','VEN','Distrito Federal',1975294);
-INSERT INTO City VALUES (3540,'Maraca�bo','VEN','Zulia',1304776);
-INSERT INTO City VALUES (3541,'Barquisimeto','VEN','Lara',877239);
-INSERT INTO City VALUES (3542,'Valencia','VEN','Carabobo',794246);
-INSERT INTO City VALUES (3543,'Ciudad Guayana','VEN','Bol�var',663713);
-INSERT INTO City VALUES (3544,'Petare','VEN','Miranda',488868);
-INSERT INTO City VALUES (3545,'Maracay','VEN','Aragua',444443);
-INSERT INTO City VALUES (3546,'Barcelona','VEN','Anzo�tegui',322267);
-INSERT INTO City VALUES (3547,'Matur�n','VEN','Monagas',319726);
-INSERT INTO City VALUES (3548,'San Crist�bal','VEN','T�chira',319373);
-INSERT INTO City VALUES (3549,'Ciudad Bol�var','VEN','Bol�var',301107);
-INSERT INTO City VALUES (3550,'Cuman�','VEN','Sucre',293105);
-INSERT INTO City VALUES (3551,'M�rida','VEN','M�rida',224887);
-INSERT INTO City VALUES (3552,'Cabimas','VEN','Zulia',221329);
-INSERT INTO City VALUES (3553,'Barinas','VEN','Barinas',217831);
-INSERT INTO City VALUES (3554,'Turmero','VEN','Aragua',217499);
-INSERT INTO City VALUES (3555,'Baruta','VEN','Miranda',207290);
-INSERT INTO City VALUES (3556,'Puerto Cabello','VEN','Carabobo',187722);
-INSERT INTO City VALUES (3557,'Santa Ana de Coro','VEN','Falc�n',185766);
-INSERT INTO City VALUES (3558,'Los Teques','VEN','Miranda',178784);
-INSERT INTO City VALUES (3559,'Punto Fijo','VEN','Falc�n',167215);
-INSERT INTO City VALUES (3560,'Guarenas','VEN','Miranda',165889);
-INSERT INTO City VALUES (3561,'Acarigua','VEN','Portuguesa',158954);
-INSERT INTO City VALUES (3562,'Puerto La Cruz','VEN','Anzo�tegui',155700);
-INSERT INTO City VALUES (3563,'Ciudad Losada','VEN','',134501);
-INSERT INTO City VALUES (3564,'Guacara','VEN','Carabobo',131334);
-INSERT INTO City VALUES (3565,'Valera','VEN','Trujillo',130281);
-INSERT INTO City VALUES (3566,'Guanare','VEN','Portuguesa',125621);
-INSERT INTO City VALUES (3567,'Car�pano','VEN','Sucre',119639);
-INSERT INTO City VALUES (3568,'Catia La Mar','VEN','Distrito Federal',117012);
-INSERT INTO City VALUES (3569,'El Tigre','VEN','Anzo�tegui',116256);
-INSERT INTO City VALUES (3570,'Guatire','VEN','Miranda',109121);
-INSERT INTO City VALUES (3571,'Calabozo','VEN','Gu�rico',107146);
-INSERT INTO City VALUES (3572,'Pozuelos','VEN','Anzo�tegui',105690);
-INSERT INTO City VALUES (3573,'Ciudad Ojeda','VEN','Zulia',99354);
-INSERT INTO City VALUES (3574,'Ocumare del Tuy','VEN','Miranda',97168);
-INSERT INTO City VALUES (3575,'Valle de la Pascua','VEN','Gu�rico',95927);
-INSERT INTO City VALUES (3576,'Araure','VEN','Portuguesa',94269);
-INSERT INTO City VALUES (3577,'San Fernando de Apure','VEN','Apure',93809);
-INSERT INTO City VALUES (3578,'San Felipe','VEN','Yaracuy',90940);
-INSERT INTO City VALUES (3579,'El Lim�n','VEN','Aragua',90000);
-INSERT INTO City VALUES (3580,'Moscow','RUS','Moscow (City)',8389200);
-INSERT INTO City VALUES (3581,'St Petersburg','RUS','Pietari',4694000);
-INSERT INTO City VALUES (3582,'Novosibirsk','RUS','Novosibirsk',1398800);
-INSERT INTO City VALUES (3583,'Nizni Novgorod','RUS','Nizni Novgorod',1357000);
-INSERT INTO City VALUES (3584,'Jekaterinburg','RUS','Sverdlovsk',1266300);
-INSERT INTO City VALUES (3585,'Samara','RUS','Samara',1156100);
-INSERT INTO City VALUES (3586,'Omsk','RUS','Omsk',1148900);
-INSERT INTO City VALUES (3587,'Kazan','RUS','Tatarstan',1101000);
-INSERT INTO City VALUES (3588,'Ufa','RUS','Ba�kortostan',1091200);
-INSERT INTO City VALUES (3589,'T�eljabinsk','RUS','T�eljabinsk',1083200);
-INSERT INTO City VALUES (3590,'Rostov-na-Donu','RUS','Rostov-na-Donu',1012700);
-INSERT INTO City VALUES (3591,'Perm','RUS','Perm',1009700);
-INSERT INTO City VALUES (3592,'Volgograd','RUS','Volgograd',993400);
-INSERT INTO City VALUES (3593,'Voronez','RUS','Voronez',907700);
-INSERT INTO City VALUES (3594,'Krasnojarsk','RUS','Krasnojarsk',875500);
-INSERT INTO City VALUES (3595,'Saratov','RUS','Saratov',874000);
-INSERT INTO City VALUES (3596,'Toljatti','RUS','Samara',722900);
-INSERT INTO City VALUES (3597,'Uljanovsk','RUS','Uljanovsk',667400);
-INSERT INTO City VALUES (3598,'Izevsk','RUS','Udmurtia',652800);
-INSERT INTO City VALUES (3599,'Krasnodar','RUS','Krasnodar',639000);
-INSERT INTO City VALUES (3600,'Jaroslavl','RUS','Jaroslavl',616700);
-INSERT INTO City VALUES (3601,'Habarovsk','RUS','Habarovsk',609400);
-INSERT INTO City VALUES (3602,'Vladivostok','RUS','Primorje',606200);
-INSERT INTO City VALUES (3603,'Irkutsk','RUS','Irkutsk',593700);
-INSERT INTO City VALUES (3604,'Barnaul','RUS','Altai',580100);
-INSERT INTO City VALUES (3605,'Novokuznetsk','RUS','Kemerovo',561600);
-INSERT INTO City VALUES (3606,'Penza','RUS','Penza',532200);
-INSERT INTO City VALUES (3607,'Rjazan','RUS','Rjazan',529900);
-INSERT INTO City VALUES (3608,'Orenburg','RUS','Orenburg',523600);
-INSERT INTO City VALUES (3609,'Lipetsk','RUS','Lipetsk',521000);
-INSERT INTO City VALUES (3610,'Nabereznyje T�elny','RUS','Tatarstan',514700);
-INSERT INTO City VALUES (3611,'Tula','RUS','Tula',506100);
-INSERT INTO City VALUES (3612,'Tjumen','RUS','Tjumen',503400);
-INSERT INTO City VALUES (3613,'Kemerovo','RUS','Kemerovo',492700);
-INSERT INTO City VALUES (3614,'Astrahan','RUS','Astrahan',486100);
-INSERT INTO City VALUES (3615,'Tomsk','RUS','Tomsk',482100);
-INSERT INTO City VALUES (3616,'Kirov','RUS','Kirov',466200);
-INSERT INTO City VALUES (3617,'Ivanovo','RUS','Ivanovo',459200);
-INSERT INTO City VALUES (3618,'T�eboksary','RUS','T�uvassia',459200);
-INSERT INTO City VALUES (3619,'Brjansk','RUS','Brjansk',457400);
-INSERT INTO City VALUES (3620,'Tver','RUS','Tver',454900);
-INSERT INTO City VALUES (3621,'Kursk','RUS','Kursk',443500);
-INSERT INTO City VALUES (3622,'Magnitogorsk','RUS','T�eljabinsk',427900);
-INSERT INTO City VALUES (3623,'Kaliningrad','RUS','Kaliningrad',424400);
-INSERT INTO City VALUES (3624,'Nizni Tagil','RUS','Sverdlovsk',390900);
-INSERT INTO City VALUES (3625,'Murmansk','RUS','Murmansk',376300);
-INSERT INTO City VALUES (3626,'Ulan-Ude','RUS','Burjatia',370400);
-INSERT INTO City VALUES (3627,'Kurgan','RUS','Kurgan',364700);
-INSERT INTO City VALUES (3628,'Arkangeli','RUS','Arkangeli',361800);
-INSERT INTO City VALUES (3629,'Sot�i','RUS','Krasnodar',358600);
-INSERT INTO City VALUES (3630,'Smolensk','RUS','Smolensk',353400);
-INSERT INTO City VALUES (3631,'Orjol','RUS','Orjol',344500);
-INSERT INTO City VALUES (3632,'Stavropol','RUS','Stavropol',343300);
-INSERT INTO City VALUES (3633,'Belgorod','RUS','Belgorod',342000);
-INSERT INTO City VALUES (3634,'Kaluga','RUS','Kaluga',339300);
-INSERT INTO City VALUES (3635,'Vladimir','RUS','Vladimir',337100);
-INSERT INTO City VALUES (3636,'Mahat�kala','RUS','Dagestan',332800);
-INSERT INTO City VALUES (3637,'T�erepovets','RUS','Vologda',324400);
-INSERT INTO City VALUES (3638,'Saransk','RUS','Mordva',314800);
-INSERT INTO City VALUES (3639,'Tambov','RUS','Tambov',312000);
-INSERT INTO City VALUES (3640,'Vladikavkaz','RUS','North Ossetia-Alania',310100);
-INSERT INTO City VALUES (3641,'T�ita','RUS','T�ita',309900);
-INSERT INTO City VALUES (3642,'Vologda','RUS','Vologda',302500);
-INSERT INTO City VALUES (3643,'Veliki Novgorod','RUS','Novgorod',299500);
-INSERT INTO City VALUES (3644,'Komsomolsk-na-Amure','RUS','Habarovsk',291600);
-INSERT INTO City VALUES (3645,'Kostroma','RUS','Kostroma',288100);
-INSERT INTO City VALUES (3646,'Volzski','RUS','Volgograd',286900);
-INSERT INTO City VALUES (3647,'Taganrog','RUS','Rostov-na-Donu',284400);
-INSERT INTO City VALUES (3648,'Petroskoi','RUS','Karjala',282100);
-INSERT INTO City VALUES (3649,'Bratsk','RUS','Irkutsk',277600);
-INSERT INTO City VALUES (3650,'Dzerzinsk','RUS','Nizni Novgorod',277100);
-INSERT INTO City VALUES (3651,'Surgut','RUS','Hanti-Mansia',274900);
-INSERT INTO City VALUES (3652,'Orsk','RUS','Orenburg',273900);
-INSERT INTO City VALUES (3653,'Sterlitamak','RUS','Ba�kortostan',265200);
-INSERT INTO City VALUES (3654,'Angarsk','RUS','Irkutsk',264700);
-INSERT INTO City VALUES (3655,'Jo�kar-Ola','RUS','Marinmaa',249200);
-INSERT INTO City VALUES (3656,'Rybinsk','RUS','Jaroslavl',239600);
-INSERT INTO City VALUES (3657,'Prokopjevsk','RUS','Kemerovo',237300);
-INSERT INTO City VALUES (3658,'Niznevartovsk','RUS','Hanti-Mansia',233900);
-INSERT INTO City VALUES (3659,'Nalt�ik','RUS','Kabardi-Balkaria',233400);
-INSERT INTO City VALUES (3660,'Syktyvkar','RUS','Komi',229700);
-INSERT INTO City VALUES (3661,'Severodvinsk','RUS','Arkangeli',229300);
-INSERT INTO City VALUES (3662,'Bijsk','RUS','Altai',225000);
-INSERT INTO City VALUES (3663,'Niznekamsk','RUS','Tatarstan',223400);
-INSERT INTO City VALUES (3664,'Blagove�t�ensk','RUS','Amur',222000);
-INSERT INTO City VALUES (3665,'�ahty','RUS','Rostov-na-Donu',221800);
-INSERT INTO City VALUES (3666,'Staryi Oskol','RUS','Belgorod',213800);
-INSERT INTO City VALUES (3667,'Zelenograd','RUS','Moscow (City)',207100);
-INSERT INTO City VALUES (3668,'Balakovo','RUS','Saratov',206000);
-INSERT INTO City VALUES (3669,'Novorossijsk','RUS','Krasnodar',203300);
-INSERT INTO City VALUES (3670,'Pihkova','RUS','Pihkova',201500);
-INSERT INTO City VALUES (3671,'Zlatoust','RUS','T�eljabinsk',196900);
-INSERT INTO City VALUES (3672,'Jakutsk','RUS','Saha (Jakutia)',195400);
-INSERT INTO City VALUES (3673,'Podolsk','RUS','Moskova',194300);
-INSERT INTO City VALUES (3674,'Petropavlovsk-Kamt�atski','RUS','Kamt�atka',194100);
-INSERT INTO City VALUES (3675,'Kamensk-Uralski','RUS','Sverdlovsk',190600);
-INSERT INTO City VALUES (3676,'Engels','RUS','Saratov',189000);
-INSERT INTO City VALUES (3677,'Syzran','RUS','Samara',186900);
-INSERT INTO City VALUES (3678,'Grozny','RUS','T�et�enia',186000);
-INSERT INTO City VALUES (3679,'Novot�erkassk','RUS','Rostov-na-Donu',184400);
-INSERT INTO City VALUES (3680,'Berezniki','RUS','Perm',181900);
-INSERT INTO City VALUES (3681,'Juzno-Sahalinsk','RUS','Sahalin',179200);
-INSERT INTO City VALUES (3682,'Volgodonsk','RUS','Rostov-na-Donu',178200);
-INSERT INTO City VALUES (3683,'Abakan','RUS','Hakassia',169200);
-INSERT INTO City VALUES (3684,'Maikop','RUS','Adygea',167300);
-INSERT INTO City VALUES (3685,'Miass','RUS','T�eljabinsk',166200);
-INSERT INTO City VALUES (3686,'Armavir','RUS','Krasnodar',164900);
-INSERT INTO City VALUES (3687,'Ljubertsy','RUS','Moskova',163900);
-INSERT INTO City VALUES (3688,'Rubtsovsk','RUS','Altai',162600);
-INSERT INTO City VALUES (3689,'Kovrov','RUS','Vladimir',159900);
-INSERT INTO City VALUES (3690,'Nahodka','RUS','Primorje',157700);
-INSERT INTO City VALUES (3691,'Ussurijsk','RUS','Primorje',157300);
-INSERT INTO City VALUES (3692,'Salavat','RUS','Ba�kortostan',156800);
-INSERT INTO City VALUES (3693,'Myti�t�i','RUS','Moskova',155700);
-INSERT INTO City VALUES (3694,'Kolomna','RUS','Moskova',150700);
-INSERT INTO City VALUES (3695,'Elektrostal','RUS','Moskova',147000);
-INSERT INTO City VALUES (3696,'Murom','RUS','Vladimir',142400);
-INSERT INTO City VALUES (3697,'Kolpino','RUS','Pietari',141200);
-INSERT INTO City VALUES (3698,'Norilsk','RUS','Krasnojarsk',140800);
-INSERT INTO City VALUES (3699,'Almetjevsk','RUS','Tatarstan',140700);
-INSERT INTO City VALUES (3700,'Novomoskovsk','RUS','Tula',138100);
-INSERT INTO City VALUES (3701,'Dimitrovgrad','RUS','Uljanovsk',137000);
-INSERT INTO City VALUES (3702,'Pervouralsk','RUS','Sverdlovsk',136100);
-INSERT INTO City VALUES (3703,'Himki','RUS','Moskova',133700);
-INSERT INTO City VALUES (3704,'Bala�iha','RUS','Moskova',132900);
-INSERT INTO City VALUES (3705,'Nevinnomyssk','RUS','Stavropol',132600);
-INSERT INTO City VALUES (3706,'Pjatigorsk','RUS','Stavropol',132500);
-INSERT INTO City VALUES (3707,'Korolev','RUS','Moskova',132400);
-INSERT INTO City VALUES (3708,'Serpuhov','RUS','Moskova',132000);
-INSERT INTO City VALUES (3709,'Odintsovo','RUS','Moskova',127400);
-INSERT INTO City VALUES (3710,'Orehovo-Zujevo','RUS','Moskova',124900);
-INSERT INTO City VALUES (3711,'Kamy�in','RUS','Volgograd',124600);
-INSERT INTO City VALUES (3712,'Novot�eboksarsk','RUS','T�uvassia',123400);
-INSERT INTO City VALUES (3713,'T�erkessk','RUS','Karat�ai-T�erkessia',121700);
-INSERT INTO City VALUES (3714,'At�insk','RUS','Krasnojarsk',121600);
-INSERT INTO City VALUES (3715,'Magadan','RUS','Magadan',121000);
-INSERT INTO City VALUES (3716,'Mit�urinsk','RUS','Tambov',120700);
-INSERT INTO City VALUES (3717,'Kislovodsk','RUS','Stavropol',120400);
-INSERT INTO City VALUES (3718,'Jelets','RUS','Lipetsk',119400);
-INSERT INTO City VALUES (3719,'Seversk','RUS','Tomsk',118600);
-INSERT INTO City VALUES (3720,'Noginsk','RUS','Moskova',117200);
-INSERT INTO City VALUES (3721,'Velikije Luki','RUS','Pihkova',116300);
-INSERT INTO City VALUES (3722,'Novokuiby�evsk','RUS','Samara',116200);
-INSERT INTO City VALUES (3723,'Neftekamsk','RUS','Ba�kortostan',115700);
-INSERT INTO City VALUES (3724,'Leninsk-Kuznetski','RUS','Kemerovo',113800);
-INSERT INTO City VALUES (3725,'Oktjabrski','RUS','Ba�kortostan',111500);
-INSERT INTO City VALUES (3726,'Sergijev Posad','RUS','Moskova',111100);
-INSERT INTO City VALUES (3727,'Arzamas','RUS','Nizni Novgorod',110700);
-INSERT INTO City VALUES (3728,'Kiseljovsk','RUS','Kemerovo',110000);
-INSERT INTO City VALUES (3729,'Novotroitsk','RUS','Orenburg',109600);
-INSERT INTO City VALUES (3730,'Obninsk','RUS','Kaluga',108300);
-INSERT INTO City VALUES (3731,'Kansk','RUS','Krasnojarsk',107400);
-INSERT INTO City VALUES (3732,'Glazov','RUS','Udmurtia',106300);
-INSERT INTO City VALUES (3733,'Solikamsk','RUS','Perm',106000);
-INSERT INTO City VALUES (3734,'Sarapul','RUS','Udmurtia',105700);
-INSERT INTO City VALUES (3735,'Ust-Ilimsk','RUS','Irkutsk',105200);
-INSERT INTO City VALUES (3736,'�t�olkovo','RUS','Moskova',104900);
-INSERT INTO City VALUES (3737,'Mezduret�ensk','RUS','Kemerovo',104400);
-INSERT INTO City VALUES (3738,'Usolje-Sibirskoje','RUS','Irkutsk',103500);
-INSERT INTO City VALUES (3739,'Elista','RUS','Kalmykia',103300);
-INSERT INTO City VALUES (3740,'Novo�ahtinsk','RUS','Rostov-na-Donu',101900);
-INSERT INTO City VALUES (3741,'Votkinsk','RUS','Udmurtia',101700);
-INSERT INTO City VALUES (3742,'Kyzyl','RUS','Tyva',101100);
-INSERT INTO City VALUES (3743,'Serov','RUS','Sverdlovsk',100400);
-INSERT INTO City VALUES (3744,'Zelenodolsk','RUS','Tatarstan',100200);
-INSERT INTO City VALUES (3745,'Zeleznodoroznyi','RUS','Moskova',100100);
-INSERT INTO City VALUES (3746,'Kine�ma','RUS','Ivanovo',100000);
-INSERT INTO City VALUES (3747,'Kuznetsk','RUS','Penza',98200);
-INSERT INTO City VALUES (3748,'Uhta','RUS','Komi',98000);
-INSERT INTO City VALUES (3749,'Jessentuki','RUS','Stavropol',97900);
-INSERT INTO City VALUES (3750,'Tobolsk','RUS','Tjumen',97600);
-INSERT INTO City VALUES (3751,'Neftejugansk','RUS','Hanti-Mansia',97400);
-INSERT INTO City VALUES (3752,'Bataisk','RUS','Rostov-na-Donu',97300);
-INSERT INTO City VALUES (3753,'Nojabrsk','RUS','Yamalin Nenetsia',97300);
-INSERT INTO City VALUES (3754,'Bala�ov','RUS','Saratov',97100);
-INSERT INTO City VALUES (3755,'Zeleznogorsk','RUS','Kursk',96900);
-INSERT INTO City VALUES (3756,'Zukovski','RUS','Moskova',96500);
-INSERT INTO City VALUES (3757,'Anzero-Sudzensk','RUS','Kemerovo',96100);
-INSERT INTO City VALUES (3758,'Bugulma','RUS','Tatarstan',94100);
-INSERT INTO City VALUES (3759,'Zeleznogorsk','RUS','Krasnojarsk',94000);
-INSERT INTO City VALUES (3760,'Novouralsk','RUS','Sverdlovsk',93300);
-INSERT INTO City VALUES (3761,'Pu�kin','RUS','Pietari',92900);
-INSERT INTO City VALUES (3762,'Vorkuta','RUS','Komi',92600);
-INSERT INTO City VALUES (3763,'Derbent','RUS','Dagestan',92300);
-INSERT INTO City VALUES (3764,'Kirovo-T�epetsk','RUS','Kirov',91600);
-INSERT INTO City VALUES (3765,'Krasnogorsk','RUS','Moskova',91000);
-INSERT INTO City VALUES (3766,'Klin','RUS','Moskova',90000);
-INSERT INTO City VALUES (3767,'T�aikovski','RUS','Perm',90000);
-INSERT INTO City VALUES (3768,'Novyi Urengoi','RUS','Yamalin Nenetsia',89800);
-INSERT INTO City VALUES (3769,'Ho Chi Minh City','VNM','Ho Chi Minh City',3980000);
-INSERT INTO City VALUES (3770,'Hanoi','VNM','Hanoi',1410000);
-INSERT INTO City VALUES (3771,'Haiphong','VNM','Haiphong',783133);
-INSERT INTO City VALUES (3772,'Da Nang','VNM','Quang Nam-Da Nang',382674);
-INSERT INTO City VALUES (3773,'Bi�n Hoa','VNM','Dong Nai',282095);
-INSERT INTO City VALUES (3774,'Nha Trang','VNM','Khanh Hoa',221331);
-INSERT INTO City VALUES (3775,'Hue','VNM','Thua Thien-Hue',219149);
-INSERT INTO City VALUES (3776,'Can Tho','VNM','Can Tho',215587);
-INSERT INTO City VALUES (3777,'Cam Pha','VNM','Quang Binh',209086);
-INSERT INTO City VALUES (3778,'Nam Dinh','VNM','Nam Ha',171699);
-INSERT INTO City VALUES (3779,'Quy Nhon','VNM','Binh Dinh',163385);
-INSERT INTO City VALUES (3780,'Vung Tau','VNM','Ba Ria-Vung Tau',145145);
-INSERT INTO City VALUES (3781,'Rach Gia','VNM','Kien Giang',141132);
-INSERT INTO City VALUES (3782,'Long Xuyen','VNM','An Giang',132681);
-INSERT INTO City VALUES (3783,'Thai Nguyen','VNM','Bac Thai',127643);
-INSERT INTO City VALUES (3784,'Hong Gai','VNM','Quang Ninh',127484);
-INSERT INTO City VALUES (3785,'Phan Thi�t','VNM','Binh Thuan',114236);
-INSERT INTO City VALUES (3786,'Cam Ranh','VNM','Khanh Hoa',114041);
-INSERT INTO City VALUES (3787,'Vinh','VNM','Nghe An',112455);
-INSERT INTO City VALUES (3788,'My Tho','VNM','Tien Giang',108404);
-INSERT INTO City VALUES (3789,'Da Lat','VNM','Lam Dong',106409);
-INSERT INTO City VALUES (3790,'Buon Ma Thuot','VNM','Dac Lac',97044);
-INSERT INTO City VALUES (3791,'Tallinn','EST','Harjumaa',403981);
-INSERT INTO City VALUES (3792,'Tartu','EST','Tartumaa',101246);
-INSERT INTO City VALUES (3793,'New York','USA','New York',8008278);
-INSERT INTO City VALUES (3794,'Los Angeles','USA','California',3694820);
-INSERT INTO City VALUES (3795,'Chicago','USA','Illinois',2896016);
-INSERT INTO City VALUES (3796,'Houston','USA','Texas',1953631);
-INSERT INTO City VALUES (3797,'Philadelphia','USA','Pennsylvania',1517550);
-INSERT INTO City VALUES (3798,'Phoenix','USA','Arizona',1321045);
-INSERT INTO City VALUES (3799,'San Diego','USA','California',1223400);
-INSERT INTO City VALUES (3800,'Dallas','USA','Texas',1188580);
-INSERT INTO City VALUES (3801,'San Antonio','USA','Texas',1144646);
-INSERT INTO City VALUES (3802,'Detroit','USA','Michigan',951270);
-INSERT INTO City VALUES (3803,'San Jose','USA','California',894943);
-INSERT INTO City VALUES (3804,'Indianapolis','USA','Indiana',791926);
-INSERT INTO City VALUES (3805,'San Francisco','USA','California',776733);
-INSERT INTO City VALUES (3806,'Jacksonville','USA','Florida',735167);
-INSERT INTO City VALUES (3807,'Columbus','USA','Ohio',711470);
-INSERT INTO City VALUES (3808,'Austin','USA','Texas',656562);
-INSERT INTO City VALUES (3809,'Baltimore','USA','Maryland',651154);
-INSERT INTO City VALUES (3810,'Memphis','USA','Tennessee',650100);
-INSERT INTO City VALUES (3811,'Milwaukee','USA','Wisconsin',596974);
-INSERT INTO City VALUES (3812,'Boston','USA','Massachusetts',589141);
-INSERT INTO City VALUES (3813,'Washington','USA','District of Columbia',572059);
-INSERT INTO City VALUES (3814,'Nashville-Davidson','USA','Tennessee',569891);
-INSERT INTO City VALUES (3815,'El Paso','USA','Texas',563662);
-INSERT INTO City VALUES (3816,'Seattle','USA','Washington',563374);
-INSERT INTO City VALUES (3817,'Denver','USA','Colorado',554636);
-INSERT INTO City VALUES (3818,'Charlotte','USA','North Carolina',540828);
-INSERT INTO City VALUES (3819,'Fort Worth','USA','Texas',534694);
-INSERT INTO City VALUES (3820,'Portland','USA','Oregon',529121);
-INSERT INTO City VALUES (3821,'Oklahoma City','USA','Oklahoma',506132);
-INSERT INTO City VALUES (3822,'Tucson','USA','Arizona',486699);
-INSERT INTO City VALUES (3823,'New Orleans','USA','Louisiana',484674);
-INSERT INTO City VALUES (3824,'Las Vegas','USA','Nevada',478434);
-INSERT INTO City VALUES (3825,'Cleveland','USA','Ohio',478403);
-INSERT INTO City VALUES (3826,'Long Beach','USA','California',461522);
-INSERT INTO City VALUES (3827,'Albuquerque','USA','New Mexico',448607);
-INSERT INTO City VALUES (3828,'Kansas City','USA','Missouri',441545);
-INSERT INTO City VALUES (3829,'Fresno','USA','California',427652);
-INSERT INTO City VALUES (3830,'Virginia Beach','USA','Virginia',425257);
-INSERT INTO City VALUES (3831,'Atlanta','USA','Georgia',416474);
-INSERT INTO City VALUES (3832,'Sacramento','USA','California',407018);
-INSERT INTO City VALUES (3833,'Oakland','USA','California',399484);
-INSERT INTO City VALUES (3834,'Mesa','USA','Arizona',396375);
-INSERT INTO City VALUES (3835,'Tulsa','USA','Oklahoma',393049);
-INSERT INTO City VALUES (3836,'Omaha','USA','Nebraska',390007);
-INSERT INTO City VALUES (3837,'Minneapolis','USA','Minnesota',382618);
-INSERT INTO City VALUES (3838,'Honolulu','USA','Hawaii',371657);
-INSERT INTO City VALUES (3839,'Miami','USA','Florida',362470);
-INSERT INTO City VALUES (3840,'Colorado Springs','USA','Colorado',360890);
-INSERT INTO City VALUES (3841,'Saint Louis','USA','Missouri',348189);
-INSERT INTO City VALUES (3842,'Wichita','USA','Kansas',344284);
-INSERT INTO City VALUES (3843,'Santa Ana','USA','California',337977);
-INSERT INTO City VALUES (3844,'Pittsburgh','USA','Pennsylvania',334563);
-INSERT INTO City VALUES (3845,'Arlington','USA','Texas',332969);
-INSERT INTO City VALUES (3846,'Cincinnati','USA','Ohio',331285);
-INSERT INTO City VALUES (3847,'Anaheim','USA','California',328014);
-INSERT INTO City VALUES (3848,'Toledo','USA','Ohio',313619);
-INSERT INTO City VALUES (3849,'Tampa','USA','Florida',303447);
-INSERT INTO City VALUES (3850,'Buffalo','USA','New York',292648);
-INSERT INTO City VALUES (3851,'Saint Paul','USA','Minnesota',287151);
-INSERT INTO City VALUES (3852,'Corpus Christi','USA','Texas',277454);
-INSERT INTO City VALUES (3853,'Aurora','USA','Colorado',276393);
-INSERT INTO City VALUES (3854,'Raleigh','USA','North Carolina',276093);
-INSERT INTO City VALUES (3855,'Newark','USA','New Jersey',273546);
-INSERT INTO City VALUES (3856,'Lexington-Fayette','USA','Kentucky',260512);
-INSERT INTO City VALUES (3857,'Anchorage','USA','Alaska',260283);
-INSERT INTO City VALUES (3858,'Louisville','USA','Kentucky',256231);
-INSERT INTO City VALUES (3859,'Riverside','USA','California',255166);
-INSERT INTO City VALUES (3860,'Saint Petersburg','USA','Florida',248232);
-INSERT INTO City VALUES (3861,'Bakersfield','USA','California',247057);
-INSERT INTO City VALUES (3862,'Stockton','USA','California',243771);
-INSERT INTO City VALUES (3863,'Birmingham','USA','Alabama',242820);
-INSERT INTO City VALUES (3864,'Jersey City','USA','New Jersey',240055);
-INSERT INTO City VALUES (3865,'Norfolk','USA','Virginia',234403);
-INSERT INTO City VALUES (3866,'Baton Rouge','USA','Louisiana',227818);
-INSERT INTO City VALUES (3867,'Hialeah','USA','Florida',226419);
-INSERT INTO City VALUES (3868,'Lincoln','USA','Nebraska',225581);
-INSERT INTO City VALUES (3869,'Greensboro','USA','North Carolina',223891);
-INSERT INTO City VALUES (3870,'Plano','USA','Texas',222030);
-INSERT INTO City VALUES (3871,'Rochester','USA','New York',219773);
-INSERT INTO City VALUES (3872,'Glendale','USA','Arizona',218812);
-INSERT INTO City VALUES (3873,'Akron','USA','Ohio',217074);
-INSERT INTO City VALUES (3874,'Garland','USA','Texas',215768);
-INSERT INTO City VALUES (3875,'Madison','USA','Wisconsin',208054);
-INSERT INTO City VALUES (3876,'Fort Wayne','USA','Indiana',205727);
-INSERT INTO City VALUES (3877,'Fremont','USA','California',203413);
-INSERT INTO City VALUES (3878,'Scottsdale','USA','Arizona',202705);
-INSERT INTO City VALUES (3879,'Montgomery','USA','Alabama',201568);
-INSERT INTO City VALUES (3880,'Shreveport','USA','Louisiana',200145);
-INSERT INTO City VALUES (3881,'Augusta-Richmond County','USA','Georgia',199775);
-INSERT INTO City VALUES (3882,'Lubbock','USA','Texas',199564);
-INSERT INTO City VALUES (3883,'Chesapeake','USA','Virginia',199184);
-INSERT INTO City VALUES (3884,'Mobile','USA','Alabama',198915);
-INSERT INTO City VALUES (3885,'Des Moines','USA','Iowa',198682);
-INSERT INTO City VALUES (3886,'Grand Rapids','USA','Michigan',197800);
-INSERT INTO City VALUES (3887,'Richmond','USA','Virginia',197790);
-INSERT INTO City VALUES (3888,'Yonkers','USA','New York',196086);
-INSERT INTO City VALUES (3889,'Spokane','USA','Washington',195629);
-INSERT INTO City VALUES (3890,'Glendale','USA','California',194973);
-INSERT INTO City VALUES (3891,'Tacoma','USA','Washington',193556);
-INSERT INTO City VALUES (3892,'Irving','USA','Texas',191615);
-INSERT INTO City VALUES (3893,'Huntington Beach','USA','California',189594);
-INSERT INTO City VALUES (3894,'Modesto','USA','California',188856);
-INSERT INTO City VALUES (3895,'Durham','USA','North Carolina',187035);
-INSERT INTO City VALUES (3896,'Columbus','USA','Georgia',186291);
-INSERT INTO City VALUES (3897,'Orlando','USA','Florida',185951);
-INSERT INTO City VALUES (3898,'Boise City','USA','Idaho',185787);
-INSERT INTO City VALUES (3899,'Winston-Salem','USA','North Carolina',185776);
-INSERT INTO City VALUES (3900,'San Bernardino','USA','California',185401);
-INSERT INTO City VALUES (3901,'Jackson','USA','Mississippi',184256);
-INSERT INTO City VALUES (3902,'Little Rock','USA','Arkansas',183133);
-INSERT INTO City VALUES (3903,'Salt Lake City','USA','Utah',181743);
-INSERT INTO City VALUES (3904,'Reno','USA','Nevada',180480);
-INSERT INTO City VALUES (3905,'Newport News','USA','Virginia',180150);
-INSERT INTO City VALUES (3906,'Chandler','USA','Arizona',176581);
-INSERT INTO City VALUES (3907,'Laredo','USA','Texas',176576);
-INSERT INTO City VALUES (3908,'Henderson','USA','Nevada',175381);
-INSERT INTO City VALUES (3909,'Arlington','USA','Virginia',174838);
-INSERT INTO City VALUES (3910,'Knoxville','USA','Tennessee',173890);
-INSERT INTO City VALUES (3911,'Amarillo','USA','Texas',173627);
-INSERT INTO City VALUES (3912,'Providence','USA','Rhode Island',173618);
-INSERT INTO City VALUES (3913,'Chula Vista','USA','California',173556);
-INSERT INTO City VALUES (3914,'Worcester','USA','Massachusetts',172648);
-INSERT INTO City VALUES (3915,'Oxnard','USA','California',170358);
-INSERT INTO City VALUES (3916,'Dayton','USA','Ohio',166179);
-INSERT INTO City VALUES (3917,'Garden Grove','USA','California',165196);
-INSERT INTO City VALUES (3918,'Oceanside','USA','California',161029);
-INSERT INTO City VALUES (3919,'Tempe','USA','Arizona',158625);
-INSERT INTO City VALUES (3920,'Huntsville','USA','Alabama',158216);
-INSERT INTO City VALUES (3921,'Ontario','USA','California',158007);
-INSERT INTO City VALUES (3922,'Chattanooga','USA','Tennessee',155554);
-INSERT INTO City VALUES (3923,'Fort Lauderdale','USA','Florida',152397);
-INSERT INTO City VALUES (3924,'Springfield','USA','Massachusetts',152082);
-INSERT INTO City VALUES (3925,'Springfield','USA','Missouri',151580);
-INSERT INTO City VALUES (3926,'Santa Clarita','USA','California',151088);
-INSERT INTO City VALUES (3927,'Salinas','USA','California',151060);
-INSERT INTO City VALUES (3928,'Tallahassee','USA','Florida',150624);
-INSERT INTO City VALUES (3929,'Rockford','USA','Illinois',150115);
-INSERT INTO City VALUES (3930,'Pomona','USA','California',149473);
-INSERT INTO City VALUES (3931,'Metairie','USA','Louisiana',149428);
-INSERT INTO City VALUES (3932,'Paterson','USA','New Jersey',149222);
-INSERT INTO City VALUES (3933,'Overland Park','USA','Kansas',149080);
-INSERT INTO City VALUES (3934,'Santa Rosa','USA','California',147595);
-INSERT INTO City VALUES (3935,'Syracuse','USA','New York',147306);
-INSERT INTO City VALUES (3936,'Kansas City','USA','Kansas',146866);
-INSERT INTO City VALUES (3937,'Hampton','USA','Virginia',146437);
-INSERT INTO City VALUES (3938,'Lakewood','USA','Colorado',144126);
-INSERT INTO City VALUES (3939,'Vancouver','USA','Washington',143560);
-INSERT INTO City VALUES (3940,'Irvine','USA','California',143072);
-INSERT INTO City VALUES (3941,'Aurora','USA','Illinois',142990);
-INSERT INTO City VALUES (3942,'Moreno Valley','USA','California',142381);
-INSERT INTO City VALUES (3943,'Pasadena','USA','California',141674);
-INSERT INTO City VALUES (3944,'Hayward','USA','California',140030);
-INSERT INTO City VALUES (3945,'Brownsville','USA','Texas',139722);
-INSERT INTO City VALUES (3946,'Bridgeport','USA','Connecticut',139529);
-INSERT INTO City VALUES (3947,'Hollywood','USA','Florida',139357);
-INSERT INTO City VALUES (3948,'Warren','USA','Michigan',138247);
-INSERT INTO City VALUES (3949,'Torrance','USA','California',137946);
-INSERT INTO City VALUES (3950,'Eugene','USA','Oregon',137893);
-INSERT INTO City VALUES (3951,'Pembroke Pines','USA','Florida',137427);
-INSERT INTO City VALUES (3952,'Salem','USA','Oregon',136924);
-INSERT INTO City VALUES (3953,'Pasadena','USA','Texas',133936);
-INSERT INTO City VALUES (3954,'Escondido','USA','California',133559);
-INSERT INTO City VALUES (3955,'Sunnyvale','USA','California',131760);
-INSERT INTO City VALUES (3956,'Savannah','USA','Georgia',131510);
-INSERT INTO City VALUES (3957,'Fontana','USA','California',128929);
-INSERT INTO City VALUES (3958,'Orange','USA','California',128821);
-INSERT INTO City VALUES (3959,'Naperville','USA','Illinois',128358);
-INSERT INTO City VALUES (3960,'Alexandria','USA','Virginia',128283);
-INSERT INTO City VALUES (3961,'Rancho Cucamonga','USA','California',127743);
-INSERT INTO City VALUES (3962,'Grand Prairie','USA','Texas',127427);
-INSERT INTO City VALUES (3963,'East Los Angeles','USA','California',126379);
-INSERT INTO City VALUES (3964,'Fullerton','USA','California',126003);
-INSERT INTO City VALUES (3965,'Corona','USA','California',124966);
-INSERT INTO City VALUES (3966,'Flint','USA','Michigan',124943);
-INSERT INTO City VALUES (3967,'Paradise','USA','Nevada',124682);
-INSERT INTO City VALUES (3968,'Mesquite','USA','Texas',124523);
-INSERT INTO City VALUES (3969,'Sterling Heights','USA','Michigan',124471);
-INSERT INTO City VALUES (3970,'Sioux Falls','USA','South Dakota',123975);
-INSERT INTO City VALUES (3971,'New Haven','USA','Connecticut',123626);
-INSERT INTO City VALUES (3972,'Topeka','USA','Kansas',122377);
-INSERT INTO City VALUES (3973,'Concord','USA','California',121780);
-INSERT INTO City VALUES (3974,'Evansville','USA','Indiana',121582);
-INSERT INTO City VALUES (3975,'Hartford','USA','Connecticut',121578);
-INSERT INTO City VALUES (3976,'Fayetteville','USA','North Carolina',121015);
-INSERT INTO City VALUES (3977,'Cedar Rapids','USA','Iowa',120758);
-INSERT INTO City VALUES (3978,'Elizabeth','USA','New Jersey',120568);
-INSERT INTO City VALUES (3979,'Lansing','USA','Michigan',119128);
-INSERT INTO City VALUES (3980,'Lancaster','USA','California',118718);
-INSERT INTO City VALUES (3981,'Fort Collins','USA','Colorado',118652);
-INSERT INTO City VALUES (3982,'Coral Springs','USA','Florida',117549);
-INSERT INTO City VALUES (3983,'Stamford','USA','Connecticut',117083);
-INSERT INTO City VALUES (3984,'Thousand Oaks','USA','California',117005);
-INSERT INTO City VALUES (3985,'Vallejo','USA','California',116760);
-INSERT INTO City VALUES (3986,'Palmdale','USA','California',116670);
-INSERT INTO City VALUES (3987,'Columbia','USA','South Carolina',116278);
-INSERT INTO City VALUES (3988,'El Monte','USA','California',115965);
-INSERT INTO City VALUES (3989,'Abilene','USA','Texas',115930);
-INSERT INTO City VALUES (3990,'North Las Vegas','USA','Nevada',115488);
-INSERT INTO City VALUES (3991,'Ann Arbor','USA','Michigan',114024);
-INSERT INTO City VALUES (3992,'Beaumont','USA','Texas',113866);
-INSERT INTO City VALUES (3993,'Waco','USA','Texas',113726);
-INSERT INTO City VALUES (3994,'Macon','USA','Georgia',113336);
-INSERT INTO City VALUES (3995,'Independence','USA','Missouri',113288);
-INSERT INTO City VALUES (3996,'Peoria','USA','Illinois',112936);
-INSERT INTO City VALUES (3997,'Inglewood','USA','California',112580);
-INSERT INTO City VALUES (3998,'Springfield','USA','Illinois',111454);
-INSERT INTO City VALUES (3999,'Simi Valley','USA','California',111351);
-INSERT INTO City VALUES (4000,'Lafayette','USA','Louisiana',110257);
-INSERT INTO City VALUES (4001,'Gilbert','USA','Arizona',109697);
-INSERT INTO City VALUES (4002,'Carrollton','USA','Texas',109576);
-INSERT INTO City VALUES (4003,'Bellevue','USA','Washington',109569);
-INSERT INTO City VALUES (4004,'West Valley City','USA','Utah',108896);
-INSERT INTO City VALUES (4005,'Clarksville','USA','Tennessee',108787);
-INSERT INTO City VALUES (4006,'Costa Mesa','USA','California',108724);
-INSERT INTO City VALUES (4007,'Peoria','USA','Arizona',108364);
-INSERT INTO City VALUES (4008,'South Bend','USA','Indiana',107789);
-INSERT INTO City VALUES (4009,'Downey','USA','California',107323);
-INSERT INTO City VALUES (4010,'Waterbury','USA','Connecticut',107271);
-INSERT INTO City VALUES (4011,'Manchester','USA','New Hampshire',107006);
-INSERT INTO City VALUES (4012,'Allentown','USA','Pennsylvania',106632);
-INSERT INTO City VALUES (4013,'McAllen','USA','Texas',106414);
-INSERT INTO City VALUES (4014,'Joliet','USA','Illinois',106221);
-INSERT INTO City VALUES (4015,'Lowell','USA','Massachusetts',105167);
-INSERT INTO City VALUES (4016,'Provo','USA','Utah',105166);
-INSERT INTO City VALUES (4017,'West Covina','USA','California',105080);
-INSERT INTO City VALUES (4018,'Wichita Falls','USA','Texas',104197);
-INSERT INTO City VALUES (4019,'Erie','USA','Pennsylvania',103717);
-INSERT INTO City VALUES (4020,'Daly City','USA','California',103621);
-INSERT INTO City VALUES (4021,'Citrus Heights','USA','California',103455);
-INSERT INTO City VALUES (4022,'Norwalk','USA','California',103298);
-INSERT INTO City VALUES (4023,'Gary','USA','Indiana',102746);
-INSERT INTO City VALUES (4024,'Berkeley','USA','California',102743);
-INSERT INTO City VALUES (4025,'Santa Clara','USA','California',102361);
-INSERT INTO City VALUES (4026,'Green Bay','USA','Wisconsin',102313);
-INSERT INTO City VALUES (4027,'Cape Coral','USA','Florida',102286);
-INSERT INTO City VALUES (4028,'Arvada','USA','Colorado',102153);
-INSERT INTO City VALUES (4029,'Pueblo','USA','Colorado',102121);
-INSERT INTO City VALUES (4030,'Sandy','USA','Utah',101853);
-INSERT INTO City VALUES (4031,'Athens-Clarke County','USA','Georgia',101489);
-INSERT INTO City VALUES (4032,'Cambridge','USA','Massachusetts',101355);
-INSERT INTO City VALUES (4033,'Westminster','USA','Colorado',100940);
-INSERT INTO City VALUES (4034,'San Buenaventura','USA','California',100916);
-INSERT INTO City VALUES (4035,'Portsmouth','USA','Virginia',100565);
-INSERT INTO City VALUES (4036,'Livonia','USA','Michigan',100545);
-INSERT INTO City VALUES (4037,'Burbank','USA','California',100316);
-INSERT INTO City VALUES (4038,'Clearwater','USA','Florida',99936);
-INSERT INTO City VALUES (4039,'Midland','USA','Texas',98293);
-INSERT INTO City VALUES (4040,'Davenport','USA','Iowa',98256);
-INSERT INTO City VALUES (4041,'Mission Viejo','USA','California',98049);
-INSERT INTO City VALUES (4042,'Miami Beach','USA','Florida',97855);
-INSERT INTO City VALUES (4043,'Sunrise Manor','USA','Nevada',95362);
-INSERT INTO City VALUES (4044,'New Bedford','USA','Massachusetts',94780);
-INSERT INTO City VALUES (4045,'El Cajon','USA','California',94578);
-INSERT INTO City VALUES (4046,'Norman','USA','Oklahoma',94193);
-INSERT INTO City VALUES (4047,'Richmond','USA','California',94100);
-INSERT INTO City VALUES (4048,'Albany','USA','New York',93994);
-INSERT INTO City VALUES (4049,'Brockton','USA','Massachusetts',93653);
-INSERT INTO City VALUES (4050,'Roanoke','USA','Virginia',93357);
-INSERT INTO City VALUES (4051,'Billings','USA','Montana',92988);
-INSERT INTO City VALUES (4052,'Compton','USA','California',92864);
-INSERT INTO City VALUES (4053,'Gainesville','USA','Florida',92291);
-INSERT INTO City VALUES (4054,'Fairfield','USA','California',92256);
-INSERT INTO City VALUES (4055,'Arden-Arcade','USA','California',92040);
-INSERT INTO City VALUES (4056,'San Mateo','USA','California',91799);
-INSERT INTO City VALUES (4057,'Visalia','USA','California',91762);
-INSERT INTO City VALUES (4058,'Boulder','USA','Colorado',91238);
-INSERT INTO City VALUES (4059,'Cary','USA','North Carolina',91213);
-INSERT INTO City VALUES (4060,'Santa Monica','USA','California',91084);
-INSERT INTO City VALUES (4061,'Fall River','USA','Massachusetts',90555);
-INSERT INTO City VALUES (4062,'Kenosha','USA','Wisconsin',89447);
-INSERT INTO City VALUES (4063,'Elgin','USA','Illinois',89408);
-INSERT INTO City VALUES (4064,'Odessa','USA','Texas',89293);
-INSERT INTO City VALUES (4065,'Carson','USA','California',89089);
-INSERT INTO City VALUES (4066,'Charleston','USA','South Carolina',89063);
-INSERT INTO City VALUES (4067,'Charlotte Amalie','VIR','St Thomas',13000);
-INSERT INTO City VALUES (4068,'Harare','ZWE','Harare',1410000);
-INSERT INTO City VALUES (4069,'Bulawayo','ZWE','Bulawayo',621742);
-INSERT INTO City VALUES (4070,'Chitungwiza','ZWE','Harare',274912);
-INSERT INTO City VALUES (4071,'Mount Darwin','ZWE','Harare',164362);
-INSERT INTO City VALUES (4072,'Mutare','ZWE','Manicaland',131367);
-INSERT INTO City VALUES (4073,'Gweru','ZWE','Midlands',128037);
-INSERT INTO City VALUES (4074,'Gaza','PSE','Gaza',353632);
-INSERT INTO City VALUES (4075,'Khan Yunis','PSE','Khan Yunis',123175);
-INSERT INTO City VALUES (4076,'Hebron','PSE','Hebron',119401);
-INSERT INTO City VALUES (4077,'Jabaliya','PSE','North Gaza',113901);
-INSERT INTO City VALUES (4078,'Nablus','PSE','Nablus',100231);
-INSERT INTO City VALUES (4079,'Rafah','PSE','Rafah',92020);
-
-/*!40000 ALTER TABLE City ENABLE KEYS */;
-
---
--- Table structure for table 'Country'
---
-
-CREATE TABLE Country (
- Code char(3) NOT NULL default '',
- Name char(52) NOT NULL default '',
- Continent enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') NOT NULL default 'Asia',
- Region char(26) NOT NULL default '',
- SurfaceArea float(10,2) NOT NULL default '0.00',
- IndepYear smallint(6) default NULL,
- Population int(11) NOT NULL default '0',
- LifeExpectancy float(3,1) default NULL,
- GNP float(10,2) default NULL,
- GNPOld float(10,2) default NULL,
- LocalName char(45) NOT NULL default '',
- GovernmentForm char(45) NOT NULL default '',
- HeadOfState char(60) default NULL,
- Capital int(11) default NULL,
- Code2 char(2) NOT NULL default '',
- PRIMARY KEY (Code)
-) TYPE=MyISAM;
-
-/*!40000 ALTER TABLE Country DISABLE KEYS */;
-
---
--- Dumping data for table 'Country'
---
-
-
-INSERT INTO Country VALUES ('AFG','Afghanistan','Asia','Southern and Central Asia',652090.00,1919,22720000,45.9,5976.00,NULL,'Afganistan/Afqanestan','Islamic Emirate','Mohammad Omar',1,'AF');
-INSERT INTO Country VALUES ('NLD','Netherlands','Europe','Western Europe',41526.00,1581,15864000,78.3,371362.00,360478.00,'Nederland','Constitutional Monarchy','Beatrix',5,'NL');
-INSERT INTO Country VALUES ('ANT','Netherlands Antilles','North America','Caribbean',800.00,0,217000,74.7,1941.00,NULL,'Nederlandse Antillen','Nonmetropolitan Territory of The Netherlands','Beatrix',33,'AN');
-INSERT INTO Country VALUES ('ALB','Albania','Europe','Southern Europe',28748.00,1912,3401200,71.6,3205.00,2500.00,'Shqip�ria','Republic','Rexhep Mejdani',34,'AL');
-INSERT INTO Country VALUES ('DZA','Algeria','Africa','Northern Africa',2381741.00,1962,31471000,69.7,49982.00,46966.00,'Al-Jaza�ir/Alg�rie','Republic','Abdelaziz Bouteflika',35,'DZ');
-INSERT INTO Country VALUES ('ASM','American Samoa','Oceania','Polynesia',199.00,0,68000,75.1,334.00,NULL,'Amerika Samoa','US Territory','George W. Bush',54,'AS');
-INSERT INTO Country VALUES ('AND','Andorra','Europe','Southern Europe',468.00,1278,78000,83.5,1630.00,NULL,'Andorra','Parliamentary Coprincipality','',55,'AD');
-INSERT INTO Country VALUES ('AGO','Angola','Africa','Central Africa',1246700.00,1975,12878000,38.3,6648.00,7984.00,'Angola','Republic','Jos� Eduardo dos Santos',56,'AO');
-INSERT INTO Country VALUES ('AIA','Anguilla','North America','Caribbean',96.00,0,8000,76.1,63.20,NULL,'Anguilla','Dependent Territory of the UK','Elisabeth II',62,'AI');
-INSERT INTO Country VALUES ('ATG','Antigua and Barbuda','North America','Caribbean',442.00,1981,68000,70.5,612.00,584.00,'Antigua and Barbuda','Constitutional Monarchy','Elisabeth II',63,'AG');
-INSERT INTO Country VALUES ('ARE','United Arab Emirates','Asia','Middle East',83600.00,1971,2441000,74.1,37966.00,36846.00,'Al-Imarat al-�Arabiya al-Muttahida','Emirate Federation','Zayid bin Sultan al-Nahayan',65,'AE');
-INSERT INTO Country VALUES ('ARG','Argentina','South America','South America',2780400.00,1816,37032000,75.1,340238.00,323310.00,'Argentina','Federal Republic','Fernando de la R�a',69,'AR');
-INSERT INTO Country VALUES ('ARM','Armenia','Asia','Middle East',29800.00,1991,3520000,66.4,1813.00,1627.00,'Hajastan','Republic','Robert Kot�arjan',126,'AM');
-INSERT INTO Country VALUES ('ABW','Aruba','North America','Caribbean',193.00,0,103000,78.4,828.00,793.00,'Aruba','Nonmetropolitan Territory of The Netherlands','Beatrix',129,'AW');
-INSERT INTO Country VALUES ('AUS','Australia','Oceania','Australia and New Zealand',7741220.00,1901,18886000,79.8,351182.00,392911.00,'Australia','Constitutional Monarchy, Federation','Elisabeth II',135,'AU');
-INSERT INTO Country VALUES ('AZE','Azerbaijan','Asia','Middle East',86600.00,1991,7734000,62.9,4127.00,4100.00,'Az�rbaycan','Federal Republic','Heyd�r �liyev',144,'AZ');
-INSERT INTO Country VALUES ('BHS','Bahamas','North America','Caribbean',13878.00,1973,307000,71.1,3527.00,3347.00,'The Bahamas','Constitutional Monarchy','Elisabeth II',148,'BS');
-INSERT INTO Country VALUES ('BHR','Bahrain','Asia','Middle East',694.00,1971,617000,73.0,6366.00,6097.00,'Al-Bahrayn','Monarchy (Emirate)','Hamad ibn Isa al-Khalifa',149,'BH');
-INSERT INTO Country VALUES ('BGD','Bangladesh','Asia','Southern and Central Asia',143998.00,1971,129155000,60.2,32852.00,31966.00,'Bangladesh','Republic','Shahabuddin Ahmad',150,'BD');
-INSERT INTO Country VALUES ('BRB','Barbados','North America','Caribbean',430.00,1966,270000,73.0,2223.00,2186.00,'Barbados','Constitutional Monarchy','Elisabeth II',174,'BB');
-INSERT INTO Country VALUES ('BEL','Belgium','Europe','Western Europe',30518.00,1830,10239000,77.8,249704.00,243948.00,'Belgi�/Belgique','Constitutional Monarchy, Federation','Albert II',179,'BE');
-INSERT INTO Country VALUES ('BLZ','Belize','North America','Central America',22696.00,1981,241000,70.9,630.00,616.00,'Belize','Constitutional Monarchy','Elisabeth II',185,'BZ');
-INSERT INTO Country VALUES ('BEN','Benin','Africa','Western Africa',112622.00,1960,6097000,50.2,2357.00,2141.00,'B�nin','Republic','Mathieu K�r�kou',187,'BJ');
-INSERT INTO Country VALUES ('BMU','Bermuda','North America','North America',53.00,0,65000,76.9,2328.00,2190.00,'Bermuda','Dependent Territory of the UK','Elisabeth II',191,'BM');
-INSERT INTO Country VALUES ('BTN','Bhutan','Asia','Southern and Central Asia',47000.00,1910,2124000,52.4,372.00,383.00,'Druk-Yul','Monarchy','Jigme Singye Wangchuk',192,'BT');
-INSERT INTO Country VALUES ('BOL','Bolivia','South America','South America',1098581.00,1825,8329000,63.7,8571.00,7967.00,'Bolivia','Republic','Hugo B�nzer Su�rez',194,'BO');
-INSERT INTO Country VALUES ('BIH','Bosnia and Herzegovina','Europe','Southern Europe',51197.00,1992,3972000,71.5,2841.00,NULL,'Bosna i Hercegovina','Federal Republic','Ante Jelavic',201,'BA');
-INSERT INTO Country VALUES ('BWA','Botswana','Africa','Southern Africa',581730.00,1966,1622000,39.3,4834.00,4935.00,'Botswana','Republic','Festus G. Mogae',204,'BW');
-INSERT INTO Country VALUES ('BRA','Brazil','South America','South America',8547403.00,1822,170115000,62.9,776739.00,804108.00,'Brasil','Federal Republic','Fernando Henrique Cardoso',211,'BR');
-INSERT INTO Country VALUES ('GBR','United Kingdom','Europe','British Islands',242900.00,1066,59623400,77.7,1378330.00,1296830.00,'United Kingdom','Constitutional Monarchy','Elisabeth II',456,'GB');
-INSERT INTO Country VALUES ('VGB','Virgin Islands, British','North America','Caribbean',151.00,0,21000,75.4,612.00,573.00,'British Virgin Islands','Dependent Territory of the UK','Elisabeth II',537,'VG');
-INSERT INTO Country VALUES ('BRN','Brunei','Asia','Southeast Asia',5765.00,1984,328000,73.6,11705.00,12460.00,'Brunei Darussalam','Monarchy (Sultanate)','Haji Hassan al-Bolkiah',538,'BN');
-INSERT INTO Country VALUES ('BGR','Bulgaria','Europe','Eastern Europe',110994.00,1908,8190900,70.9,12178.00,10169.00,'Balgarija','Republic','Petar Stojanov',539,'BG');
-INSERT INTO Country VALUES ('BFA','Burkina Faso','Africa','Western Africa',274000.00,1960,11937000,46.7,2425.00,2201.00,'Burkina Faso','Republic','Blaise Compaor�',549,'BF');
-INSERT INTO Country VALUES ('BDI','Burundi','Africa','Eastern Africa',27834.00,1962,6695000,46.2,903.00,982.00,'Burundi/Uburundi','Republic','Pierre Buyoya',552,'BI');
-INSERT INTO Country VALUES ('CYM','Cayman Islands','North America','Caribbean',264.00,0,38000,78.9,1263.00,1186.00,'Cayman Islands','Dependent Territory of the UK','Elisabeth II',553,'KY');
-INSERT INTO Country VALUES ('CHL','Chile','South America','South America',756626.00,1810,15211000,75.7,72949.00,75780.00,'Chile','Republic','Ricardo Lagos Escobar',554,'CL');
-INSERT INTO Country VALUES ('COK','Cook Islands','Oceania','Polynesia',236.00,0,20000,71.1,100.00,NULL,'The Cook Islands','Nonmetropolitan Territory of New Zealand','Elisabeth II',583,'CK');
-INSERT INTO Country VALUES ('CRI','Costa Rica','North America','Central America',51100.00,1821,4023000,75.8,10226.00,9757.00,'Costa Rica','Republic','Miguel �ngel Rodr�guez Echeverr�a',584,'CR');
-INSERT INTO Country VALUES ('DJI','Djibouti','Africa','Eastern Africa',23200.00,1977,638000,50.8,382.00,373.00,'Djibouti/Jibuti','Republic','Ismail Omar Guelleh',585,'DJ');
-INSERT INTO Country VALUES ('DMA','Dominica','North America','Caribbean',751.00,1978,71000,73.4,256.00,243.00,'Dominica','Republic','Vernon Shaw',586,'DM');
-INSERT INTO Country VALUES ('DOM','Dominican Republic','North America','Caribbean',48511.00,1844,8495000,73.2,15846.00,15076.00,'Rep�blica Dominicana','Republic','Hip�lito Mej�a Dom�nguez',587,'DO');
-INSERT INTO Country VALUES ('ECU','Ecuador','South America','South America',283561.00,1822,12646000,71.1,19770.00,19769.00,'Ecuador','Republic','Gustavo Noboa Bejarano',594,'EC');
-INSERT INTO Country VALUES ('EGY','Egypt','Africa','Northern Africa',1001449.00,1922,68470000,63.3,82710.00,75617.00,'Misr','Republic','Hosni Mubarak',608,'EG');
-INSERT INTO Country VALUES ('SLV','El Salvador','North America','Central America',21041.00,1841,6276000,69.7,11863.00,11203.00,'El Salvador','Republic','Francisco Guillermo Flores P�rez',645,'SV');
-INSERT INTO Country VALUES ('ERI','Eritrea','Africa','Eastern Africa',117600.00,1993,3850000,55.8,650.00,755.00,'Ertra','Republic','Isayas Afewerki [Isaias Afwerki]',652,'ER');
-INSERT INTO Country VALUES ('ESP','Spain','Europe','Southern Europe',505992.00,1492,39441700,78.8,553233.00,532031.00,'Espa�a','Constitutional Monarchy','Juan Carlos I',653,'ES');
-INSERT INTO Country VALUES ('ZAF','South Africa','Africa','Southern Africa',1221037.00,1910,40377000,51.1,116729.00,129092.00,'South Africa','Republic','Thabo Mbeki',716,'ZA');
-INSERT INTO Country VALUES ('ETH','Ethiopia','Africa','Eastern Africa',1104300.00,-1000,62565000,45.2,6353.00,6180.00,'YeItyop�iya','Republic','Negasso Gidada',756,'ET');
-INSERT INTO Country VALUES ('FLK','Falkland Islands','South America','South America',12173.00,0,2000,NULL,0.00,NULL,'Falkland Islands','Dependent Territory of the UK','Elisabeth II',763,'FK');
-INSERT INTO Country VALUES ('FJI','Fiji Islands','Oceania','Melanesia',18274.00,1970,817000,67.9,1536.00,2149.00,'Fiji Islands','Republic','Josefa Iloilo',764,'FJ');
-INSERT INTO Country VALUES ('PHL','Philippines','Asia','Southeast Asia',300000.00,1946,75967000,67.5,65107.00,82239.00,'Pilipinas','Republic','Gloria Macapagal-Arroyo',766,'PH');
-INSERT INTO Country VALUES ('FRO','Faroe Islands','Europe','Nordic Countries',1399.00,0,43000,78.4,0.00,NULL,'F�royar','Part of Denmark','Margrethe II',901,'FO');
-INSERT INTO Country VALUES ('GAB','Gabon','Africa','Central Africa',267668.00,1960,1226000,50.1,5493.00,5279.00,'Le Gabon','Republic','Omar Bongo',902,'GA');
-INSERT INTO Country VALUES ('GMB','Gambia','Africa','Western Africa',11295.00,1965,1305000,53.2,320.00,325.00,'The Gambia','Republic','Yahya Jammeh',904,'GM');
-INSERT INTO Country VALUES ('GEO','Georgia','Asia','Middle East',69700.00,1991,4968000,64.5,6064.00,5924.00,'Sakartvelo','Republic','Eduard �evardnadze',905,'GE');
-INSERT INTO Country VALUES ('GHA','Ghana','Africa','Western Africa',238533.00,1957,20212000,57.4,7137.00,6884.00,'Ghana','Republic','John Kufuor',910,'GH');
-INSERT INTO Country VALUES ('GIB','Gibraltar','Europe','Southern Europe',6.00,0,25000,79.0,258.00,NULL,'Gibraltar','Dependent Territory of the UK','Elisabeth II',915,'GI');
-INSERT INTO Country VALUES ('GRD','Grenada','North America','Caribbean',344.00,1974,94000,64.5,318.00,NULL,'Grenada','Constitutional Monarchy','Elisabeth II',916,'GD');
-INSERT INTO Country VALUES ('GRL','Greenland','North America','North America',2166090.00,0,56000,68.1,0.00,NULL,'Kalaallit Nunaat/Gr�nland','Part of Denmark','Margrethe II',917,'GL');
-INSERT INTO Country VALUES ('GLP','Guadeloupe','North America','Caribbean',1705.00,0,456000,77.0,3501.00,NULL,'Guadeloupe','Overseas Department of France','Jacques Chirac',919,'GP');
-INSERT INTO Country VALUES ('GUM','Guam','Oceania','Micronesia',549.00,0,168000,77.8,1197.00,1136.00,'Guam','US Territory','George W. Bush',921,'GU');
-INSERT INTO Country VALUES ('GTM','Guatemala','North America','Central America',108889.00,1821,11385000,66.2,19008.00,17797.00,'Guatemala','Republic','Alfonso Portillo Cabrera',922,'GT');
-INSERT INTO Country VALUES ('GIN','Guinea','Africa','Western Africa',245857.00,1958,7430000,45.6,2352.00,2383.00,'Guin�e','Republic','Lansana Cont�',926,'GN');
-INSERT INTO Country VALUES ('GNB','Guinea-Bissau','Africa','Western Africa',36125.00,1974,1213000,49.0,293.00,272.00,'Guin�-Bissau','Republic','Kumba Ial�',927,'GW');
-INSERT INTO Country VALUES ('GUY','Guyana','South America','South America',214969.00,1966,861000,64.0,722.00,743.00,'Guyana','Republic','Bharrat Jagdeo',928,'GY');
-INSERT INTO Country VALUES ('HTI','Haiti','North America','Caribbean',27750.00,1804,8222000,49.2,3459.00,3107.00,'Ha�ti/Dayti','Republic','Jean-Bertrand Aristide',929,'HT');
-INSERT INTO Country VALUES ('HND','Honduras','North America','Central America',112088.00,1838,6485000,69.9,5333.00,4697.00,'Honduras','Republic','Carlos Roberto Flores Facuss�',933,'HN');
-INSERT INTO Country VALUES ('HKG','Hong Kong','Asia','Eastern Asia',1075.00,0,6782000,79.5,166448.00,173610.00,'Xianggang/Hong Kong','Special Administrative Region of China','Jiang Zemin',937,'HK');
-INSERT INTO Country VALUES ('SJM','Svalbard and Jan Mayen','Europe','Nordic Countries',62422.00,0,3200,NULL,0.00,NULL,'Svalbard og Jan Mayen','Dependent Territory of Norway','Harald V',938,'SJ');
-INSERT INTO Country VALUES ('IDN','Indonesia','Asia','Southeast Asia',1904569.00,1945,212107000,68.0,84982.00,215002.00,'Indonesia','Republic','Abdurrahman Wahid',939,'ID');
-INSERT INTO Country VALUES ('IND','India','Asia','Southern and Central Asia',3287263.00,1947,1013662000,62.5,447114.00,430572.00,'Bharat/India','Federal Republic','Kocheril Raman Narayanan',1109,'IN');
-INSERT INTO Country VALUES ('IRQ','Iraq','Asia','Middle East',438317.00,1932,23115000,66.5,11500.00,NULL,'Al-�Iraq','Republic','Saddam Hussein al-Takriti',1365,'IQ');
-INSERT INTO Country VALUES ('IRN','Iran','Asia','Southern and Central Asia',1648195.00,1906,67702000,69.7,195746.00,160151.00,'Iran','Islamic Republic','Ali Mohammad Khatami-Ardakani',1380,'IR');
-INSERT INTO Country VALUES ('IRL','Ireland','Europe','British Islands',70273.00,1921,3775100,76.8,75921.00,73132.00,'Ireland/�ire','Republic','Mary McAleese',1447,'IE');
-INSERT INTO Country VALUES ('ISL','Iceland','Europe','Nordic Countries',103000.00,1944,279000,79.4,8255.00,7474.00,'�sland','Republic','�lafur Ragnar Gr�msson',1449,'IS');
-INSERT INTO Country VALUES ('ISR','Israel','Asia','Middle East',21056.00,1948,6217000,78.6,97477.00,98577.00,'Yisra�el/Isra�il','Republic','Moshe Katzav',1450,'IL');
-INSERT INTO Country VALUES ('ITA','Italy','Europe','Southern Europe',301316.00,1861,57680000,79.0,1161755.00,1145372.00,'Italia','Republic','Carlo Azeglio Ciampi',1464,'IT');
-INSERT INTO Country VALUES ('TMP','East Timor','Asia','Southeast Asia',14874.00,0,885000,46.0,0.00,NULL,'Timor Timur','Administrated by the UN','Jos� Alexandre Gusm�o',1522,'TP');
-INSERT INTO Country VALUES ('AUT','Austria','Europe','Western Europe',83859.00,1918,8091800,77.7,211860.00,206025.00,'�sterreich','Federal Republic','Thomas Klestil',1523,'AT');
-INSERT INTO Country VALUES ('JAM','Jamaica','North America','Caribbean',10990.00,1962,2583000,75.2,6871.00,6722.00,'Jamaica','Constitutional Monarchy','Elisabeth II',1530,'JM');
-INSERT INTO Country VALUES ('JPN','Japan','Asia','Eastern Asia',377829.00,-660,126714000,80.7,3787042.00,4192638.00,'Nihon/Nippon','Constitutional Monarchy','Akihito',1532,'JP');
-INSERT INTO Country VALUES ('YEM','Yemen','Asia','Middle East',527968.00,1918,18112000,59.8,6041.00,5729.00,'Al-Yaman','Republic','Ali Abdallah Salih',1780,'YE');
-INSERT INTO Country VALUES ('JOR','Jordan','Asia','Middle East',88946.00,1946,5083000,77.4,7526.00,7051.00,'Al-Urdunn','Constitutional Monarchy','Abdullah II',1786,'JO');
-INSERT INTO Country VALUES ('CXR','Christmas Island','Oceania','Australia and New Zealand',135.00,0,2500,NULL,0.00,NULL,'Christmas Island','Territory of Australia','Elisabeth II',1791,'CX');
-INSERT INTO Country VALUES ('YUG','Yugoslavia','Europe','Southern Europe',102173.00,1918,10640000,72.4,17000.00,NULL,'Jugoslavija','Federal Republic','Vojislav Ko�tunica',1792,'YU');
-INSERT INTO Country VALUES ('KHM','Cambodia','Asia','Southeast Asia',181035.00,1953,11168000,56.5,5121.00,5670.00,'K�mpuch�a','Constitutional Monarchy','Norodom Sihanouk',1800,'KH');
-INSERT INTO Country VALUES ('CMR','Cameroon','Africa','Central Africa',475442.00,1960,15085000,54.8,9174.00,8596.00,'Cameroun/Cameroon','Republic','Paul Biya',1804,'CM');
-INSERT INTO Country VALUES ('CAN','Canada','North America','North America',9970610.00,1867,31147000,79.4,598862.00,625626.00,'Canada','Constitutional Monarchy, Federation','Elisabeth II',1822,'CA');
-INSERT INTO Country VALUES ('CPV','Cape Verde','Africa','Western Africa',4033.00,1975,428000,68.9,435.00,420.00,'Cabo Verde','Republic','Ant�nio Mascarenhas Monteiro',1859,'CV');
-INSERT INTO Country VALUES ('KAZ','Kazakstan','Asia','Southern and Central Asia',2724900.00,1991,16223000,63.2,24375.00,23383.00,'Qazaqstan','Republic','Nursultan Nazarbajev',1864,'KZ');
-INSERT INTO Country VALUES ('KEN','Kenya','Africa','Eastern Africa',580367.00,1963,30080000,48.0,9217.00,10241.00,'Kenya','Republic','Daniel arap Moi',1881,'KE');
-INSERT INTO Country VALUES ('CAF','Central African Republic','Africa','Central Africa',622984.00,1960,3615000,44.0,1054.00,993.00,'Centrafrique/B�-Afr�ka','Republic','Ange-F�lix Patass�',1889,'CF');
-INSERT INTO Country VALUES ('CHN','China','Asia','Eastern Asia',9572900.00,-1523,1277558000,71.4,982268.00,917719.00,'Zhongquo','People\'sRepublic','Jiang Zemin',1891,'CN');
-INSERT INTO Country VALUES ('KGZ','Kyrgyzstan','Asia','Southern and Central Asia',199900.00,1991,4699000,63.4,1626.00,1767.00,'Kyrgyzstan','Republic','Askar Akajev',2253,'KG');
-INSERT INTO Country VALUES ('KIR','Kiribati','Oceania','Micronesia',726.00,1979,83000,59.8,40.70,NULL,'Kiribati','Republic','Teburoro Tito',2256,'KI');
-INSERT INTO Country VALUES ('COL','Colombia','South America','South America',1138914.00,1810,42321000,70.3,102896.00,105116.00,'Colombia','Republic','Andr�s Pastrana Arango',2257,'CO');
-INSERT INTO Country VALUES ('COM','Comoros','Africa','Eastern Africa',1862.00,1975,578000,60.0,4401.00,4361.00,'Komori/Comores','Republic','Azali Assoumani',2295,'KM');
-INSERT INTO Country VALUES ('COG','Congo','Africa','Central Africa',342000.00,1960,2943000,47.4,2108.00,2287.00,'Congo','Republic','Denis Sassou-Nguesso',2296,'CG');
-INSERT INTO Country VALUES ('COD','Congo, The Democratic Republic of the','Africa','Central Africa',2344858.00,1960,51654000,48.8,6964.00,2474.00,'R�publique D�mocratique du Congo','Republic','Joseph Kabila',2298,'CD');
-INSERT INTO Country VALUES ('CCK','Cocos (Keeling) Islands','Oceania','Australia and New Zealand',14.00,0,600,NULL,0.00,NULL,'Cocos (Keeling) Islands','Territory of Australia','Elisabeth II',2317,'CC');
-INSERT INTO Country VALUES ('PRK','North Korea','Asia','Eastern Asia',120538.00,1948,24039000,70.7,5332.00,NULL,'Choson Minjujuui In�min Konghwaguk (Bukhan)','Socialistic Republic','Kim Jong-il',2318,'KP');
-INSERT INTO Country VALUES ('KOR','South Korea','Asia','Eastern Asia',99434.00,1948,46844000,74.4,320749.00,442544.00,'Taehan Min�guk (Namhan)','Republic','Kim Dae-jung',2331,'KR');
-INSERT INTO Country VALUES ('GRC','Greece','Europe','Southern Europe',131626.00,1830,10545700,78.4,120724.00,119946.00,'Ell�da','Republic','Kostis Stefanopoulos',2401,'GR');
-INSERT INTO Country VALUES ('HRV','Croatia','Europe','Southern Europe',56538.00,1991,4473000,73.7,20208.00,19300.00,'Hrvatska','Republic','�tipe Mesic',2409,'HR');
-INSERT INTO Country VALUES ('CUB','Cuba','North America','Caribbean',110861.00,1902,11201000,76.2,17843.00,18862.00,'Cuba','Socialistic Republic','Fidel Castro Ruz',2413,'CU');
-INSERT INTO Country VALUES ('KWT','Kuwait','Asia','Middle East',17818.00,1961,1972000,76.1,27037.00,30373.00,'Al-Kuwayt','Constitutional Monarchy (Emirate)','Jabir al-Ahmad al-Jabir al-Sabah',2429,'KW');
-INSERT INTO Country VALUES ('CYP','Cyprus','Asia','Middle East',9251.00,1960,754700,76.7,9333.00,8246.00,'K�pros/Kibris','Republic','Glafkos Klerides',2430,'CY');
-INSERT INTO Country VALUES ('LAO','Laos','Asia','Southeast Asia',236800.00,1953,5433000,53.1,1292.00,1746.00,'Lao','Republic','Khamtay Siphandone',2432,'LA');
-INSERT INTO Country VALUES ('LVA','Latvia','Europe','Baltic Countries',64589.00,1991,2424200,68.4,6398.00,5639.00,'Latvija','Republic','Vaira Vike-Freiberga',2434,'LV');
-INSERT INTO Country VALUES ('LSO','Lesotho','Africa','Southern Africa',30355.00,1966,2153000,50.8,1061.00,1161.00,'Lesotho','Constitutional Monarchy','Letsie III',2437,'LS');
-INSERT INTO Country VALUES ('LBN','Lebanon','Asia','Middle East',10400.00,1941,3282000,71.3,17121.00,15129.00,'Lubnan','Republic','�mile Lahoud',2438,'LB');
-INSERT INTO Country VALUES ('LBR','Liberia','Africa','Western Africa',111369.00,1847,3154000,51.0,2012.00,NULL,'Liberia','Republic','Charles Taylor',2440,'LR');
-INSERT INTO Country VALUES ('LBY','Libyan Arab Jamahiriya','Africa','Northern Africa',1759540.00,1951,5605000,75.5,44806.00,40562.00,'Libiya','Socialistic State','Muammar al-Qadhafi',2441,'LY');
-INSERT INTO Country VALUES ('LIE','Liechtenstein','Europe','Western Europe',160.00,1806,32300,78.8,1119.00,1084.00,'Liechtenstein','Constitutional Monarchy','Hans-Adam II',2446,'LI');
-INSERT INTO Country VALUES ('LTU','Lithuania','Europe','Baltic Countries',65301.00,1991,3698500,69.1,10692.00,9585.00,'Lietuva','Republic','Valdas Adamkus',2447,'LT');
-INSERT INTO Country VALUES ('LUX','Luxembourg','Europe','Western Europe',2586.00,1867,435700,77.1,16321.00,15519.00,'Luxembourg/L�tzebuerg','Constitutional Monarchy','Henri',2452,'LU');
-INSERT INTO Country VALUES ('ESH','Western Sahara','Africa','Northern Africa',266000.00,0,293000,49.8,60.00,NULL,'As-Sahrawiya','Occupied by Marocco','Mohammed Abdel Aziz',2453,'EH');
-INSERT INTO Country VALUES ('MAC','Macao','Asia','Eastern Asia',18.00,0,473000,81.6,5749.00,5940.00,'Macau/Aomen','Special Administrative Region of China','Jiang Zemin',2454,'MO');
-INSERT INTO Country VALUES ('MDG','Madagascar','Africa','Eastern Africa',587041.00,1960,15942000,55.0,3750.00,3545.00,'Madagasikara/Madagascar','Federal Republic','Didier Ratsiraka',2455,'MG');
-INSERT INTO Country VALUES ('MKD','Macedonia','Europe','Southern Europe',25713.00,1991,2024000,73.8,1694.00,1915.00,'Makedonija','Republic','Boris Trajkovski',2460,'MK');
-INSERT INTO Country VALUES ('MWI','Malawi','Africa','Eastern Africa',118484.00,1964,10925000,37.6,1687.00,2527.00,'Malawi','Republic','Bakili Muluzi',2462,'MW');
-INSERT INTO Country VALUES ('MDV','Maldives','Asia','Southern and Central Asia',298.00,1965,286000,62.2,199.00,NULL,'Dhivehi Raajje/Maldives','Republic','Maumoon Abdul Gayoom',2463,'MV');
-INSERT INTO Country VALUES ('MYS','Malaysia','Asia','Southeast Asia',329758.00,1957,22244000,70.8,69213.00,97884.00,'Malaysia','Constitutional Monarchy, Federation','Salahuddin Abdul Aziz Shah Alhaj',2464,'MY');
-INSERT INTO Country VALUES ('MLI','Mali','Africa','Western Africa',1240192.00,1960,11234000,46.7,2642.00,2453.00,'Mali','Republic','Alpha Oumar Konar�',2482,'ML');
-INSERT INTO Country VALUES ('MLT','Malta','Europe','Southern Europe',316.00,1964,380200,77.9,3512.00,3338.00,'Malta','Republic','Guido de Marco',2484,'MT');
-INSERT INTO Country VALUES ('MAR','Morocco','Africa','Northern Africa',446550.00,1956,28351000,69.1,36124.00,33514.00,'Al-Maghrib','Constitutional Monarchy','Mohammed VI',2486,'MA');
-INSERT INTO Country VALUES ('MHL','Marshall Islands','Oceania','Micronesia',181.00,1990,64000,65.5,97.00,NULL,'Marshall Islands/Majol','Republic','Kessai Note',2507,'MH');
-INSERT INTO Country VALUES ('MTQ','Martinique','North America','Caribbean',1102.00,0,395000,78.3,2731.00,2559.00,'Martinique','Overseas Department of France','Jacques Chirac',2508,'MQ');
-INSERT INTO Country VALUES ('MRT','Mauritania','Africa','Western Africa',1025520.00,1960,2670000,50.8,998.00,1081.00,'Muritaniya/Mauritanie','Republic','Maaouiya Ould Sid�Ahmad Taya',2509,'MR');
-INSERT INTO Country VALUES ('MUS','Mauritius','Africa','Eastern Africa',2040.00,1968,1158000,71.0,4251.00,4186.00,'Mauritius','Republic','Cassam Uteem',2511,'MU');
-INSERT INTO Country VALUES ('MYT','Mayotte','Africa','Eastern Africa',373.00,0,149000,59.5,0.00,NULL,'Mayotte','Territorial Collectivity of France','Jacques Chirac',2514,'YT');
-INSERT INTO Country VALUES ('MEX','Mexico','North America','Central America',1958201.00,1810,98881000,71.5,414972.00,401461.00,'M�xico','Federal Republic','Vicente Fox Quesada',2515,'MX');
-INSERT INTO Country VALUES ('FSM','Micronesia, Federated States of','Oceania','Micronesia',702.00,1990,119000,68.6,212.00,NULL,'Micronesia','Federal Republic','Leo A. Falcam',2689,'FM');
-INSERT INTO Country VALUES ('MDA','Moldova','Europe','Eastern Europe',33851.00,1991,4380000,64.5,1579.00,1872.00,'Moldova','Republic','Vladimir Voronin',2690,'MD');
-INSERT INTO Country VALUES ('MCO','Monaco','Europe','Western Europe',1.50,1861,34000,78.8,776.00,NULL,'Monaco','Constitutional Monarchy','Rainier III',2695,'MC');
-INSERT INTO Country VALUES ('MNG','Mongolia','Asia','Eastern Asia',1566500.00,1921,2662000,67.3,1043.00,933.00,'Mongol Uls','Republic','Natsagiin Bagabandi',2696,'MN');
-INSERT INTO Country VALUES ('MSR','Montserrat','North America','Caribbean',102.00,0,11000,78.0,109.00,NULL,'Montserrat','Dependent Territory of the UK','Elisabeth II',2697,'MS');
-INSERT INTO Country VALUES ('MOZ','Mozambique','Africa','Eastern Africa',801590.00,1975,19680000,37.5,2891.00,2711.00,'Mo�ambique','Republic','Joaqu�m A. Chissano',2698,'MZ');
-INSERT INTO Country VALUES ('MMR','Myanmar','Asia','Southeast Asia',676578.00,1948,45611000,54.9,180375.00,171028.00,'Myanma Pye','Republic','kenraali Than Shwe',2710,'MM');
-INSERT INTO Country VALUES ('NAM','Namibia','Africa','Southern Africa',824292.00,1990,1726000,42.5,3101.00,3384.00,'Namibia','Republic','Sam Nujoma',2726,'NA');
-INSERT INTO Country VALUES ('NRU','Nauru','Oceania','Micronesia',21.00,1968,12000,60.8,197.00,NULL,'Naoero/Nauru','Republic','Bernard Dowiyogo',2728,'NR');
-INSERT INTO Country VALUES ('NPL','Nepal','Asia','Southern and Central Asia',147181.00,1769,23930000,57.8,4768.00,4837.00,'Nepal','Constitutional Monarchy','Gyanendra Bir Bikram',2729,'NP');
-INSERT INTO Country VALUES ('NIC','Nicaragua','North America','Central America',130000.00,1838,5074000,68.7,1988.00,2023.00,'Nicaragua','Republic','Arnoldo Alem�n Lacayo',2734,'NI');
-INSERT INTO Country VALUES ('NER','Niger','Africa','Western Africa',1267000.00,1960,10730000,41.3,1706.00,1580.00,'Niger','Republic','Mamadou Tandja',2738,'NE');
-INSERT INTO Country VALUES ('NGA','Nigeria','Africa','Western Africa',923768.00,1960,111506000,51.6,65707.00,58623.00,'Nigeria','Federal Republic','Olusegun Obasanjo',2754,'NG');
-INSERT INTO Country VALUES ('NIU','Niue','Oceania','Polynesia',260.00,0,2000,NULL,0.00,NULL,'Niue','Nonmetropolitan Territory of New Zealand','Elisabeth II',2805,'NU');
-INSERT INTO Country VALUES ('NFK','Norfolk Island','Oceania','Australia and New Zealand',36.00,0,2000,NULL,0.00,NULL,'Norfolk Island','Territory of Australia','Elisabeth II',2806,'NF');
-INSERT INTO Country VALUES ('NOR','Norway','Europe','Nordic Countries',323877.00,1905,4478500,78.7,145895.00,153370.00,'Norge','Constitutional Monarchy','Harald V',2807,'NO');
-INSERT INTO Country VALUES ('CIV','C�te d�Ivoire','Africa','Western Africa',322463.00,1960,14786000,45.2,11345.00,10285.00,'C�te d�Ivoire','Republic','Laurent Gbagbo',2814,'CI');
-INSERT INTO Country VALUES ('OMN','Oman','Asia','Middle East',309500.00,1951,2542000,71.8,16904.00,16153.00,'�Uman','Monarchy (Sultanate)','Qabus ibn Sa�id',2821,'OM');
-INSERT INTO Country VALUES ('PAK','Pakistan','Asia','Southern and Central Asia',796095.00,1947,156483000,61.1,61289.00,58549.00,'Pakistan','Republic','Mohammad Rafiq Tarar',2831,'PK');
-INSERT INTO Country VALUES ('PLW','Palau','Oceania','Micronesia',459.00,1994,19000,68.6,105.00,NULL,'Belau/Palau','Republic','Kuniwo Nakamura',2881,'PW');
-INSERT INTO Country VALUES ('PAN','Panama','North America','Central America',75517.00,1903,2856000,75.5,9131.00,8700.00,'Panam�','Republic','Mireya Elisa Moscoso Rodr�guez',2882,'PA');
-INSERT INTO Country VALUES ('PNG','Papua New Guinea','Oceania','Melanesia',462840.00,1975,4807000,63.1,4988.00,6328.00,'Papua New Guinea/Papua Niugini','Constitutional Monarchy','Elisabeth II',2884,'PG');
-INSERT INTO Country VALUES ('PRY','Paraguay','South America','South America',406752.00,1811,5496000,73.7,8444.00,9555.00,'Paraguay','Republic','Luis �ngel Gonz�lez Macchi',2885,'PY');
-INSERT INTO Country VALUES ('PER','Peru','South America','South America',1285216.00,1821,25662000,70.0,64140.00,65186.00,'Per�/Piruw','Republic','Valentin Paniagua Corazao',2890,'PE');
-INSERT INTO Country VALUES ('PCN','Pitcairn','Oceania','Polynesia',49.00,0,50,NULL,0.00,NULL,'Pitcairn','Dependent Territory of the UK','Elisabeth II',2912,'PN');
-INSERT INTO Country VALUES ('MNP','Northern Mariana Islands','Oceania','Micronesia',464.00,0,78000,75.5,0.00,NULL,'Northern Mariana Islands','Commonwealth of the US','George W. Bush',2913,'MP');
-INSERT INTO Country VALUES ('PRT','Portugal','Europe','Southern Europe',91982.00,1143,9997600,75.8,105954.00,102133.00,'Portugal','Republic','Jorge Samp�io',2914,'PT');
-INSERT INTO Country VALUES ('PRI','Puerto Rico','North America','Caribbean',8875.00,0,3869000,75.6,34100.00,32100.00,'Puerto Rico','Commonwealth of the US','George W. Bush',2919,'PR');
-INSERT INTO Country VALUES ('POL','Poland','Europe','Eastern Europe',323250.00,1918,38653600,73.2,151697.00,135636.00,'Polska','Republic','Aleksander Kwasniewski',2928,'PL');
-INSERT INTO Country VALUES ('GNQ','Equatorial Guinea','Africa','Central Africa',28051.00,1968,453000,53.6,283.00,542.00,'Guinea Ecuatorial','Republic','Teodoro Obiang Nguema Mbasogo',2972,'GQ');
-INSERT INTO Country VALUES ('QAT','Qatar','Asia','Middle East',11000.00,1971,599000,72.4,9472.00,8920.00,'Qatar','Monarchy','Hamad ibn Khalifa al-Thani',2973,'QA');
-INSERT INTO Country VALUES ('FRA','France','Europe','Western Europe',551500.00,843,59225700,78.8,1424285.00,1392448.00,'France','Republic','Jacques Chirac',2974,'FR');
-INSERT INTO Country VALUES ('GUF','French Guiana','South America','South America',90000.00,0,181000,76.1,681.00,NULL,'Guyane fran�aise','Overseas Department of France','Jacques Chirac',3014,'GF');
-INSERT INTO Country VALUES ('PYF','French Polynesia','Oceania','Polynesia',4000.00,0,235000,74.8,818.00,781.00,'Polyn�sie fran�aise','Nonmetropolitan Territory of France','Jacques Chirac',3016,'PF');
-INSERT INTO Country VALUES ('REU','R�union','Africa','Eastern Africa',2510.00,0,699000,72.7,8287.00,7988.00,'R�union','Overseas Department of France','Jacques Chirac',3017,'RE');
-INSERT INTO Country VALUES ('ROM','Romania','Europe','Eastern Europe',238391.00,1878,22455500,69.9,38158.00,34843.00,'Rom�nia','Republic','Ion Iliescu',3018,'RO');
-INSERT INTO Country VALUES ('RWA','Rwanda','Africa','Eastern Africa',26338.00,1962,7733000,39.3,2036.00,1863.00,'Rwanda/Urwanda','Republic','Paul Kagame',3047,'RW');
-INSERT INTO Country VALUES ('SWE','Sweden','Europe','Nordic Countries',449964.00,836,8861400,79.6,226492.00,227757.00,'Sverige','Constitutional Monarchy','Carl XVI Gustaf',3048,'SE');
-INSERT INTO Country VALUES ('SHN','Saint Helena','Africa','Western Africa',314.00,0,6000,76.8,0.00,NULL,'Saint Helena','Dependent Territory of the UK','Elisabeth II',3063,'SH');
-INSERT INTO Country VALUES ('KNA','Saint Kitts and Nevis','North America','Caribbean',261.00,1983,38000,70.7,299.00,NULL,'Saint Kitts and Nevis','Constitutional Monarchy','Elisabeth II',3064,'KN');
-INSERT INTO Country VALUES ('LCA','Saint Lucia','North America','Caribbean',622.00,1979,154000,72.3,571.00,NULL,'Saint Lucia','Constitutional Monarchy','Elisabeth II',3065,'LC');
-INSERT INTO Country VALUES ('VCT','Saint Vincent and the Grenadines','North America','Caribbean',388.00,1979,114000,72.3,285.00,NULL,'Saint Vincent and the Grenadines','Constitutional Monarchy','Elisabeth II',3066,'VC');
-INSERT INTO Country VALUES ('SPM','Saint Pierre and Miquelon','North America','North America',242.00,0,7000,77.6,0.00,NULL,'Saint-Pierre-et-Miquelon','Territorial Collectivity of France','Jacques Chirac',3067,'PM');
-INSERT INTO Country VALUES ('DEU','Germany','Europe','Western Europe',357022.00,1955,82164700,77.4,2133367.00,2102826.00,'Deutschland','Federal Republic','Johannes Rau',3068,'DE');
-INSERT INTO Country VALUES ('SLB','Solomon Islands','Oceania','Melanesia',28896.00,1978,444000,71.3,182.00,220.00,'Solomon Islands','Constitutional Monarchy','Elisabeth II',3161,'SB');
-INSERT INTO Country VALUES ('ZMB','Zambia','Africa','Eastern Africa',752618.00,1964,9169000,37.2,3377.00,3922.00,'Zambia','Republic','Frederick Chiluba',3162,'ZM');
-INSERT INTO Country VALUES ('WSM','Samoa','Oceania','Polynesia',2831.00,1962,180000,69.2,141.00,157.00,'Samoa','Parlementary Monarchy','Malietoa Tanumafili II',3169,'WS');
-INSERT INTO Country VALUES ('SMR','San Marino','Europe','Southern Europe',61.00,885,27000,81.1,510.00,NULL,'San Marino','Republic',NULL,3171,'SM');
-INSERT INTO Country VALUES ('STP','Sao Tome and Principe','Africa','Central Africa',964.00,1975,147000,65.3,6.00,NULL,'S�o Tom� e Pr�ncipe','Republic','Miguel Trovoada',3172,'ST');
-INSERT INTO Country VALUES ('SAU','Saudi Arabia','Asia','Middle East',2149690.00,1932,21607000,67.8,137635.00,146171.00,'Al-�Arabiya as-Sa�udiya','Monarchy','Fahd ibn Abdul-Aziz al-Sa�ud',3173,'SA');
-INSERT INTO Country VALUES ('SEN','Senegal','Africa','Western Africa',196722.00,1960,9481000,62.2,4787.00,4542.00,'S�n�gal/Sounougal','Republic','Abdoulaye Wade',3198,'SN');
-INSERT INTO Country VALUES ('SYC','Seychelles','Africa','Eastern Africa',455.00,1976,77000,70.4,536.00,539.00,'Sesel/Seychelles','Republic','France-Albert Ren�',3206,'SC');
-INSERT INTO Country VALUES ('SLE','Sierra Leone','Africa','Western Africa',71740.00,1961,4854000,45.3,746.00,858.00,'Sierra Leone','Republic','Ahmed Tejan Kabbah',3207,'SL');
-INSERT INTO Country VALUES ('SGP','Singapore','Asia','Southeast Asia',618.00,1965,3567000,80.1,86503.00,96318.00,'Singapore/Singapura/Xinjiapo/Singapur','Republic','Sellapan Rama Nathan',3208,'SG');
-INSERT INTO Country VALUES ('SVK','Slovakia','Europe','Eastern Europe',49012.00,1993,5398700,73.7,20594.00,19452.00,'Slovensko','Republic','Rudolf Schuster',3209,'SK');
-INSERT INTO Country VALUES ('SVN','Slovenia','Europe','Southern Europe',20256.00,1991,1987800,74.9,19756.00,18202.00,'Slovenija','Republic','Milan Kucan',3212,'SI');
-INSERT INTO Country VALUES ('SOM','Somalia','Africa','Eastern Africa',637657.00,1960,10097000,46.2,935.00,NULL,'Soomaaliya','Republic','Abdiqassim Salad Hassan',3214,'SO');
-INSERT INTO Country VALUES ('LKA','Sri Lanka','Asia','Southern and Central Asia',65610.00,1948,18827000,71.8,15706.00,15091.00,'Sri Lanka/Ilankai','Republic','Chandrika Kumaratunga',3217,'LK');
-INSERT INTO Country VALUES ('SDN','Sudan','Africa','Northern Africa',2505813.00,1956,29490000,56.6,10162.00,NULL,'As-Sudan','Islamic Republic','Omar Hassan Ahmad al-Bashir',3225,'SD');
-INSERT INTO Country VALUES ('FIN','Finland','Europe','Nordic Countries',338145.00,1917,5171300,77.4,121914.00,119833.00,'Suomi','Republic','Tarja Halonen',3236,'FI');
-INSERT INTO Country VALUES ('SUR','Suriname','South America','South America',163265.00,1975,417000,71.4,870.00,706.00,'Suriname','Republic','Ronald Venetiaan',3243,'SR');
-INSERT INTO Country VALUES ('SWZ','Swaziland','Africa','Southern Africa',17364.00,1968,1008000,40.4,1206.00,1312.00,'kaNgwane','Monarchy','Mswati III',3244,'SZ');
-INSERT INTO Country VALUES ('CHE','Switzerland','Europe','Western Europe',41284.00,1499,7160400,79.6,264478.00,256092.00,'Schweiz/Suisse/Svizzera/Svizra','Federation','Adolf Ogi',3248,'CH');
-INSERT INTO Country VALUES ('SYR','Syria','Asia','Middle East',185180.00,1941,16125000,68.5,65984.00,64926.00,'Suriya','Republic','Bashar al-Assad',3250,'SY');
-INSERT INTO Country VALUES ('TJK','Tajikistan','Asia','Southern and Central Asia',143100.00,1991,6188000,64.1,1990.00,1056.00,'To�ikiston','Republic','Emomali Rahmonov',3261,'TJ');
-INSERT INTO Country VALUES ('TWN','Taiwan','Asia','Eastern Asia',36188.00,1945,22256000,76.4,256254.00,263451.00,'T�ai-wan','Republic','Chen Shui-bian',3263,'TW');
-INSERT INTO Country VALUES ('TZA','Tanzania','Africa','Eastern Africa',883749.00,1961,33517000,52.3,8005.00,7388.00,'Tanzania','Republic','Benjamin William Mkapa',3306,'TZ');
-INSERT INTO Country VALUES ('DNK','Denmark','Europe','Nordic Countries',43094.00,800,5330000,76.5,174099.00,169264.00,'Danmark','Constitutional Monarchy','Margrethe II',3315,'DK');
-INSERT INTO Country VALUES ('THA','Thailand','Asia','Southeast Asia',513115.00,1350,61399000,68.6,116416.00,153907.00,'Prathet Thai','Constitutional Monarchy','Bhumibol Adulyadej',3320,'TH');
-INSERT INTO Country VALUES ('TGO','Togo','Africa','Western Africa',56785.00,1960,4629000,54.7,1449.00,1400.00,'Togo','Republic','Gnassingb� Eyad�ma',3332,'TG');
-INSERT INTO Country VALUES ('TKL','Tokelau','Oceania','Polynesia',12.00,0,2000,NULL,0.00,NULL,'Tokelau','Nonmetropolitan Territory of New Zealand','Elisabeth II',3333,'TK');
-INSERT INTO Country VALUES ('TON','Tonga','Oceania','Polynesia',650.00,1970,99000,67.9,146.00,170.00,'Tonga','Monarchy','Taufa\'ahau Tupou IV',3334,'TO');
-INSERT INTO Country VALUES ('TTO','Trinidad and Tobago','North America','Caribbean',5130.00,1962,1295000,68.0,6232.00,5867.00,'Trinidad and Tobago','Republic','Arthur N. R. Robinson',3336,'TT');
-INSERT INTO Country VALUES ('TCD','Chad','Africa','Central Africa',1284000.00,1960,7651000,50.5,1208.00,1102.00,'Tchad/Tshad','Republic','Idriss D�by',3337,'TD');
-INSERT INTO Country VALUES ('CZE','Czech Republic','Europe','Eastern Europe',78866.00,1993,10278100,74.5,55017.00,52037.00,'�esko','Republic','V�clav Havel',3339,'CZ');
-INSERT INTO Country VALUES ('TUN','Tunisia','Africa','Northern Africa',163610.00,1956,9586000,73.7,20026.00,18898.00,'Tunis/Tunisie','Republic','Zine al-Abidine Ben Ali',3349,'TN');
-INSERT INTO Country VALUES ('TUR','Turkey','Asia','Middle East',774815.00,1923,66591000,71.0,210721.00,189122.00,'T�rkiye','Republic','Ahmet Necdet Sezer',3358,'TR');
-INSERT INTO Country VALUES ('TKM','Turkmenistan','Asia','Southern and Central Asia',488100.00,1991,4459000,60.9,4397.00,2000.00,'T�rkmenostan','Republic','Saparmurad Nijazov',3419,'TM');
-INSERT INTO Country VALUES ('TCA','Turks and Caicos Islands','North America','Caribbean',430.00,0,17000,73.3,96.00,NULL,'The Turks and Caicos Islands','Dependent Territory of the UK','Elisabeth II',3423,'TC');
-INSERT INTO Country VALUES ('TUV','Tuvalu','Oceania','Polynesia',26.00,1978,12000,66.3,6.00,NULL,'Tuvalu','Constitutional Monarchy','Elisabeth II',3424,'TV');
-INSERT INTO Country VALUES ('UGA','Uganda','Africa','Eastern Africa',241038.00,1962,21778000,42.9,6313.00,6887.00,'Uganda','Republic','Yoweri Museveni',3425,'UG');
-INSERT INTO Country VALUES ('UKR','Ukraine','Europe','Eastern Europe',603700.00,1991,50456000,66.0,42168.00,49677.00,'Ukrajina','Republic','Leonid Kut�ma',3426,'UA');
-INSERT INTO Country VALUES ('HUN','Hungary','Europe','Eastern Europe',93030.00,1918,10043200,71.4,48267.00,45914.00,'Magyarorsz�g','Republic','Ferenc M�dl',3483,'HU');
-INSERT INTO Country VALUES ('URY','Uruguay','South America','South America',175016.00,1828,3337000,75.2,20831.00,19967.00,'Uruguay','Republic','Jorge Batlle Ib��ez',3492,'UY');
-INSERT INTO Country VALUES ('NCL','New Caledonia','Oceania','Melanesia',18575.00,0,214000,72.8,3563.00,NULL,'Nouvelle-Cal�donie','Nonmetropolitan Territory of France','Jacques Chirac',3493,'NC');
-INSERT INTO Country VALUES ('NZL','New Zealand','Oceania','Australia and New Zealand',270534.00,1907,3862000,77.8,54669.00,64960.00,'New Zealand/Aotearoa','Constitutional Monarchy','Elisabeth II',3499,'NZ');
-INSERT INTO Country VALUES ('UZB','Uzbekistan','Asia','Southern and Central Asia',447400.00,1991,24318000,63.7,14194.00,21300.00,'Uzbekiston','Republic','Islam Karimov',3503,'UZ');
-INSERT INTO Country VALUES ('BLR','Belarus','Europe','Eastern Europe',207600.00,1991,10236000,68.0,13714.00,NULL,'Belarus','Republic','Aljaksandr Luka�enka',3520,'BY');
-INSERT INTO Country VALUES ('WLF','Wallis and Futuna','Oceania','Polynesia',200.00,0,15000,NULL,0.00,NULL,'Wallis-et-Futuna','Nonmetropolitan Territory of France','Jacques Chirac',3536,'WF');
-INSERT INTO Country VALUES ('VUT','Vanuatu','Oceania','Melanesia',12189.00,1980,190000,60.6,261.00,246.00,'Vanuatu','Republic','John Bani',3537,'VU');
-INSERT INTO Country VALUES ('VAT','Holy See (Vatican City State)','Europe','Southern Europe',0.40,1929,1000,NULL,9.00,NULL,'Santa Sede/Citt� del Vaticano','Independent Church State','Johannes Paavali II',3538,'VA');
-INSERT INTO Country VALUES ('VEN','Venezuela','South America','South America',912050.00,1811,24170000,73.1,95023.00,88434.00,'Venezuela','Federal Republic','Hugo Ch�vez Fr�as',3539,'VE');
-INSERT INTO Country VALUES ('RUS','Russian Federation','Europe','Eastern Europe',17075400.00,1991,146934000,67.2,276608.00,442989.00,'Rossija','Federal Republic','Vladimir Putin',3580,'RU');
-INSERT INTO Country VALUES ('VNM','Vietnam','Asia','Southeast Asia',331689.00,1945,79832000,69.3,21929.00,22834.00,'Vi�t Nam','Socialistic Republic','Tr�n Duc Luong',3770,'VN');
-INSERT INTO Country VALUES ('EST','Estonia','Europe','Baltic Countries',45227.00,1991,1439200,69.5,5328.00,3371.00,'Eesti','Republic','Lennart Meri',3791,'EE');
-INSERT INTO Country VALUES ('USA','United States','North America','North America',9363520.00,1776,278357000,77.1,8510700.00,8110900.00,'United States','Federal Republic','George W. Bush',3813,'US');
-INSERT INTO Country VALUES ('VIR','Virgin Islands, U.S.','North America','Caribbean',347.00,0,93000,78.1,0.00,NULL,'Virgin Islands of the United States','US Territory','George W. Bush',4067,'VI');
-INSERT INTO Country VALUES ('ZWE','Zimbabwe','Africa','Eastern Africa',390757.00,1980,11669000,37.8,5951.00,8670.00,'Zimbabwe','Republic','Robert G. Mugabe',4068,'ZW');
-INSERT INTO Country VALUES ('PSE','Palestine','Asia','Middle East',6257.00,0,3101000,71.4,4173.00,NULL,'Filastin','Autonomous Area','Yasser (Yasir) Arafat',4074,'PS');
-INSERT INTO Country VALUES ('ATA','Antarctica','Antarctica','Antarctica',13120000.00,0,0,NULL,0.00,NULL,'�','Co-administrated','',NULL,'AQ');
-INSERT INTO Country VALUES ('BVT','Bouvet Island','Antarctica','Antarctica',59.00,0,0,NULL,0.00,NULL,'Bouvet�ya','Dependent Territory of Norway','Harald V',NULL,'BV');
-INSERT INTO Country VALUES ('IOT','British Indian Ocean Territory','Africa','Eastern Africa',78.00,0,0,NULL,0.00,NULL,'British Indian Ocean Territory','Dependent Territory of the UK','Elisabeth II',NULL,'IO');
-INSERT INTO Country VALUES ('SGS','South Georgia and the South Sandwich Islands','Antarctica','Antarctica',3903.00,0,0,NULL,0.00,NULL,'South Georgia and the South Sandwich Islands','Dependent Territory of the UK','Elisabeth II',NULL,'GS');
-INSERT INTO Country VALUES ('HMD','Heard Island and McDonald Islands','Antarctica','Antarctica',359.00,0,0,NULL,0.00,NULL,'Heard and McDonald Islands','Territory of Australia','Elisabeth II',NULL,'HM');
-INSERT INTO Country VALUES ('ATF','French Southern territories','Antarctica','Antarctica',7780.00,0,0,NULL,0.00,NULL,'Terres australes fran�aises','Nonmetropolitan Territory of France','Jacques Chirac',NULL,'TF');
-INSERT INTO Country VALUES ('UMI','United States Minor Outlying Islands','Oceania','Micronesia/Caribbean',16.00,0,0,NULL,0.00,NULL,'United States Minor Outlying Islands','Dependent Territory of the US','George W. Bush',NULL,'UM');
-
-/*!40000 ALTER TABLE Country ENABLE KEYS */;
-
---
--- Table structure for table 'CountryLanguage'
---
-
-CREATE TABLE CountryLanguage (
- Country char(3) NOT NULL default '',
- Language char(30) NOT NULL default '',
- IsOfficial enum('T','F') NOT NULL default 'F',
- Percentage float(3,1) NOT NULL default '0.0',
- PRIMARY KEY (Country,Language)
-) TYPE=MyISAM;
-
-/*!40000 ALTER TABLE CountryLanguage DISABLE KEYS */;
-
---
--- Dumping data for table 'CountryLanguage'
---
-
-
-INSERT INTO CountryLanguage VALUES ('AFG','Pashto','T',52.4);
-INSERT INTO CountryLanguage VALUES ('NLD','Dutch','T',95.6);
-INSERT INTO CountryLanguage VALUES ('ANT','Papiamento','T',86.2);
-INSERT INTO CountryLanguage VALUES ('ALB','Albaniana','T',97.9);
-INSERT INTO CountryLanguage VALUES ('DZA','Arabic','T',86.0);
-INSERT INTO CountryLanguage VALUES ('ASM','Samoan','T',90.6);
-INSERT INTO CountryLanguage VALUES ('AND','Spanish','F',44.6);
-INSERT INTO CountryLanguage VALUES ('AGO','Ovimbundu','F',37.2);
-INSERT INTO CountryLanguage VALUES ('AIA','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('ATG','Creole English','F',95.7);
-INSERT INTO CountryLanguage VALUES ('ARE','Arabic','T',42.0);
-INSERT INTO CountryLanguage VALUES ('ARG','Spanish','T',96.8);
-INSERT INTO CountryLanguage VALUES ('ARM','Armenian','T',93.4);
-INSERT INTO CountryLanguage VALUES ('ABW','Papiamento','F',76.7);
-INSERT INTO CountryLanguage VALUES ('AUS','English','T',81.2);
-INSERT INTO CountryLanguage VALUES ('AZE','Azerbaijani','T',89.0);
-INSERT INTO CountryLanguage VALUES ('BHS','Creole English','F',89.7);
-INSERT INTO CountryLanguage VALUES ('BHR','Arabic','T',67.7);
-INSERT INTO CountryLanguage VALUES ('BGD','Bengali','T',97.7);
-INSERT INTO CountryLanguage VALUES ('BRB','Bajan','F',95.1);
-INSERT INTO CountryLanguage VALUES ('BEL','Dutch','T',59.2);
-INSERT INTO CountryLanguage VALUES ('BLZ','English','T',50.8);
-INSERT INTO CountryLanguage VALUES ('BEN','Fon','F',39.8);
-INSERT INTO CountryLanguage VALUES ('BMU','English','T',100.0);
-INSERT INTO CountryLanguage VALUES ('BTN','Dzongkha','T',50.0);
-INSERT INTO CountryLanguage VALUES ('BOL','Spanish','T',87.7);
-INSERT INTO CountryLanguage VALUES ('BIH','Serbo-Croatian','T',99.2);
-INSERT INTO CountryLanguage VALUES ('BWA','Tswana','F',75.5);
-INSERT INTO CountryLanguage VALUES ('BRA','Portuguese','T',97.5);
-INSERT INTO CountryLanguage VALUES ('GBR','English','T',97.3);
-INSERT INTO CountryLanguage VALUES ('VGB','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('BRN','Malay','T',45.5);
-INSERT INTO CountryLanguage VALUES ('BGR','Bulgariana','T',83.2);
-INSERT INTO CountryLanguage VALUES ('BFA','Mossi','F',50.2);
-INSERT INTO CountryLanguage VALUES ('BDI','Kirundi','T',98.1);
-INSERT INTO CountryLanguage VALUES ('CYM','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('CHL','Spanish','T',89.7);
-INSERT INTO CountryLanguage VALUES ('COK','Maori','T',0.0);
-INSERT INTO CountryLanguage VALUES ('CRI','Spanish','T',97.5);
-INSERT INTO CountryLanguage VALUES ('DJI','Somali','F',43.9);
-INSERT INTO CountryLanguage VALUES ('DMA','Creole English','F',100.0);
-INSERT INTO CountryLanguage VALUES ('DOM','Spanish','T',98.0);
-INSERT INTO CountryLanguage VALUES ('ECU','Spanish','T',93.0);
-INSERT INTO CountryLanguage VALUES ('EGY','Arabic','T',98.8);
-INSERT INTO CountryLanguage VALUES ('SLV','Spanish','T',100.0);
-INSERT INTO CountryLanguage VALUES ('ERI','Tigrinja','T',49.1);
-INSERT INTO CountryLanguage VALUES ('ESP','Spanish','T',74.4);
-INSERT INTO CountryLanguage VALUES ('ZAF','Zulu','T',22.7);
-INSERT INTO CountryLanguage VALUES ('ETH','Oromo','F',31.0);
-INSERT INTO CountryLanguage VALUES ('FLK','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('FJI','Fijian','T',50.8);
-INSERT INTO CountryLanguage VALUES ('PHL','Pilipino','T',29.3);
-INSERT INTO CountryLanguage VALUES ('FRO','Faroese','T',100.0);
-INSERT INTO CountryLanguage VALUES ('GAB','Fang','F',35.8);
-INSERT INTO CountryLanguage VALUES ('GMB','Malinke','F',34.1);
-INSERT INTO CountryLanguage VALUES ('GEO','Georgiana','T',71.7);
-INSERT INTO CountryLanguage VALUES ('GHA','Akan','F',52.4);
-INSERT INTO CountryLanguage VALUES ('GIB','English','T',88.9);
-INSERT INTO CountryLanguage VALUES ('GRD','Creole English','F',100.0);
-INSERT INTO CountryLanguage VALUES ('GRL','Greenlandic','T',87.5);
-INSERT INTO CountryLanguage VALUES ('GLP','Creole French','F',95.0);
-INSERT INTO CountryLanguage VALUES ('GUM','English','T',37.5);
-INSERT INTO CountryLanguage VALUES ('GTM','Spanish','T',64.7);
-INSERT INTO CountryLanguage VALUES ('GIN','Ful','F',38.6);
-INSERT INTO CountryLanguage VALUES ('GNB','Crioulo','F',36.4);
-INSERT INTO CountryLanguage VALUES ('GUY','Creole English','F',96.4);
-INSERT INTO CountryLanguage VALUES ('HTI','Haiti Creole','F',100.0);
-INSERT INTO CountryLanguage VALUES ('HND','Spanish','T',97.2);
-INSERT INTO CountryLanguage VALUES ('HKG','Canton Chinese','F',88.7);
-INSERT INTO CountryLanguage VALUES ('SJM','Norwegian','T',0.0);
-INSERT INTO CountryLanguage VALUES ('IDN','Javanese','F',39.4);
-INSERT INTO CountryLanguage VALUES ('IND','Hindi','T',39.9);
-INSERT INTO CountryLanguage VALUES ('IRQ','Arabic','T',77.2);
-INSERT INTO CountryLanguage VALUES ('IRN','Persian','T',45.7);
-INSERT INTO CountryLanguage VALUES ('IRL','English','T',98.4);
-INSERT INTO CountryLanguage VALUES ('ISL','Icelandic','T',95.7);
-INSERT INTO CountryLanguage VALUES ('ISR','Hebrew','T',63.1);
-INSERT INTO CountryLanguage VALUES ('ITA','Italian','T',94.1);
-INSERT INTO CountryLanguage VALUES ('TMP','Sunda','F',0.0);
-INSERT INTO CountryLanguage VALUES ('AUT','German','T',92.0);
-INSERT INTO CountryLanguage VALUES ('JAM','Creole English','F',94.2);
-INSERT INTO CountryLanguage VALUES ('JPN','Japanese','T',99.1);
-INSERT INTO CountryLanguage VALUES ('YEM','Arabic','T',99.6);
-INSERT INTO CountryLanguage VALUES ('JOR','Arabic','T',97.9);
-INSERT INTO CountryLanguage VALUES ('CXR','Chinese','F',0.0);
-INSERT INTO CountryLanguage VALUES ('YUG','Serbo-Croatian','T',75.2);
-INSERT INTO CountryLanguage VALUES ('KHM','Khmer','T',88.6);
-INSERT INTO CountryLanguage VALUES ('CMR','Fang','F',19.7);
-INSERT INTO CountryLanguage VALUES ('CAN','English','T',60.4);
-INSERT INTO CountryLanguage VALUES ('CPV','Crioulo','F',100.0);
-INSERT INTO CountryLanguage VALUES ('KAZ','Kazakh','T',46.0);
-INSERT INTO CountryLanguage VALUES ('KEN','Kikuyu','F',20.9);
-INSERT INTO CountryLanguage VALUES ('CAF','Gbaya','F',23.8);
-INSERT INTO CountryLanguage VALUES ('CHN','Chinese','T',92.0);
-INSERT INTO CountryLanguage VALUES ('KGZ','Kirgiz','T',59.7);
-INSERT INTO CountryLanguage VALUES ('KIR','Kiribati','T',98.9);
-INSERT INTO CountryLanguage VALUES ('COL','Spanish','T',99.0);
-INSERT INTO CountryLanguage VALUES ('COM','Comorian','T',75.0);
-INSERT INTO CountryLanguage VALUES ('COG','Kongo','F',51.5);
-INSERT INTO CountryLanguage VALUES ('COD','Luba','F',18.0);
-INSERT INTO CountryLanguage VALUES ('CCK','Malay','F',0.0);
-INSERT INTO CountryLanguage VALUES ('PRK','Korean','T',99.9);
-INSERT INTO CountryLanguage VALUES ('KOR','Korean','T',99.9);
-INSERT INTO CountryLanguage VALUES ('GRC','Greek','T',98.5);
-INSERT INTO CountryLanguage VALUES ('HRV','Serbo-Croatian','T',95.9);
-INSERT INTO CountryLanguage VALUES ('CUB','Spanish','T',100.0);
-INSERT INTO CountryLanguage VALUES ('KWT','Arabic','T',78.1);
-INSERT INTO CountryLanguage VALUES ('CYP','Greek','T',74.1);
-INSERT INTO CountryLanguage VALUES ('LAO','Lao','T',67.2);
-INSERT INTO CountryLanguage VALUES ('LVA','Latvian','T',55.1);
-INSERT INTO CountryLanguage VALUES ('LSO','Sotho','T',85.0);
-INSERT INTO CountryLanguage VALUES ('LBN','Arabic','T',93.0);
-INSERT INTO CountryLanguage VALUES ('LBR','Kpelle','F',19.5);
-INSERT INTO CountryLanguage VALUES ('LBY','Arabic','T',96.0);
-INSERT INTO CountryLanguage VALUES ('LIE','German','T',89.0);
-INSERT INTO CountryLanguage VALUES ('LTU','Lithuanian','T',81.6);
-INSERT INTO CountryLanguage VALUES ('LUX','Luxembourgish','T',64.4);
-INSERT INTO CountryLanguage VALUES ('ESH','Arabic','T',100.0);
-INSERT INTO CountryLanguage VALUES ('MAC','Canton Chinese','F',85.6);
-INSERT INTO CountryLanguage VALUES ('MDG','Malagasy','T',98.9);
-INSERT INTO CountryLanguage VALUES ('MKD','Macedonian','T',66.5);
-INSERT INTO CountryLanguage VALUES ('MWI','Chichewa','T',58.3);
-INSERT INTO CountryLanguage VALUES ('MDV','Dhivehi','T',100.0);
-INSERT INTO CountryLanguage VALUES ('MYS','Malay','T',58.4);
-INSERT INTO CountryLanguage VALUES ('MLI','Bambara','F',31.8);
-INSERT INTO CountryLanguage VALUES ('MLT','Maltese','T',95.8);
-INSERT INTO CountryLanguage VALUES ('MAR','Arabic','T',65.0);
-INSERT INTO CountryLanguage VALUES ('MHL','Marshallese','T',96.8);
-INSERT INTO CountryLanguage VALUES ('MTQ','Creole French','F',96.6);
-INSERT INTO CountryLanguage VALUES ('MRT','Hassaniya','F',81.7);
-INSERT INTO CountryLanguage VALUES ('MUS','Creole French','F',70.6);
-INSERT INTO CountryLanguage VALUES ('MYT','Mahor�','F',41.9);
-INSERT INTO CountryLanguage VALUES ('MEX','Spanish','T',92.1);
-INSERT INTO CountryLanguage VALUES ('FSM','Trukese','F',41.6);
-INSERT INTO CountryLanguage VALUES ('MDA','Romanian','T',61.9);
-INSERT INTO CountryLanguage VALUES ('MCO','French','T',41.9);
-INSERT INTO CountryLanguage VALUES ('MNG','Mongolian','T',78.8);
-INSERT INTO CountryLanguage VALUES ('MSR','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('MOZ','Makua','F',27.8);
-INSERT INTO CountryLanguage VALUES ('MMR','Burmese','T',69.0);
-INSERT INTO CountryLanguage VALUES ('NAM','Ovambo','F',50.7);
-INSERT INTO CountryLanguage VALUES ('NRU','Nauru','T',57.5);
-INSERT INTO CountryLanguage VALUES ('NPL','Nepali','T',50.4);
-INSERT INTO CountryLanguage VALUES ('NIC','Spanish','T',97.6);
-INSERT INTO CountryLanguage VALUES ('NER','Hausa','F',53.1);
-INSERT INTO CountryLanguage VALUES ('NGA','Joruba','F',21.4);
-INSERT INTO CountryLanguage VALUES ('NIU','Niue','F',0.0);
-INSERT INTO CountryLanguage VALUES ('NFK','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('NOR','Norwegian','T',96.6);
-INSERT INTO CountryLanguage VALUES ('CIV','Akan','F',30.0);
-INSERT INTO CountryLanguage VALUES ('OMN','Arabic','T',76.7);
-INSERT INTO CountryLanguage VALUES ('PAK','Punjabi','F',48.2);
-INSERT INTO CountryLanguage VALUES ('PLW','Palau','T',82.2);
-INSERT INTO CountryLanguage VALUES ('PAN','Spanish','T',76.8);
-INSERT INTO CountryLanguage VALUES ('PNG','Papuan Languages','F',78.1);
-INSERT INTO CountryLanguage VALUES ('PRY','Spanish','T',55.1);
-INSERT INTO CountryLanguage VALUES ('PER','Spanish','T',79.8);
-INSERT INTO CountryLanguage VALUES ('PCN','Pitcairnese','F',0.0);
-INSERT INTO CountryLanguage VALUES ('MNP','Philippene Languages','F',34.1);
-INSERT INTO CountryLanguage VALUES ('PRT','Portuguese','T',99.0);
-INSERT INTO CountryLanguage VALUES ('PRI','Spanish','T',51.3);
-INSERT INTO CountryLanguage VALUES ('POL','Polish','T',97.6);
-INSERT INTO CountryLanguage VALUES ('GNQ','Fang','F',84.8);
-INSERT INTO CountryLanguage VALUES ('QAT','Arabic','T',40.7);
-INSERT INTO CountryLanguage VALUES ('FRA','French','T',93.6);
-INSERT INTO CountryLanguage VALUES ('GUF','Creole French','F',94.3);
-INSERT INTO CountryLanguage VALUES ('PYF','Tahitian','F',46.4);
-INSERT INTO CountryLanguage VALUES ('REU','Creole French','F',91.5);
-INSERT INTO CountryLanguage VALUES ('ROM','Romanian','T',90.7);
-INSERT INTO CountryLanguage VALUES ('RWA','Rwanda','T',100.0);
-INSERT INTO CountryLanguage VALUES ('SWE','Swedish','T',89.5);
-INSERT INTO CountryLanguage VALUES ('SHN','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('KNA','Creole English','F',100.0);
-INSERT INTO CountryLanguage VALUES ('LCA','Creole French','F',80.0);
-INSERT INTO CountryLanguage VALUES ('VCT','Creole English','F',99.1);
-INSERT INTO CountryLanguage VALUES ('SPM','French','T',0.0);
-INSERT INTO CountryLanguage VALUES ('DEU','German','T',91.3);
-INSERT INTO CountryLanguage VALUES ('SLB','Malenasian Languages','F',85.6);
-INSERT INTO CountryLanguage VALUES ('ZMB','Bemba','F',29.7);
-INSERT INTO CountryLanguage VALUES ('WSM','Samoan-English','F',52.0);
-INSERT INTO CountryLanguage VALUES ('SMR','Italian','T',100.0);
-INSERT INTO CountryLanguage VALUES ('STP','Crioulo','F',86.3);
-INSERT INTO CountryLanguage VALUES ('SAU','Arabic','T',95.0);
-INSERT INTO CountryLanguage VALUES ('SEN','Wolof','T',48.1);
-INSERT INTO CountryLanguage VALUES ('SYC','Seselwa','F',91.3);
-INSERT INTO CountryLanguage VALUES ('SLE','Mende','F',34.8);
-INSERT INTO CountryLanguage VALUES ('SGP','Chinese','T',77.1);
-INSERT INTO CountryLanguage VALUES ('SVK','Slovak','T',85.6);
-INSERT INTO CountryLanguage VALUES ('SVN','Slovene','T',87.9);
-INSERT INTO CountryLanguage VALUES ('SOM','Somali','T',98.3);
-INSERT INTO CountryLanguage VALUES ('LKA','Singali','T',60.3);
-INSERT INTO CountryLanguage VALUES ('SDN','Arabic','T',49.4);
-INSERT INTO CountryLanguage VALUES ('FIN','Finnish','T',92.7);
-INSERT INTO CountryLanguage VALUES ('SUR','Sranantonga','F',81.0);
-INSERT INTO CountryLanguage VALUES ('SWZ','Swazi','T',89.9);
-INSERT INTO CountryLanguage VALUES ('CHE','German','T',63.6);
-INSERT INTO CountryLanguage VALUES ('SYR','Arabic','T',90.0);
-INSERT INTO CountryLanguage VALUES ('TJK','Tadzhik','T',62.2);
-INSERT INTO CountryLanguage VALUES ('TWN','Min','F',66.7);
-INSERT INTO CountryLanguage VALUES ('TZA','Nyamwesi','F',21.1);
-INSERT INTO CountryLanguage VALUES ('DNK','Danish','T',93.5);
-INSERT INTO CountryLanguage VALUES ('THA','Thai','T',52.6);
-INSERT INTO CountryLanguage VALUES ('TGO','Ewe','T',23.2);
-INSERT INTO CountryLanguage VALUES ('TKL','Tokelau','F',0.0);
-INSERT INTO CountryLanguage VALUES ('TON','Tongan','T',98.3);
-INSERT INTO CountryLanguage VALUES ('TTO','English','F',93.5);
-INSERT INTO CountryLanguage VALUES ('TCD','Sara','F',27.7);
-INSERT INTO CountryLanguage VALUES ('CZE','Czech','T',81.2);
-INSERT INTO CountryLanguage VALUES ('TUN','Arabic','T',69.9);
-INSERT INTO CountryLanguage VALUES ('TUR','Turkish','T',87.6);
-INSERT INTO CountryLanguage VALUES ('TKM','Turkmenian','T',76.7);
-INSERT INTO CountryLanguage VALUES ('TCA','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('TUV','Tuvalu','T',92.5);
-INSERT INTO CountryLanguage VALUES ('UGA','Ganda','F',18.1);
-INSERT INTO CountryLanguage VALUES ('UKR','Ukrainian','T',64.7);
-INSERT INTO CountryLanguage VALUES ('HUN','Hungarian','T',98.5);
-INSERT INTO CountryLanguage VALUES ('URY','Spanish','T',95.7);
-INSERT INTO CountryLanguage VALUES ('NCL','Malenasian Languages','F',45.4);
-INSERT INTO CountryLanguage VALUES ('NZL','English','T',87.0);
-INSERT INTO CountryLanguage VALUES ('UZB','Uzbek','T',72.6);
-INSERT INTO CountryLanguage VALUES ('BLR','Belorussian','T',65.6);
-INSERT INTO CountryLanguage VALUES ('WLF','Wallis','F',0.0);
-INSERT INTO CountryLanguage VALUES ('VUT','Bislama','T',56.6);
-INSERT INTO CountryLanguage VALUES ('VAT','Italian','T',0.0);
-INSERT INTO CountryLanguage VALUES ('VEN','Spanish','T',96.9);
-INSERT INTO CountryLanguage VALUES ('RUS','Russian','T',86.6);
-INSERT INTO CountryLanguage VALUES ('VNM','Vietnamese','T',86.8);
-INSERT INTO CountryLanguage VALUES ('EST','Estonian','T',65.3);
-INSERT INTO CountryLanguage VALUES ('USA','English','T',86.2);
-INSERT INTO CountryLanguage VALUES ('VIR','English','T',81.7);
-INSERT INTO CountryLanguage VALUES ('UMI','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('ZWE','Shona','F',72.1);
-INSERT INTO CountryLanguage VALUES ('PSE','Arabic','F',95.9);
-INSERT INTO CountryLanguage VALUES ('AFG','Dari','T',32.1);
-INSERT INTO CountryLanguage VALUES ('NLD','Fries','F',3.7);
-INSERT INTO CountryLanguage VALUES ('ANT','English','F',7.8);
-INSERT INTO CountryLanguage VALUES ('ALB','Greek','F',1.8);
-INSERT INTO CountryLanguage VALUES ('DZA','Berberi','F',14.0);
-INSERT INTO CountryLanguage VALUES ('ASM','English','T',3.1);
-INSERT INTO CountryLanguage VALUES ('AND','Catalan','T',32.3);
-INSERT INTO CountryLanguage VALUES ('AGO','Mbundu','F',21.6);
-INSERT INTO CountryLanguage VALUES ('ATG','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('ARE','Hindi','F',0.0);
-INSERT INTO CountryLanguage VALUES ('ARG','Italian','F',1.7);
-INSERT INTO CountryLanguage VALUES ('ARM','Azerbaijani','F',2.6);
-INSERT INTO CountryLanguage VALUES ('ABW','English','F',9.5);
-INSERT INTO CountryLanguage VALUES ('AUS','Italian','F',2.2);
-INSERT INTO CountryLanguage VALUES ('AZE','Russian','F',3.0);
-INSERT INTO CountryLanguage VALUES ('BHS','Creole French','F',10.3);
-INSERT INTO CountryLanguage VALUES ('BHR','English','F',0.0);
-INSERT INTO CountryLanguage VALUES ('BGD','Chakma','F',0.4);
-INSERT INTO CountryLanguage VALUES ('BRB','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('BEL','French','T',32.6);
-INSERT INTO CountryLanguage VALUES ('BLZ','Spanish','F',31.6);
-INSERT INTO CountryLanguage VALUES ('BEN','Joruba','F',12.2);
-INSERT INTO CountryLanguage VALUES ('BTN','Nepali','F',34.8);
-INSERT INTO CountryLanguage VALUES ('BOL','Ket�ua','T',8.1);
-INSERT INTO CountryLanguage VALUES ('BWA','Shona','F',12.3);
-INSERT INTO CountryLanguage VALUES ('BRA','German','F',0.5);
-INSERT INTO CountryLanguage VALUES ('GBR','Kymri','F',0.9);
-INSERT INTO CountryLanguage VALUES ('BRN','Malay-English','F',28.8);
-INSERT INTO CountryLanguage VALUES ('BGR','Turkish','F',9.4);
-INSERT INTO CountryLanguage VALUES ('BFA','Ful','F',9.7);
-INSERT INTO CountryLanguage VALUES ('BDI','French','T',0.0);
-INSERT INTO CountryLanguage VALUES ('CHL','Araucan','F',9.6);
-INSERT INTO CountryLanguage VALUES ('COK','English','F',0.0);
-INSERT INTO CountryLanguage VALUES ('CRI','Creole English','F',2.0);
-INSERT INTO CountryLanguage VALUES ('DJI','Afar','F',34.8);
-INSERT INTO CountryLanguage VALUES ('DMA','Creole French','F',0.0);
-INSERT INTO CountryLanguage VALUES ('DOM','Creole French','F',2.0);
-INSERT INTO CountryLanguage VALUES ('ECU','Ket�ua','F',7.0);
-INSERT INTO CountryLanguage VALUES ('EGY','Sinaberberi','F',0.0);
-INSERT INTO CountryLanguage VALUES ('SLV','Nahua','F',0.0);
-INSERT INTO CountryLanguage VALUES ('ERI','Tigre','F',31.7);
-INSERT INTO CountryLanguage VALUES ('ESP','Catalan','F',16.9);
-INSERT INTO CountryLanguage VALUES ('ZAF','Xhosa','T',17.7);
-INSERT INTO CountryLanguage VALUES ('ETH','Amhara','F',30.0);
-INSERT INTO CountryLanguage VALUES ('FJI','Hindi','F',43.7);
-INSERT INTO CountryLanguage VALUES ('PHL','Cebuano','F',23.3);
-INSERT INTO CountryLanguage VALUES ('FRO','Danish','T',0.0);
-INSERT INTO CountryLanguage VALUES ('GAB','Punu-sira-nzebi','F',17.1);
-INSERT INTO CountryLanguage VALUES ('GMB','Ful','F',16.2);
-INSERT INTO CountryLanguage VALUES ('GEO','Russian','F',8.8);
-INSERT INTO CountryLanguage VALUES ('GHA','Mossi','F',15.8);
-INSERT INTO CountryLanguage VALUES ('GIB','Arabic','F',7.4);
-INSERT INTO CountryLanguage VALUES ('GRL','Danish','T',12.5);
-INSERT INTO CountryLanguage VALUES ('GLP','French','T',0.0);
-INSERT INTO CountryLanguage VALUES ('GUM','Chamorro','T',29.6);
-INSERT INTO CountryLanguage VALUES ('GTM','Quich�','F',10.1);
-INSERT INTO CountryLanguage VALUES ('GIN','Malinke','F',23.2);
-INSERT INTO CountryLanguage VALUES ('GNB','Ful','F',16.6);
-INSERT INTO CountryLanguage VALUES ('GUY','Caribbean','F',2.2);
-INSERT INTO CountryLanguage VALUES ('HTI','French','T',0.0);
-INSERT INTO CountryLanguage VALUES ('HND','Garifuna','F',1.3);
-INSERT INTO CountryLanguage VALUES ('HKG','English','T',2.2);
-INSERT INTO CountryLanguage VALUES ('SJM','Russian','F',0.0);
-INSERT INTO CountryLanguage VALUES ('IDN','Sunda','F',15.8);
-INSERT INTO CountryLanguage VALUES ('IND','Bengali','F',8.2);
-INSERT INTO CountryLanguage VALUES ('IRQ','Kurdish','F',19.0);
-INSERT INTO CountryLanguage VALUES ('IRN','Azerbaijani','F',16.8);
-INSERT INTO CountryLanguage VALUES ('IRL','Irish','T',1.6);
-INSERT INTO CountryLanguage VALUES ('ISL','English','F',0.0);
-INSERT INTO CountryLanguage VALUES ('ISR','Arabic','T',18.0);
-INSERT INTO CountryLanguage VALUES ('ITA','Sardinian','F',2.7);
-INSERT INTO CountryLanguage VALUES ('TMP','Portuguese','T',0.0);
-INSERT INTO CountryLanguage VALUES ('AUT','Serbo-Croatian','F',2.2);
-INSERT INTO CountryLanguage VALUES ('JAM','Hindi','F',1.9);
-INSERT INTO CountryLanguage VALUES ('JPN','Korean','F',0.5);
-INSERT INTO CountryLanguage VALUES ('YEM','Soqutri','F',0.0);
-INSERT INTO CountryLanguage VALUES ('JOR','Circassian','F',1.0);
-INSERT INTO CountryLanguage VALUES ('CXR','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('YUG','Albaniana','F',16.5);
-INSERT INTO CountryLanguage VALUES ('KHM','Vietnamese','F',5.5);
-INSERT INTO CountryLanguage VALUES ('CMR','Bamileke-bamum','F',18.6);
-INSERT INTO CountryLanguage VALUES ('CAN','French','T',23.4);
-INSERT INTO CountryLanguage VALUES ('CPV','Portuguese','T',0.0);
-INSERT INTO CountryLanguage VALUES ('KAZ','Russian','F',34.7);
-INSERT INTO CountryLanguage VALUES ('KEN','Luhya','F',13.8);
-INSERT INTO CountryLanguage VALUES ('CAF','Banda','F',23.5);
-INSERT INTO CountryLanguage VALUES ('CHN','Zhuang','F',1.4);
-INSERT INTO CountryLanguage VALUES ('KGZ','Russian','T',16.2);
-INSERT INTO CountryLanguage VALUES ('KIR','Tuvalu','F',0.5);
-INSERT INTO CountryLanguage VALUES ('COL','Chibcha','F',0.4);
-INSERT INTO CountryLanguage VALUES ('COM','Comorian-French','F',12.9);
-INSERT INTO CountryLanguage VALUES ('COG','Teke','F',17.3);
-INSERT INTO CountryLanguage VALUES ('COD','Kongo','F',16.0);
-INSERT INTO CountryLanguage VALUES ('CCK','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('PRK','Chinese','F',0.1);
-INSERT INTO CountryLanguage VALUES ('KOR','Chinese','F',0.1);
-INSERT INTO CountryLanguage VALUES ('GRC','Turkish','F',0.9);
-INSERT INTO CountryLanguage VALUES ('HRV','Slovene','F',0.0);
-INSERT INTO CountryLanguage VALUES ('KWT','English','F',0.0);
-INSERT INTO CountryLanguage VALUES ('CYP','Turkish','T',22.4);
-INSERT INTO CountryLanguage VALUES ('LAO','Mon-khmer','F',16.5);
-INSERT INTO CountryLanguage VALUES ('LVA','Russian','F',32.5);
-INSERT INTO CountryLanguage VALUES ('LSO','Zulu','F',15.0);
-INSERT INTO CountryLanguage VALUES ('LBN','Armenian','F',5.9);
-INSERT INTO CountryLanguage VALUES ('LBR','Bassa','F',13.7);
-INSERT INTO CountryLanguage VALUES ('LBY','Berberi','F',1.0);
-INSERT INTO CountryLanguage VALUES ('LIE','Italian','F',2.5);
-INSERT INTO CountryLanguage VALUES ('LTU','Russian','F',8.1);
-INSERT INTO CountryLanguage VALUES ('LUX','Portuguese','F',13.0);
-INSERT INTO CountryLanguage VALUES ('MAC','Portuguese','T',2.3);
-INSERT INTO CountryLanguage VALUES ('MDG','French','T',0.0);
-INSERT INTO CountryLanguage VALUES ('MKD','Albaniana','F',22.9);
-INSERT INTO CountryLanguage VALUES ('MWI','Lomwe','F',18.4);
-INSERT INTO CountryLanguage VALUES ('MDV','English','F',0.0);
-INSERT INTO CountryLanguage VALUES ('MYS','Chinese','F',9.0);
-INSERT INTO CountryLanguage VALUES ('MLI','Ful','F',13.9);
-INSERT INTO CountryLanguage VALUES ('MLT','English','T',2.1);
-INSERT INTO CountryLanguage VALUES ('MAR','Berberi','F',33.0);
-INSERT INTO CountryLanguage VALUES ('MHL','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('MTQ','French','T',0.0);
-INSERT INTO CountryLanguage VALUES ('MRT','Wolof','F',6.6);
-INSERT INTO CountryLanguage VALUES ('MUS','Bhojpuri','F',21.1);
-INSERT INTO CountryLanguage VALUES ('MYT','French','T',20.3);
-INSERT INTO CountryLanguage VALUES ('MEX','N�huatl','F',1.8);
-INSERT INTO CountryLanguage VALUES ('FSM','Pohnpei','F',23.8);
-INSERT INTO CountryLanguage VALUES ('MDA','Russian','F',23.2);
-INSERT INTO CountryLanguage VALUES ('MCO','Monegasque','F',16.1);
-INSERT INTO CountryLanguage VALUES ('MNG','Kazakh','F',5.9);
-INSERT INTO CountryLanguage VALUES ('MOZ','Tsonga','F',12.4);
-INSERT INTO CountryLanguage VALUES ('MMR','Shan','F',8.5);
-INSERT INTO CountryLanguage VALUES ('NAM','Nama','F',12.4);
-INSERT INTO CountryLanguage VALUES ('NRU','Kiribati','F',17.9);
-INSERT INTO CountryLanguage VALUES ('NPL','Maithili','F',11.9);
-INSERT INTO CountryLanguage VALUES ('NIC','Miskito','F',1.6);
-INSERT INTO CountryLanguage VALUES ('NER','Songhai-zerma','F',21.2);
-INSERT INTO CountryLanguage VALUES ('NGA','Hausa','F',21.1);
-INSERT INTO CountryLanguage VALUES ('NIU','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('NOR','English','F',0.5);
-INSERT INTO CountryLanguage VALUES ('CIV','Gur','F',11.7);
-INSERT INTO CountryLanguage VALUES ('OMN','Balochi','F',0.0);
-INSERT INTO CountryLanguage VALUES ('PAK','Pashto','F',13.1);
-INSERT INTO CountryLanguage VALUES ('PLW','Philippene Languages','F',9.2);
-INSERT INTO CountryLanguage VALUES ('PAN','Creole English','F',14.0);
-INSERT INTO CountryLanguage VALUES ('PNG','Malenasian Languages','F',20.0);
-INSERT INTO CountryLanguage VALUES ('PRY','Guaran�','T',40.1);
-INSERT INTO CountryLanguage VALUES ('PER','Ket�ua','T',16.4);
-INSERT INTO CountryLanguage VALUES ('MNP','Chamorro','F',30.0);
-INSERT INTO CountryLanguage VALUES ('PRI','English','F',47.4);
-INSERT INTO CountryLanguage VALUES ('POL','German','F',1.3);
-INSERT INTO CountryLanguage VALUES ('GNQ','Bubi','F',8.7);
-INSERT INTO CountryLanguage VALUES ('QAT','Urdu','F',0.0);
-INSERT INTO CountryLanguage VALUES ('FRA','Arabic','F',2.5);
-INSERT INTO CountryLanguage VALUES ('GUF','Indian Languages','F',1.9);
-INSERT INTO CountryLanguage VALUES ('PYF','French','T',40.8);
-INSERT INTO CountryLanguage VALUES ('REU','Chinese','F',2.8);
-INSERT INTO CountryLanguage VALUES ('ROM','Hungarian','F',7.2);
-INSERT INTO CountryLanguage VALUES ('RWA','French','T',0.0);
-INSERT INTO CountryLanguage VALUES ('SWE','Finnish','F',2.4);
-INSERT INTO CountryLanguage VALUES ('KNA','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('LCA','English','T',20.0);
-INSERT INTO CountryLanguage VALUES ('VCT','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('DEU','Turkish','F',2.6);
-INSERT INTO CountryLanguage VALUES ('SLB','Papuan Languages','F',8.6);
-INSERT INTO CountryLanguage VALUES ('ZMB','Tongan','F',11.0);
-INSERT INTO CountryLanguage VALUES ('WSM','Samoan','T',47.5);
-INSERT INTO CountryLanguage VALUES ('STP','French','F',0.7);
-INSERT INTO CountryLanguage VALUES ('SEN','Ful','F',21.7);
-INSERT INTO CountryLanguage VALUES ('SYC','English','T',3.8);
-INSERT INTO CountryLanguage VALUES ('SLE','Temne','F',31.8);
-INSERT INTO CountryLanguage VALUES ('SGP','Malay','T',14.1);
-INSERT INTO CountryLanguage VALUES ('SVK','Hungarian','F',10.5);
-INSERT INTO CountryLanguage VALUES ('SVN','Serbo-Croatian','F',7.9);
-INSERT INTO CountryLanguage VALUES ('SOM','Arabic','T',0.0);
-INSERT INTO CountryLanguage VALUES ('LKA','Tamil','T',19.6);
-INSERT INTO CountryLanguage VALUES ('SDN','Dinka','F',11.5);
-INSERT INTO CountryLanguage VALUES ('FIN','Swedish','T',5.7);
-INSERT INTO CountryLanguage VALUES ('SUR','Hindi','F',0.0);
-INSERT INTO CountryLanguage VALUES ('SWZ','Zulu','F',2.0);
-INSERT INTO CountryLanguage VALUES ('CHE','French','T',19.2);
-INSERT INTO CountryLanguage VALUES ('SYR','Kurdish','F',9.0);
-INSERT INTO CountryLanguage VALUES ('TJK','Uzbek','F',23.2);
-INSERT INTO CountryLanguage VALUES ('TWN','Mandarin Chinese','T',20.1);
-INSERT INTO CountryLanguage VALUES ('TZA','Swahili','T',8.8);
-INSERT INTO CountryLanguage VALUES ('DNK','Turkish','F',0.8);
-INSERT INTO CountryLanguage VALUES ('THA','Lao','F',26.9);
-INSERT INTO CountryLanguage VALUES ('TGO','Kaby�','T',13.8);
-INSERT INTO CountryLanguage VALUES ('TKL','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('TON','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('TTO','Hindi','F',3.4);
-INSERT INTO CountryLanguage VALUES ('TCD','Arabic','T',12.3);
-INSERT INTO CountryLanguage VALUES ('CZE','Moravian','F',12.9);
-INSERT INTO CountryLanguage VALUES ('TUN','Arabic-French','F',26.3);
-INSERT INTO CountryLanguage VALUES ('TUR','Kurdish','F',10.6);
-INSERT INTO CountryLanguage VALUES ('TKM','Uzbek','F',9.2);
-INSERT INTO CountryLanguage VALUES ('TUV','Kiribati','F',7.5);
-INSERT INTO CountryLanguage VALUES ('UGA','Nkole','F',10.7);
-INSERT INTO CountryLanguage VALUES ('UKR','Russian','F',32.9);
-INSERT INTO CountryLanguage VALUES ('HUN','Romani','F',0.5);
-INSERT INTO CountryLanguage VALUES ('NCL','French','T',34.3);
-INSERT INTO CountryLanguage VALUES ('NZL','Maori','F',4.3);
-INSERT INTO CountryLanguage VALUES ('UZB','Russian','F',10.9);
-INSERT INTO CountryLanguage VALUES ('BLR','Russian','T',32.0);
-INSERT INTO CountryLanguage VALUES ('WLF','Futuna','F',0.0);
-INSERT INTO CountryLanguage VALUES ('VUT','English','T',28.3);
-INSERT INTO CountryLanguage VALUES ('VEN','Goajiro','F',0.4);
-INSERT INTO CountryLanguage VALUES ('RUS','Tatar','F',3.2);
-INSERT INTO CountryLanguage VALUES ('VNM','Tho','F',1.8);
-INSERT INTO CountryLanguage VALUES ('EST','Russian','F',27.8);
-INSERT INTO CountryLanguage VALUES ('USA','Spanish','F',7.5);
-INSERT INTO CountryLanguage VALUES ('VIR','Spanish','F',13.3);
-INSERT INTO CountryLanguage VALUES ('ZWE','Ndebele','F',16.2);
-INSERT INTO CountryLanguage VALUES ('PSE','Hebrew','F',4.1);
-INSERT INTO CountryLanguage VALUES ('AFG','Uzbek','F',8.8);
-INSERT INTO CountryLanguage VALUES ('NLD','Arabic','F',0.9);
-INSERT INTO CountryLanguage VALUES ('ANT','Dutch','T',0.0);
-INSERT INTO CountryLanguage VALUES ('ALB','Macedonian','F',0.1);
-INSERT INTO CountryLanguage VALUES ('ASM','Tongan','F',3.1);
-INSERT INTO CountryLanguage VALUES ('AND','Portuguese','F',10.8);
-INSERT INTO CountryLanguage VALUES ('AGO','Kongo','F',13.2);
-INSERT INTO CountryLanguage VALUES ('ARG','Indian Languages','F',0.3);
-INSERT INTO CountryLanguage VALUES ('ABW','Spanish','F',7.4);
-INSERT INTO CountryLanguage VALUES ('AUS','Greek','F',1.6);
-INSERT INTO CountryLanguage VALUES ('AZE','Lezgian','F',2.3);
-INSERT INTO CountryLanguage VALUES ('BGD','Marma','F',0.2);
-INSERT INTO CountryLanguage VALUES ('BEL','Italian','F',2.4);
-INSERT INTO CountryLanguage VALUES ('BLZ','Maya Languages','F',9.6);
-INSERT INTO CountryLanguage VALUES ('BEN','Adja','F',11.1);
-INSERT INTO CountryLanguage VALUES ('BTN','Asami','F',15.2);
-INSERT INTO CountryLanguage VALUES ('BOL','Aimar�','T',3.2);
-INSERT INTO CountryLanguage VALUES ('BWA','San','F',3.5);
-INSERT INTO CountryLanguage VALUES ('BRA','Italian','F',0.4);
-INSERT INTO CountryLanguage VALUES ('GBR','Gaeli','F',0.1);
-INSERT INTO CountryLanguage VALUES ('BRN','Chinese','F',9.3);
-INSERT INTO CountryLanguage VALUES ('BGR','Romani','F',3.7);
-INSERT INTO CountryLanguage VALUES ('BFA','Gurma','F',5.7);
-INSERT INTO CountryLanguage VALUES ('BDI','Swahili','F',0.0);
-INSERT INTO CountryLanguage VALUES ('CHL','Aimar�','F',0.5);
-INSERT INTO CountryLanguage VALUES ('CRI','Chibcha','F',0.3);
-INSERT INTO CountryLanguage VALUES ('DJI','Arabic','T',10.6);
-INSERT INTO CountryLanguage VALUES ('ERI','Afar','F',4.3);
-INSERT INTO CountryLanguage VALUES ('ESP','Galecian','F',6.4);
-INSERT INTO CountryLanguage VALUES ('ZAF','Afrikaans','T',14.3);
-INSERT INTO CountryLanguage VALUES ('ETH','Tigrinja','F',7.2);
-INSERT INTO CountryLanguage VALUES ('PHL','Ilocano','F',9.3);
-INSERT INTO CountryLanguage VALUES ('GAB','Mpongwe','F',14.6);
-INSERT INTO CountryLanguage VALUES ('GMB','Wolof','F',12.6);
-INSERT INTO CountryLanguage VALUES ('GEO','Armenian','F',6.8);
-INSERT INTO CountryLanguage VALUES ('GHA','Ewe','F',11.9);
-INSERT INTO CountryLanguage VALUES ('GUM','Philippene Languages','F',19.7);
-INSERT INTO CountryLanguage VALUES ('GTM','Cakchiquel','F',8.9);
-INSERT INTO CountryLanguage VALUES ('GIN','Susu','F',11.0);
-INSERT INTO CountryLanguage VALUES ('GNB','Balante','F',14.6);
-INSERT INTO CountryLanguage VALUES ('GUY','Arawakan','F',1.4);
-INSERT INTO CountryLanguage VALUES ('HND','Creole English','F',0.2);
-INSERT INTO CountryLanguage VALUES ('HKG','Fukien','F',1.9);
-INSERT INTO CountryLanguage VALUES ('IDN','Malay','T',12.1);
-INSERT INTO CountryLanguage VALUES ('IND','Telugu','F',7.8);
-INSERT INTO CountryLanguage VALUES ('IRQ','Azerbaijani','F',1.7);
-INSERT INTO CountryLanguage VALUES ('IRN','Kurdish','F',9.1);
-INSERT INTO CountryLanguage VALUES ('ISR','Russian','F',8.9);
-INSERT INTO CountryLanguage VALUES ('ITA','Friuli','F',1.2);
-INSERT INTO CountryLanguage VALUES ('AUT','Turkish','F',1.5);
-INSERT INTO CountryLanguage VALUES ('JPN','Chinese','F',0.2);
-INSERT INTO CountryLanguage VALUES ('JOR','Armenian','F',1.0);
-INSERT INTO CountryLanguage VALUES ('YUG','Hungarian','F',3.4);
-INSERT INTO CountryLanguage VALUES ('KHM','Chinese','F',3.1);
-INSERT INTO CountryLanguage VALUES ('CMR','Duala','F',10.9);
-INSERT INTO CountryLanguage VALUES ('CAN','Chinese','F',2.5);
-INSERT INTO CountryLanguage VALUES ('KAZ','Ukrainian','F',5.0);
-INSERT INTO CountryLanguage VALUES ('KEN','Luo','F',12.8);
-INSERT INTO CountryLanguage VALUES ('CAF','Mandjia','F',14.8);
-INSERT INTO CountryLanguage VALUES ('CHN','Mant�u','F',0.9);
-INSERT INTO CountryLanguage VALUES ('KGZ','Uzbek','F',14.1);
-INSERT INTO CountryLanguage VALUES ('COL','Creole English','F',0.1);
-INSERT INTO CountryLanguage VALUES ('COM','Comorian-madagassi','F',5.5);
-INSERT INTO CountryLanguage VALUES ('COG','Mboshi','F',11.4);
-INSERT INTO CountryLanguage VALUES ('COD','Mongo','F',13.5);
-INSERT INTO CountryLanguage VALUES ('LAO','Thai','F',7.8);
-INSERT INTO CountryLanguage VALUES ('LVA','Belorussian','F',4.1);
-INSERT INTO CountryLanguage VALUES ('LSO','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('LBN','French','F',0.0);
-INSERT INTO CountryLanguage VALUES ('LBR','Grebo','F',8.9);
-INSERT INTO CountryLanguage VALUES ('LIE','Turkish','F',2.5);
-INSERT INTO CountryLanguage VALUES ('LTU','Polish','F',7.0);
-INSERT INTO CountryLanguage VALUES ('LUX','Italian','F',4.6);
-INSERT INTO CountryLanguage VALUES ('MAC','Mandarin Chinese','F',1.2);
-INSERT INTO CountryLanguage VALUES ('MKD','Turkish','F',4.0);
-INSERT INTO CountryLanguage VALUES ('MWI','Yao','F',13.2);
-INSERT INTO CountryLanguage VALUES ('MYS','Tamil','F',3.9);
-INSERT INTO CountryLanguage VALUES ('MLI','Senufo and Minianka','F',12.0);
-INSERT INTO CountryLanguage VALUES ('MRT','Tukulor','F',5.4);
-INSERT INTO CountryLanguage VALUES ('MUS','French','F',3.4);
-INSERT INTO CountryLanguage VALUES ('MYT','Malagasy','F',16.1);
-INSERT INTO CountryLanguage VALUES ('MEX','Yucatec','F',1.1);
-INSERT INTO CountryLanguage VALUES ('FSM','Mortlock','F',7.6);
-INSERT INTO CountryLanguage VALUES ('MDA','Ukrainian','F',8.6);
-INSERT INTO CountryLanguage VALUES ('MCO','Italian','F',16.1);
-INSERT INTO CountryLanguage VALUES ('MNG','Dorbet','F',2.7);
-INSERT INTO CountryLanguage VALUES ('MOZ','Sena','F',9.4);
-INSERT INTO CountryLanguage VALUES ('MMR','Karen','F',6.2);
-INSERT INTO CountryLanguage VALUES ('NAM','Kavango','F',9.7);
-INSERT INTO CountryLanguage VALUES ('NRU','Chinese','F',8.5);
-INSERT INTO CountryLanguage VALUES ('NPL','Bhojpuri','F',7.5);
-INSERT INTO CountryLanguage VALUES ('NIC','Creole English','F',0.5);
-INSERT INTO CountryLanguage VALUES ('NER','Tamashek','F',10.4);
-INSERT INTO CountryLanguage VALUES ('NGA','Ibo','F',18.1);
-INSERT INTO CountryLanguage VALUES ('NOR','Danish','F',0.4);
-INSERT INTO CountryLanguage VALUES ('CIV','Malinke','F',11.4);
-INSERT INTO CountryLanguage VALUES ('PAK','Sindhi','F',11.8);
-INSERT INTO CountryLanguage VALUES ('PLW','English','T',3.2);
-INSERT INTO CountryLanguage VALUES ('PAN','Guaym�','F',5.3);
-INSERT INTO CountryLanguage VALUES ('PRY','Portuguese','F',3.2);
-INSERT INTO CountryLanguage VALUES ('PER','Aimar�','T',2.3);
-INSERT INTO CountryLanguage VALUES ('MNP','Chinese','F',7.1);
-INSERT INTO CountryLanguage VALUES ('POL','Ukrainian','F',0.6);
-INSERT INTO CountryLanguage VALUES ('FRA','Portuguese','F',1.2);
-INSERT INTO CountryLanguage VALUES ('PYF','Chinese','F',2.9);
-INSERT INTO CountryLanguage VALUES ('REU','Comorian','F',2.8);
-INSERT INTO CountryLanguage VALUES ('ROM','Romani','T',0.7);
-INSERT INTO CountryLanguage VALUES ('SWE','Southern Slavic Languages','F',1.3);
-INSERT INTO CountryLanguage VALUES ('DEU','Southern Slavic Languages','F',1.4);
-INSERT INTO CountryLanguage VALUES ('SLB','Polynesian Languages','F',3.8);
-INSERT INTO CountryLanguage VALUES ('ZMB','Nyanja','F',7.8);
-INSERT INTO CountryLanguage VALUES ('WSM','English','T',0.6);
-INSERT INTO CountryLanguage VALUES ('SEN','Serer','F',12.5);
-INSERT INTO CountryLanguage VALUES ('SYC','French','T',1.3);
-INSERT INTO CountryLanguage VALUES ('SLE','Limba','F',8.3);
-INSERT INTO CountryLanguage VALUES ('SGP','Tamil','T',7.4);
-INSERT INTO CountryLanguage VALUES ('SVK','Romani','F',1.7);
-INSERT INTO CountryLanguage VALUES ('SVN','Hungarian','F',0.5);
-INSERT INTO CountryLanguage VALUES ('LKA','Mixed Languages','F',19.6);
-INSERT INTO CountryLanguage VALUES ('SDN','Nubian Languages','F',8.1);
-INSERT INTO CountryLanguage VALUES ('FIN','Russian','F',0.4);
-INSERT INTO CountryLanguage VALUES ('CHE','Italian','T',7.7);
-INSERT INTO CountryLanguage VALUES ('TJK','Russian','F',9.7);
-INSERT INTO CountryLanguage VALUES ('TWN','Hakka','F',11.0);
-INSERT INTO CountryLanguage VALUES ('TZA','Hehet','F',6.9);
-INSERT INTO CountryLanguage VALUES ('DNK','Arabic','F',0.7);
-INSERT INTO CountryLanguage VALUES ('THA','Chinese','F',12.1);
-INSERT INTO CountryLanguage VALUES ('TGO','Watyi','F',10.3);
-INSERT INTO CountryLanguage VALUES ('TTO','Creole English','F',2.9);
-INSERT INTO CountryLanguage VALUES ('TCD','Mayo-kebbi','F',11.5);
-INSERT INTO CountryLanguage VALUES ('CZE','Slovak','F',3.1);
-INSERT INTO CountryLanguage VALUES ('TUN','Arabic-French-English','F',3.2);
-INSERT INTO CountryLanguage VALUES ('TUR','Arabic','F',1.4);
-INSERT INTO CountryLanguage VALUES ('TKM','Russian','F',6.7);
-INSERT INTO CountryLanguage VALUES ('TUV','English','T',0.0);
-INSERT INTO CountryLanguage VALUES ('UGA','Kiga','F',8.3);
-INSERT INTO CountryLanguage VALUES ('UKR','Romanian','F',0.7);
-INSERT INTO CountryLanguage VALUES ('HUN','German','F',0.4);
-INSERT INTO CountryLanguage VALUES ('NCL','Polynesian Languages','F',11.6);
-INSERT INTO CountryLanguage VALUES ('UZB','Tadzhik','F',4.4);
-INSERT INTO CountryLanguage VALUES ('BLR','Ukrainian','F',1.3);
-INSERT INTO CountryLanguage VALUES ('VUT','French','T',14.2);
-INSERT INTO CountryLanguage VALUES ('VEN','Warrau','F',0.1);
-INSERT INTO CountryLanguage VALUES ('RUS','Ukrainian','F',1.3);
-INSERT INTO CountryLanguage VALUES ('VNM','Thai','F',1.6);
-INSERT INTO CountryLanguage VALUES ('EST','Ukrainian','F',2.8);
-INSERT INTO CountryLanguage VALUES ('USA','French','F',0.7);
-INSERT INTO CountryLanguage VALUES ('VIR','French','F',2.5);
-INSERT INTO CountryLanguage VALUES ('ZWE','English','T',2.2);
-INSERT INTO CountryLanguage VALUES ('AFG','Turkmenian','F',1.9);
-INSERT INTO CountryLanguage VALUES ('NLD','Turkish','F',0.8);
-INSERT INTO CountryLanguage VALUES ('AND','French','F',6.2);
-INSERT INTO CountryLanguage VALUES ('AGO','Luimbe-nganguela','F',5.4);
-INSERT INTO CountryLanguage VALUES ('ABW','Dutch','T',5.3);
-INSERT INTO CountryLanguage VALUES ('AUS','Canton Chinese','F',1.1);
-INSERT INTO CountryLanguage VALUES ('AZE','Armenian','F',2.0);
-INSERT INTO CountryLanguage VALUES ('BGD','Garo','F',0.1);
-INSERT INTO CountryLanguage VALUES ('BEL','Arabic','F',1.6);
-INSERT INTO CountryLanguage VALUES ('BLZ','Garifuna','F',6.8);
-INSERT INTO CountryLanguage VALUES ('BEN','Aizo','F',8.7);
-INSERT INTO CountryLanguage VALUES ('BOL','Guaran�','F',0.1);
-INSERT INTO CountryLanguage VALUES ('BWA','Khoekhoe','F',2.5);
-INSERT INTO CountryLanguage VALUES ('BRA','Japanese','F',0.4);
-INSERT INTO CountryLanguage VALUES ('BRN','English','F',3.1);
-INSERT INTO CountryLanguage VALUES ('BGR','Macedonian','F',2.6);
-INSERT INTO CountryLanguage VALUES ('BFA','Busansi','F',3.5);
-INSERT INTO CountryLanguage VALUES ('CHL','Rapa nui','F',0.2);
-INSERT INTO CountryLanguage VALUES ('CRI','Chinese','F',0.2);
-INSERT INTO CountryLanguage VALUES ('ERI','Hadareb','F',3.8);
-INSERT INTO CountryLanguage VALUES ('ESP','Basque','F',1.6);
-INSERT INTO CountryLanguage VALUES ('ZAF','Northsotho','F',9.1);
-INSERT INTO CountryLanguage VALUES ('ETH','Gurage','F',4.7);
-INSERT INTO CountryLanguage VALUES ('PHL','Hiligaynon','F',9.1);
-INSERT INTO CountryLanguage VALUES ('GAB','Mbete','F',13.8);
-INSERT INTO CountryLanguage VALUES ('GMB','Diola','F',9.2);
-INSERT INTO CountryLanguage VALUES ('GEO','Azerbaijani','F',5.5);
-INSERT INTO CountryLanguage VALUES ('GHA','Ga-adangme','F',7.8);
-INSERT INTO CountryLanguage VALUES ('GUM','Korean','F',3.3);
-INSERT INTO CountryLanguage VALUES ('GTM','Kekch�','F',4.9);
-INSERT INTO CountryLanguage VALUES ('GIN','Kissi','F',6.0);
-INSERT INTO CountryLanguage VALUES ('GNB','Portuguese','T',8.1);
-INSERT INTO CountryLanguage VALUES ('HND','Miskito','F',0.2);
-INSERT INTO CountryLanguage VALUES ('HKG','Hakka','F',1.6);
-INSERT INTO CountryLanguage VALUES ('IDN','Madura','F',4.3);
-INSERT INTO CountryLanguage VALUES ('IND','Marathi','F',7.4);
-INSERT INTO CountryLanguage VALUES ('IRQ','Assyrian','F',0.8);
-INSERT INTO CountryLanguage VALUES ('IRN','Gilaki','F',5.3);
-INSERT INTO CountryLanguage VALUES ('ITA','French','F',0.5);
-INSERT INTO CountryLanguage VALUES ('AUT','Hungarian','F',0.4);
-INSERT INTO CountryLanguage VALUES ('JPN','English','F',0.1);
-INSERT INTO CountryLanguage VALUES ('YUG','Romani','F',1.4);
-INSERT INTO CountryLanguage VALUES ('KHM','T�am','F',2.4);
-INSERT INTO CountryLanguage VALUES ('CMR','Ful','F',9.6);
-INSERT INTO CountryLanguage VALUES ('CAN','Italian','F',1.7);
-INSERT INTO CountryLanguage VALUES ('KAZ','German','F',3.1);
-INSERT INTO CountryLanguage VALUES ('KEN','Kamba','F',11.2);
-INSERT INTO CountryLanguage VALUES ('CAF','Ngbaka','F',7.5);
-INSERT INTO CountryLanguage VALUES ('CHN','Hui','F',0.8);
-INSERT INTO CountryLanguage VALUES ('KGZ','Ukrainian','F',1.7);
-INSERT INTO CountryLanguage VALUES ('COL','Arawakan','F',0.1);
-INSERT INTO CountryLanguage VALUES ('COM','Comorian-Arabic','F',1.6);
-INSERT INTO CountryLanguage VALUES ('COG','Mbete','F',4.8);
-INSERT INTO CountryLanguage VALUES ('COD','Rwanda','F',10.3);
-INSERT INTO CountryLanguage VALUES ('LAO','Lao-Soung','F',5.2);
-INSERT INTO CountryLanguage VALUES ('LVA','Ukrainian','F',2.9);
-INSERT INTO CountryLanguage VALUES ('LBR','Gio','F',7.9);
-INSERT INTO CountryLanguage VALUES ('LTU','Belorussian','F',1.4);
-INSERT INTO CountryLanguage VALUES ('LUX','French','T',4.2);
-INSERT INTO CountryLanguage VALUES ('MAC','English','F',0.5);
-INSERT INTO CountryLanguage VALUES ('MKD','Romani','F',2.3);
-INSERT INTO CountryLanguage VALUES ('MWI','Ngoni','F',6.7);
-INSERT INTO CountryLanguage VALUES ('MYS','Iban','F',2.8);
-INSERT INTO CountryLanguage VALUES ('MLI','Soninke','F',8.7);
-INSERT INTO CountryLanguage VALUES ('MRT','Soninke','F',2.7);
-INSERT INTO CountryLanguage VALUES ('MUS','Hindi','F',1.2);
-INSERT INTO CountryLanguage VALUES ('MEX','Zapotec','F',0.6);
-INSERT INTO CountryLanguage VALUES ('FSM','Kosrean','F',7.3);
-INSERT INTO CountryLanguage VALUES ('MDA','Gagauzi','F',3.2);
-INSERT INTO CountryLanguage VALUES ('MCO','English','F',6.5);
-INSERT INTO CountryLanguage VALUES ('MNG','Bajad','F',1.9);
-INSERT INTO CountryLanguage VALUES ('MOZ','Lomwe','F',7.8);
-INSERT INTO CountryLanguage VALUES ('MMR','Rakhine','F',4.5);
-INSERT INTO CountryLanguage VALUES ('NAM','Afrikaans','F',9.5);
-INSERT INTO CountryLanguage VALUES ('NRU','Tuvalu','F',8.5);
-INSERT INTO CountryLanguage VALUES ('NPL','Tharu','F',5.4);
-INSERT INTO CountryLanguage VALUES ('NIC','Sumo','F',0.2);
-INSERT INTO CountryLanguage VALUES ('NER','Ful','F',9.7);
-INSERT INTO CountryLanguage VALUES ('NGA','Ful','F',11.3);
-INSERT INTO CountryLanguage VALUES ('NOR','Swedish','F',0.3);
-INSERT INTO CountryLanguage VALUES ('CIV','Kru','F',10.5);
-INSERT INTO CountryLanguage VALUES ('PAK','Saraiki','F',9.8);
-INSERT INTO CountryLanguage VALUES ('PLW','Chinese','F',1.6);
-INSERT INTO CountryLanguage VALUES ('PAN','Cuna','F',2.0);
-INSERT INTO CountryLanguage VALUES ('PRY','German','F',0.9);
-INSERT INTO CountryLanguage VALUES ('MNP','Korean','F',6.5);
-INSERT INTO CountryLanguage VALUES ('POL','Belorussian','F',0.5);
-INSERT INTO CountryLanguage VALUES ('FRA','Italian','F',0.4);
-INSERT INTO CountryLanguage VALUES ('REU','Malagasy','F',1.4);
-INSERT INTO CountryLanguage VALUES ('ROM','German','F',0.4);
-INSERT INTO CountryLanguage VALUES ('SWE','Arabic','F',0.8);
-INSERT INTO CountryLanguage VALUES ('DEU','Italian','F',0.7);
-INSERT INTO CountryLanguage VALUES ('ZMB','Lozi','F',6.4);
-INSERT INTO CountryLanguage VALUES ('SEN','Diola','F',5.0);
-INSERT INTO CountryLanguage VALUES ('SLE','Kono-vai','F',5.1);
-INSERT INTO CountryLanguage VALUES ('SVK','Czech and Moravian','F',1.1);
-INSERT INTO CountryLanguage VALUES ('SDN','Beja','F',6.4);
-INSERT INTO CountryLanguage VALUES ('FIN','Estonian','F',0.2);
-INSERT INTO CountryLanguage VALUES ('CHE','Romansh','T',0.6);
-INSERT INTO CountryLanguage VALUES ('TWN','Ami','F',0.6);
-INSERT INTO CountryLanguage VALUES ('TZA','Haya','F',5.9);
-INSERT INTO CountryLanguage VALUES ('DNK','German','F',0.5);
-INSERT INTO CountryLanguage VALUES ('THA','Malay','F',3.6);
-INSERT INTO CountryLanguage VALUES ('TGO','Kotokoli','F',5.7);
-INSERT INTO CountryLanguage VALUES ('TCD','Kanem-bornu','F',9.0);
-INSERT INTO CountryLanguage VALUES ('CZE','Polish','F',0.6);
-INSERT INTO CountryLanguage VALUES ('TKM','Kazakh','F',2.0);
-INSERT INTO CountryLanguage VALUES ('UGA','Soga','F',8.2);
-INSERT INTO CountryLanguage VALUES ('UKR','Bulgariana','F',0.3);
-INSERT INTO CountryLanguage VALUES ('HUN','Serbo-Croatian','F',0.2);
-INSERT INTO CountryLanguage VALUES ('UZB','Kazakh','F',3.8);
-INSERT INTO CountryLanguage VALUES ('BLR','Polish','F',0.6);
-INSERT INTO CountryLanguage VALUES ('RUS','Chuvash','F',0.9);
-INSERT INTO CountryLanguage VALUES ('VNM','Muong','F',1.5);
-INSERT INTO CountryLanguage VALUES ('EST','Belorussian','F',1.4);
-INSERT INTO CountryLanguage VALUES ('USA','German','F',0.7);
-INSERT INTO CountryLanguage VALUES ('ZWE','Nyanja','F',2.2);
-INSERT INTO CountryLanguage VALUES ('AFG','Balochi','F',0.9);
-INSERT INTO CountryLanguage VALUES ('AGO','Nyaneka-nkhumbi','F',5.4);
-INSERT INTO CountryLanguage VALUES ('AUS','Arabic','F',1.0);
-INSERT INTO CountryLanguage VALUES ('BGD','Khasi','F',0.1);
-INSERT INTO CountryLanguage VALUES ('BEL','German','T',1.0);
-INSERT INTO CountryLanguage VALUES ('BEN','Bariba','F',8.7);
-INSERT INTO CountryLanguage VALUES ('BWA','Ndebele','F',1.3);
-INSERT INTO CountryLanguage VALUES ('BRA','Indian Languages','F',0.2);
-INSERT INTO CountryLanguage VALUES ('BFA','Dagara','F',3.1);
-INSERT INTO CountryLanguage VALUES ('ERI','Bilin','F',3.0);
-INSERT INTO CountryLanguage VALUES ('ZAF','English','T',8.5);
-INSERT INTO CountryLanguage VALUES ('ETH','Somali','F',4.1);
-INSERT INTO CountryLanguage VALUES ('PHL','Bicol','F',5.7);
-INSERT INTO CountryLanguage VALUES ('GMB','Soninke','F',7.6);
-INSERT INTO CountryLanguage VALUES ('GEO','Osseetti','F',2.4);
-INSERT INTO CountryLanguage VALUES ('GHA','Gurma','F',3.3);
-INSERT INTO CountryLanguage VALUES ('GUM','Japanese','F',2.0);
-INSERT INTO CountryLanguage VALUES ('GTM','Mam','F',2.7);
-INSERT INTO CountryLanguage VALUES ('GIN','Kpelle','F',4.6);
-INSERT INTO CountryLanguage VALUES ('GNB','Malinke','F',6.9);
-INSERT INTO CountryLanguage VALUES ('HKG','Chiu chau','F',1.4);
-INSERT INTO CountryLanguage VALUES ('IDN','Minangkabau','F',2.4);
-INSERT INTO CountryLanguage VALUES ('IND','Tamil','F',6.3);
-INSERT INTO CountryLanguage VALUES ('IRQ','Persian','F',0.8);
-INSERT INTO CountryLanguage VALUES ('IRN','Luri','F',4.3);
-INSERT INTO CountryLanguage VALUES ('ITA','German','F',0.5);
-INSERT INTO CountryLanguage VALUES ('AUT','Slovene','F',0.4);
-INSERT INTO CountryLanguage VALUES ('JPN','Philippene Languages','F',0.1);
-INSERT INTO CountryLanguage VALUES ('YUG','Slovak','F',0.7);
-INSERT INTO CountryLanguage VALUES ('CMR','Tikar','F',7.4);
-INSERT INTO CountryLanguage VALUES ('CAN','German','F',1.6);
-INSERT INTO CountryLanguage VALUES ('KAZ','Uzbek','F',2.3);
-INSERT INTO CountryLanguage VALUES ('KEN','Kalenjin','F',10.8);
-INSERT INTO CountryLanguage VALUES ('CAF','Sara','F',6.4);
-INSERT INTO CountryLanguage VALUES ('CHN','Miao','F',0.7);
-INSERT INTO CountryLanguage VALUES ('KGZ','Tatar','F',1.3);
-INSERT INTO CountryLanguage VALUES ('COL','Caribbean','F',0.1);
-INSERT INTO CountryLanguage VALUES ('COM','Comorian-Swahili','F',0.5);
-INSERT INTO CountryLanguage VALUES ('COG','Punu','F',2.9);
-INSERT INTO CountryLanguage VALUES ('COD','Zande','F',6.1);
-INSERT INTO CountryLanguage VALUES ('LVA','Polish','F',2.1);
-INSERT INTO CountryLanguage VALUES ('LBR','Kru','F',7.2);
-INSERT INTO CountryLanguage VALUES ('LTU','Ukrainian','F',1.1);
-INSERT INTO CountryLanguage VALUES ('LUX','German','T',2.3);
-INSERT INTO CountryLanguage VALUES ('MKD','Serbo-Croatian','F',2.0);
-INSERT INTO CountryLanguage VALUES ('MYS','English','F',1.6);
-INSERT INTO CountryLanguage VALUES ('MLI','Tamashek','F',7.3);
-INSERT INTO CountryLanguage VALUES ('MRT','Ful','F',1.2);
-INSERT INTO CountryLanguage VALUES ('MUS','Tamil','F',0.8);
-INSERT INTO CountryLanguage VALUES ('MEX','Mixtec','F',0.6);
-INSERT INTO CountryLanguage VALUES ('FSM','Yap','F',5.8);
-INSERT INTO CountryLanguage VALUES ('MDA','Bulgariana','F',1.6);
-INSERT INTO CountryLanguage VALUES ('MNG','Buryat','F',1.7);
-INSERT INTO CountryLanguage VALUES ('MOZ','Shona','F',6.5);
-INSERT INTO CountryLanguage VALUES ('MMR','Mon','F',2.4);
-INSERT INTO CountryLanguage VALUES ('NAM','Herero','F',8.0);
-INSERT INTO CountryLanguage VALUES ('NRU','English','T',7.5);
-INSERT INTO CountryLanguage VALUES ('NPL','Tamang','F',4.9);
-INSERT INTO CountryLanguage VALUES ('NER','Kanuri','F',4.4);
-INSERT INTO CountryLanguage VALUES ('NGA','Ibibio','F',5.6);
-INSERT INTO CountryLanguage VALUES ('NOR','Saame','F',0.0);
-INSERT INTO CountryLanguage VALUES ('CIV','[South]Mande','F',7.7);
-INSERT INTO CountryLanguage VALUES ('PAK','Urdu','T',7.6);
-INSERT INTO CountryLanguage VALUES ('PAN','Embera','F',0.6);
-INSERT INTO CountryLanguage VALUES ('MNP','English','T',4.8);
-INSERT INTO CountryLanguage VALUES ('FRA','Spanish','F',0.4);
-INSERT INTO CountryLanguage VALUES ('REU','Tamil','F',0.0);
-INSERT INTO CountryLanguage VALUES ('ROM','Ukrainian','F',0.3);
-INSERT INTO CountryLanguage VALUES ('SWE','Spanish','F',0.6);
-INSERT INTO CountryLanguage VALUES ('DEU','Greek','F',0.4);
-INSERT INTO CountryLanguage VALUES ('ZMB','Chewa','F',5.7);
-INSERT INTO CountryLanguage VALUES ('SEN','Malinke','F',3.8);
-INSERT INTO CountryLanguage VALUES ('SLE','Bullom-sherbro','F',3.8);
-INSERT INTO CountryLanguage VALUES ('SVK','Ukrainian and Russian','F',0.6);
-INSERT INTO CountryLanguage VALUES ('SDN','Nuer','F',4.9);
-INSERT INTO CountryLanguage VALUES ('FIN','Saame','F',0.0);
-INSERT INTO CountryLanguage VALUES ('TWN','Atayal','F',0.4);
-INSERT INTO CountryLanguage VALUES ('TZA','Makonde','F',5.9);
-INSERT INTO CountryLanguage VALUES ('DNK','English','F',0.3);
-INSERT INTO CountryLanguage VALUES ('THA','Khmer','F',1.3);
-INSERT INTO CountryLanguage VALUES ('TGO','Ane','F',5.7);
-INSERT INTO CountryLanguage VALUES ('TCD','Ouaddai','F',8.7);
-INSERT INTO CountryLanguage VALUES ('CZE','German','F',0.5);
-INSERT INTO CountryLanguage VALUES ('UGA','Teso','F',6.0);
-INSERT INTO CountryLanguage VALUES ('UKR','Hungarian','F',0.3);
-INSERT INTO CountryLanguage VALUES ('HUN','Romanian','F',0.1);
-INSERT INTO CountryLanguage VALUES ('UZB','Karakalpak','F',2.0);
-INSERT INTO CountryLanguage VALUES ('RUS','Bashkir','F',0.7);
-INSERT INTO CountryLanguage VALUES ('VNM','Chinese','F',1.4);
-INSERT INTO CountryLanguage VALUES ('EST','Finnish','F',0.7);
-INSERT INTO CountryLanguage VALUES ('USA','Italian','F',0.6);
-INSERT INTO CountryLanguage VALUES ('AGO','Chokwe','F',4.2);
-INSERT INTO CountryLanguage VALUES ('AUS','Vietnamese','F',0.8);
-INSERT INTO CountryLanguage VALUES ('BGD','Santhali','F',0.1);
-INSERT INTO CountryLanguage VALUES ('BEL','Turkish','F',0.9);
-INSERT INTO CountryLanguage VALUES ('BEN','Somba','F',6.7);
-INSERT INTO CountryLanguage VALUES ('BFA','Dyula','F',2.6);
-INSERT INTO CountryLanguage VALUES ('ERI','Saho','F',3.0);
-INSERT INTO CountryLanguage VALUES ('ZAF','Tswana','F',8.1);
-INSERT INTO CountryLanguage VALUES ('ETH','Sidamo','F',3.2);
-INSERT INTO CountryLanguage VALUES ('PHL','Waray-waray','F',3.8);
-INSERT INTO CountryLanguage VALUES ('GEO','Abhyasi','F',1.7);
-INSERT INTO CountryLanguage VALUES ('GHA','Joruba','F',1.3);
-INSERT INTO CountryLanguage VALUES ('GIN','Yalunka','F',2.9);
-INSERT INTO CountryLanguage VALUES ('GNB','Mandyako','F',4.9);
-INSERT INTO CountryLanguage VALUES ('IDN','Batakki','F',2.2);
-INSERT INTO CountryLanguage VALUES ('IND','Urdu','F',5.1);
-INSERT INTO CountryLanguage VALUES ('IRN','Mazandarani','F',3.6);
-INSERT INTO CountryLanguage VALUES ('ITA','Albaniana','F',0.2);
-INSERT INTO CountryLanguage VALUES ('AUT','Polish','F',0.2);
-INSERT INTO CountryLanguage VALUES ('JPN','Ainu','F',0.0);
-INSERT INTO CountryLanguage VALUES ('YUG','Macedonian','F',0.5);
-INSERT INTO CountryLanguage VALUES ('CMR','Mandara','F',5.7);
-INSERT INTO CountryLanguage VALUES ('CAN','Polish','F',0.7);
-INSERT INTO CountryLanguage VALUES ('KAZ','Tatar','F',2.0);
-INSERT INTO CountryLanguage VALUES ('KEN','Gusii','F',6.1);
-INSERT INTO CountryLanguage VALUES ('CAF','Mbum','F',6.4);
-INSERT INTO CountryLanguage VALUES ('CHN','Uighur','F',0.6);
-INSERT INTO CountryLanguage VALUES ('KGZ','Kazakh','F',0.8);
-INSERT INTO CountryLanguage VALUES ('COG','Sango','F',2.6);
-INSERT INTO CountryLanguage VALUES ('COD','Ngala and Bangi','F',5.8);
-INSERT INTO CountryLanguage VALUES ('LVA','Lithuanian','F',1.2);
-INSERT INTO CountryLanguage VALUES ('LBR','Mano','F',7.2);
-INSERT INTO CountryLanguage VALUES ('MYS','Dusun','F',1.1);
-INSERT INTO CountryLanguage VALUES ('MLI','Songhai','F',6.9);
-INSERT INTO CountryLanguage VALUES ('MRT','Zenaga','F',1.2);
-INSERT INTO CountryLanguage VALUES ('MUS','Marathi','F',0.7);
-INSERT INTO CountryLanguage VALUES ('MEX','Otom�','F',0.4);
-INSERT INTO CountryLanguage VALUES ('FSM','Wolea','F',3.7);
-INSERT INTO CountryLanguage VALUES ('MNG','Dariganga','F',1.4);
-INSERT INTO CountryLanguage VALUES ('MOZ','Tswa','F',6.0);
-INSERT INTO CountryLanguage VALUES ('MMR','Chin','F',2.2);
-INSERT INTO CountryLanguage VALUES ('NAM','Caprivi','F',4.7);
-INSERT INTO CountryLanguage VALUES ('NPL','Newari','F',3.7);
-INSERT INTO CountryLanguage VALUES ('NGA','Kanuri','F',4.1);
-INSERT INTO CountryLanguage VALUES ('PAK','Balochi','F',3.0);
-INSERT INTO CountryLanguage VALUES ('PAN','Arabic','F',0.6);
-INSERT INTO CountryLanguage VALUES ('MNP','Carolinian','F',4.8);
-INSERT INTO CountryLanguage VALUES ('FRA','Turkish','F',0.4);
-INSERT INTO CountryLanguage VALUES ('ROM','Serbo-Croatian','F',0.1);
-INSERT INTO CountryLanguage VALUES ('SWE','Norwegian','F',0.5);
-INSERT INTO CountryLanguage VALUES ('DEU','Polish','F',0.3);
-INSERT INTO CountryLanguage VALUES ('ZMB','Nsenga','F',4.3);
-INSERT INTO CountryLanguage VALUES ('SEN','Soninke','F',1.3);
-INSERT INTO CountryLanguage VALUES ('SLE','Ful','F',3.8);
-INSERT INTO CountryLanguage VALUES ('SDN','Zande','F',2.7);
-INSERT INTO CountryLanguage VALUES ('TWN','Paiwan','F',0.3);
-INSERT INTO CountryLanguage VALUES ('TZA','Nyakusa','F',5.4);
-INSERT INTO CountryLanguage VALUES ('DNK','Swedish','F',0.3);
-INSERT INTO CountryLanguage VALUES ('THA','Kuy','F',1.1);
-INSERT INTO CountryLanguage VALUES ('TGO','Moba','F',5.4);
-INSERT INTO CountryLanguage VALUES ('TCD','Hadjarai','F',6.7);
-INSERT INTO CountryLanguage VALUES ('CZE','Silesiana','F',0.4);
-INSERT INTO CountryLanguage VALUES ('UGA','Lango','F',5.9);
-INSERT INTO CountryLanguage VALUES ('UKR','Belorussian','F',0.3);
-INSERT INTO CountryLanguage VALUES ('HUN','Slovak','F',0.1);
-INSERT INTO CountryLanguage VALUES ('UZB','Tatar','F',1.8);
-INSERT INTO CountryLanguage VALUES ('RUS','Chechen','F',0.6);
-INSERT INTO CountryLanguage VALUES ('VNM','Khmer','F',1.4);
-INSERT INTO CountryLanguage VALUES ('USA','Chinese','F',0.6);
-INSERT INTO CountryLanguage VALUES ('AGO','Luvale','F',3.6);
-INSERT INTO CountryLanguage VALUES ('AUS','Serbo-Croatian','F',0.6);
-INSERT INTO CountryLanguage VALUES ('BGD','Tripuri','F',0.1);
-INSERT INTO CountryLanguage VALUES ('BEN','Ful','F',5.6);
-INSERT INTO CountryLanguage VALUES ('ZAF','Southsotho','F',7.6);
-INSERT INTO CountryLanguage VALUES ('ETH','Walaita','F',2.8);
-INSERT INTO CountryLanguage VALUES ('PHL','Pampango','F',3.0);
-INSERT INTO CountryLanguage VALUES ('GIN','Loma','F',2.3);
-INSERT INTO CountryLanguage VALUES ('IDN','Bugi','F',2.2);
-INSERT INTO CountryLanguage VALUES ('IND','Gujarati','F',4.8);
-INSERT INTO CountryLanguage VALUES ('IRN','Balochi','F',2.3);
-INSERT INTO CountryLanguage VALUES ('ITA','Slovene','F',0.2);
-INSERT INTO CountryLanguage VALUES ('AUT','Czech','F',0.2);
-INSERT INTO CountryLanguage VALUES ('CMR','Maka','F',4.9);
-INSERT INTO CountryLanguage VALUES ('CAN','Spanish','F',0.7);
-INSERT INTO CountryLanguage VALUES ('KEN','Meru','F',5.5);
-INSERT INTO CountryLanguage VALUES ('CHN','Yi','F',0.6);
-INSERT INTO CountryLanguage VALUES ('KGZ','Tadzhik','F',0.8);
-INSERT INTO CountryLanguage VALUES ('COD','Rundi','F',3.8);
-INSERT INTO CountryLanguage VALUES ('LBR','Loma','F',5.8);
-INSERT INTO CountryLanguage VALUES ('MOZ','Chuabo','F',5.7);
-INSERT INTO CountryLanguage VALUES ('MMR','Kachin','F',1.4);
-INSERT INTO CountryLanguage VALUES ('NAM','San','F',1.9);
-INSERT INTO CountryLanguage VALUES ('NPL','Hindi','F',3.0);
-INSERT INTO CountryLanguage VALUES ('NGA','Edo','F',3.3);
-INSERT INTO CountryLanguage VALUES ('PAK','Hindko','F',2.4);
-INSERT INTO CountryLanguage VALUES ('SLE','Kuranko','F',3.4);
-INSERT INTO CountryLanguage VALUES ('SDN','Bari','F',2.5);
-INSERT INTO CountryLanguage VALUES ('TZA','Chaga and Pare','F',4.9);
-INSERT INTO CountryLanguage VALUES ('DNK','Norwegian','F',0.3);
-INSERT INTO CountryLanguage VALUES ('TGO','Naudemba','F',4.1);
-INSERT INTO CountryLanguage VALUES ('TCD','Tandjile','F',6.5);
-INSERT INTO CountryLanguage VALUES ('CZE','Romani','F',0.3);
-INSERT INTO CountryLanguage VALUES ('UGA','Lugbara','F',4.7);
-INSERT INTO CountryLanguage VALUES ('UKR','Polish','F',0.1);
-INSERT INTO CountryLanguage VALUES ('RUS','Mordva','F',0.5);
-INSERT INTO CountryLanguage VALUES ('VNM','Nung','F',1.1);
-INSERT INTO CountryLanguage VALUES ('USA','Tagalog','F',0.4);
-INSERT INTO CountryLanguage VALUES ('AGO','Ambo','F',2.4);
-INSERT INTO CountryLanguage VALUES ('AUS','German','F',0.6);
-INSERT INTO CountryLanguage VALUES ('ZAF','Tsonga','F',4.3);
-INSERT INTO CountryLanguage VALUES ('PHL','Pangasinan','F',1.8);
-INSERT INTO CountryLanguage VALUES ('IDN','Banja','F',1.8);
-INSERT INTO CountryLanguage VALUES ('IND','Kannada','F',3.9);
-INSERT INTO CountryLanguage VALUES ('IRN','Arabic','F',2.2);
-INSERT INTO CountryLanguage VALUES ('ITA','Romani','F',0.2);
-INSERT INTO CountryLanguage VALUES ('AUT','Romanian','F',0.2);
-INSERT INTO CountryLanguage VALUES ('CMR','Masana','F',3.9);
-INSERT INTO CountryLanguage VALUES ('CAN','Portuguese','F',0.7);
-INSERT INTO CountryLanguage VALUES ('KEN','Nyika','F',4.8);
-INSERT INTO CountryLanguage VALUES ('CHN','Tujia','F',0.5);
-INSERT INTO CountryLanguage VALUES ('COD','Teke','F',2.7);
-INSERT INTO CountryLanguage VALUES ('LBR','Malinke','F',5.1);
-INSERT INTO CountryLanguage VALUES ('MOZ','Ronga','F',3.7);
-INSERT INTO CountryLanguage VALUES ('MMR','Kayah','F',0.4);
-INSERT INTO CountryLanguage VALUES ('NAM','German','F',0.9);
-INSERT INTO CountryLanguage VALUES ('NGA','Tiv','F',2.3);
-INSERT INTO CountryLanguage VALUES ('PAK','Brahui','F',1.2);
-INSERT INTO CountryLanguage VALUES ('SLE','Yalunka','F',3.4);
-INSERT INTO CountryLanguage VALUES ('SDN','Fur','F',2.1);
-INSERT INTO CountryLanguage VALUES ('TZA','Luguru','F',4.9);
-INSERT INTO CountryLanguage VALUES ('TGO','Gurma','F',3.4);
-INSERT INTO CountryLanguage VALUES ('TCD','Gorane','F',6.2);
-INSERT INTO CountryLanguage VALUES ('CZE','Hungarian','F',0.2);
-INSERT INTO CountryLanguage VALUES ('UGA','Gisu','F',4.5);
-INSERT INTO CountryLanguage VALUES ('RUS','Kazakh','F',0.4);
-INSERT INTO CountryLanguage VALUES ('VNM','Miao','F',0.9);
-INSERT INTO CountryLanguage VALUES ('USA','Polish','F',0.3);
-INSERT INTO CountryLanguage VALUES ('AGO','Luchazi','F',2.4);
-INSERT INTO CountryLanguage VALUES ('ZAF','Swazi','F',2.5);
-INSERT INTO CountryLanguage VALUES ('PHL','Maguindanao','F',1.4);
-INSERT INTO CountryLanguage VALUES ('IDN','Bali','F',1.7);
-INSERT INTO CountryLanguage VALUES ('IND','Malajalam','F',3.6);
-INSERT INTO CountryLanguage VALUES ('IRN','Bakhtyari','F',1.7);
-INSERT INTO CountryLanguage VALUES ('CAN','Punjabi','F',0.7);
-INSERT INTO CountryLanguage VALUES ('KEN','Masai','F',1.6);
-INSERT INTO CountryLanguage VALUES ('CHN','Mongolian','F',0.4);
-INSERT INTO CountryLanguage VALUES ('COD','Boa','F',2.3);
-INSERT INTO CountryLanguage VALUES ('MOZ','Marendje','F',3.5);
-INSERT INTO CountryLanguage VALUES ('NGA','Ijo','F',1.8);
-INSERT INTO CountryLanguage VALUES ('SDN','Chilluk','F',1.7);
-INSERT INTO CountryLanguage VALUES ('TZA','Shambala','F',4.3);
-INSERT INTO CountryLanguage VALUES ('UGA','Acholi','F',4.4);
-INSERT INTO CountryLanguage VALUES ('RUS','Avarian','F',0.4);
-INSERT INTO CountryLanguage VALUES ('VNM','Man','F',0.7);
-INSERT INTO CountryLanguage VALUES ('USA','Korean','F',0.3);
-INSERT INTO CountryLanguage VALUES ('ZAF','Venda','F',2.2);
-INSERT INTO CountryLanguage VALUES ('PHL','Maranao','F',1.3);
-INSERT INTO CountryLanguage VALUES ('IND','Orija','F',3.3);
-INSERT INTO CountryLanguage VALUES ('IRN','Turkmenian','F',1.6);
-INSERT INTO CountryLanguage VALUES ('CAN','Ukrainian','F',0.6);
-INSERT INTO CountryLanguage VALUES ('KEN','Turkana','F',1.4);
-INSERT INTO CountryLanguage VALUES ('CHN','Tibetan','F',0.4);
-INSERT INTO CountryLanguage VALUES ('COD','Chokwe','F',1.8);
-INSERT INTO CountryLanguage VALUES ('MOZ','Nyanja','F',3.3);
-INSERT INTO CountryLanguage VALUES ('NGA','Bura','F',1.6);
-INSERT INTO CountryLanguage VALUES ('SDN','Lotuko','F',1.5);
-INSERT INTO CountryLanguage VALUES ('TZA','Gogo','F',3.9);
-INSERT INTO CountryLanguage VALUES ('UGA','Rwanda','F',3.2);
-INSERT INTO CountryLanguage VALUES ('RUS','Mari','F',0.4);
-INSERT INTO CountryLanguage VALUES ('USA','Vietnamese','F',0.2);
-INSERT INTO CountryLanguage VALUES ('ZAF','Ndebele','F',1.5);
-INSERT INTO CountryLanguage VALUES ('IND','Punjabi','F',2.8);
-INSERT INTO CountryLanguage VALUES ('CAN','Dutch','F',0.5);
-INSERT INTO CountryLanguage VALUES ('CHN','Puyi','F',0.2);
-INSERT INTO CountryLanguage VALUES ('TZA','Ha','F',3.5);
-INSERT INTO CountryLanguage VALUES ('RUS','Udmur','F',0.3);
-INSERT INTO CountryLanguage VALUES ('USA','Japanese','F',0.2);
-INSERT INTO CountryLanguage VALUES ('IND','Asami','F',1.5);
-INSERT INTO CountryLanguage VALUES ('CAN','Eskimo Languages','F',0.1);
-INSERT INTO CountryLanguage VALUES ('CHN','Dong','F',0.2);
-INSERT INTO CountryLanguage VALUES ('RUS','Belorussian','F',0.3);
-INSERT INTO CountryLanguage VALUES ('USA','Portuguese','F',0.2);
-
-/*!40000 ALTER TABLE CountryLanguage ENABLE KEYS */;
-