- 1 Section
- 10 Lessons
- unbegrenzt
- SQL Grundlagen10
- 1.1SQL-Grundstruktur: DDL, DML, DQL, DCL
- 1.2CREATE TABLE, Datentypen, Constraints
- 1.3INSERT, UPDATE, DELETE
- 1.4SELECT: WHERE, ORDER BY, LIMIT
- 1.5Aggregatfunktionen: COUNT, SUM, AVG
- 1.6GROUP BY und HAVING
- 1.7INNER JOIN und LEFT JOIN
- 1.8Datenbanktypen im Überblick
- 1.9MySQL / MariaDB in der Praxis
- 1.10SQL-Grundlagenaufgaben
MySQL / MariaDB in der Praxis
Nach den Grundlagen geht es jetzt um die praktische Arbeit mit MySQL und MariaDB – den beiden weitverbreitetsten Open-Source-Datenbanken und in fast allen IHK-Aufgaben das stillschweigend vorausgesetzte System. Beide sind eng verwandt: MariaDB ist ein Fork von MySQL aus 2009, als Oracle MySQL übernahm. Die meisten Befehle sind 1:1 gleich.
In dieser Lektion lernst du, wie der mysql-Client im Terminal funktioniert – das wichtigste Werkzeug für DBA-Aufgaben, Notfall-Eingriffe und Skripte. Außerdem schauen wir uns die MySQL-spezifischen Eigenheiten an, die du in echten Datenbanken siehst: AUTO_INCREMENT, Storage Engines, Zeichensätze, Backup mit mysqldump. Wer das beherrscht, ist im Job sofort einsetzbar.
1) Der mysql-Client – das Schweizer Taschenmesser
Wenn du MySQL installiert hast, gibt es einen Kommandozeilen-Client namens mysql. Damit verbindest du dich zur Datenbank und kannst SQL eingeben. Der Aufruf vom Terminal:
# Standardaufruf mit Passwortabfrage $ mysql -u root -p # Direkt zu einer bestimmten Datenbank $ mysql -u admin -p shop_db # Entfernten Server ansprechen $ mysql -h db.example.com -P 3306 -u user -p # Skript ausführen $ mysql -u root -p shop_db < init.sql
Nach erfolgreicher Verbindung siehst du den Prompt mysql> – ab hier kannst du SQL-Statements eingeben. Sie werden erst ausgeführt, wenn du sie mit einem Strichpunkt abschließt und Enter drückst. Mehrzeilige Statements gehen problemlos.
2) Interaktiver mysql-Terminal-Simulator
Tippe Kommandos ein und sieh, was MySQL antwortet. Funktioniert für die wichtigsten DBA-Befehle plus Standard-SQL gegen eine kleine Beispiel-DB:
3) Die wichtigsten Meta-Kommandos
Über das normale SQL hinaus kennt der mysql-Client einige Meta-Befehle, die nicht auf Daten zielen, sondern auf die Datenbank-Struktur und den Server selbst:
| Befehl | Zweck |
|---|---|
SHOW DATABASES; | Listet alle verfügbaren Datenbanken auf dem Server |
USE meine_db; | Wechselt zur Datenbank meine_db (Standard für alle folgenden Befehle) |
SHOW TABLES; | Tabellen in der aktiven Datenbank |
DESCRIBE kunde; oder DESC kunde; | Spaltenbeschreibung der Tabelle (Typ, NULL, Key, Default) |
SHOW CREATE TABLE kunde; | Zeigt das vollständige CREATE-TABLE-Statement der Tabelle |
SHOW INDEX FROM kunde; | Liste aller Indizes der Tabelle |
SHOW PROCESSLIST; | Aktive Verbindungen / laufende Queries |
SHOW VARIABLES LIKE 'char%'; | Server-Einstellungen (Filter optional) |
SHOW STATUS LIKE 'Threads%'; | Server-Statusinfos (Verbindungen, Cache-Hits etc.) |
SELECT VERSION(); | MySQL-Version – wichtig für Feature-Verfügbarkeit |
SELECT DATABASE(); | Aktuell ausgewählte Datenbank |
SELECT USER(); | Aktuell angemeldeter Benutzer |
STATUS; oder \s | Übersicht über Verbindung und Server |
exit; oder quit; oder \q | Verbindung beenden |
Vor allem SHOW CREATE TABLE ist Gold wert: Es gibt dir den exakten CREATE-TABLE-Befehl einer existierenden Tabelle zurück – perfekt, um Schemas zu reproduzieren oder zu dokumentieren.
4) MySQL-Spezialitäten: das musst du kennen
Über den Standard-SQL-Befehlssatz hinaus hat MySQL ein paar Eigenheiten, die du in IHK-Aufgaben und im Berufsalltag immer wieder triffst:
AUTO_INCREMENT
Spalten, die sich automatisch hochzählen – typisch für Primary Keys. Beim INSERT lässt man die Spalte weg, MySQL setzt den nächsten Wert ein.
CREATE TABLE kunde ( id INT AUTO_INCREMENT PRIMARY KEY, ... );
ENGINE = InnoDB
Standard-Storage-Engine seit MySQL 5.5. Unterstützt Transaktionen und FOREIGN KEYs. Die Alternative MyISAM kann das nicht.
CREATE TABLE ... ) ENGINE=InnoDB;
Charset = utf8mb4
Zeichensatz – seit MySQL 8.0 Default. Vorsicht: das ältere utf8 kann keine Emojis (nur 3-Byte-UTF-8). Immer utf8mb4 nutzen!
CREATE TABLE ... ) DEFAULT CHARSET=utf8mb4;
LIMIT statt TOP/FETCH
MySQL nutzt LIMIT n für Mengenbegrenzung – nicht TOP wie SQL Server, nicht FETCH wie Standard-SQL.
SELECT * FROM kunde LIMIT 10 OFFSET 20;
Backticks für Bezeichner
Reservierte Wörter oder Spaltennamen mit Leerzeichen umgibt man mit Backticks ` (nicht Anführungszeichen).
SELECT `order`, `vor name` FROM `kunde liste`;
BOOLEAN ist TINYINT(1)
MySQL kennt keinen echten BOOLEAN – intern wird TINYINT(1) genutzt. TRUE = 1, FALSE = 0. Wirkt aber wie ein Boolean.
aktiv BOOLEAN DEFAULT TRUE -- intern: TINYINT(1)
ON DUPLICATE KEY UPDATE
„Insert-or-Update" in einer Anweisung. Bei PK-Konflikt wird stattdessen UPDATE ausgeführt – sehr praktisch für Upserts.
INSERT INTO stat (id, n) VALUES (1, 5) ON DUPLICATE KEY UPDATE n = n + 5;
GROUP_CONCAT
Aggregat, das Werte einer Gruppe zu einem String verkettet. Praktisch für Listenausgaben.
SELECT stadt, GROUP_CONCAT(name) FROM kunde GROUP BY stadt;
5) MySQL Workbench – die grafische Alternative
Der mysql-Client ist mächtig, aber für Einsteiger anstrengend. Die meisten Entwickler arbeiten mit grafischen Tools – allen voran MySQL Workbench, kostenlos von Oracle. Was Workbench bietet:
- Query-Editor mit Syntax-Highlighting und Autocomplete: tippt von selbst Tabellen- und Spaltennamen vor.
- Schema-Visualizer: baut automatisch ein ERM aus den vorhandenen Tabellen.
- Visual Table Designer: Tabellen per Klick anlegen, Spalten und Constraints ohne SQL.
- EER Diagrams: ER-Modelle zeichnen und direkt als SQL exportieren – Reverse-Engineering aus existierenden Datenbanken funktioniert auch.
- Server-Administration: Benutzer und Rechte, Backup-Pläne, Performance-Monitoring.
- Safe-Mode-Default: Verbietet UPDATE/DELETE ohne WHERE – das hat schon viele Karrieren gerettet.
Alternativen: phpMyAdmin (browserbasiert, auf jedem Webspace verfügbar), DBeaver (universell für alle DBMS), HeidiSQL (Windows, schlank), TablePlus (sehr poliert, Mac/Win). Die Wahl ist Geschmackssache.
6) Backup mit mysqldump
Der Klassiker für Datenbank-Backups ist mysqldump – ein Tool, das eine komplette Datenbank in eine SQL-Datei exportiert:
# Komplette Datenbank sichern $ mysqldump -u root -p shop_db > backup.sql # Nur Struktur, ohne Daten $ mysqldump -u root -p --no-data shop_db > schema.sql # Nur eine Tabelle $ mysqldump -u root -p shop_db kunde > kunde_backup.sql # Alle Datenbanken auf einmal $ mysqldump -u root -p --all-databases > full_backup.sql # Komprimiert $ mysqldump -u root -p shop_db | gzip > backup.sql.gz # Wiederherstellen $ mysql -u root -p shop_db < backup.sql
Das resultierende backup.sql ist eine reine Textdatei mit lauter CREATE-TABLE- und INSERT-Statements. Die kann man mit jedem Editor durchsuchen, mit anderen Servern wiederherstellen, in Git ablegen. Für produktive Großdatenbanken nutzt man besser spezielle Backup-Strategien mit Replikation und inkrementellen Sicherungen – aber für kleine bis mittlere Anwendungen reicht mysqldump völlig.
7) Konfigurationsdatei und Performance-Tuning
MySQL liest beim Start eine Konfigurationsdatei – meist my.cnf (Linux) oder my.ini (Windows). Die wichtigsten Stellschrauben:
[mysqld] # Maximaler Speicher für den InnoDB-Buffer-Pool # Faustregel: ~70% des verfügbaren RAM auf einem dedizierten DB-Server innodb_buffer_pool_size = 4G # Maximale gleichzeitige Verbindungen max_connections = 200 # Charset standardmäßig auf utf8mb4 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # Slow-Query-Log: hilft beim Identifizieren langsamer Queries slow_query_log = 1 long_query_time = 2 # Sekunden # Bind-Address: 127.0.0.1 = nur lokal, 0.0.0.0 = von überall bind-address = 127.0.0.1
Im Berufsalltag landet man oft genug in der my.cnf: bei Performance-Problemen, neuen Anforderungen oder Sicherheits-Audits. Mehr zur Performance-Optimierung in Datenbankindizes (K35b).
8) Benutzer und Rechte – Grundlagen
Die Sache mit „root" ist gefährlich – ein Account mit allen Rechten gehört nicht in den täglichen Gebrauch. MySQL bietet ein feinstufiges Rechtemanagement, hier die wichtigsten Befehle (DCL aus L01):
-- Benutzer anlegen CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'sicheres_passwort'; -- Rechte vergeben (nur lesen) GRANT SELECT ON shop_db.* TO 'app_user'@'localhost'; -- Volle Rechte auf einer DB GRANT ALL PRIVILEGES ON shop_db.* TO 'app_admin'@'localhost'; -- Rechte einer Person anzeigen SHOW GRANTS FOR 'app_user'@'localhost'; -- Rechte entziehen REVOKE INSERT ON shop_db.* FROM 'app_user'@'localhost'; -- Änderungen aktivieren FLUSH PRIVILEGES;
Goldene Regel: Anwendungen bekommen nur die Rechte, die sie brauchen. Eine Read-Only-Reporting-Anwendung darf kein DELETE. Ein Admin-Tool kein root. Mehr zu Rollen und Rechten in RBAC.
9) MySQL aus der Anwendung heraus
Im Alltag tippt man SQL nicht im Terminal – Anwendungen sprechen mit der Datenbank über Treiber-Bibliotheken. Die häufigsten Sprach-Integrationen:
- PHP:
mysqli(objektorientiert) oderPDO(universeller, für mehrere DBMS). - Python:
mysql-connector-python(offiziell),PyMySQL(reines Python), oft hinter ORMs wie SQLAlchemy. Mehr: Python & APIs. - Java: JDBC-Treiber „MySQL Connector/J", oft hinter Hibernate oder JPA.
- Node.js:
mysql2odertypeorm/prismaals ORM.
Wichtig: nie SQL als String-Konkatenation aus Benutzereingaben bauen – das ist die Eintrittstür für SQL-Injection. Stattdessen Prepared Statements nutzen, bei denen die Eingaben sicher als Parameter übergeben werden.
Zusammenfassung
MySQL und MariaDB sind die am weitesten verbreiteten Open-Source-RDBMS und de-facto-Standard für die IHK-Prüfung. Der mysql-Client im Terminal ist das primäre DBA-Werkzeug; wichtigste Meta-Befehle: SHOW DATABASES, USE db, SHOW TABLES, DESCRIBE tbl, SHOW CREATE TABLE tbl, STATUS. MySQL-Spezifika: AUTO_INCREMENT für IDs, Storage Engine InnoDB (Default, kann Transaktionen und FKs), Charset utf8mb4 (nicht das alte „utf8"!), LIMIT statt TOP/FETCH, Backticks für reservierte Bezeichner, ON DUPLICATE KEY UPDATE für Upserts, GROUP_CONCAT für Listen. MySQL Workbench ist die offizielle grafische Oberfläche mit ER-Diagramm-Generator, Visual Designer und Safe-Mode. Backup mit mysqldump exportiert SQL-Dateien, die mit mysql < file.sql wiederhergestellt werden. Konfiguration liegt in my.cnf – wichtigste Stellschrauben: innodb_buffer_pool_size, max_connections, slow_query_log. Benutzer und Rechte werden mit CREATE USER, GRANT und REVOKE verwaltet – das Prinzip „minimal nötige Rechte" gilt. Anwendungen sprechen über Treiber-Bibliotheken mit MySQL; SQL-Injection vermeiden mit Prepared Statements ist Pflicht.
Verwandte Lektionen: Datenbanktypen · CREATE TABLE · Datenbankbackup · und mehrWeitere relevante LektionenSQL-Injection vermeidenRBACTransaktionenReferenzielle IntegritätDatenbankindizesPython & DatenbankenTerraform für DB-Provisioning
