Bei der „Struc­tu­red Query Language“ – kurz: SQL – handelt es sich um eine der be­kann­tes­ten Pro­gram­mier­spra­chen. SQL dient als uni­ver­sel­le Schnitt­stel­le für das Arbeiten mit re­la­tio­na­len Daten bzw. re­la­tio­na­len Datenbank-Ma­nage­ment­sys­te­men (RDBMS). Die Sprache enthält eine ver­wir­rend hohe Anzahl von SQL-Befehlen. Wir zeigen die wich­tigs­ten und erklären die zu­grun­de­lie­gen­den Muster.

KI-Assistent kostenlos – Ihr smarter All­tags­hel­fer
  • DSGVO-konform & sicher gehostet in Deutsch­land
  • Pro­duk­ti­vi­tät steigern – weniger Aufwand, mehr Output
  • Direkt im Browser starten – ohne In­stal­la­ti­on
Tipp

In einem weiteren Artikel finden Sie eine SQL-Ein­füh­rung mit Bei­spie­len, die Ihnen zeigen, wie Sie mit SQL pro­gram­mie­ren.

Was sind SQL-Befehle?

SQL-Befehle weisen ein Datenbank-Ma­nage­ment­sys­tem (DBMS) an, bestimmte Aktionen aus­zu­füh­ren. Dazu gehören u. a. das De­fi­nie­ren von Tabellen und deren Struktur, das Eintragen, Ändern und Löschen von Daten und das Ausführen von Abfragen.

Der Umfang der SQL-Befehle ist in ver­schie­de­nen ISO- bzw. ANSI-Standards fest­ge­legt. Ferner gibt es eine Reihe von im­ple­men­ta­ti­ons­spe­zi­fi­schen Dialekten. So bringen die Im­ple­men­ta­tio­nen der großen Her­stel­ler wie Post­greS­QL, MySQL, Oracle DBMS und Microsoft SQL Server jeweils eigene Sprach­va­ri­an­ten mit. Manche haben ganz eigene Befehle; bei den meisten bestehen zumindest Un­ter­schie­de in Bezug auf Funk­tio­nen für die Ver­ar­bei­tung von Strings und anderen Daten.

In der Tat umfasst SQL mehrere Un­ter­spra­chen; diese decken jeweils ver­schie­de­ne Bereiche ab und enthalten eigene Befehle. Schauen wir uns die wich­tigs­ten Arten von SQL-Befehlen an.

Welche Arten von SQL-Befehlen gibt es?

Die wich­tigs­ten SQL-Befehle lassen sich grob in fünf Un­ter­spra­chen einteilen. Be­trach­ten wir die Ein­satz­ge­bie­te der einzelnen Un­ter­spra­chen und ihrer Befehle:

SQL-Un­ter­spra­che Befehle Beispiele
Data De­fi­ni­ti­on Language (DDL) Befehle zur De­fi­ni­ti­on des Da­ten­bank­sche­mas: Erzeugen, Ändern und Löschen von Da­ten­bank­ta­bel­len; De­fi­ni­ti­on von Pri­mär­schlüs­seln, Fremd­schlüs­seln und Cons­traints. CREATE TABLE, DROP TABLE
Data Ma­ni­pu­la­ti­on Language (DML) Befehle zur Da­ten­ma­ni­pu­la­ti­on: Ändern, Einfügen und Löschen von Da­ten­sät­zen. INSERT, UPDATE
Data Query Language (DQL) Befehle zur Abfrage und Auf­be­rei­tung der von Daten. SELECT
Data Control Language (DCL) Befehle für die Rech­te­ver­wal­tung. GRANT, REVOKE
Tran­sac­tion Control Language (TCL) Befehle für die Trans­ak­ti­ons­kon­trol­le. COMMIT, ROLLBACK

Was ist die grund­le­gen­de Syntax von SQL-Befehlen?

