Skip to content

Anhang: MySQL Kernwissen Zusammenfassung

Dieser Anhang ist ein Spickzettel für die tägliche Arbeit mit MySQL!


1. SQL-Syntax-Spickzettel (Nach Verwendungshäufigkeit)

⭐ Häufig verwendet (täglich!)

sql
-- 1. Daten abfragen (SELECT) - Am häufigsten!
SELECT feld1, feld2 
FROM tabelle 
WHERE bedingung 
ORDER BY feld ASC/DESC 
LIMIT start, anzahl;

-- 2. Daten einfügen (INSERT)
INSERT INTO tabelle (feld1, feld2) 
VALUES (wert1, wert2);

-- 3. Daten ändern (UPDATE) - IMMER mit WHERE!
UPDATE tabelle 
SET feld = neuer_wert 
WHERE bedingung;

-- 4. Daten löschen (DELETE) - IMMER mit WHERE!
DELETE FROM tabelle 
WHERE bedingung;

⭐⭐ Häufig verwendet

sql
-- 5. Datenbank/Tabelle erstellen
CREATE DATABASE db_name;
CREATE TABLE tabelle (
    id INT PRIMARY KEY AUTO_INCREMENT,
    feld VARCHAR(100) NOT NULL
);

-- 6. Tabellenstruktur anzeigen
DESC tabelle;

-- 7. Alle Tabellen anzeigen
SHOW TABLES;

-- 8. Datenbank auswählen
USE db_name;

⭐⭐⭐ Seltener verwendet

sql
-- 9. Tabelle ändern (ALTER TABLE)
ALTER TABLE tabelle ADD COLUMN neues_feld VARCHAR(50);
ALTER TABLE tabelle MODIFY COLUMN feld NEUER_TYP;
ALTER TABLE tabelle DROP COLUMN feld;

-- 10. Index erstellen/löschen
CREATE INDEX idx_feld ON tabelle(feld);
DROP INDEX idx_feld ON tabelle;

-- 11. Tabellen/Index löschen
DROP TABLE tabelle;
DROP INDEX idx_name ON tabelle;

2. Häufig verwendete Datentypen & Constraints (Kurzreferenz)

Datentypen

TypBeschreibungBeispiel
INTGanze Zahl (4 Byte)alter INT
DECIMAL(10,2)Dezimalzahl (für Geld!)preis DECIMAL(10,2)
VARCHAR(n)Text (variabel, max n)name VARCHAR(50)
TEXTLanger Textinhalt TEXT
DATEDatum (YYYY-MM-DD)geburtsdatum DATE
DATETIMEDatum + Uhrzeiterstellt_am DATETIME
BOOLEANWahrheitswert (0/1)ist_aktiv BOOLEAN

Constraints

ConstraintBeschreibungSyntax
PRIMARY KEYEindeutige ID (nicht NULL)id INT PRIMARY KEY
AUTO_INCREMENTAutomatisch hochzählenid INT AUTO_INCREMENT
NOT NULLFeld darf nicht leer seinname VARCHAR(50) NOT NULL
UNIQUEWert darf nicht doppelt seinemail VARCHAR(100) UNIQUE
DEFAULTStandardwerterstellt_am DATETIME DEFAULT CURRENT_TIMESTAMP
FOREIGN KEYFremdschlüsselFOREIGN KEY (user_id) REFERENCES users(id)

3. Aggregatfunktionen, String-Funktionen, Datumsfunktionen (Kopieren & Einfügen!)

Aggregatfunktionen

sql
-- Anzahl zählen
SELECT COUNT(*) FROM users;

-- Summe berechnen
SELECT SUM(preis) FROM products;

-- Durchschnitt berechnen
SELECT AVG(alter) FROM users;

-- Max/Min finden
SELECT MAX(preis) FROM products;
SELECT MIN(alter) FROM users;

String-Funktionen

sql
-- Verknüpfen
SELECT CONCAT(vorname, ' ', nachname) FROM users;

-- Länge (Bytes)
SELECT LENGTH(username) FROM users;

-- Länge (Zeichen)
SELECT CHAR_LENGTH(username) FROM users;

-- Groß-/Kleinschreibung
SELECT UPPER(username) FROM users;
SELECT LOWER(username) FROM users;

-- Teilstring extrahieren
SELECT SUBSTR(username, 1, 3) FROM users;  -- Position 1, 3 Zeichen

-- Leerzeichen entfernen
SELECT TRIM('   text   ');  -- Ergebnis: "text"

Datumsfunktionen

