MySQL

+ andere TechDocs
+ SQL
+ SQL mit Java
+ MySQL-Homepage
+


MySQL ist eine leistungsfähige relationale Datenbank für die Abfragesprache SQL (Structured Query Language). Sie zählt zu den verbreitetsten inklusive Source-Code frei erhältlichen Datenbanken.

MySQL wird besonders häufig zusammen mit Web-Servern eingesetzt. Zum Beispiel Online-Shops beinhalten oft große Datenmengen, aber kommen mit einfach strukturierten Tabellen aus. Beliebt ist die 'LAMP'-Kombination: Linux + Apache + MySQL + PHP.

Weitere Eigenschaften finden Sie im Vergleich zwischen MySQL, PostgreSQL und MaxDB.



Inhalt

  1. Kurzanleitung zur Installation von MySQL unter Windows
  2. Kurzanleitung zur Anlage einer Database und einer Tabelle in MySQL
  3. Storage Engines
  4. Sortierung
  5. Datentypen, Programmierbeispiele
  6. Weiterführende Informationen


Kurzanleitung zur Installation von MySQL unter Windows

Genauere Anleitungen gibt es unter http://dev.mysql.com/doc.

  1. Downloaden Sie den MySQL Community Server von http://dev.mysql.com/downloads/mysql (z.B. "Windows, MSI Installer", mysql-5.5.15-winx64.msi).
  2. Doppelklicken Sie auf die msi-Installationsdatei und führen Sie die Installation durch. Falls Sie das Installationszielverzeichnis bestimmen wollen, müssen Sie 'Custom' wählen und anschließend durch Klicken auf 'MySQL Server' und 'Browse...' das Programmverzeichnis (z.B. C:\MySQL\Server) und durch Klicken auf 'Server data files' und 'Browse...' das Datenverzeichnis (z.B. C:\MySQL\Data) wählen.
  3. Wenn Sie bei der 'Wizard Completed'-Meldung die Option 'Launch the MySQL Instance Configuration Wizard' wählen, können Sie u.a. auch wählen, ob MySQL als automatischer Dienst gestartet werden soll ('Install As Windows Service').
  4. Falls Sie MySQL nicht als Dienst installieren, erfolgen Start und Stopp folgendermaßen (im 'MySQL\Server\bin'-Verzeichnis und nach Vergabe eines Passworts, im Beispiel ist das Passwort mysqlpwd):
    Starten:mysqld
    Beenden:mysqladmin -uroot -pmysqlpwd shutdown
    Falls Sie MySQL als Dienst installieren, erfolgen Start und Stopp folgendermaßen:
    Starten:net start MySQL
    Beenden:net stop MySQL
  5. Starten Sie den MySQL-DB-Server.
  6. Falls Sie noch kein Root-Passwort vergeben haben: Wechseln Sie in Ihr 'MySQL\Server\bin'-Verzeichnis und setzen Sie als Erstes ein Kennwort für den Root-User (im Beispiel 'mysqlpwd'):

    cd \MySQL\Server\bin

    mysqladmin -u root password mysqlpwd

  7. Testen Sie folgende Kommandos (ersetzen Sie 'root' und 'mysqlpwd' durch Ihren Benutzernamen und Ihr Passwort):

    mysqladmin -uroot -pmysqlpwd version status proc

    mysqlshow -uroot -pmysqlpwd

    mysqlshow -uroot -pmysqlpwd mysql

    mysql -uroot -pmysqlpwd

      \h

      status;

      show databases;

      use mysql;

      show tables;

      describe host;

      select Host,User,Password from user;

      select help_category_id,name from help_category;

      \q

  8. Einige Voreinstellungen können in 'my.ini'- oder 'my.cnf'-Dateien zum Beispiel in den Verzeichnissen '/etc/mysql', 'C:\', 'C:\Windows' oder 'C:\Programme\MySQL\MySQL Server 4.1' eingetragen sein/werden.
    Zum Beispiel kann mit 'bind-address=127.0.0.1' der Zugriff übers Netzwerk untersagt werden.
    Falls Sie Transaktionen und die InnoDB-Engine verwenden wollen, beachten Sie besonders die 'InnoDB Specific options', wie zum Beispiel 'skip-innodb' und 'innodb_data_file_path=ibdata:30M'.