Anders als bei den meisten ver­brei­te­ten Pro­gram­mier­spra­chen handelt es sich bei SQL um eine de­kla­ra­ti­ve Sprache. D. h. sie be­schreibt, welches Ergebnis erreicht werden soll, ohne zu spe­zi­fi­zie­ren, welche exakten Schritte dafür notwendig sind. Diese Be­son­der­heit der Sprache schlägt sich in ten­den­zi­ell längeren Befehlen nieder; dafür werden oft weniger Code-Zeilen benötigt als mit her­kömm­li­chen im­pe­ra­ti­ven Sprachen.

Als an­schau­li­ches Beispiel verweisen wir auf den SQL-Befehl DROP TABLE IF EXISTS. Sie haben richtig gelesen, es handelt sich dabei um einen einzelnen Befehl, der dazu dient, eine Tabelle zu löschen, falls diese bereits existiert:

DROP TABLE IF EXISTS SomeTable;

Ein Python-Beispiel-Code mit ähnlicher Funk­tio­na­li­tät umfasst mehrere Funk­ti­ons­auf­ru­fe sowie eine Ver­zwei­gung, die sich über zwei Zeilen erstreckt:

if db.has_table(some_table):
    db.drop_table(some_table)

Wie Sie gesehen haben, kann ein einzelner SQL-Befehl aus mehreren Schlüs­sel­wör­tern bestehen. Dies führt zu einer visuellen Ähn­lich­keit der Befehle un­ter­ein­an­der. Dafür ein Beispiel: Die beiden SQL-Befehle CREATE TABLE und CREATE OR REPLACE VIEW scheinen auf den ersten Blick Aus­prä­gun­gen eines zu­grun­de­lie­gen­den CREATE-Befehls zu sein. Dem ist jedoch nicht so. Es handelt sich trotz der Ähn­lich­keit um ei­gen­stän­di­ge Befehle.

Wie aus anderen Sprachen bekannt, nehmen manche SQL-Befehle Parameter entgegen. Dabei handelt es sich oft um die Namen von Da­ten­ban­ken, Tabellen oder Spalten. Bei­spiels­hal­ber fragen wir die Spalten ‚Name‘ und ‚Age‘ aus der ‚People‘-Tabelle ab:

SELECT Name, Age FROM People;
Hinweis

SQL-Befehle wie SELECT und CREATE TABLE werden meist komplett groß­ge­schrie­ben. Tat­säch­lich un­ter­schei­det SQL jedoch nicht zwischen Groß- und Klein­schrei­bung. Es handelt sich lediglich um eine weit ver­brei­te­te Kon­ven­ti­on.

Genau genommen handelt es sich bei SQL-Befehlen um An­wei­sun­gen. Daneben exis­tie­ren weitere Syntax-Kon­struk­te, die z. T. wie Befehle wirken. Wir zeigen die wich­tigs­ten SQL-Syntax-Elemente in der Übersicht:

Begriff Englische Ent­spre­chung Erklärung Beispiel
Anweisung Statement Weist das DBMS an, eine Aktion aus­zu­füh­ren; endet mit einem Semikolon CREATE TABLE People;
Klausel Clause Mo­di­fi­ziert eine Anweisung; können nur innerhalb von An­wei­sun­gen auftreten WHERE, HAVING
Ausdruck Ex­pres­si­on Liefert beim Eva­lu­ie­ren einen Wert zurück 6 * 7
Iden­ti­fi­ka­tor Iden­ti­fier Name eines Datenbank-Objekts, einer Variablen oder Prozedur; können qua­li­fi­ziert oder un­qua­li­fi­ziert sein dbname.tablename / tablename
Prädikat Predicate Ausdruck, der zu TRUE, FALSE oder UNKNOWN evaluiert Age < 42
Abfrage Query Spezielle Anweisung; liefert Er­geb­nis­men­ge von Da­ten­sät­zen zurück SELECT Name FROM People WHERE Age < 42;
Funktion Function Ver­ar­bei­tet einen oder mehrere Werte; erzeugt in der Regel einen neuen Wert UPPER('text') -- Gibt 'TEXT' zurück
Kommentar Comment Dient zum Kom­men­tie­ren von SQL-Code; wird vom RDBMS ignoriert -- Kommentar bis zum Ende der Zeile / /* Ggf. mehr­zei­li­ger Kommentar */

Übersicht der wich­tigs­ten SQL-Befehle

