MySQL - Das offizielle Handbuch 9783826608889, 3-8266-0888-7, 3-8266-0888-7


258 43 6MB

English Pages 743

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

MySQL - Das offizielle Handbuch
 9783826608889, 3-8266-0888-7, 3-8266-0888-7

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

MySQL Das offizielle Handbuch

© by verlag moderne industrie Buch AG & Co. KG, Bonn

© by verlag moderne industrie Buch AG & Co. KG, Bonn

MySQL Das offizielle Handbuch

Übersetzung von Stefan Hinz

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Die Deutsche Bibliothek – CIP-Einheitsaufnahm e Ein Titeldatensatz für diese Publikation ist bei Der Deutschen Bibliothek erhältlich.

ISBN 3-8266-0888-7 1. Auflage 2002

Alle Rechte, auch die der Übersetzung, vorbehalten. Kein Teil des Werkes darf in irgendeiner Form (Druck, Fotokopie, Mikrofilm oder einem anderen Verfahren) ohne schriftliche Genehm igung des Verlages reproduziert oder unter Verwendung elektronischer System e verarbeitet, vervielfältigt oder verbreitet werden. Der Verlag übernim m t keine Gewähr für die Funktion einzelner Program m e oder von Teilen derselben. Insbesondere übernim m t er keinerlei Haftung für eventuelle, aus dem Gebrauch resultierende Folgeschäden. Die Wiedergabe von Gebrauchsnam en, Handelsnam en, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahm e, dass solche Nam en im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jederm ann benutzt werden dürften.

Original English language edition text and art copyright © Copyright 1997-2002 MySQL AB

Printed in Germ any

Lektorat: Volker Bom bien Herstellung: Michèle Albers Satz und Layout: G&U e.Publishing Services GmbH, Flensburg Druck: Media-Print, Paderborn

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Inha lt sver zeichnis

Vor w or t Vor bem er k ungen zum deut schen Ha ndbuch Konventionen in diesem H andbuch

Ka pit el 1 :

Wa s ist M ySQL? Die wichtigsten Features von MySQ L Wie stabil ist MySQ L? Wie groß können MySQ L-Tabellen sein? Jahr-2000-Konformität

Was ist MySQ L AB? Geschäftsmodell und Dienstleistungen von MySQ L AB

MySQ L-Support und Lizensierung Support, den MySQ L AB anbietet Copyrights und Lizenzen, die von MySQ L verwendet werden MySQ L-AB-Logos und -Schutzmarken MySQ L-Lizenzpolitik

MySQ L 4.0 kurz und bündig Schritt für Schritt Für den sofortigen Entwicklungseinsatz Eingebettetes MySQ L Weitere ab MySQ L 4.0.0 verfügbare Features Zukünftige Features in MySQ L 4.0 MySQ L 4.1, das folgende Entwicklungs-Release

17 19 20

23 24 26 29 29

31 32

34 35 35 36 37

38 39 39 39 39 40 40

MySQ L-Informationsquellen

41

MySQ L-Portale MySQ L-Mailing-Listen

41 41

Wie Standard-kompatibel ist MySQ L? An welche Standards hält sich MySQ L? MySQ L im ANSI-Modus laufen lassen MySQ L-Erweiterungen zu ANSI SQ L92 MySQ L-Unterschiede im Vergleich zu ANSI SQ L92 Bekannte Fehler und Design-Unzulänglichkeiten in MySQ L

48 48 48 49 51 57

5

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Inhaltsverzeichnis

MySQ L und die Zukunft Dinge, die in Version 4.0 enthalten sein sollten Dinge, die in naher Zukunft erledigt werden müssen Dinge, die irgendwann gemacht werden müssen Ein paar Dinge, für deren Umsetzung wir keine Pläne haben

MySQ L im Vergleich mit anderen Datenbanken MySQ L im Vergleich mit mSQ L MySQ L im Vergleich mit PostgreSQ L

Ka pit el 2 :

Inst a lla t ion von M ySQL

Schnelle Standard-Installation von MySQ L MySQ L auf Linux installieren Installation von MySQ L unter Windows Betriebssysteme, die von MySQ L unterstützt werden Welche MySQ L-Version Sie benutzen sollten Installationslayouts Wann und wie Updates veröffentlicht werden MySQ L-Binärdistributionen, die von MySQ L AB kompiliert wurden

Installation der Q uelldistribution Schnellinstallation: Überblick Wie man Patches anwendet Typische configure-O ptionen Installation vom Entwicklungs-Source-Tree Probleme beim Kompilieren? Anmerkungen zu MIT-pThreads Windows-Q uelldistribution MySQ L bauen

Einstellungen und Tests nach der Installation Probleme mit mysql_install_db Probleme mit dem Start des MySQ L-Servers MySQ L automatisch starten und anhalten

MySQ L aktualisieren (Upgrade / Downgrade) Upgrade von 3.23 auf Version 4.0 Upgrade von einer Version 3.22 auf 3.23 Upgrade von Version 3.21 auf Version 3.22 Upgrade von Version 3.20 auf Version 3.21 Upgrade auf eine andere Architektur

Betriebssystem-spezifische Anmerkungen Linux (alle Linux-Versionen) Anmerkungen zu Windows Anmerkungen zu Solaris Anmerkungen zu BSD Anmerkungen zu Mac O S X Anmerkungen zu anderen Unixen Anmerkungen zu O S/ 2 Anmerkungen zu BeO S Anmerkungen zu Novell Netware

6

© by verlag moderne industrie Buch AG & Co. KG, Bonn

60 60 61 64 66

66 66 72

81 81 81 82 84 85 88 89 89

91 91 94 94 97 98 101 102 102

103 106 108 110

111 111 112 113 113 114

115 115 122 129 133 135 136 146 147 147

Inhaltsverzeichnis

Anmerkungen zur Perl-Installation Installation von Perl unter Unix Installation von ActiveState-Perl unter Windows Installation der MySQ L-Perl-Distribution unter Windows Probleme bei der Benutzung von Perl DBI/ DBD-Schnittstelle

Ka pit el 3 :

Einf ühr ung in M ySQL: Ein M ySQL-Tut or ia l

Verbindung zum Server herstellen und trennen Anfragen eingeben Eine Datenbank erzeugen und benutzen Eine Datenbank erzeugen und auswählen Eine Tabelle erzeugen Daten in Tabellen einladen Informationen aus einer Tabelle abfragen

Informationen über Datenbanken und Tabellen Beispiele gebräuchlicher Anfragen (Q ueries) Der höchste Wert einer Spalte Die Zeile, die den höchsten Wert einer bestimmten Spalte enthält H öchster Wert einer Spalte pro Gruppe Die Zeilen, die das gruppenweise Maximum eines bestimmten Felds enthalten Wie Benutzer-Variablen verwendet werden Wie Fremdschlüssel (Foreign Keys) verwendet werden Über zwei Schlüssel suchen Besuche pro Tag berechnen

