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.
Genauere Anleitungen gibt es unter http://dev.mysql.com/doc.
| Starten: | mysqld |
| Beenden: | mysqladmin -uroot -pmysqlpwd shutdown |
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
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
-- 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;
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 im Kommandozeilenfenster beim üblicherweise eingestellten Characterset falsch dargestellt, ist aber trotzdem korrekt gespeichert.
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;
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.
Einen Vergleich der Datentypen-Implementation zu anderen Datenbanken gibt es unter sql.htm#SQL-Datentypen.
Besonderheiten zu UTF-8 mit MySQL finden Sie unter sql-utf8.htm.
... gibt es in java-sql.htm.
... gibt es in jsp-grundlagen.htm.