Appearance
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
| Typ | Beschreibung | Beispiel |
|---|---|---|
INT | Ganze 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) |
TEXT | Langer Text | inhalt TEXT |
DATE | Datum (YYYY-MM-DD) | geburtsdatum DATE |
DATETIME | Datum + Uhrzeit | erstellt_am DATETIME |
BOOLEAN | Wahrheitswert (0/1) | ist_aktiv BOOLEAN |
Constraints
| Constraint | Beschreibung | Syntax |
|---|---|---|
PRIMARY KEY | Eindeutige ID (nicht NULL) | id INT PRIMARY KEY |
AUTO_INCREMENT | Automatisch hochzählen | id INT AUTO_INCREMENT |
NOT NULL | Feld darf nicht leer sein | name VARCHAR(50) NOT NULL |
UNIQUE | Wert darf nicht doppelt sein | email VARCHAR(100) UNIQUE |
DEFAULT | Standardwert | erstellt_am DATETIME DEFAULT CURRENT_TIMESTAMP |
FOREIGN KEY | Fremdschlüssel | FOREIGN 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 Tage4. 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.sqlWiederherstellung (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" klickenAutomatisierte 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).sql6. Häufige Fehler für Einsteiger (Schnellübersicht)
| Fehler | Ursache | Lösung |
|---|---|---|
ERROR 1045 | Anmeldung fehlgeschlagen | Passwort prüfen, Service starten |
ERROR 1064 | SQL-Syntaxfehler | Befehl überprüfen (Rechtschreibung) |
ERROR 1062 | Duplicate entry (UNIQUE) | Eindeutigen Wert verwenden |
ERROR 1146 | Tabelle nicht gefunden | Tabellennamen prüfen (SHOW TABLES;) |
| Chinesische Zeichen falsch | Encoding nicht UTF-8 | DEFAULT CHARSET=utf8mb4 verwenden |
| Alle Daten gelöscht | DELETE ohne WHERE | IMMER WHERE angeben! |
| Index wirkt nicht | LIKE '%...' oder Funktion auf Feld | Bereichsabfrage 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:
- Üben, üben, üben! (Erstellen Sie eigene Projekte)
- Kapitel 19 (Interviewfragen) wiederholen
- Fortgeschrittene Themen lernen (Kapitel 20)
Viel Erfolg bei Ihrer MySQL-Reise! 🚀