mysql im Stapelbetrieb (Batch Mode) Anfragen aus dem Zwillings-Projekt Alle nicht verteilten Zwillinge finden Eine Tabelle über den Zustand von Zwillingspaaren zeigen

MySQ L mit Apache benutzen

Ka pit el 4 :

M ySQL-Da t enba nk a dm inist r a t ion

MySQ L konfigurieren mysqld-Kommandozeilenoptionen my.cnf-O ptionsdateien Viele Server auf derselben Maschine installieren Viele MySQ L-Server auf derselben Maschine laufen lassen

Allgemeine Sicherheitsthemen und das MySQ L-Zugriffsberechtigungssystem Allgemeine Sicherheitsrichtlinien Wie Sie MySQ L gegen Cracker sicher machen Startoptionen für mysqld in Bezug auf Sicherheit Was das Berechtigungssystem macht Wie das Berechtigungssystem funktioniert Von MySQ L zur Verfügung gestellte Berechtigungen Verbinden mit dem MySQ L-Server Zugriffskontrolle, Phase 1: Verbindungsüberprüfung

147 147 148 149 149

151 151 152 156 157 158 159 160

178 179 180 180 181 181 182 183 185 185

186 187 188 191

191

193 193 193 198 201 202

203 203 206 207 208 208 211 213 214

7

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Inhaltsverzeichnis

Zugriffskontrolle, Phase 2: Anfrageüberprüfung Gründe für Access denied-Fehler

MySQ L-Benutzerkonten-Verwaltung GRANT- und REVO KE-Syntax MySQ L-Benutzernamen und -Passwörter Wann Berechtigungsänderungen wirksam werden Einrichtung der anfänglichen MySQ L-Berechtigungen Neue MySQ L-Benutzer hinzufügen Passwörter einrichten Wie Sie Ihre Passwörter sicher halten

Disaster-Management und Wiederherstellung Datenbank-Datensicherungen BACKUP TABLE-Syntax RESTO RE TABLE-Syntax CH ECK TABLE-Syntax REPAIR TABLE-Syntax Benutzung von myisamchk für Tabellenwartung und Absturzreparatur Wartungsplan für Tabellen erstellen Informationen über eine Tabelle erhalten

Datenbankverwaltung: Sprachreferenz O PTIMIZE TABLE-Syntax ANALYZE TABLE-Syntax FLUSH -Syntax KILL-Syntax SH O W-Syntax

217 219

223 223 228 229 229 230 233 234

235 235 236 237 237 239 239 250 250

257 257 258 258 259 259

MySQ L-Lokalisierung und internationaler Gebrauch

276

Der für Daten und Sortieren benutzte Zeichensatz Nicht-englische Fehlermeldungen Einen neuen Zeichensatz hinzufügen Die Zeichen-Definitions-Arrays Unterstützung für Zeichenketten-Vergleich Unterstützung für Multi-Byte-Zeichen Probleme mit Zeichensätzen

276 278 278 279 280 280 280

Serverseitige Skripte und Dienstprogramme für MySQ L Überblick über serverseitige Programme und Dienstprogramme safe_mysqld, der Wrapper um mysqld mysqld_multi, Programm zur Verwaltung mehrerer MySQ L-Server myisampack, MySQ L-Programm zum Erzeugen komprimierter Nur-Lese-Tabellen mysqld-max, ein erweiterter mysqld-Server

Clientseitige Skripte und H ilfsprogramme von MySQ L Überblick über die clientseitigen Skripte und Dienstprogramme Das Kommandozeilen-Werkzeug mysqladmin, Verwaltung eines MySQ L-Servers Benutzung von mysqlcheck für Tabellenwartung und Wiederherstellung nach Abstürzen mysqldump, Tabellenstrukturen und -daten dumpen

8

© by verlag moderne industrie Buch AG & Co. KG, Bonn

281 281 283 285 288 295

297 297 299 305 307 309

Inhaltsverzeichnis

mysqlhotcopy, MySQ L-Datenbanken und Tabellen kopieren mysqlimport, Daten aus Textdateien importieren Datenbanken, Tabellen und Spalten anzeigen perror, Erklärung der Fehler-Codes Wie SQ L-Befehle aus einer Textdatei laufen gelassen werden

Die MySQ L-Log-Dateien Die Fehler-Log-Datei Die allgemeine Anfragen-Log-Datei Die Update-Log-Datei Die binäre Update-Log-Datei Die Anfragen-Log-Datei für langsame Anfragen Wartung und Pflege der Log-Dateien

Replikation bei MySQ L Einführung in die Replikation Replikationsimplementation Wie man Replikation aufsetzt Replikationsfeatures und bekannte Probleme Replikationsoptionen in my.cnf SQ L-Befehle in Bezug auf Replikation Replikation – H äufig gestellte Fragen Problemlösung bei Replikation

Ka pit el 5 :

313 315 317 318 318

318 319 319 319 320 321 322

322 322 323 323 325 326 329 330 333

M ySQL-Opt im ier ung

335

Überblick über O ptimierung

335

MySQ L-Design-Einschränkungen Portabilität Wofür benutzen wir MySQ L? Die MySQ L-Benchmark-Suite Wie Sie Ihre eigenen Benchmarks benutzen

SELECTs und andere Anfragen optimieren EXPLAIN-Syntax (Informationen über ein SELECT erhalten) Anfragen-Performance abschätzen Geschwindigkeit von SELECT-Anfragen Wie MySQ L WH ERE-Klauseln optimiert Wie MySQ L DISTINCT optimiert Wie MySQ L LEFT JO IN optimiert Wie MySQ L LIMIT optimiert Geschwindigkeit von INSERT-Anfragen Geschwindigkeit von UPDATE-Anfragen Geschwindigkeit von DELETE-Anfragen Weitere O ptimierungstipps

Sperren (Locking) Wie MySQ L Tabellen sperrt Themen, die Tabellensperren betreffen

O ptimierung der Datenbank-Struktur MySQ L-Datenbank-Design-Überlegungen

336 336 337 338 339

339 340 346 346 346 348 349 349 350 351 352 352

354 354 355

356 356

9

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Inhaltsverzeichnis

Wie Sie Ihre Daten so klein wie möglich bekommen Wie MySQ L Indexe benutzt Spalten-Indexe Mehrspaltige Indexe Wie MySQ L Tabellen öffnet und schließt Nachteile der Erzeugung großer Mengen von Tabellen in der selben Datenbank Warum gibt es so viele offene Tabellen?

