bg_image
header

Datenbanktrigger

Datenbank-Trigger (kurz: Trigger) sind spezielle automatische Aktionen in einer Datenbank, die ausgelöst werden, wenn bestimmte Ereignisse auf einer Tabelle oder Sicht (View) passieren.


🔧 Was macht ein Trigger?

Ein Trigger ist ein vordefinierter Code, der bei INSERT, UPDATE oder DELETE auf einer Tabelle automatisch ausgeführt wird – ohne dass der Benutzer ihn direkt aufruft.


🧠 Beispiel:

Stell dir vor, du hast eine Tabelle Bestellungen, und du willst, dass immer, wenn eine Bestellung gelöscht wird, diese Info in einer Tabelle Log gespeichert wird.

Dann schreibst du einen DELETE-Trigger für die Tabelle Bestellungen, der automatisch beim Löschen etwas in Log schreibt.


🔄 Arten von Triggern:

Typ Beschreibung
BEFORE Wird vor der Aktion ausgeführt
AFTER Wird nach der Aktion ausgeführt
INSTEAD OF (bei Views) ersetzt die Aktion komplett
CREATE TRIGGER log_delete
AFTER DELETE ON Bestellungen
FOR EACH ROW
BEGIN
  INSERT INTO Log (aktion, zeitpunkt)
  VALUES ('Bestellung gelöscht', NOW());
END;

✅ Wofür werden Trigger verwendet?

  • Validierung von Daten

  • Automatisches Logging

  • Business-Logik abbilden

  • Referentielle Integrität erweitern


⚠️ Nachteile:

  • Schwer zu debuggen

  • Können unbemerkt viele Aktionen auslösen

  • Beeinflussen Performance, wenn komplex


Outer Join

Ein Outer Join ist ein Begriff aus der Datenbankabfrage (meist in SQL) und bezeichnet eine spezielle Art, zwei Tabellen miteinander zu verknüpfen – auch dann, wenn keine passenden Datensätze in einer der Tabellen vorhanden sind.

Arten von Outer Joins:

  1. LEFT OUTER JOIN (oder einfach: LEFT JOIN):
    → Gibt alle Datensätze aus der linken Tabelle zurück, auch wenn es keine passenden Datensätze in der rechten Tabelle gibt.
    → Nicht passende Werte aus der rechten Tabelle werden mit NULL aufgefüllt.

  2. RIGHT OUTER JOIN (oder: RIGHT JOIN):
    → Gibt alle Datensätze aus der rechten Tabelle zurück, auch wenn es keine passenden in der linken gibt.
    → Nicht passende Werte aus der linken Tabelle werden mit NULL ergänzt.

  3. FULL OUTER JOIN:
    → Gibt alle Datensätze aus beiden Tabellen zurück.
    → Wo keine Übereinstimmung vorliegt, wird mit NULL ergänzt.


Beispiel:

Angenommen, du hast zwei Tabellen:

  • Kunden

    Kundennr Name
    1 Anna
    2 Bernd
    3 Clara
  • Bestellungen

    Bestellnr Kundennr Produkt
    101 2 Buch
    102 4 Lampe

LEFT JOIN (Kunden LEFT JOIN Bestellungen ON Kunden.Kundennr = Bestellungen.Kundennr)

Kundennr Name Bestellnr Produkt
1 Anna NULL NULL
2 Bernd 101 Buch
3 Clara NULL NULL

PHP Data Objects - PDO

PDO steht für PHP Data Objects und ist eine Datenbank-Abstraktionsschicht in PHP. Es handelt sich um eine objektorientierte Schnittstelle, mit der du auf verschiedene Datenbanken zugreifen kannst – z. B. MySQL, PostgreSQL, SQLiteohne den Datenbankspezifischen Code stark ändern zu müssen.

Hauptmerkmale von PDO:

Einheitliche API:
Egal ob MySQL, SQLite oder PostgreSQL – du benutzt denselben Code-Stil.

Prepared Statements:
Sicherer Schutz vor SQL-Injektionen durch gebundene Parameter:

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $userId]);

Transaktionen:
PDO unterstützt Transaktionen (wichtig z. B. bei Bankbuchungen).

Fehlerbehandlung per Exception:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Flexibler Datenbankwechsel:
Möchtest du von MySQL auf PostgreSQL wechseln? Meist nur der DSN-String und Treiber müssen geändert werden.

$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$user = 'root';
$pass = '';