Da­ten­ban­ken struk­tu­rie­ren Daten in einer Hier­ar­chie von Spei­cher­schich­ten, vom Da­ten­bank­ser­ver bis hinunter zum in einem Feld ge­spei­cher­ten Wert. Da sich alle Aspekte eines re­la­tio­na­len Datenbank-Ma­nage­ment­sys­tems (RDBMS) per SQL steuern lassen, exis­tie­ren SQL-Befehle für jede der Schichten. Wir zeigen die Hier­ar­chie der RDBMS-Objekte als Übersicht:

RDBMS-Objekt Enthält
Server Da­ten­ban­ken
Datenbank Tabellen
Tabelle Da­ten­sät­ze
Datensatz Felder
Feld Ty­pi­sier­ter Wert

Neben den gezeigten, primären RDBMS-Objekten kommen weitere Objekte wie Sichten („Views“) und ge­spei­cher­te Pro­ze­du­ren („Stored Pro­ce­du­res“) zum Einsatz. Auch für diese exis­tie­ren jeweils eigene SQL-Befehle. Wir gehen im Folgenden auf die Befehle der fünf haupt­säch­li­chen SQL-Un­ter­spra­chen ein:

  1. Data De­fi­ni­ti­on Language (DDL) – Da­ten­de­fi­ni­ti­ons-Sprache
  2. Data Ma­ni­pu­la­ti­on Language (DML) – Da­ten­ma­ni­pu­la­ti­ons-Sprache
  3. Data Query Language (DQL) – Da­ten­ab­fra­ge-Sprache
  4. Data Control Language (DCL) – Da­ten­kon­troll-Sprache
  5. Tran­sac­tion Control Language (TCL) – Trans­ak­ti­ons­kon­troll-Sprache

SQL-Befehle für Da­ten­de­fi­ni­ti­on

Diese SQL-Befehle dienen der De­fi­ni­ti­on von Da­ten­struk­tu­ren. Als solche operieren sie allesamt auf Aggregat-Objekten wie Da­ten­ban­ken, Tabellen und Indizes. Ein Aggregat-Objekt dient zum Speichern mehrerer Da­ten­sät­ze; ein Datensatz enthält mehrere Felder, wobei jedes Feld einer Spalte zu­ge­ord­net ist. Die Spalte definiert den Datentyp des Felds, z. B. Zahl, Zei­chen­ket­te, Boolean etc. Ferner lassen sich Be­schrän­kun­gen wie „muss eindeutig sein“, „darf nicht null sein“ etc. für eine Spalte festlegen.

SQL-Befehle zur De­fi­ni­ti­on von Da­ten­ban­ken

Auf der höchsten Ebene eines re­la­tio­na­len Datenbank-Ma­nage­ment­sys­tems (RDBMS) stehen Da­ten­ban­ken. Diese lassen sich per SQL-Befehl anlegen und löschen:

SQL-Befehl Erklärung Beispiel
CREATE DATABASE Neue Datenbank anlegen CREATE DATABASE Store;
DROP DATABASE Datenbank voll­stän­dig löschen DROP DATABASE Store;
USE Datenbank für folgende Befehle auswählen USE Store;

SQL-Befehle zur De­fi­ni­ti­on von Tabellen

Der Aufbau einer Datenbank beginnt mit der De­fi­ni­ti­on des Da­ten­bank­sche­mas. Das Schema ist die Grundlage für eine ef­fi­zi­en­te Nutzung der Datenbank und erfordert ein sorg­fäl­ti­ges Design, das die einzelnen Tabellen und ihre Be­zie­hun­gen un­ter­ein­an­der abbildet. Für ge­wöhn­lich wird das Da­ten­bank­sche­ma auf Basis von Entity-Relation(ER)-Dia­gram­men oder spe­zi­el­len UML-Dia­gram­men ent­wi­ckelt.

