Jedes Beispiel ist zugleich ein Test: der Katalog läuft im Testlauf gegen einen echten Server und muss sein hinterlegtes Ergebnis
liefern — was hier steht, ist genau das, was ausgeführt wird.
Typen
AUTO_INCREMENT und der übliche Spaltentyp
AUTO_INCREMENT vergibt die Schlüsselnummer selbst; DECIMAL rechnet exakt.
CREATE TABLE pruefstand_mitarbeiter (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), gehalt DECIMAL(9,2));
INSERT INTO pruefstand_mitarbeiter (name, gehalt) VALUES ('Anna', 5500.00);
SELECT id, name, gehalt FROM pruefstand_mitarbeiter;
DROP TABLE pruefstand_mitarbeiter;
Erwartetes Ergebnis
id | name | gehalt
1 | Anna | 5500.00
JSON und ENUM
JSON_EXTRACT liest einen Wert aus einer JSON-Spalte; ENUM erlaubt nur die aufgezählten Werte.
CREATE TABLE pruefstand_typen (id INT PRIMARY KEY, info JSON, status ENUM('offen', 'erledigt'));
INSERT INTO pruefstand_typen VALUES (1, '{"anzahl":3}', 'offen');
SELECT id, JSON_EXTRACT(info, '$.anzahl') AS anzahl, status FROM pruefstand_typen;
DROP TABLE pruefstand_typen;
Erwartetes Ergebnis
id | anzahl | status
1 | 3 | offen
DDL
CREATE TABLE IF NOT EXISTS und CREATE OR REPLACE VIEW
IF NOT EXISTS macht ein zweites CREATE TABLE ungefährlich; CREATE OR REPLACE tauscht eine Sicht ohne DROP davor.
CREATE TABLE IF NOT EXISTS pruefstand_orte (id INT PRIMARY KEY, name VARCHAR(30));
CREATE TABLE IF NOT EXISTS pruefstand_orte (id INT PRIMARY KEY, name VARCHAR(30));
INSERT INTO pruefstand_orte VALUES (1, 'Bern'), (2, 'Chur');
CREATE OR REPLACE VIEW pruefstand_sicht AS SELECT id, name FROM pruefstand_orte WHERE id = 1;
CREATE OR REPLACE VIEW pruefstand_sicht AS SELECT id, name FROM pruefstand_orte WHERE id = 2;
SELECT id, name FROM pruefstand_sicht;
DROP VIEW pruefstand_sicht;
DROP TABLE pruefstand_orte;
Erwartetes Ergebnis
id | name
2 | Chur
ALTER TABLE MODIFY/CHANGE und RENAME TABLE
MODIFY ändert einen Spaltentyp, CHANGE benennt eine Spalte um und ändert ihren Typ, RENAME TABLE die ganze Tabelle.
CREATE TABLE pruefstand_alter (id INT PRIMARY KEY, txt VARCHAR(10));
ALTER TABLE pruefstand_alter MODIFY txt VARCHAR(40);
ALTER TABLE pruefstand_alter CHANGE txt beschreibung VARCHAR(40);
RENAME TABLE pruefstand_alter TO pruefstand_umbenannt;
INSERT INTO pruefstand_umbenannt VALUES (1, 'Eine laengere Beschreibung');
SELECT id, beschreibung FROM pruefstand_umbenannt;
DROP TABLE pruefstand_umbenannt;
Erwartetes Ergebnis
id | beschreibung
1 | Eine laengere Beschreibung
DML
ON DUPLICATE KEY UPDATE
Trifft der Schlüssel schon zu, läuft der UPDATE-Teil statt eines Fehlers.
CREATE TABLE pruefstand_zaehler (id INT PRIMARY KEY, anzahl INT);
INSERT INTO pruefstand_zaehler (id, anzahl) VALUES (1, 1) ON DUPLICATE KEY UPDATE anzahl = anzahl + 1;
INSERT INTO pruefstand_zaehler (id, anzahl) VALUES (1, 1) ON DUPLICATE KEY UPDATE anzahl = anzahl + 1;
SELECT id, anzahl FROM pruefstand_zaehler;
DROP TABLE pruefstand_zaehler;
Erwartetes Ergebnis
id | anzahl
1 | 2
INSERT IGNORE und REPLACE
INSERT IGNORE übergeht einen Schlüsselkonflikt stillschweigend, REPLACE löscht die alte Zeile und setzt die neue.
CREATE TABLE pruefstand_unikate (id INT PRIMARY KEY, wert VARCHAR(30));
INSERT INTO pruefstand_unikate VALUES (1, 'Erste');
INSERT IGNORE INTO pruefstand_unikate VALUES (1, 'Zweite');
REPLACE INTO pruefstand_unikate VALUES (1, 'Dritte');
SELECT id, wert FROM pruefstand_unikate;
DROP TABLE pruefstand_unikate;
Erwartetes Ergebnis
id | wert
1 | Dritte
UPDATE mit ORDER BY und LIMIT
LIMIT begrenzt, wie viele Zeilen ein UPDATE/DELETE trifft; ORDER BY legt fest, welche.
CREATE TABLE pruefstand_limit (id INT PRIMARY KEY, wert INT);
INSERT INTO pruefstand_limit VALUES (1, 10), (2, 20), (3, 30);
UPDATE pruefstand_limit SET wert = wert + 1 ORDER BY id LIMIT 2;
SELECT id, wert FROM pruefstand_limit ORDER BY id;
DROP TABLE pruefstand_limit;
Erwartetes Ergebnis
id | wert
1 | 11
2 | 21
3 | 30
RETURNING
RETURNING gibt die eingefügte Zeile gleich mit dem INSERT zurück.
CREATE TABLE pruefstand_returning (id INT AUTO_INCREMENT PRIMARY KEY, wert INT);
INSERT INTO pruefstand_returning (wert) VALUES (42) RETURNING id, wert;
DROP TABLE pruefstand_returning;
Erwartetes Ergebnis
id | wert
1 | 42