MySQL-Spickzettel
Eine durchsuchbare, druckbare MySQL-Referenz — Abfragen, Joins, Indizes, Funktionen, Datentypen und Verwaltungsbefehle. Kostenlos.
Abfragen
10SELECT * FROM users;
Alle Spalten und Zeilen auswählen
SELECT id, name FROM users;
Bestimmte Spalten auswählen
SELECT DISTINCT city FROM users;
Nur eindeutige Werte
WHERE age > 18 AND active = 1
Zeilen nach Bedingungen filtern
WHERE name LIKE 'A%'
Mustervergleich (% = beliebige Zeichen)
WHERE id IN (1, 2, 3)
Beliebigen Wert aus Menge treffen
WHERE age BETWEEN 18 AND 30
Inklusiver Bereichsfilter
ORDER BY created_at DESC
Absteigend sortieren
LIMIT 10 OFFSET 20
Ergebnisse paginieren
WHERE email IS NULL
Null-Werte treffen
Joins
8INNER JOIN orders ON orders.user_id = users.id
Zeilen, die in beiden Tabellen passen
LEFT JOIN orders ON ...
Alle linken Zeilen + Treffer
RIGHT JOIN orders ON ...
Alle rechten Zeilen + Treffer
CROSS JOIN colors
Kartesisches Produkt
SELF JOIN: FROM emp e JOIN emp m ON e.mgr = m.id
Tabelle mit sich selbst joinen
USING (user_id)
Auf gleichnamige Spalte joinen
UNION / UNION ALL
Ergebnismengen kombinieren
SELECT u.*, o.total FROM users u JOIN orders o
Tabellen aliasen für Klarheit
Aggregation
9COUNT(*)
Zeilen zählen
SUM(amount)
Summe einer numerischen Spalte
AVG(price)
Durchschnittswert
MIN(price), MAX(price)
Kleinster und größter Wert
GROUP BY country
Zeilen zur Aggregation gruppieren
HAVING COUNT(*) > 5
Aggregierte Gruppen filtern
GROUP_CONCAT(name)
Gruppierte Werte verketten
COUNT(DISTINCT city)
Eindeutige Werte zählen
ROW_NUMBER() OVER (ORDER BY id)
Fensterfunktion-Ranking
Daten ändern
8INSERT INTO users (name) VALUES ('Sam');
Eine einzelne Zeile einfügen
INSERT INTO users (name) VALUES ('A'),('B');
Mehrere Zeilen einfügen
UPDATE users SET active = 1 WHERE id = 5;
Passende Zeilen aktualisieren
DELETE FROM users WHERE id = 5;
Passende Zeilen löschen
TRUNCATE TABLE logs;
Alle Zeilen schnell entfernen
INSERT ... ON DUPLICATE KEY UPDATE
Upsert auf eindeutigem Schlüssel
REPLACE INTO users ...
Bei Konflikt löschen + einfügen
INSERT IGNORE INTO ...
Fehlerhafte Zeilen überspringen
Schema / DDL
9CREATE TABLE users (id INT PRIMARY KEY);
Neue Tabelle erstellen
AUTO_INCREMENT
Auto-Nummerierungsspalte
ALTER TABLE users ADD COLUMN age INT;
Spalte hinzufügen
ALTER TABLE users DROP COLUMN age;
Spalte entfernen
ALTER TABLE users MODIFY name VARCHAR(100);
Spaltentyp ändern
DROP TABLE IF EXISTS users;
Tabelle löschen
FOREIGN KEY (user_id) REFERENCES users(id)
Andere Tabelle referenzieren
ON DELETE CASCADE
Löschungen auf Kinder kaskadieren
CREATE TABLE t2 LIKE t1;
Tabellenstruktur kopieren
Indizes & Schlüssel
8PRIMARY KEY (id)
Eindeutige Zeilenkennung
UNIQUE (email)
Eindeutige Werte erzwingen
CREATE INDEX idx_name ON users (name);
Suche auf einer Spalte beschleunigen
CREATE INDEX idx_ab ON t (a, b);
Zusammengesetzter Index (mehrspaltig)
DROP INDEX idx_name ON users;
Index entfernen
FULLTEXT (body)
Volltext-Suchindex
EXPLAIN SELECT ...;
Abfrageplan anzeigen
SHOW INDEX FROM users;
Indizes einer Tabelle auflisten
Datentypen
9INT, BIGINT, TINYINT
Integer-Typen nach Größe
DECIMAL(10, 2)
Exakte Festkommazahlen
VARCHAR(255)
String variabler Länge
TEXT, LONGTEXT
Große Text-Blobs
DATE, DATETIME, TIMESTAMP
Datums- und Zeittypen
BOOLEAN (TINYINT(1))
true/false als 0/1 gespeichert
JSON
Native JSON-Dokumentspalte
ENUM('a', 'b')
Einer aus fester Wertemenge
UNSIGNED
Nicht-negativer numerischer Modifizierer
Type sizes & limits
20TINYINT
1 byte: -128..127 (0..255 UNSIGNED)
SMALLINT
2 bytes: -32,768..32,767 (0..65,535)
MEDIUMINT
3 bytes: -8.39M..8.39M (0..16.78M)
INT
4 bytes: -2.15B..2.15B (0..4.29B)
BIGINT
8 bytes: ±9.22×10^18 (0..1.84×10^19)
DECIMAL(M, D)
Exact: M up to 65 digits, D up to 30
FLOAT / DOUBLE
4 / 8 bytes approximate floating point
CHAR(M)
Fixed length, 0..255 characters
VARCHAR(M)
0..65,535 bytes (shared 64KB row limit)
TINYTEXT
Up to 255 bytes (~255 chars)
TEXT
Up to 65,535 bytes (64 KB)
MEDIUMTEXT
Up to 16,777,215 bytes (16 MB)
LONGTEXT
Up to 4,294,967,295 bytes (4 GB)
BLOB types
TINY/—/MEDIUM/LONG: 255B..4GB (binary)
JSON
Stored as LONGBLOB, up to ~4 GB
ENUM / SET
ENUM: 65,535 members; SET: 64 members
DATE
1000-01-01 to 9999-12-31 (3 bytes)
DATETIME
1000 to 9999, microseconds (5–8 bytes)
TIMESTAMP
1970-01-01 to 2038-01-19 UTC (4 bytes)
TIME / YEAR
±838:59:59 / 1901..2155
Funktionen
9NOW(), CURDATE()
Aktuelles Datum/Uhrzeit
DATE_FORMAT(d, '%Y-%m-%d')
Datum formatieren
DATEDIFF(a, b)
Tage zwischen zwei Daten
CONCAT(a, ' ', b)
Strings verbinden
COALESCE(a, b, 'n/a')
Erster nicht-null-Wert
IFNULL(x, 0)
null durch Standard ersetzen
CASE WHEN x > 0 THEN '+' ELSE '-' END
Bedingter Ausdruck
CAST(x AS CHAR)
Werttyp umwandeln
ROUND(x, 2)
Auf Dezimalstellen runden
Transaktionen & Admin
9START TRANSACTION;
Transaktion beginnen
COMMIT;
Transaktion bestätigen
ROLLBACK;
Transaktion rückgängig machen
SAVEPOINT sp1;
Rollback-Punkt setzen
SHOW TABLES;
Tabellen der Datenbank auflisten
DESCRIBE users;
Tabellenstruktur anzeigen
SHOW PROCESSLIST;
Laufende Verbindungen auflisten
GRANT ALL ON db.* TO 'u'@'%';
Benutzerrechte gewähren
mysqldump -u root db > db.sql
Datenbank sichern (CLI)
Kein Eintrag passt zu „:q“.
Brauchen Sie Hilfe?
Ein Problem mit diesem Tool gefunden? Sagen Sie es unserem Team.