Zum Hauptinhalt springen

MariaDB

Überblick

MariaDB ist ein Open-Source-Datenbankmanagementsystem, das 2009 von den ursprünglichen MySQL-Entwicklern gegründet wurde, nachdem Oracle Sun Microsystems übernommen hatte. Es ist ein Community-getriebener Fork von MySQL und in den meisten Anwendungsfällen vollständig kompatibel, wodurch es häufig als Drop-in-Ersatz eingesetzt wird.

MariaDB ist ACID-konform und unterstützt mehrere Storage Engines, darunter InnoDB und Aria. Es wird häufig für Webanwendungen, Content-Management-Systeme wie WordPress und Drupal sowie allgemeine OLTP-Workloads eingesetzt.

CREATE TABLE

Legt eine neue Tabelle mit ihren Spalten, Datentypen und Constraints an.

CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE,
created DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);

ALTER TABLE

Ändert eine bestehende Tabelle durch Hinzufügen, Entfernen oder Umbenennen von Spalten.

ALTER TABLE users ADD COLUMN age INT;

ALTER TABLE users DROP COLUMN age;

ALTER TABLE users MODIFY COLUMN name VARCHAR(200) NOT NULL;

ALTER TABLE users RENAME COLUMN name TO full_name;

DROP / TRUNCATE

Löscht eine Tabelle dauerhaft oder entfernt alle Zeilen und behält dabei die Struktur.

DROP TABLE users; -- Tabelle inkl. aller Daten löschen

TRUNCATE TABLE users; -- Alle Zeilen löschen, Struktur behalten

INSERT

Fügt eine oder mehrere Zeilen in eine Tabelle ein.

INSERT INTO users (name, email)
VALUES ('Alice', 'alice@example.com');

INSERT INTO users (name, email) VALUES
('Bob', 'bob@example.com'),
('Carol', 'carol@example.com');

SELECT

Liest Zeilen aus einer oder mehreren Tabellen, optional mit Filterung, Sortierung und Paginierung.

SELECT id, name, email
FROM users
WHERE created > '2024-01-01'
ORDER BY name ASC
LIMIT 10 OFFSET 20;

Aliases

Weist Spalten oder Tabellen temporäre Namen zur besseren Lesbarkeit zu.

SELECT u.name AS user_name, o.total AS order_total
FROM users AS u
JOIN orders AS o ON o.user_id = u.id;

JOINs

Verknüpft Zeilen aus mehreren Tabellen anhand einer gemeinsamen Spalte.

-- INNER JOIN — nur Zeilen, die in beiden Tabellen übereinstimmen
SELECT u.name, o.total
FROM users AS u
INNER JOIN orders AS o ON o.user_id = u.id;

-- LEFT JOIN — alle Zeilen der linken Tabelle, übereinstimmende der rechten
SELECT u.name, o.total
FROM users AS u
LEFT JOIN orders AS o ON o.user_id = u.id;

-- RIGHT JOIN — alle Zeilen der rechten Tabelle, übereinstimmende der linken
SELECT u.name, o.total
FROM users AS u
RIGHT JOIN orders AS o ON o.user_id = u.id;

GROUP BY / HAVING

Gruppiert Zeilen nach Spaltenwert und filtert Gruppen optional nach der Aggregation.

-- GROUP BY fasst Zeilen nach Spaltenwert zusammen
SELECT department_id, COUNT(*) AS headcount
FROM employees
GROUP BY department_id;

-- HAVING filtert Gruppen nach der Aggregation (WHERE filtert Zeilen davor)
SELECT department_id, COUNT(*) AS headcount
FROM employees
GROUP BY department_id
HAVING headcount > 5;

Unterabfragen

Verschachtelt eine Abfrage in einer anderen, entweder als Filter oder als abgeleitete Tabelle.

SELECT name
FROM users
WHERE id IN (SELECT user_id FROM orders WHERE total > 100);

-- Unterabfrage als abgeleitete Tabelle
SELECT dept, avg_salary
FROM (
SELECT department_id AS dept, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
) AS dept_avg
WHERE avg_salary > 50000;

UPDATE

Ändert bestehende Zeilen in einer Tabelle.

UPDATE users
SET name = 'Alice Smith',
email = 'alicesmith@example.com'
WHERE id = 1;

DELETE

Entfernt Zeilen aus einer Tabelle.

DELETE FROM users WHERE id = 1;

Indizes

Beschleunigt Abfragen durch eine Datenstruktur für schnellere Suchen auf einer oder mehreren Spalten.

CREATE INDEX idx_users_name ON users (name);

CREATE UNIQUE INDEX idx_users_email ON users (email);

DROP INDEX idx_users_email ON users;

SHOW INDEX FROM users;

Views

Erstellt eine benannte, wiederverwendbare Abfrage, die wie eine Tabelle referenziert werden kann.

CREATE VIEW active_users AS
SELECT id, name, email
FROM users
WHERE active = 1;

DROP VIEW active_users;

Transaktionen

Fasst mehrere Anweisungen zu einer atomaren Einheit zusammen, die entweder vollständig ausgeführt oder vollständig zurückgerollt wird.

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

COMMIT;
-- ROLLBACK; -- Alle Änderungen seit START TRANSACTION rückgängig machen

Funktionen

String

Häufig verwendete Funktionen zur Bearbeitung von Textwerten.

CONCAT(first_name, ' ', last_name) -- Strings zusammenfügen
LOWER(name) -- Kleinbuchstaben
UPPER(name) -- Großbuchstaben
LENGTH(name) -- Länge in Bytes
TRIM(name) -- Führende/nachfolgende Leerzeichen entfernen
SUBSTRING(name, 1, 3) -- Teilstring extrahieren (1-indiziert)
REPLACE(name, 'alt', 'neu') -- Teilstring ersetzen

Datum / Uhrzeit

Häufig verwendete Funktionen für Datums- und Zeitwerte.

NOW() -- Aktuelles Datum und Uhrzeit
CURDATE() -- Aktuelles Datum
DATE(created) -- Datumsteil aus Datetime extrahieren
YEAR(created) -- Jahr extrahieren
MONTH(created) -- Monat extrahieren
DAY(created) -- Tag extrahieren
DATE_FORMAT(created, '%d.%m.%Y') -- Datum als String formatieren
DATEDIFF(end_date, start_date) -- Differenz in Tagen
DATE_ADD(created, INTERVAL 7 DAY) -- Intervall addieren

Aggregat

Funktionen, die aus einer Menge von Zeilen einen einzelnen Wert berechnen.

COUNT(*) -- Alle Zeilen zählen
COUNT(email) -- Nicht-NULL-Werte zählen
SUM(total) -- Summe
AVG(total) -- Durchschnitt
MIN(total) -- Minimum
MAX(total) -- Maximum

Konditional

Funktionen und Ausdrücke zur Rückgabe unterschiedlicher Werte basierend auf Bedingungen.

-- COALESCE — gibt den ersten Nicht-NULL-Wert zurück
SELECT COALESCE(nickname, name) AS display_name FROM users;

-- CASE
SELECT name,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 75 THEN 'B'
ELSE 'C'
END AS grade
FROM results;

-- IF
SELECT IF(active = 1, 'Aktiv', 'Inaktiv') AS status FROM users;