Liegt das Da­ten­bank­sche­ma als abstrakte Be­schrei­bung vor, wird die Datenbank-Struktur unter Nutzung der ent­spre­chen­den SQL-Befehle aufgebaut. Es werden Tabellen mit Spalten und ihren Typen definiert; etwaige Ver­knüp­fun­gen zwischen Tabellen werden über „Foreign Keys“ (Fremd­schlüs­sel) rea­li­siert. Die Struktur lässt sich im Nach­hin­ein durch Ausführen weiterer SQL-Befehle verändern. Wir zeigen die wich­tigs­ten Befehle in der Übersicht:

SQL-Befehl Erklärung Beispiel
CREATE TABLE Neue Tabelle in Datenbank anlegen; neben dem Namen der Tabelle werden die Namen von Spalten mit ihren Typen fest­ge­legt. CREATE TABLE Customers ( Cus­to­me­rID INT UNSIGNED NOT NULL AUTO_INCREMENT, Cus­to­mer­Na­me VARCHAR(255) NOT NULL, Country VARCHAR(60) NOT NULL, PRIMARY KEY (Cus­to­me­rID) );
ALTER TABLE Exis­tie­ren­de Tabelle verändern: Spalten hin­zu­fü­gen / entfernen; Typ oder Name einer Spalte ändern ALTER TABLE Customers ADD Email VARCHAR(50);
TRUNCATE TABLE Alle Einträge einer Tabelle löschen; dabei Ta­bel­len­struk­tur bei­be­hal­ten TRUNCATE TABLE Customers;
DROP TABLE Tabelle voll­stän­dig löschen; löst beim Ausführen einen Fehler aus, falls die Tabelle nicht existiert DROP TABLE Customers;
DROP TABLE IF EXISTS Tabelle löschen, falls sie existiert. DROP TABLE IF EXISTS Customers;
ALTER COLUMN Datentyp einer exis­tie­ren­den Spalte ändern ALTER TABLE Customers ALTER COLUMN Email VARCHAR(255);
DROP COLUMN Spalte einer Tabelle voll­stän­dig löschen ALTER TABLE customers DROP COLUMN Email;
CREATE INDEX Benannten Index für Spalten(n) in exis­tie­ren­de Tabelle anlegen CREATE INDEX IdxEmail ON Customers (Email);
DROP INDEX Exis­tie­ren­den Index entfernen ALTER TABLE Customers DROP INDEX IdxEmail;

Eine wichtige Ei­gen­schaft eines Datenbank-Ma­nage­ment­sys­tems (DBMS) besteht darin, die Kon­sis­tenz der Daten si­cher­zu­stel­len. So lässt sich für einzelne Spalten festlegen, dass ent­hal­te­ne Felder nicht leer sein dürfen bzw. dass sich die ent­hal­te­nen Werte innerhalb erlaubter Grenzen befinden. Man spricht dabei von Cons­traints (dt. „Ein­schrän­kun­gen“). Ferner lässt sich über Foreign Keys („Fremd­schlüs­sel“) erzwingen, dass Ver­knüp­fun­gen zwischen Tabellen korrekt her­ge­stellt werden.

Um die Ein­schrän­kun­gen für einzelne Spalten fest­zu­le­gen, kommt eine Reihe von Klauseln innerhalb von Da­ten­de­fi­ni­ti­ons-An­wei­sun­gen zum Einsatz. Wir zeigen diese hier ohne Beispiele:

SQL-Befehl Erklärung
NOT NULL De­fi­nie­ren, dass der Wert des Feldes nicht NULL sein darf
UNIQUE De­fi­nie­ren, dass der Wert des Feldes innerhalb der Spalte nicht doppelt auftreten darf
DEFAULT Eine Vorgabe für das Feld setzen; wird beim Erzeugen des Da­ten­sat­zes kein Wert für das Feld angegeben, kommt der Default zum Einsatz.
CHECK Eine Bedingung festlegen, die der Wert des Feldes erfüllen muss
PRIMARY KEY Festlegen, dass das Feld den Pri­mär­schlüs­sel enthält; im­pli­ziert UNIQUE und NOT NULL
FOREIGN KEY Festlegen, dass der Wert des Feldes ein Pri­mär­schlüs­sel einer anderen Tabelle sein muss

SQL-Befehle für Da­ten­ma­ni­pu­la­ti­on