try {
    $pdo = new PDO($dsn, $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Verbindung erfolgreich!";
} catch (PDOException $e) {
    echo "Verbindung fehlgeschlagen: " . $e->getMessage();
}

Fazit:

PDO ist der empfohlene Weg, um in modernen PHP-Anwendungen mit Datenbanken zu arbeiten – besonders wegen der Sicherheit und Flexibilität.


Transaction Control Language - TCL

Transaction Control Language (TCL) ist ein Teil der SQL-Sprache, der verwendet wird, um die Kontrolle über Transaktionen in einer Datenbank zu ermöglichen. Eine Transaktion ist eine logische Einheit von Arbeit, die eine oder mehrere SQL-Anweisungen umfasst – oft Insert-, Update- oder Delete-Befehle –, die zusammen ausgeführt werden sollen.

TCL stellt Befehle bereit, um sicherzustellen, dass Transaktionen korrekt abgeschlossen oder im Fehlerfall rückgängig gemacht werden.

Die wichtigsten TCL-Befehle:

Befehl Beschreibung
COMMIT Speichert alle Änderungen der aktuellen Transaktion dauerhaft in der Datenbank.
ROLLBACK Macht alle Änderungen seit dem letzten COMMIT rückgängig.
SAVEPOINT Legt einen Zwischenstand in einer Transaktion fest, zu dem man später zurückkehren kann.
ROLLBACK TO SAVEPOINT Macht alle Änderungen seit einem bestimmten Savepoint rückgängig.
SET TRANSACTION Legt Eigenschaften für eine Transaktion fest (z. B. Isolationsgrad).
BEGIN;

UPDATE konto SET saldo = saldo - 100 WHERE konto_id = 1;
UPDATE konto SET saldo = saldo + 100 WHERE konto_id = 2;

COMMIT;

→ Beide Updates werden gemeinsam abgeschlossen. Wenn ein Fehler auftritt, könnte man ROLLBACK ausführen, um beide Änderungen zu verwerfen.

Wichtig:

TCL-Befehle wirken nur bei Datenbank-Systemen, die Transaktionen unterstützen (z. B. PostgreSQL, Oracle, MySQL mit InnoDB).


Data Control Language - DCL

Data Control Language (DCL) ist ein Teilbereich von SQL, der sich mit der Verwaltung von Zugriffsrechten und Berechtigungen in einer Datenbank beschäftigt. Mit DCL-Befehlen wird gesteuert, wer was in der Datenbank tun darf.

Die wichtigsten DCL-Befehle:

Befehl Beschreibung
GRANT Erteilt einem Benutzer Rechte, z. B. zum Lesen oder Ändern von Daten
REVOKE Entzieht einem Benutzer zuvor erteilte Rechte
GRANT SELECT, INSERT ON Kunden TO Benutzer123;
REVOKE INSERT ON Kunden FROM Benutzer123;

Typische Berechtigungen:

  • SELECT – Daten lesen

  • INSERT – Daten einfügen

  • UPDATE – Daten ändern

  • DELETE – Daten löschen

  • ALL – Alle Rechte

Merkmale:

  • DCL regelt Sicherheit und Zugriffskontrolle in der Datenbank.

  • Sie wird meist vom Datenbankadministrator (DBA) verwendet.

  • Die Rechte können auf Tabellenebene, Spaltenebene oder global vergeben werden.

  • Änderungen durch DCL-Befehle sind oft transaktionsabhängig und benötigen ggf. ein COMMIT.

Abgrenzung zu anderen SQL-Teilmengen:

  • DDL: Datenbankstruktur (z. B. Tabellen erstellen)

  • DML: Dateninhalte (z. B. Daten einfügen oder ändern)

  • TCL: Transaktionen steuern (z. B. COMMIT, ROLLBACK)

  • DCL: Rechte und Zugriffe verwalten


Data Manipulation Language - DML

Die Data Manipulation Language (DML) ist ein Teilbereich der SQL (Structured Query Language), der für das Bearbeiten von Daten in einer Datenbank verwendet wird. Mit DML können Benutzer Daten einfügen, abfragen, ändern und löschen – also genau das, was man im Alltag mit Daten in einer Datenbank machen möchte.

Zu den wichtigsten DML-Befehlen gehören:

Befehl Zweck
SELECT Daten aus einer Tabelle abfragen
INSERT Neue Daten einfügen
UPDATE Bestehende Daten ändern
DELETE Daten löschen

Beispiel:

-- Einfügen
INSERT INTO kunden (name, stadt) VALUES ('Müller', 'Berlin');

-- Abfragen
SELECT * FROM kunden WHERE stadt = 'Berlin';

-- Aktualisieren
UPDATE kunden SET stadt = 'Hamburg' WHERE name = 'Müller';

-- Löschen
DELETE FROM kunden WHERE name = 'Müller';

Wichtig:

  • DML arbeitet mit den Daten innerhalb der Tabellen, nicht mit der Struktur der Tabellen selbst (dafür gibt es die Data Definition Language, DDL).

  • DML-Befehle können oft rückgängig gemacht werden (z. B. durch ROLLBACK), sofern Transaktionen unterstützt werden.

Kurz gesagt: DML ist das Werkzeug, mit dem du Daten in einer Datenbank lebendig hältst – also ständig anpasst, liest und veränderst.


Data Query Language - DQL

DQL steht für Data Query Language und ist ein Teil der SQL-Sprache (Structured Query Language). Sie dient dazu, Daten aus einer Datenbank abzufragen, ohne sie zu verändern.

Hauptmerkmal von DQL:

  • Nur lesend: Mit DQL werden Daten abgefragt, aber nicht eingefügt, verändert oder gelöscht.

  • Der zentral verwendete Befehl ist:

SELECT

Beispiel:

SELECT name, geburtsdatum FROM kunden WHERE stadt = 'Berlin';

Dieser Befehl liest die Namen und Geburtsdaten aller Kunden aus, die in Berlin wohnen – verändert aber nichts an den Daten.


DQL im Vergleich zu anderen SQL-Teilen:

Teil Bedeutung Hauptfunktion
DQL Data Query Language Daten lesen
DML Data Manipulation Language Daten einfügen, ändern, löschen (INSERT, UPDATE, DELETE)
DDL Data Definition Language Tabellen und Strukturen definieren (CREATE, ALTER, DROP)
DCL Data Control Language Rechte vergeben (GRANT, REVOKE)
TCL Transaction Control Language Transaktionen steuern (COMMIT, ROLLBACK)

Doctrine Database Abstraction Layer - DBAL

Doctrine DBAL (Database Abstraction Layer) ist eine PHP-Bibliothek, die eine Abstraktionsschicht für den Datenbankzugriff bietet. Sie ist ein Teil von Doctrine, einem weit verbreiteten ORM-Projekt (Object-Relational Mapping), aber kann unabhängig vom ORM verwendet werden.

Ziel und Nutzen von Doctrine DBAL:

Doctrine DBAL bietet eine einheitliche API, um mit verschiedenen Datenbanken (wie MySQL, PostgreSQL, SQLite usw.) zu kommunizieren, ohne direkt SQL für die jeweilige Datenbank schreiben zu müssen.


Hauptfunktionen von Doctrine DBAL:

  • Verbindungsverwaltung:
    • Verbindungsaufbau zu Datenbanken über Konfigurationsarrays.

    • Unterstützung für Verbindungs-Pooling, Transaktionen usw.

  • SQL-Query-Builder:
    • Dynamisches Erstellen von SQL-Abfragen über eine objektorientierte API:

$qb = $conn->createQueryBuilder();
$qb->select('u.id', 'u.name')
   ->from('users', 'u')
   ->where('u.age > :age')
   ->setParameter('age', 18);
$stmt = $qb->executeQuery();
  • Datenbankunabhängigkeit:

    • Die gleichen Funktionen und Abfragen funktionieren mit verschiedenen DBMS, z. B. MySQL, PostgreSQL, SQLite.

  • Schema-Management:

    • Werkzeuge zum Erstellen, Ändern und Vergleichen von Datenbankschemata.

    • Nützlich für Migrationen.

  • Datentyp-Konvertierung:

    • Konvertiert Daten zwischen PHP und dem nativen Datenbankformat.

use Doctrine\DBAL\DriverManager;

$conn = DriverManager::getConnection([
    'dbname' => 'test',
    'user' => 'root',
    'password' => '',
    'host' => 'localhost',
    'driver' => 'pdo_mysql',
]);

$result = $conn->fetchAllAssociative('SELECT * FROM users');

Wann DBAL statt ORM?

Du verwendest DBAL ohne ORM, wenn:

  • Du mehr Kontrolle über SQL willst.

  • Dein Projekt keine komplexe Objekt-Mapping-Logik braucht.

  • Du bereits vorhandene SQL-Strukturen nutzen musst.


Fazit:

Doctrine DBAL ist ein mächtiges Werkzeug für sauberen, portablen und sicheren Datenbankzugriff in PHP, ohne sich auf ein vollständiges ORM einlassen zu müssen. Es liegt genau zwischen direktem PDO-Zugriff und einem vollwertigen ORM wie Doctrine ORM.

 


Memcached

Memcached ist ein verteiltes In-Memory-Caching-System, das häufig zur Beschleunigung von Webanwendungen eingesetzt wird. Es speichert häufig abgefragte Daten temporär im Arbeitsspeicher, um teure Datenbankabfragen oder API-Aufrufe zu vermeiden.

Wichtige Eigenschaften von Memcached:

  • Schlüssel-Wert-Speicher: Daten werden als Key-Value-Paare gespeichert.

  • In-Memory: Läuft vollständig im RAM, daher extrem schnell.

  • Verteilt: Unterstützt mehrere Server (Cluster), um die Last zu verteilen.

  • Einfach: Bietet eine minimalistische API mit grundlegenden Operationen wie set, get, delete.

  • Eviction (Ablaufstrategie): Verwendet LRU (Least Recently Used), um alte Daten bei Speicherüberlastung zu löschen.

Typische Anwendungsfälle:

  • Caching von Datenbankabfragen: Reduziert die Last auf Datenbanken wie MySQL oder PostgreSQL.

  • Session-Management: Speichert Benutzersitzungen bei skalierbaren Web-Apps.

  • Temporäre Datenspeicherung: Z.B. für API-Rate-Limiting oder kurze Zwischenspeicher.

Memcached vs. Redis:

  • Memcached: Schneller bei einfachen Key-Value-Speichern, skaliert gut horizontal.

  • Redis: Bietet mehr Features wie persistente Speicherung, Listen, Hashes, Sets und Pub/Sub.

Installation & Nutzung (Beispiel für Linux):

sudo apt update && sudo apt install memcached
sudo systemctl start memcached

Mit PHP oder Python kann Memcached über entsprechende Libraries verwendet werden.

 


Beego

Beego ist ein Open-Source-Web-Framework, das in der Programmiersprache Go (Golang) entwickelt wurde. Es ist besonders beliebt für die Entwicklung von skalierbaren Webanwendungen und APIs. Beego bietet eine vollständige Plattform für Entwickler, um sowohl einfache als auch komplexe Anwendungen schnell und effizient zu erstellen.

Hauptmerkmale von Beego:

  1. Modulares Design:

    • Beego ist in verschiedene Module unterteilt, die einzeln oder zusammen genutzt werden können, z. B. für Webserver, ORM (Object-Relational Mapping) oder Logging.
  2. Integrierter Webserver:

    • Es nutzt den nativen HTTP-Server von Go und ist damit sehr performant.
  3. MVC-Architektur:

    • Beego unterstützt das Model-View-Controller-Design, was die Strukturierung von Anwendungen erleichtert.
  4. Automatische Routen:

    • Beego kann Routen basierend auf Controller-Namen und Methodennamen automatisch generieren.
  5. Integriertes ORM:

  6. Task Scheduler:

    • Beego bietet Funktionen für die Planung und Ausführung von Hintergrundaufgaben.
  7. RESTful API-Unterstützung:

    • Es eignet sich hervorragend zur Erstellung von RESTful APIs und kann automatisch Swagger-Dokumentationen generieren.
  8. Logging und Konfiguration:

    • Beego hat ein leistungsstarkes Logging-System und unterstützt flexible Konfigurationen über Dateien, Umgebungsvariablen oder Code.

Einsatzgebiete:

  • Webanwendungen: Für schnelle und effiziente Webprojekte.
  • APIs: Dank der REST-Unterstützung eignet sich Beego hervorragend für die Erstellung von Backend-Diensten.
  • Microservices: Durch die hohe Leistung und Skalierbarkeit ist Beego ideal für Microservice-Architekturen.

Vorteile:

  • Hohe Performance dank der Geschwindigkeit von Go.
  • Einfach zu erlernen und zu verwenden, besonders für Entwickler mit Erfahrung in anderen MVC-Frameworks.
  • Gute Dokumentation und eine aktive Community.

Nachteile:

  • Die Popularität ist im Vergleich zu anderen Go-Frameworks wie Gin oder Echo etwas geringer.
  • Das integrierte ORM ist nicht so ausgereift wie spezialisierte ORM-Bibliotheken.

Falls du überlegst, Beego zu nutzen, wäre es sinnvoll, die spezifischen Anforderungen deines Projekts zu prüfen und zu vergleichen, ob Beego oder ein alternatives Framework wie Gin, Echo oder Fiber besser geeignet ist.