O ptimierung des MySQ L-Servers System / Kompilierzeitpunkt und Tuning der Startparameter Server-Parameter tunen Wie Kompilieren und Linken die Geschwindigkeit von MySQ L beeinflusst Wie MySQ L Speicher benutzt Wie MySQ L DNS benutzt SET-Syntax Festplatte, Anmerkungen Symbolische Links benutzen

Ka pit el 6 :

M ySQL-Spr a chr ef er enz

Sprachstruktur Literale: Wie Zeichenketten und Zahlen geschrieben werden Datenbank-, Tabellen-, Index-, Spalten- und Alias-Namen Groß-/ Kleinschreibung in Namen Benutzer-Variablen Kommentar-Syntax Ist MySQ L pingelig hinsichtlich reservierter Wörter?

Spaltentypen Numerische Typen Datums- und Zeit-Typen Zeichenketten-Typen Den richtigen Typ für eine Spalte auswählen Spaltentypen anderer Datenbanken benutzen Speicherbedarf von Spaltentypen

Funktionen für die Benutzung in SELECT- und WH ERE-Klauseln Nicht typenspezifische O peratoren und Funktionen Ablaufsteuerungsfunktionen Zeichenketten-Funktionen Numerische Funktionen Datums- und Zeit-Funktionen Weitere Funktionen Funktionen zur Benutzung bei GRO UP BY-Klauseln

Datenmanipulation: SELECT, INSERT, UPDATE, DELETE SELECT-Syntax UPDATE-Syntax DELETE-Syntax

10

© by verlag moderne industrie Buch AG & Co. KG, Bonn

357 358 360 360 361 362 362

363 363 363 365 366 368 368 371 372

375 375 375 378 380 380 381 382

384 388 389 395 399 399 400

401 402 406 408 419 427 435 440

442 442 452 452

Inhaltsverzeichnis

Datendefinition: CREATE, DRO P, ALTER CREATE DATABASE-Syntax DRO P DATABASE-Syntax CREATE TABLE-Syntax ALTER TABLE-Syntax RENAME TABLE-Syntax DRO P TABLE-Syntax CREATE INDEX-Syntax DRO P INDEX-Syntax

Grundlegende Befehle des MySQ L-Dienstprogramms für Benutzer USE-Syntax DESCRIBE-Syntax (Informationen über Spalten erhalten)

Transaktionale und Sperrbefehle von MySQ L BEGIN/ CO MMIT/ RO LLBACK-Syntax LO CK TABLES/ UNLO CK TABLES-Syntax SET TRANSACTIO N-Syntax

MySQ L-Volltextsuche Volltext-Einschränkungen MySQ L-Volltextsuche fein einstellen Neue Features der Volltextsuche in MySQ L 4.0 Volltextsuche TO DO -Liste

MySQ L-Anfragen-Cache Wie der Anfragen-Cache funktioniert Anfragen-Cache-Konfiguration Anfragen-Cache-O ptionen in SELECT Anfragen-Cache-Status und -Wartung

Ka pit el 7 :

M ySQL-Ta bellent ypen

MyISAM-Tabellen Für Schlüssel benötigter Speicherplatz MyISAM-Tabellenformate MyISAM-Tabellenprobleme

MERGE-Tabellen MERGE-Tabellenprobleme

ISAM-Tabellen H EAP-Tabellen InnoDB-Tabellen Überblick über InnoDB-Tabellen Mit InnoDB anfangen – O ptionen InnoDB-Tabellenplatz (Tablespace) erzeugen InnoDB-Tabellen erzeugen H inzufügen und Entfernen von InnoDB-Daten- und -Log-Dateien Datensicherung und Wiederherstellung einer InnoDB-Datenbank Eine InnoDB-Datenbank auf eine andere Maschine verschieben

460 460 461 461 468 472 472 473 473

473 473 474

474 474 475 477

477 479 480 480 481

481 481 482 483 483

485 486 488 489 491

492 494

495 496 497 497 498 501 502 504 505 506

11

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Inhaltsverzeichnis

InnoDB-Transaktionsmodell Tipps zur Performance-Steigerung Implementation des Multiversionings Tabellen- und Index-Strukturen Verwaltung von Datei-Speicherplatz und Festplatten-Eingaben / -Ausgaben Fehlerbehandlung Beschränkungen von InnoDB-Tabellen

BDB- oder Berkeley_db-Tabellen Überblick über BDB-Tabellen BDB installieren BDB-Startoptionen Kennzeichen von BDB-Tabellen Was in naher Zukunft bei BDB in O rdnung gebracht werden muss Betriebssysteme, die von BDB unterstützt werden Fehler, die bei der Benutzung von BDB-Tabellen auftreten können

Ka pit el 8 :

507 510 514 515 517 518 519

520 520 520 521 521 523 523 523

M ySQL-APIs

525

MySQ L-PH P-API

525

Allgemeine Probleme mit MySQ L und PH P

MySQ L-Perl-API DBI mit DBD::mysql Die DBI-Schnittstelle Portable DBI-Methoden MySQ L-spezifische Methoden Weitere DBI/ DBD-Informationen

MySQ L-O DBC-Unterstützung Wie Sie MyO DBC installieren Wie Sie die verschiedenen Felder im O DBC-Administrator Programm ausfüllen Verbindungsparameter für MyO DBC Wie Sie Probleme mit MyO DBC berichten Programme, die bekanntermaßen mit MyO DBC zusammenarbeiten Wie man den Wert einer AUTO _INCREMENT-Spalte in O DBC erhält Probleme mit MyO DBC berichten

MySQ L-C-API C-API-Datentypen C-API-Funktionsüberblick C-API-Funktionsbeschreibungen C-Threaded-Funktionsbeschreibungen C-Embedded-Server-Funktionsbeschreibungen H äufige Fragen und Probleme bei der Benutzung der C-API Client-Programme bauen Wie man einen threaded Client herstellt libmysqld, die eingebettete MySQ L-Server-Bibliothek

MySQ L-C+ +-APIs Borland C+ +

12

© by verlag moderne industrie Buch AG & Co. KG, Bonn

525

526 526 526 527 532 533

533 534 535 535 537 537 542 542

543 544 547 550 585 585 587 589 589 590

598 598

Inhaltsverzeichnis

MySQ L Java Connectivity (JDBC) MySQ L-Python-APIs MySQ L-Tcl-APIs MySQ L-Eiffel-Wrapper

Ka pit el 9 :

M ySQL er w eit er n

H inzufügen neuer Funktionen zu MySQ L CREATE FUNCTIO N / DRO P FUNCTIO N-Syntax H inzufügen einer neuen benutzerdefinierten Funktion H inzufügen einer neuen nativen Funktion

H inzufügen neuer Prozeduren zu MySQ L Prozeduranalyse Eine Prozedur schreiben