Sind die Tabellen einer Datenbank bereits definiert, folgen Ope­ra­tio­nen auf einzelnen Da­ten­sät­zen. Mittels ge­eig­ne­ter SQL-Befehle lassen sich Da­ten­sät­ze neu einfügen, ändern und löschen. Man spricht dabei auch von den grund­le­gen­den CRUD-Ope­ra­tio­nen Erzeugen, Lesen, Ändern und Löschen („Create, Read, Update, Delete“), die sich ebenso bei NoSQL-Da­ten­ban­ken finden:

SQL-Befehl Erklärung Beispiel
INSERT INTO Datensatz in Tabelle einfügen INSERT INTO Customers (Cus­to­mer­Na­me) VALUES('Tester');
UPDATE Felder eines oder mehrerer Da­ten­sät­ze verändern UPDATE Customers SET Email = 'test@example.com' WHERE Cus­to­mer­Na­me = 'Tester';
DELETE FROM Da­ten­sät­ze aus einer Tabelle löschen DELETE FROM Customers WHERE Cus­to­mer­Na­me = 'Tester';

Zu beachten ist, dass die in den Bei­spie­len auf­tre­ten­den Klauseln bzw. Funk­tio­nen ‚WHERE‘, ‚SET‘ und ‚VALUES‘ sich auch in anderen Kontexten wie­der­fin­den. Trotz desselben Namens gelten dort jedoch ggf. leicht ab­wei­chen­de Regeln für ihren Einsatz. Vorsicht gilt bei Nutzung der SQL-Befehle UPDATE und DELETE FROM ohne WHERE-Klausel. Dabei werden sämtliche in der Tabelle ent­hal­te­nen Da­ten­sät­ze verändert bzw. gelöscht.

SQL-Befehle zum Abfragen von Daten

Der SQL-Befehl SELECT ist der wohl be­kann­tes­te Befehl der Sprache. Er dient dazu, Daten aus der Datenbank ab­zu­fra­gen. Dabei wird im Nor­mal­fall der Da­ten­be­stand nicht verändert. Der SELECT-Befehl ist daher oft für Analysten zu­gäng­lich. Be­trach­ten wir die grund­le­gen­den Kom­po­nen­ten des SQL-SELECT-Befehls:

SQL-Befehl Erklärung Beispiel
SELECT Daten aus der Datenbank abfragen SELECT Cus­to­mer­Na­me FROM Customers;
WHERE Abfrage auf Da­ten­sät­ze be­schrän­ken, die ein gegebenes Prädikat erfüllen SELECT Email FROM Customers WHERE Cus­to­mer­Na­me = 'Tester';
AS Alias für Tabelle oder Zeile innerhalb einer Abfrage de­fi­nie­ren SELECT Cus­to­me­rID AS ID, Cus­to­mer­Na­me AS Customer FROM Customers;
HAVING Abfrage mit Aggregat-Funktion auf zu­tref­fen­de Da­ten­sät­ze be­schrän­ken SELECT COUNT(Cus­to­me­rID), Country FROM Customers HAVING COUNT(Cus­to­me­rID) >= 1;

Auch wenn mit SELECT nur ein einzelner SQL-Befehl zum Abfragen von Daten be­reit­steht, bieten sich viel­fäl­ti­ge Ein­satz­mög­lich­kei­ten. So existiert eine Reihe von Klauseln, die zum Filtern, Sortieren und Zu­sam­men­fas­sen der ge­lie­fer­ten Daten dienen. Diese schauen wir uns im Folgenden an.

SQL-Befehle zum Ver­fei­nern von Abfragen

Der SELECT SQL-Befehl liefert ein so­ge­nann­tes Result Set (dt. „Er­geb­nis­men­ge“) zurück. Kon­zep­tu­ell kann man sich ein Result Set als Tabelle mit Spalten und ent­hal­te­nen Werten vor­stel­len. In der Praxis ist es oft notwendig, die Er­geb­nis­se zu filtern, zu sortieren oder die Anzahl der ge­lie­fer­ten Da­ten­sät­ze zu begrenzen. Für all diese An­wen­dungs­fäl­le exis­tie­ren ent­spre­chen­de Klauseln, die sich innerhalb eines SELECT SQL-Befehls nutzen lassen:

SQL-Befehl Erklärung Beispiel
DISTINCT Duplikate aus der Er­geb­nis­men­ge entfernen SELECT DISTINCT Country FROM Customers;
LIMIT Die Er­geb­nis­men­ge auf die obersten Er­geb­nis­se be­schrän­ken SELECT * FROM Customers LIMIT 5;
GROUP BY Er­geb­nis­men­ge nach einem ge­mein­sa­men Merkmal grup­pie­ren SELECT Cus­to­mer­Na­me, Country FROM Customers GROUP BY Country;
ORDER BY Er­geb­nis­men­ge nach einem Merkmal sortieren SELECT Cus­to­mer­Na­me, Email FROM Customers SORT BY Cus­to­mer­Na­me;
ASC Auf­stei­gen­de („ascending“) Sor­tie­rung verwenden SELECT DISTINCT Country FROM Customers SORT BY Country ASC;
DESC Ab­stei­gen­de („de­s­cen­ding“) Sor­tie­rung verwenden SELECT DISTINCT Country FROM Customers SORT BY Country DESC;

SQL-Befehle zum Ver­knüp­fen von Abfragen

Neben dem Ver­fei­nern der Er­geb­nis­men­ge ist es möglich, Abfragen über mehrere Tabellen hinweg zu ver­knüp­fen. Erinnern wir uns: Ein SELECT-SQL-Befehl liefert eine Er­geb­nis­men­ge zurück. Kon­se­quen­ter­wei­se enthält SQL solche Befehle, die das Zu­sam­men­füh­ren zweier Er­geb­nis­men­gen nach den Regeln der re­la­tio­na­len Men­gen­leh­re erlauben.

Um die SQL-Befehle zum Ver­knüp­fen von Abfragen im Detail zu erklären, sind kom­ple­xe­re Beispiele mit mehreren de­fi­nier­ten Tabellen notwendig. Darum ver­zich­ten wir hier auf den Beispiel-Code. Schauen wir uns die wich­tigs­ten Men­gen­ope­ra­tio­nen an:

SQL-Befehl Erklärung
UNION Zwei Er­geb­nis­men­gen ver­ei­ni­gen; die Er­geb­nis­men­gen müssen über Spalten desselben Typs in derselben Rei­hen­fol­ge verfügen. Ihre Zeilen werden zu­sam­men­ge­fügt.
INNER JOIN Zwei Er­geb­nis­men­gen nach einem ge­mein­sa­men Kriterium filtern
LEFT JOIN Die Er­geb­nis­men­ge der linken Abfrage mit passenden Er­geb­nis­sen der rechten Abfrage ver­knüp­fen; nicht passende Felder werden auf NULL gesetzt.
RIGHT JOIN Die Er­geb­nis­men­ge der rechten Abfrage mit passenden Er­geb­nis­sen der linken Abfrage ver­knüp­fen; nicht passende Felder werden auf NULL gesetzt.
FULL OUTER JOIN Kom­bi­na­ti­on eines LEFT JOIN und RIGHT JOIN

SQL-Befehle zum Speichern und Wie­der­ho­len von Abfragen

Wie wir gesehen haben, fallen SQL-Abfragen u. U. recht komplex aus. In der Praxis ist es oft sinnvoll, Abfragen wie­der­holt aus­zu­füh­ren. Prin­zi­pi­ell ist es möglich, die ent­spre­chen­den SQL-Befehle als Code zu speichern und bei Bedarf ein­zu­spie­len. Jedoch ist dies wenig effizient. Glück­li­cher­wei­se gibt es spezielle SQL-Befehle, mit denen sich komplexe Abfragen als Einheit direkt im Datenbank-Ma­nage­ment­sys­tem (DBMS) speichern lassen.