Kurzanleitung zur Anlage einer Database und einer Tabelle in MySQL

  1. Werden mehrere SQL-Kommandos benötigt, empfiehlt es sich, diese in einer einfachen ASCII-Textdatei abzulegen. Dann können sie leicht editiert und (eventuell geändert) wiederholt eingelesen werden.
    Deshalb erstellen wir eine Datei 'MeineDb.sql' mit folgendem Inhalt:
    -- SQL-Datei für MySQL
    -- Beim ersten Laden muss die folgende Zeile auskommentiert sein,
    -- bei wiederholten Versuchen muss sie aktiviert sein ('--' entfernen):
    -- DROP DATABASE MeineDb;
    CREATE DATABASE MeineDb;
    SHOW databases;
    USE MeineDb;
    CREATE TABLE MeineTestTabelle ( i INT, c CHAR(3), s VARCHAR(8), dt DATE );
    CREATE TABLE MeineAdressen ( Name VARCHAR(16), Plz INT, Ort VARCHAR(16) );
    SHOW tables;
    INSERT INTO MeineTestTabelle VALUES ( 11, 'ABC', 'Blubb', '2000-01-01' );
    INSERT INTO MeineTestTabelle VALUES ( 12, 'ab', 'Blabla', '2000-12-31' );
    INSERT INTO MeineTestTabelle VALUES ( 42, 'xy', 'äöüß§€', '2005-06-06' );
    SELECT * FROM MeineTestTabelle;
    INSERT INTO MeineAdressen VALUES ( 'Achim',     52078, 'Aachen' );
    INSERT INTO MeineAdressen VALUES ( 'Alexander', 52134, 'Herzogenrath' );
    INSERT INTO MeineAdressen VALUES ( 'Helmut',    52066, 'Aachen' );
    INSERT INTO MeineAdressen VALUES ( 'Josef',     52070, 'Aachen' );
    INSERT INTO MeineAdressen VALUES ( 'Manfred',   52146, 'Würselen' );
    INSERT INTO MeineAdressen VALUES ( 'Patrick',   52074, 'Aachen' );
    INSERT INTO MeineAdressen VALUES ( 'Roland',    52134, 'Herzogenrath' );
    INSERT INTO MeineAdressen VALUES ( 'Torsten',   52072, 'Aachen' );
    INSERT INTO MeineAdressen VALUES ( 'Werner',    52066, 'Aachen' );
    SELECT * FROM MeineAdressen;
    
  2. Ausführen:
    mysql -uroot -pmysqlpwd < MeineDb.sql
  3. Testen mit:

    mysql -uroot -pmysqlpwd MeineDb

      select * from MeineTestTabelle;

      \q

    ergibt:

    +------+------+--------+------------+
    | i    | c    | s      | dt         |
    +------+------+--------+------------+
    |   11 | ABC  | Blubb  | 2000-01-01 |
    |   12 | ab   | Blabla | 2000-12-31 |
    |   42 | xy   | äöüß§€ | 2005-06-06 |
    +------+------+--------+------------+

    Der String 'äöüß§€' wird unter Windows im Kommandozeilenfenster beim üblicherweise eingestellten Characterset CP850 falsch dargestellt, ist aber trotzdem korrekt gespeichert.



Storage Engines

MySQL bietet verschiedene 'Storage Engines':

Storage Engine Eigenschaften, Verwendung
MyISAM Optimiert für viele Lese- und wenige Schreibzugriffe
InnoDB Bietet Transaktionsunterstützung und unterstützt parallele Updates und Row-Level-Locking
BDB Berkley Database, Transaktionsunterstützung mit Page-Level-Locking
Memory Für volatile und temporäre Daten
Merge Für partitionierte Tabellen, physich aufgeteilte große Tabellen
NDB Cluster MySQL-Cluster für höhere Ausfallsicherheit
Federated Für Remote Database Access

Die Anlage einer Tabelle mit einer bestimmten Storage Engine kann zum Beispiel folgendermaßen erfolgen:

CREATE TABLE MeineTabelle ( s VARCHAR(12) ) TYPE=InnoDB;



Sortierung

Die Standard-Sortierung von MySQL ist für deutsche Umlaute nicht geeignet und sollte deshalb umgeschaltet werden auf eine der anderen folgenden Varianten:

Bezeichnung Bemerkung MySQL-Variante Sortierregeln
Standard (schwedisch) (default) ä/ö/ü nach z
General (englisch) latin1_general_ci
latin1_general_cs
ä/ö/ü/ß nach a/o/u/s
German1 DIN 1, Duden,
für Wörter
latin1_german1_ci
latin1_german1_cs
ä/ö/ü/ß wie a/o/u/s
German2 DIN 2, Telefonbuch,
für Namen
latin1_german2_ci
latin1_german2_cs
ä/ö/ü/ß wie ae/oe/ue/ss

"..._ci" bedeutet "Case Insensitive" und "..._cs" bedeutet "Case Sensitive", also ohne bzw. mit Berücksichtigung der Groß-/Kleinschreibung.

Eingestellt wird die Sortierung für die Datenbank mit:

CREATE DATABASE MeineDb CHARACTER SET latin1 COLLATE latin1_german1_ci;

und für eine einzelne Spalte mit:

USE MeineDb;
CREATE TABLE MeineTestTabelle2 ( words CHAR(30), names CHAR(30) COLLATE latin1_german2_ci );

Besonderheiten zu UTF-8 mit MySQL finden Sie unter sql-utf8.htm.



Datentypen, Programmierbeispiele


Datentypen in MySQL

Einen Vergleich der Datentypen-Implementation zu anderen Datenbanken gibt es unter sql.htm#SQL-Datentypen.


UTF-8 mit MySQL

Besonderheiten zu UTF-8 mit MySQL finden Sie unter sql-utf8.htm.


Einfaches Programmierbeispiel zum Auslesen einer Tabelle mit Java

... gibt es in java-sql.htm.


Einfaches Programmierbeispiel zum Auslesen einer Tabelle mit JSP

... gibt es in jsp-grundlagen.htm.



Weiterführende Informationen gibt es unter





Weitere Themen: andere TechDocs | SQL | PostgreSQL | JSP | Webanwendungen | Linux
© 1998-2007 Torsten Horn, Aachen