sql
-- Aktuelles Datum & Uhrzeit
SELECT NOW();           -- 2024-01-15 14:30:00
SELECT CURDATE();      -- 2024-01-15
SELECT CURTIME();      -- 14:30:00

-- Datumsteile extrahieren
SELECT YEAR(NOW());    -- 2024
SELECT MONTH(NOW());   -- 1
SELECT DAY(NOW());     -- 15

-- Datum addieren/subtrahieren
SELECT DATE_ADD(CURDATE(), INTERVAL 30 DAY);   -- +30 Tage
SELECT DATE_SUB(CURDATE(), INTERVAL 1 MONTH); -- -1 Monat

-- Differenz berechnen
SELECT DATEDIFF('2024-12-31', '2024-01-01');  -- 364 Tage

4. Tabellenverbindungs- & Unterabfragen-Vorlagen (Praxis!)

INNER JOIN (Nur Übereinstimmungen)

sql
SELECT 
    t1.feld1,
    t2.feld2
FROM tabelle1 t1
INNER JOIN tabelle2 t2 
  ON t1.id = t2.tabelle1_id;

LEFT JOIN (Alle t1 + passende t2)

sql
SELECT 
    t1.feld1,
    t2.feld2
FROM tabelle1 t1
LEFT JOIN tabelle2 t2 
  ON t1.id = t2.tabelle1_id;

Unterabfrage (Subquery) mit IN

sql
SELECT feld 
FROM tabelle 
WHERE feld IN (SELECT feld FROM andere_tabelle);

Unterabfrage mit EXISTS

sql
SELECT feld 
FROM tabelle t1
WHERE EXISTS (
    SELECT 1 
    FROM andere_tabelle t2 
    WHERE t2.feld = t1.feld
);

5. Datenbank-Backup & Wiederherstellung (Schritt-für-Schritt)

Backup erstellen (mysqldump)

bash
# 1. Einfaches Backup
mysqldump -u root -p datenbank_name > backup.sql

# 2. Mehrere Datenbanken sichern
mysqldump -u root -p --databases db1 db2 > backup_mehrere.sql

# 3. Alle Datenbanken sichern
mysqldump -u root -p --all-databases > backup_alle.sql

Wiederherstellung (mysql)

bash
# 1. Wiederherstellung
mysql -u root -p datenbank_name < backup.sql

# 2. Mit phpMyAdmin:
#    1. Datenbank auswählen
#    2. "Import" klicken
#    3. .sql-Datei auswählen
#    4. "Ausführen" klicken

Automatisierte Backups (Cron Job - Linux)

bash
# Jeden Tag um 2 Uhr morgens
0 2 * * * mysqldump -u root -pMEIN_PASSWORT datenbank_name > /backups/backup_$(date +\%Y\%m\%d).sql

6. Häufige Fehler für Einsteiger (Schnellübersicht)

FehlerUrsacheLösung
ERROR 1045Anmeldung fehlgeschlagenPasswort prüfen, Service starten
ERROR 1064SQL-SyntaxfehlerBefehl überprüfen (Rechtschreibung)
ERROR 1062Duplicate entry (UNIQUE)Eindeutigen Wert verwenden
ERROR 1146Tabelle nicht gefundenTabellennamen prüfen (SHOW TABLES;)
Chinesische Zeichen falschEncoding nicht UTF-8DEFAULT CHARSET=utf8mb4 verwenden
Alle Daten gelöschtDELETE ohne WHEREIMMER WHERE angeben!
Index wirkt nichtLIKE '%...' oder Funktion auf FeldBereichsabfrage verwenden, EXPLAIN prüfen

7. SQL-Injection-Schutz (Zusammenfassung)

❌ Unsicher (Niemals verwenden!)

php
// Gefährlich! SQL-Injection möglich!
$sql = "SELECT * FROM users WHERE username = '" . $_POST['username'] . "'";

✅ Sicher (Prepared Statements verwenden!)

php
// Sicher! (PHP PDO)
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_POST['username']]);

✅ Sicher (MySQLi)

php
// Sicher! (MySQLi)
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $_POST['username']);
$stmt->execute();

Zusammenfassung

Dieser Anhang ist ein Spickzettel für die tägliche Arbeit mit MySQL!
Bewahren Sie diese Seite als Lesezeichen auf ✅

Nächste Schritte:

  1. Üben, üben, üben! (Erstellen Sie eigene Projekte)
  2. Kapitel 19 (Interviewfragen) wiederholen
  3. Fortgeschrittene Themen lernen (Kapitel 20)

Viel Erfolg bei Ihrer MySQL-Reise! 🚀

Frei für alle Anfänger