Be­trach­ten wir zunächst die Sichten, auf Englisch „Views“ genannt. Eine Datenbank-Sicht ent­spricht in etwa einer ge­spei­cher­ten Abfrage. Erinnern wir uns: Eine Abfrage liefert als Ergebnis eine ta­bel­la­ri­sche Er­geb­nis­men­ge zurück. Anstatt diese wieder zu verwerfen, speichern wir sie als Sicht. Kon­se­quen­ter­wei­se werden Sichten auch als „virtuelle Tabellen“ be­zeich­net. In der Regel besteht auf eine Sicht aus­schließ­lich lesender Zugriff. Zum Arbeiten mit Sichten gibt es eine Handvoll SQL-Befehle:

SQL-Befehl Erklärung Beispiel
CREATE VIEW Eine neue Sicht erzeugen CREATE VIEW Ger­man­Cus­to­mers AS SELECT Cus­to­mer­Na­me, Email FROM Customers WHERE Country = "DE";
ALTER VIEW Eine exis­tie­ren­de Sicht verändern ALTER VIEW Ger­man­Cus­to­mers AS SELECT * FROM Customers WHERE Country = "DE";
CREATE OR REPLACE VIEW Eine neue Sicht erzeugen, bzw. eine ggf. exis­tie­ren­de Sicht ersetzen CREATE OR REPLACE VIEW Ger­man­Cus­to­mers AS SELECT * FROM Customers WHERE Country = "DE";
SHOW CREATE VIEW Den zum Erzeugen einer Sicht genutzten SQL-Befehl anzeigen SHOW CREATE VIEW Ger­man­Cus­to­mers;
DROP VIEW Eine exis­tie­ren­de Sicht löschen DROP VIEW Ger­man­Cus­to­mers;

Neben den Datenbank-Sichten gibt es die „ge­spei­cher­te Pro­ze­du­ren“ (Stored Pro­ce­du­res). Ge­spei­cher­te Pro­ze­du­ren dienen zum wie­der­hol­ten Ausführen von Abfragen und sind komplexer als Sichten. Sie können Parameter ent­ge­gen­neh­men und damit Abfragen dynamisch zu­sam­men­bau­en. Ferner ist es möglich, mit einer ge­spei­cher­ten Prozedur schrei­bend auf die zu­grun­de­lie­gen­den Daten zu­zu­grei­fen. Wir geben einen Überblick der re­le­van­ten SQL-Befehle, wobei wir aus Platz­grün­den auf Beispiele ver­zich­ten:

SQL-Befehl Erklärung
CREATE PROCEDURE Eine neue Prozedur erzeugen
ALTER PROCEDURE Eine exis­tie­ren­de Prozedur verändern
CREATE OR REPLACE PROCEDURE Eine neue Prozedur erzeugen, bzw. eine ggf. exis­tie­ren­de Prozedur ersetzen
DROP PROCEDURE Eine exis­tie­ren­de Prozedur löschen
CALL Eine ge­spei­cher­te Prozedur ausführen

Der Einsatz von ge­spei­cher­ten Pro­ze­du­ren verlagert Code vom Client auf den Server. Die dabei erzielte Trennung der Belange führt zu höherer Si­cher­heit und besserer Per­for­manz. Nach­tei­lig wirkt sich ggf. aus, dass die innerhalb einer ge­spei­cher­ten Prozedur ent­hal­te­ne „Business Logic“ außerhalb des Ver­si­ons­kon­troll­sys­tems liegt. Da ge­spei­cher­te Pro­ze­du­ren stark abhängig vom um­ge­ben­den DBMS sind, führt ein An­bie­ter­wech­sel im schlimms­ten Fall zum Verlust der Funk­tio­na­li­tät.

Hinweis

Stored Pro­ce­du­res sind nicht zu ver­wech­seln mit den bekannten Prepared State­ments. Beide Me­cha­nis­men dienen dazu, die Si­cher­heit zu erhöhen. Jedoch werden Prepared State­ments auf Seite der Client-Anwendung definiert.

SQL-Befehle für Zu­griffs­kon­trol­le