MySQ L-Interna MySQ L-Thread MySQ L-Test-Suite

Anha ng A:

Wie m a n f est st ellt , w a s Pr oblem e ver ur sa cht

Einige gebräuchliche Fehler bei der Benutzung von MySQ L Access denied-Fehler MySQ L server has gone away-Fehler Can’t connect to [local] MySQ L server-Fehler H ost ’...’ is blocked-Fehler Too many connections-Fehler Some non-transactional changed tables couldn’t be rolled back-Fehler No free memory-Fehler Packet too large-Fehler Kommunikationsfehler / Abgebrochene Verbindung The table is full-Fehler Can’t create/ write to file-Fehler Command out of sync-Fehler in Client User ignored-Fehler Table ’xxx’ doesn’t exist-Fehler Can&tacute; initialize charset xxx-Fehler. File Not Found

Installationsbezogene Themen Probleme beim Linken mit der MySQ L-Client-Bibliothek Wie man MySQ L als normaler Benutzer laufen läßt Probleme mit Dateirechten

Administrationsbezogene Themen Was zu tun ist, wenn MySQ L andauernd abstürzt Wie ein vergessenes Passwort zurückgesetzt wird Wie MySQ L mit vollen Festplatten umgeht Wohin MySQ L temporäre Dateien speichert Wie Sie die MySQ L-Socket-Datei `/ tmp/ mysql.sock' schützen oder ändern Zeitzonen-Probleme

598 598 598 598

599 599 599 600 606

607 608 608

608 608 609

613 614 614 615 615 617 617 618 618 618 619 619 620 620 620 621 621 621

622 622 623 624

625 625 627 628 628 629 629

13

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Inhaltsverzeichnis

Anfragenbezogene Themen Groß-/ Kleinschreibung beim Suchen Probleme bei der Benutzung von DATE-Spalten Probleme mit NULL-Werten Probleme mit alias Zeilen aus verwandten Tabellen löschen Probleme bei keinen übereinstimmenden Zeilen lösen

Tabellendefinitionsbezogene Themen Probleme mit ALTER TABLE. Wie man die Reihenfolge der Spalten in einer Tabelle ändert TEMPO RARY TABLE-Probleme

Anha ng B:

Fir m en, die M ySQL einset zen

Allgemeine News-Sites Einige Web-Suchmaschinen Einige Informations-Suchmaschinen mit Konzentration auf bestimmte Felder O nline-Magazine Websites, die MySQ L als Backend benutzen Einige Domain- / Internet- / Web- und verwandte Services Websites, die PH P und MySQ L benutzen Einige MySQ L-Berater Programmierung Nicht kategorisierte Seiten

630 630 630 631 632 632 633

634 634 634 635

637 637 637 638 638 638 639 639 640 640 640

Anha ng C:

M ySQL-Benut zung dur ch Kunden

643

Anha ng D:

Beigest euer t e Pr ogr a m m e

645

Anha ng E:

sec-APIs

647

Clients Web-Werkzeuge Performance-Benchmark-Werkzeuge Authentifizierungswerkzeuge Konverter MySQ L mit anderen Produkten benutzen Nützliche Werkzeuge RPMs für gebräuchliche Werkzeuge (die meisten sind für RedH at 6.1) Nützliche Funktionen Windows-Programme Nicht kategorisiert

14

© by verlag moderne industrie Buch AG & Co. KG, Bonn

649 652 653 653 654 655 655 656 656 656 656

Inhaltsverzeichnis

Anha ng F:

Da nk sa gungen

Entwickler bei MySQ L AB Kontributoren zu MySQ L Unterstützer von MySQ L

Anha ng G: M ySQL-Änder ungsver la uf (Cha nge Hist or y) Änderungen in Release 4.0.x (Entwicklung; Alpha) Änderungen in Release 4.0.2 Änderungen in Release 4.0.1 Änderungen in Release 4.0.0

Änderungen in Release 3.23.x (Stabil)

Anha ng H:

Anm er k ungen zur Por t ier ung a uf a nder e Syst em e

Einen MySQ L-Server debuggen MySQ L zum Debuggen kompilieren Trace-Dateien erzeugen mysqld unter gdb debuggen Einen Stack-Trace benutzen Log-Dateien benutzen, um Gründe für Fehler in mysqld zu finden Einen Testfall herstellen, wenn Sie Tabellenbeschädigung feststellen

Einen MySQ L-Client debuggen Das DBUG-Paket Sperrmethoden Anmerkungen zu RTS-Thread Unterschiede zwischen verschiedenen Thread-Paketen

657 657 659 666

667 667 667 667 668

669

701 702 702 703 703 704 706 706

707 707 709 710 712

Anha ng I:

Um gebungsva r ia blen

713

Anha ng J:

Beschr eibung der M ySQLSynt a x f ür r egulä r e Ausdr ück e

715

Anha ng K: GNU GENERAL PUBLIC LICENSE Vorwort Anhang: Wie Sie diese Bedingungen auf Ihre neuen Programme anwendbar machen

Anha ng L:

GNU LESSER GENERAL PUBLIC LICENSE

Vorwort Anhang: Wie Sie diese Bedingungen auf Ihre eigenen, neuen Bibliotheken anwenden können

St ichw or t ver zeichnis

719 719 723

727 727 734

737

15

© by verlag moderne industrie Buch AG & Co. KG, Bonn

VAKAT

VAKAT

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Vorwort

Sehr geehrter Leser und Anwender von MySQ L, Sie haben die deutsche Ausgabe des offiziellen MySQ L™ Reference Manual vor sich. Diese Ausgabe ist auch die erste Übersetzung, die von den Entwicklern von MySQ L selbst koordiniert und betreut wurde. Ich bin sehr froh, dass wir Ihnen nun, zusammen mit unserem deutschen Verleger M ITP, auf diesem Weg einen angenehmen und schnellen Zugang zu allen wesentlichen Informationen über MySQ L verschaffen können. Dieses Buch richtet sich an Sie, ganz gleich, ob Sie Anwender, Entwickler oder IT-Verantwortlicher in einem Unternehmen sind. Ich bin all jenen sehr dankbar, die dazu beigetragen haben, dass MySQ L sich so weit verbreiten und etablieren konnte. Es sind nun schätzungsweise drei Millionen Installationen von MySQ L auf verschiedenen Servern in der ganzen Welt. Dazu zählen U N IX-Systeme, Windows-Server und Apple MacIntosh-Systeme. MySQ L wäre aber nicht so erfolgreich, wie es heute ist, ohne die H ilfe der vielen Anwender, die Programmierschnittstellen zu MySQ L in vielen verschiedenen Sprachen und für viele verschiedene Anwendungen entwickelt haben. Viele Anwender halfen uns auch mit hilfreichen Vorschlägen und konstruktiver Kritik. Wir erhielten auch viele hervorragende Rückmeldungen zu den wenigen Fehlern, die sich an unserer Q ualitätskontrolle vorbei in die jeweiligen Versionen eingeschlichen hatten. Da MySQ L in immer neuen Bereichen eingesetzt wird, möchte ich an dieser Stelle die Gelegenheit nutzen und einige verbreitete Missverständnisse bezüglich MySQ L aufklären. Zunächst: das MySQ L RDBM S (Relationales Datenbankmanagementsystem) wird von einem kommerziell orientierten Unternehmen, der MySQ L AB, entwickelt. Die MySQ L AB ist ein schwedisches Unternehmen, das mein Kollege David Axmark und ich gegründet haben. Zusammen haben wir seit 1995 diese Datenbank entworfen, inplementiert und weiter entwickelt. Jetzt, im April 2002, hat unser Unternehmen gut 40 Angestellte und wir arbeiten auf allen Kontinenten der Erde. Durch einige unserer Mitarbeiter, die speziell die Anwender in Deutschland in deutscher Sprache betreuen, stellen wir sicher, dass nicht nur Funktionen, wie eine korrekte deutsche Sortierfunktion, implementiert werden, sondern auch all die anderen Bedürfnisse der deutschen Anwender sorgfältig berücksichtigt werden. Des weiteren möchte ich herausstellen, dass, auch wenn viele Anwender zu den diversen MySQ LAPIs und der Entwicklung verschiedener MySQ L-Clients beigetragen haben, die Urheberrechte am Q uellcode des Servers weiterhin allein unserem Unternehmen gehören. Daher sind wir in der Lage, unser Produkt in zwei getrennten Lizenzmodellen anzubieten. Mit dem Lizenzmodell der

17

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Vorwort

G PL sind wir an der Spitze der O pen Source- / Free Software-Bewegung und in der kommerziellen Fassung sind wir einer der führenden Anbieter kommerzieller Datenbanken zur Integration in eigene Applikationen. Sie sollten außerdem wissen, dass MySQ L AB auch eine vollständige Palette an Service- und Support-Angeboten für seine Kunden bereitstellt. O ft wird an O pen Source-Software bemängelt, dass diese nicht von kommerziellen Anbietern unterstützt wird. Unser Unternehmen hat das eigene Produkt schon immer kommerziell betreut. Wir sind aber auch extrem stolz darauf, dass unsere Software so stabil läuft, dass es kaum Bedarf für H ilfe bei unseren Kunden gibt. Auf der anderen Seite haben wir viele Kunden technisch und fachlich unterstützt, die MySQ L in ihren zentralen Applikationen einsetzen. Das bringt mich auch schon zu dem letzten Punkt, den ich noch erwähnen wollte: unser MySQ LServer ist besonders für unternehmenskritische Applikationen mit hoher Auslastung konzipiert. Ja, wir unterstützen ACID-Transaktionen und ja, wir unterstützen auch das Locking auf Zeilenebene durch den InnoDB Tabellen-H andler. Wir unterstützen auch das Clustering in der Form von Replikation des MySQ L-Servers. In diesem Jahr werden wir uns darauf konzentrieren, Sub-Q ueries, Stored Procedures, Trigger und referentielle Integrität in unser System aufzunehmen. Weitere Details, Ankündigungen und neue Versionen zum Herunterladen finden Sie regelmäßig auf unserer Homepage unter http:/ / www.mysql.de. Zu guter Letzt möchte ich an dieser Stelle meinen Dank an Stefan H inz aussprechen, der die Übersetzung des Manuals ins Deutsche vorgenommen hat. Außerdem danke ich allen Kollegen bei MySQ L AB und meiner wundervollen Familie, die mich in den frühen Jahren der Entwicklung vom MySQ L bei meiner besessenen Arbeit unterstützt haben. Danke an Carola und Max! Helsingfors, Finnland, April 2002 Michael »Monty« Widenius CTO und Gründer, MySQ L AB

18

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Vorbemerkungen zum deutschen Handbuch Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQ L-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt: ❏ In diesem H andbuch wird nicht geupdated, sondern aktualisiert. ❏ Eine MySQ L-Distribution wird nicht gedownloaded, sondern herunter geladen. ❏ Und Transaktionen werden nicht gerollbackt, sondern zurückgerollt. 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 H auptwort 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: ❏ Ein SQ L-Statement wird nicht als »Erklärung in der Strukturierten AbfrageSprache (SAS)« übersetzt. ❏ Abkürzungen wie TCP/ IP werden nicht zu Ü SP/ ZP (ÜbertragungsSteuerungsProtokoll/ ZwischennetzProtokoll). ❏ Ein Client bleibt ein Client, und ein Server ein Server. Die Fallstricke einer Übersetzung stecken allerdings in den Details: ❏ Jeder SQ L-Kenner weiß, was eine »query« ist. In diesem H andbuch ist das eine Anfrage. ❏ Gibt es Probleme bei der Übermittlung einer Anfrage, kann es sein, dass eine Zeitüberschreitung eintritt. Der Profi hätte wahrscheinlich nach »Timeout« gesucht. ❏ Manche Dinge sind einfacher: Ein »string« ist eine Zeichenkette (obwohl für Profis vielleicht ungewohnt), ein »hex value« ein hexadezimaler Wert. Richtig spannend wird die Übersetzung bei Wörtern, die in der deutschen Fachsprache zumeist englisch verwendet werden, obwohl es passende deutsche Entsprechungen gibt: ❏ Im H auptspeicher (»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«. ❏ Daten werden zwischengespeichert (»gecached«). ❏ Speicher wird zugewiesen. Man kann auch »alloziert« sagen, was dem englischen »allocated« näher kommt. Alle diese Entsprechungen, bei denen die deutsche Sprache eher in Vergessenheit geraten ist, wurden zweisprachig aufgenommen. Beispiele: ❏ Alle Daten werden zwischen Anfragen auf die Festplatte zurück geschrieben (flush). ❏ Aktualisieren Sie (Update), wenn alles in O rdnung ist. ❏ Auf eine höhere Version von MySQ L aktualisieren (Upgrade) ...

19

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Vorwort

Gelegentlich wird auch in diesem H andbuch die »Performance getuned«, neue »Features« eines MySQ L-»Release« werden beschrieben usw. Anregungen für eine weiter gehende Eindeutschung nimmt der Übersetzer gern entgegen. Insbesondere gilt das auch für H inweise zur Verkürzung deutscher Ausdrücke. Beispielsweise heißt »case sensitive« (14 Buchstaben) im H andbuch »abhängig von der verwendeten Groß-/ Kleinschreibung« (44 Buchstaben). Letzter Punkt: Die Übersetzung erfolgte in äußerst enger Anlehnung an das englischsprachige O riginal. Nichts wurde hinzugefügt (außer 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 O riginal 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: Stefan H inz, [email protected] Berlin, im April 2002 Stefan H inz, iConnect GmbH Berlin.

Konventionen in diesem Handbuch Dieses H andbuch benutzt bestimmte typographische Konventionen: constant

Schriftart gleicher Breite (nicht-proportionale Schrift) wird für Befehle und O ptionen benutzt, für SQ L-Statements, Datenbank-, Tabellen- und Spaltennamen, für C- und PERL-Code und für Umgebungsvariablen. Beispiel: »Um festzustellen, wie mysqladmin funktioniert, rufen Sie den Befehl mit der --help O ption auf.«' 'filename' Schriftart gleicher Breite, die von Anführungszeichen umgeben ist, wird für Datei- und Pfadnamen benutzt. Beispiel: »Die Distribution wird im Verzeichnis '/ usr/ local/ ' installiert.« ' c' Schriftart gleicher Breite, die von Anführungszeichen umgeben ist, wird auch benutzt, um Zeichenfolgen anzuzeigen. Beispiel: »Um ein Platzhalterzeichen einzugeben, benutzen Sie das ’%' Zeichen.« italic

Kursivschrift wird für Hervorhebungen verwendet, wie in diesem Beispiel. boldface Fettschrift wird für Namen von Zugriffsrechten verwendet (zum Beispiel: »Gewähren Sie das process-Zugriffsrecht nicht leichtfertig«) und gelegentlich, um besonders starke Hervorhebungen zu kennzeichnen. 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 shell>-Prompt zum Beispiel zeigt an, dass Sie den Befehl von Ihrer Login-Shell aus ausführen sollen. mysql> zeigt an, dass Sie den Befehl vom mysql Client-Programm aus ausführen sollen: shell> geben sie hier ein shell-kommando ein mysql> geben sie hier ein mysql-kommando ein

20

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Vorbemerkungen zum deutschen Handbuch

Shell-Befehle werden mit der Bourne-Shell-Syntax dargestellt. Wenn Sie eine 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: shell> VARNAME=wert irgendein_befehl

Um csh auszuführen, würden Sie folgende Sequenz ausführen: shell> setenv VARNAME wert shell> irgendein_befehl

O ft müssen Datenbank-, Tabellen- und Spaltennamen in konkreten Befehlen ersetzt werden. Um anzuzeigen, dass eine solche Ersetzung notwendig ist, benutzt dieses H andbuch db_name, tbl_name und col_name. Sie könnten zum Beispiel folgendes Statement sehen: mysql> SELECT spalten_name FROM datenbank_name.tabellen_name;

Wenn Sie ein ähnliches Statement eingeben wollen, müssen Sie Ihre eigenen Datenbank-, Tabellen- und Spaltennamen eingeben, zum Beispiel wie folgt: mysql> SELECT autor_name FROM bibliothek.autorenliste;

SQ L-Statements können in Groß- und Kleinschreibung geschrieben werden. Wenn dieses H andbuch SQ L-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 SELECT-Statements sehen: mysql> SELECT count(*) FROM tabellen_name;

Im Kontext der COUNT()-Funktion hingegen könnte dasselbe Statement wie folgt geschrieben werden: mysql> select COUNT(*) from tabellen_name;

Wenn keine besondere Hervorhebung beabsichtigt wird, werden alle Schlüsselworte in Großschreibung dargestellt. In Syntax-Beschreibungen werden eckige Klammern ('[' und ']') benutzt, um wahlfrei (optionale) Wörter oder Klauseln anzuzeigen: DROP TABLE [IF EXISTS] tabellen_name

Wenn ein Syntaxelement aus einer Anzahl von Alternativen besteht, werden die Alternativen durch gerade Striche ('|') voneinander getrennt. Wenn genau ein Element aus einer Anzahl von Möglichkeiten ausgewählt werden (kann), werden die Alternativen mit eckigen Klammern aufgelistet ('[' und ' ]'): TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)

Wenn genau ein Element aus einer Anzahl von Möglichkeiten ausgewählt werden muss, werden die Alternativen innerhalb geschweifter Klammern aufgelistet ('{' und '}'): {DESCRIBE | DESC} tbl_name {col_name | wild}

21

© by verlag moderne industrie Buch AG & Co. KG, Bonn

VAKAT

VAKAT

© by verlag moderne industrie Buch AG & Co. KG, Bonn

12.

Was ist MySQ L?

MySQ L, die populärste O pen Source SQ L-Datenbank, wird von MySQ L AB zur Verfügung gestellt. MySQ L AB ist ein kommerzielles Unternehmen, dessen Geschäft darin besteht, Serviceleistungen rund um die MySQ L-Datenbank zur Verfügung zu stellen. Siehe Seite 31, Was ist MySQL AB?

MySQ L 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 MySQ L. Weil Computer sehr gut darin sind, große Datenmengen zu handhaben, spielt DatenbankManagement im Computer-Bereich eine zentrale Rolle, sowohl bei Anwendungen, die allein laufen (Stand-Alone-Utilities) als auch als Teil anderer Anwendungen.

MySQ L ist ein relationales Datenbank-Managementsystem. Eine relationale Datenbank speichert Daten in separaten Tabellen, anstatt sie alle in einem einzigen großen Speicherraum unterzubringen. H ierdurch 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 SQ L-Teil von MySQ L steht für »Structured Q uery Language« (strukturierte Abfragesprache) – die verbreitetste standardisierte Sprache für Datenbankzugriffe.

MySQ L ist O pen- Source- Software. O pen Source bedeutet, dass es für jeden möglich ist, solche Software zu benutzen und zu verändern. Jeder kann MySQ L aus dem Internet herunter laden und benutzen, ohne irgend etwas zu bezahlen. Jeder, der daran interessiert ist, kann den Q uelltext studieren und den eigenen Bedürfnissen entsprechend verändern. MySQ L benutzt die G PL (G N U General Public License) 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 G PL Probleme bereitet oder wenn Sie MySQ L in eine kommerzielle Anwendung einbetten müssen, können Sie eine kommerziell lizensierte Version von uns erwerben.

23

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Kapitel 1

Warum sollten Sie MySQ L benutzen? MySQ L ist sehr schnell, zuverlässig und leicht zu benutzen. Wenn Sie nach diesen Eigenschaften suchen, sollten Sie MySQ L ausprobieren. MySQ L besitzt eine ganze Reihe praktischer Features, die in enger Kooperation mit unseren Benutzern entwickelt wurden. Einen PerformanceVergleich zwischen MySQ L und einigen anderen Datenbank-Managementsystemen finden Sie auf unserer Benchmark-Seite (siehe Seite 338). Die MySQ L-Benchmark-Suite 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 MySQ L eine umfangreiche Reihe sehr nützlicher Funktionen. Connectivity, Geschwindigkeit und Sicherheit machen MySQ L äußerst geeignet, um auf Datenbanken über das Internet zuzugreifen.

Die technischen Features von MySQ L Weiter führende technische Informationen finden Sie auf Seite 375, MySQL-Sprachreferenz.. MySQ L ist ein Client-Server-System, das aus einem multi-thread SQ L-Server besteht, der unterschiedliche Backends, verschiedene Client-Programme und -Bibliotheken, Verwaltungswerkzeuge und etliche Programmschnittstellen unterstützt. Wir stellen MySQ L auch als multithread Bibliothek zur Verfügung, die Sie mit Ihren Anwendungen verknüpfen können, um ein kleineres, schnelleres und leichter zu bedienendes Produkt zu erhalten. MySQ L stellt beigesteuerte (contributed) Software in großer Menge zur Verfügung. Es ist sehr wahrscheinlich, dass Ihre Lieblingsanwendung oder -sprache bereits MySQ L unterstützt. O ffiziell wird MySQ L 'Mai Ess Ku Ell' ausgesprochen (nicht 'Mai Siekwel'). Wir vermeiden allerdings, Leute zu korrigieren, die Mai-Siekwel sagen. Wir fingen ursprünglich mit der Intention an, den 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 mSQL weder schnell noch flexibel genug wäre, um unsere Anforderungen abzudecken. Dies resultierte in einer neuen SQ L-Schnittstelle zu unserer Datenbank, allerdings mit fast derselben API-Schnittstelle, wie sie mSQL benutzt. Diese API wurde gewählt, weil sie es erlaubte, Code von Drittanbietern einfach zu portieren. Die Entstehung des Namens MySQ L 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 MySQ L den Namen gab, ist immer noch ein Rätsel, sogar für uns.

Die wichtigsten Features von MySQ L Die folgende Liste beschreibt einige wichtige Charakteristika von MySQ L: ❏ Voll multi-thread unter Benutzung von Kernel-Threads. Das bedeutet, dass Sie sehr einfach mehrere Prozessoren benutzen können, falls verfügbar. ❏ C-, C+ + -, Eiffel-, Java-, Perl-, PH P-, Python- und Tcl-APIs. Siehe Seite 525, MySQL-APIs. ❏ Läuft auf vielen verschiedenen Plattformen (siehe Seite 84, Betriebssysteme, die von MySQL unterstützt werden). Viele Spaltentypen: vorzeichenbehaftete / vorzeichenlose Ganzzahlen (Integer), die 1, 2, 3, 4 und 8 Byte lang sind, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, und ENUM Typen (siehe Seite 384, Spaltentypen). ❏ Sehr schnelle Joins durch Benutzung eines optimierten Multi-Joins in einem Durchgang (onesweep multi-join). ❏ Volle O perator- und Funktionsunterstützung in SELECT- und WHERE-Teilen von Anfragen. Beispiel: mysql> SELECT CONCAT(vorname, " ", nachname) FROM tabellen_name WHERE einkommen/dependents > 10000 AND age > 30;

24

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Was ist MySQ L?

SQ L-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. ❏ Volle Unterstützung für SQ L-GROUP BY und ORDER BY- Klauseln. Unterstützung für Gruppierungsfunktionen (COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX() und MIN()). ❏ Unterstützung für LEFT OUTER JOIN und RIGHT OUTER JOIN mit AN SI-SQ L und O DBCSyntax ❏ Sie können Tabellen aus unterschiedlichen Datenbanken in ein und derselben SQ L-Anfrage benutzen (ab Version 3.22). ❏ 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. ❏ O DBC-(O pen-DataBase-Connectivity) Unterstützung für Win32 (mit Q uelltext). Alle O DBC 2.5 Funktionen und viele weitere. Sie können zum Beispiel M S Access benutzen, um sich mit Ihrem MySQ L-Server zu verbinden (siehe Seite 533, MySQL-ODBC-Unterstützung). ❏ Sehr schnelle B-tree disk Tabellen mit Index-Kompression ❏ 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 MySQ L kompiliert wird). Ein Index kann das Präfix eines CHAR- oder VARCHAR-Felds benutzen. ❏ Datensätze fester und variabler Länge ❏ Im Arbeitsspeicher gehaltene H ash-Tabellen, die als temporäre Tabellen benutzt werden ❏ Kann große Datenbanken handhaben. Wir selbst benutzen MySQ L bei einigen Datenbanken, die 50 Mio. Datensätze haben und wir kennen Benutzer, die MySQ L mit 60.000 Tabellen und etwa 5 Milliarden Zeilen benutzen. ❏ Alle Spalten können Vorgabewerte (Defaults) haben. Sie können INSERT benutzen, um eine Untermenge der Tabellenspalten mit Werten zu bestücken. Diejenigen Spalten, die nicht explizit angesprochen werden, werden auf ihre Vorgabewerte gesetzt. ❏ Benutzt G N U Automake, Autoconf und Libtool aus Portabilitätsgründen ❏ Geschrieben in C und C+ + . Getestet mit großen Anzahl verschiedener Compiler. ❏ Ein sehr schnelles Thread-basierendes Speicherzuordnungs-System (memory allocation system) ❏ Keine Speicherlecks (memory leaks). MySQ L wurde mit Purify getestet, einem kommerziellen Werkzeug zur Entdeckung von Speicherlecks. ❏ Beinhaltet myisamchk, ein sehr schnelles Dienstprogramm zur Überprüfung, O ptimierung und Reparatur von Tabellen. Die gesamte Funktionalität von myisamchk steht auch über die SQ L-Schnittstelle zur Verfügung (siehe Seite 193, MySQL-Datenbankadministration). 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 'a*', 'ä' und 'ö' in Tabellen- und Spaltennamen erlaubt. ❏ Alle Daten werden mit dem ausgewählten Zeichensatz gespeichert. Alle Vergleiche für normale Zeichenkettenvergleiche sind unabhängig von Groß- und Kleinschreibung. ❏ Die Sortierung ist abhängig vom gewählten Zeichensatz (schwedisch als Vorgabe). Das kann beim Start des MySQ L-Servers geändert werden. Um beispielsweise eine sehr fortgeschrittene Sortierung zu sehen, sehen Sie sich den tschechischen Sortier-Code an. MySQ L unterstützt viele unterschiedliche Zeichensätze, die bei der Kompilierung und während der Laufzeit festgelegt werden können. Der Zeichensatz 'latin_de' sorgt für eine korrekte deutsche Sortierreihenfolge. ❏ Aliase auf Tabellen und Spalten sind erlaubt, wie im SQ L92-Standard festgelegt.

25

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Kapitel 1

❏ DELETE, INSERT, REPLACE und 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. ❏ Funktionsnamen kollidieren nicht mit Tabellen- oder Spaltennamen. 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 '(', erlaubt ist. Siehe Seite 382, Ist MySQL pingelig hinsichtlich reservierter W örter? ❏ Alle MySQ L-Programme können mit der --help oder -? O ption aufgerufen werden, um O nline-H ilfe zu erhalten. ❏ Der Server kann Clients Fehlermeldungen in verschiedenen Sprachen zur Verfügung stellen Siehe Seite 278, Nicht-englische Fehlermeldungen. ❏ Clients können sich mit dem MySQ L-Server über TCP/ IP Sockets, Unix Sockets (Unix) oder Named Pipes (NT) verbinden. ❏ Der MySQ L-spezifische SHOW-Befehl kann benutzt werden, um Informationen über Datenbanken, Tabellen und Indexe zu erhalten. Der EXPLAIN-Code kann benutzt werden um festzustellen, wie der O ptimierer eine Anfrage auflöst.

Wie stabil ist MySQ L? Dieser Abschnitt beschäftigt sich mit den Fragen »Wie stabil ist MySQ L?« und »Kann ich mich auf MySQ L 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 MySQ L ohne jegliche Probleme in unseren Projekten seit Mitte 1996. Als MySQ L 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 MySQ L war benutzbar. Probleme gab es nur, wenn Benutzer anfingen, Code aus den »Grauzonen« zu benutzen. Natürlich wissen Benutzer von außerhalb nicht, was diese Grauzonen sind, daher versucht dieser Abschnitt, die momentan bekannten aufzuzeigen. Die Beschreibungen hier beziehen sich auf Version 3.23 von MySQ L. 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 (siehe Seite 57, Bekannte Fehler und Design-Unzulänglichkeiten in MySQL ). MySQ L 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:

Der ISAM Tabellen-Handler – stabil Dieser verwaltet Speicherung und Abfrage aller Daten in MySQ L Version 3.22 und früher. In allen Releases von MySQ L 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 MySQ L-Bugs berichtet wurde. Der MyISAM Tabellen-Handle r – stabil Dieser wurde in MySQ L 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.

26

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Was ist MySQ L?

Der Parser und le xikalische Analysator – stabil Es hat seit sehr langer Zeit keinen einzigen berichteten Bug in diesem System gegeben. 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. Standard-Client-Programme – stabil Dies beinhaltet mysql, mysqladmin, mysqlshow, mysqldump und mysqlimport. Basis-SQL – stabil Die grundlegenden SQ L-Funktionen, Zeichenketten-Klassen und dynamisches SpeicherH andling. Nicht ein einziger berichteter Bug in diesem System. Anfragen-Optimierer (Query optimizer) – stabil Bereichs-Optimierer (Range optimizer) – stabil Join-Optimie rer (Join optimizer) – stabil Sperren (Locking) – Gamma Dies ist sehr system-abhängig. Auf einigen Systemen gibt es große Probleme, wenn Standard-Betriebssystem-Sperren verwendet wird (fcntl()). In solchen Fällen sollten Sie den MySQ L-Daemon mit dem Flag --skip-locking laufen lassen. Bekannt ist, dass solche Probleme auf manchen Linux-Systemen vorkommen sowie auf SunO S, wenn N FS- gemountete Dateisysteme verwendet werden. Linux-Threads – stabil Das hauptsächliche Problem fand sich im fcntl()-Aufruf, der durch Benutzung der --skiplocking-O ption bei 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. O bwohl 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 M B die Applikation unstabil, und wir konnten einen Coredump reproduzieren, nachdem 1021 Verbindungen im Leerlauf (idle connections) hergestellt wurden. Siehe Seite 115, Linux (alle Linux-Versionen). Solaris 2.5+ pthreads – stabil Wir benutzen dies für unsere gesamte Produktionsarbeit. MIT-pthreads (ande re 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 O perationen sind recht langsam (1/ 20 Sekunde Schlafzyklus zwischen jeder Anfrage). Natürlich können M ITThreads alles ein bisschen verlangsamen, aber Index-basierende SELECT-Statements werden üblicherweise in einem Zeit-Frame ausgeführt, also sollte es kein mutex locking/ thread juggling geben.

27

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Kapitel 1

Andere Thre ad-Implementierungen -- Beta – Gamma Die Ports zu anderen Systemen sind noch sehr neu und können Bugs haben, möglicherweise auch in MySQ L, aber in den meisten Fällen in der Thread- Implementierung selbst. LOAD DATA ..., 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 H andbuch nach, bevor Sie Bugs berichten! ALTER TABLE – stabil

Einige Änderungen in Version 3.22.12. D BD – stabil Wird jetzt von JochenWiedmann gewartet ([email protected]). Danke! mysqlaccess – stabil

Geschrieben und gewartet von Yves Carlier ([email protected]). Danke! GRANT – stabil

große Änderungen in MySQ L Version 3.22.12. MyO D BC (benutzt O D BC SD K 2.5) – Gamma Scheint mit einigen Programmen gut zu laufen. Replikation – Beta / Gamma Wir arbeiten noch an der Replikation, also erwarten Sie nicht, dass diese schon felsenfest steht. Auf der anderen Seite benutzen MySQ L- Benutzer diese bereits mit guten Resultaten. BD B-Tabellen – Beta Der Berkeley-Datenbank-Code ist sehr stabil, aber wir verbessern immer noch die Schnittstelle zwischen MySQ L und BDB-Tabellen, also wird es einige Zeit dauern, bevor dies so gut wie andere Tabellentypen getestet ist. InnoD B-Tabellen – Be ta Diese wurden MySQ L kürzlich hinzu gefügt. Sie scheinen gut zu funktionieren und können nach einigen anfänglichen Tests benutzt werden. 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. MERGE-Tabellen – Beta / Gamma Die Benutzung von Schlüsseln bei MERGE-Tabellen ist noch nicht sehr ausgetestet. Der restliche Teile des MERGE-Codes ist recht gut getestet. FU LLTEXT – Beta Textsuche scheint zu funktionieren, wird aber noch nicht viel eingesetzt.

28

© by verlag moderne industrie Buch AG & Co. KG, Bonn

Was ist MySQ L?

MySQ L AB stellt E-Mail-Support für zahlende Kunden bereit, aber die MySQ L-Mailingliste bietet üblicherweise 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.

Wie groß können MySQ L-Tabellen sein? MySQ L Version 3.22 hat eine Begrenzung auf 4G B bei der Tabellengröße. Mit dem neuen MyISAM in MySQ L Version 3.23 wurde die maximale Tabellengröße auf 8 Millionen Terabytes (2