Ein einzelner Da­ten­bank­ser­ver enthält ggf. mehrere Da­ten­ban­ken. Um diese un­ab­hän­gig von­ein­an­der zu verwalten, kommen Me­cha­nis­men für Zu­griffs­kon­trol­le zum Einsatz. So lässt sich für einzelne Nutzer festlegen, mit welchen Rechten diese auf Da­ten­ban­ken und darin ent­hal­te­ne Tabellen zugreifen dürfen. Ferner lassen sich User­grup­pen de­fi­nie­ren und ihnen Nutzer und Nut­ze­rin­nen zuweisen. Es kommen zwei haupt­säch­li­che SQL-Befehle zum Tragen:

SQL-Befehl Erklärung Beispiel
GRANT Rechte vergeben GRANT ALL ON SomeDB.* TO 'john'@'lo­cal­hos­t';
REVOKE Rechte entziehen REVOKE INSERT ON *.* FROM 'john'@'lo­cal­hos­t';

SQL-Befehle für Trans­ak­ti­ons­kon­trol­le

Einer der Vorteile bei der Nutzung re­la­tio­na­ler Datenbank-Ma­nage­ment­sys­te­me (RDBMS) ist die Garantie der „ACID“-Ei­gen­schaf­ten. Kurz gesagt wird so si­cher­ge­stellt, dass die Daten immer in einem sauberen und wohl­de­fi­nier­ten Zustand vorliegen. Auf tech­ni­scher Ebene kommen so­ge­nann­te Trans­ak­tio­nen zum Einsatz, die als „atomic operation“ („atomare Operation“) unteilbar sind. Eine Trans­ak­ti­on wird entweder voll­stän­dig und ohne Fehler beendet, oder es ist ein Fehler auf­ge­tre­ten. Dann werden die einzelnen Schritte rück­gän­gig gemacht. Schauen wir uns die SQL-Befehle für Trans­ak­ti­ons­kon­trol­le an:

SQL-Befehl Erklärung Beispiel
START TRAN­SAC­TION Den Beginn einer Trans­ak­ti­on markieren START TRAN­SAC­TION;
COMMIT Eine begonnene Trans­ak­ti­on er­folg­reich beenden START TRAN­SAC­TION; TRUNCATE TABLE Customers; COMMIT;
ROLLBACK Eine begonnene Trans­ak­ti­on abbrechen und den Da­ten­be­stand zum Aus­gangs­zu­stand zu­rück­füh­ren START TRAN­SAC­TION; TRUNCATE TABLE Customers; ROLLBACK;
SAVEPOINT Innerhalb einer Trans­ak­ti­on einen benannten Spei­cher­punkt anlegen START TRAN­SAC­TION; SAVEPOINT Be­fo­re­Add­Da­ta;
ROLLBACK TO Zu einem benannten Spei­cher­punkt zu­rück­sprin­gen ROLLBACK TO Be­fo­re­Add­Da­ta;

Die erwähnten ACID-Ei­gen­schaf­ten in der Übersicht:

ACID-Ei­gen­schaft Deutsche Ent­spre­chung Erklärung
Atomicity Ato­ma­ri­tät Trans­ak­tio­nen sind „unteilbar“. Sie werden entweder ganz oder gar nicht aus­ge­führt. Wird eine atomare Trans­ak­ti­on ab­ge­bro­chen, ist das System im Zustand vor dem Beginn der Trans­ak­ti­on.
Con­sis­ten­cy Kon­sis­tenz Nach Aus­füh­rung einer Trans­ak­ti­on liegt der Da­ten­be­stand wieder in einer kon­sis­ten­ten Form vor.
Isolation Isolation Gleich­zei­tig aus­ge­führ­te Trans­ak­tio­nen dürfen sich nicht ge­gen­sei­tig be­ein­flus­sen.
Du­ra­bi­li­ty Dau­er­haf­tig­keit Die Aus­wir­kun­gen einer Trans­ak­ti­on müssen im Da­ten­be­stand dauerhaft bestehen bleiben. Die Effekte einer er­folg­rei­chen Trans­ak­ti­on dürfen nicht verloren gehen, wenn z. B. das RDBMS abstürzt.
Tipp

Heften Sie den Digital Guide an Ihre Windows-Task­leis­te an. So haben Sie unsere Artikel als Nach­schla­ge­werk immer zur Hand. Wie Sie dabei vorgehen, erklären wir hier:

Zum Hauptmenü