SQL-Befehle
Bei der „Structured Query Language“ – kurz: SQL – handelt es sich um eine der bekanntesten Programmiersprachen. SQL dient als universelle Schnittstelle für das Arbeiten mit relationalen Daten bzw. relationalen Datenbank-Managementsystemen (RDBMS). Die Sprache enthält eine verwirrend hohe Anzahl von SQL-Befehlen. Wir zeigen die wichtigsten und erklären die zugrundeliegenden Muster.
Domain kaufen
Registrieren Sie Ihre perfekte Domain - Inklusive Wildcard-SSL-Zertifikat
- Inklusive Domain Lock
- Inklusive 2 GB E-Mail-Postfach
In einem weiteren Artikel finden Sie eine SQL-Einführung mit Beispielen, die Ihnen zeigen, wie Sie mit SQL programmieren.
Was sind SQL-Befehle?
SQL-Befehle weisen ein Datenbank-Managementsystem (DBMS) an, bestimmte Aktionen auszuführen. Dazu gehören u. a. das Definieren 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 verschiedenen ISO- bzw. ANSI-Standards festgelegt. Ferner gibt es eine Reihe von implementationsspezifischen Dialekten. So bringen die Implementationen der großen Hersteller wie PostgreSQL, MySQL, Oracle DBMS und Microsoft SQL Server jeweils eigene Sprachvarianten mit. Manche haben ganz eigene Befehle; bei den meisten bestehen zumindest Unterschiede in Bezug auf Funktionen für die Verarbeitung von Strings und anderen Daten.
In der Tat umfasst SQL mehrere Untersprachen; diese decken jeweils verschiedene Bereiche ab und enthalten eigene Befehle. Schauen wir uns die wichtigsten Arten von SQL-Befehlen an.
Der Umfang der SQL-Befehle ist in verschiedenen ISO- bzw. ANSI-Standards festgelegt. Ferner gibt es eine Reihe von implementationsspezifischen Dialekten. So bringen die Implementationen der großen Hersteller wie PostgreSQL, MySQL, Oracle DBMS und Microsoft SQL Server jeweils eigene Sprachvarianten mit. Manche haben ganz eigene Befehle; bei den meisten bestehen zumindest Unterschiede in Bezug auf Funktionen für die Verarbeitung von Strings und anderen Daten.
In der Tat umfasst SQL mehrere Untersprachen; diese decken jeweils verschiedene Bereiche ab und enthalten eigene Befehle. Schauen wir uns die wichtigsten Arten von SQL-Befehlen an.
Welche Arten von SQL-Befehlen gibt es?
Die wichtigsten SQL-Befehle lassen sich grob in fünf Untersprachen einteilen. Betrachten wir die Einsatzgebiete der einzelnen Untersprachen und ihrer Befehle:
SQL-Untersprache | Befehle | Beispiele |
---|---|---|
Data Definition Language (DDL) | Befehle zur Definition des Datenbankschemas: Erzeugen, Ändern und Löschen von Datenbanktabellen; Definition von Primärschlüsseln, Fremdschlüsseln und Constraints. | CREATE TABLE, DROP TABLE |
Data Manipulation Language (DML) | Befehle zur Datenmanipulation: Ändern, Einfügen und Löschen von Datensätzen. | INSERT, UPDATE |
Data Query Language (DQL) | Befehle zur Abfrage und Aufbereitung der von Daten. | SELECT |
Data Control Language (DCL) | Befehle für die Rechteverwaltung. | GRANT, REVOKE |
Transaction Control Language (TCL) | Befehle für die Transaktionskontrolle. | COMMIT, ROLLBACK |
Was ist die grundlegende Syntax von SQL-Befehlen?
Anders als bei den meisten verbreiteten Programmiersprachen handelt es sich bei SQL um eine deklarative Sprache. D. h. sie beschreibt, welches Ergebnis erreicht werden soll, ohne zu spezifizieren, welche exakten Schritte dafür notwendig sind. Diese Besonderheit der Sprache schlägt sich in tendenziell längeren Befehlen nieder; dafür werden oft weniger Code-Zeilen benötigt als mit herkömmlichen imperativen Sprachen.
Als anschauliches 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:
Als anschauliches 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 Funktionalität umfasst mehrere Funktionsaufrufe sowie eine Verzweigung, 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üsselwörtern bestehen. Dies führt zu einer visuellen Ähnlichkeit der Befehle untereinander. Dafür ein Beispiel: Die beiden SQL-Befehle CREATE TABLE und CREATE OR REPLACE VIEW scheinen auf den ersten Blick Ausprägungen eines zugrundeliegenden CREATE-Befehls zu sein. Dem ist jedoch nicht so. Es handelt sich trotz der Ähnlichkeit um eigenständige Befehle.
Wie aus anderen Sprachen bekannt, nehmen manche SQL-Befehle Parameter entgegen. Dabei handelt es sich oft um die Namen von Datenbanken, Tabellen oder Spalten. Beispielshalber fragen wir die Spalten ‚Name‘ und ‚Age‘ aus der ‚People‘-Tabelle ab:
Wie aus anderen Sprachen bekannt, nehmen manche SQL-Befehle Parameter entgegen. Dabei handelt es sich oft um die Namen von Datenbanken, Tabellen oder Spalten. Beispielshalber fragen wir die Spalten ‚Name‘ und ‚Age‘ aus der ‚People‘-Tabelle ab:
SELECT Name, Age FROM People;
SQL-Befehle wie SELECT und CREATE TABLE werden meist komplett großgeschrieben. Tatsächlich unterscheidet SQL jedoch nicht zwischen Groß- und Kleinschreibung. Es handelt sich lediglich um eine weit verbreitete Konvention.
Genau genommen handelt es sich bei SQL-Befehlen um Anweisungen. Daneben existieren weitere Syntax-Konstrukte, die z. T. wie Befehle wirken. Wir zeigen die wichtigsten SQL-Syntax-Elemente in der Übersicht:
Begriff | Englische Entsprechung | Erklärung | Beispiel |
---|---|---|---|
Anweisung | Statement | Weist das DBMS an, eine Aktion auszuführen; endet mit einem Semikolon | CREATE TABLE People; |
Klausel | Clause | Modifiziert eine Anweisung; können nur innerhalb von Anweisungen auftreten | WHERE, HAVING |
Ausdruck | Expression | Liefert beim Evaluieren einen Wert zurück | 6 * 7 |
Identifikator | Identifier | Name eines Datenbank-Objekts, einer Variablen oder Prozedur; können qualifiziert oder unqualifiziert sein | dbname.tablename / tablename |
Prädikat | Predicate | Ausdruck, der zu TRUE, FALSE oder UNKNOWN evaluiert | Age < 42 |
Abfrage | Query | Spezielle Anweisung; liefert Ergebnismenge von Datensätzen zurück | SELECT Name FROM People WHERE Age < 42; |
Funktion | Function | Verarbeitet einen oder mehrere Werte; erzeugt in der Regel einen neuen Wert | UPPER('text') -- Gibt 'TEXT' zurück |
Kommentar | Comment | Dient zum Kommentieren von SQL-Code; wird vom RDBMS ignoriert | -- Kommentar bis zum Ende der Zeile / /* Ggf. mehrzeiliger Kommentar */ |
Übersicht der wichtigsten SQL-Befehle
Datenbanken strukturieren Daten in einer Hierarchie von Speicherschichten, vom Datenbankserver bis hinunter zum in einem Feld gespeicherten Wert. Da sich alle Aspekte eines relationalen Datenbank-Managementsystems (RDBMS) per SQL steuern lassen, existieren SQL-Befehle für jede der Schichten. Wir zeigen die Hierarchie der RDBMS-Objekte als Übersicht:
RDBMS-Objekt | Enthält |
---|---|
Server | Datenbanken |
Datenbank | Tabellen |
Tabelle | Datensätze |
Datensatz | Felder |
Feld | Typisierter Wert |
Neben den gezeigten, primären RDBMS-Objekten kommen weitere Objekte wie Sichten („Views“) und gespeicherte Prozeduren („Stored Procedures“) zum Einsatz. Auch für diese existieren jeweils eigene SQL-Befehle. Wir gehen im Folgenden auf die Befehle der fünf hauptsächlichen SQL-Untersprachen ein:
- Data Definition Language (DDL) – Datendefinitions-Sprache
- Data Manipulation Language (DML) – Datenmanipulations-Sprache
- Data Query Language (DQL) – Datenabfrage-Sprache
- Data Control Language (DCL) – Datenkontroll-Sprache
- Transaction Control Language (TCL) – Transaktionskontroll-Sprache
SQL-Befehle für Datendefinition
Diese SQL-Befehle dienen der Definition von Datenstrukturen. Als solche operieren sie allesamt auf Aggregat-Objekten wie Datenbanken, Tabellen und Indizes. Ein Aggregat-Objekt dient zum Speichern mehrerer Datensätze; ein Datensatz enthält mehrere Felder, wobei jedes Feld einer Spalte zugeordnet ist. Die Spalte definiert den Datentyp des Felds, z. B. Zahl, Zeichenkette, Boolean etc. Ferner lassen sich Beschränkungen wie „muss eindeutig sein“, „darf nicht null sein“ etc. für eine Spalte festlegen.
SQL-Befehle zur Definition von Datenbanken
Auf der höchsten Ebene eines relationalen Datenbank-Managementsystems (RDBMS) stehen Datenbanken. 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 vollständig löschen | DROP DATABASE Store; |
USE | Datenbank für folgende Befehle auswählen | USE Store; |
SQL-Befehle zur Definition von Tabellen
Der Aufbau einer Datenbank beginnt mit der Definition des Datenbankschemas. Das Schema ist die Grundlage für eine effiziente Nutzung der Datenbank und erfordert ein sorgfältiges Design, das die einzelnen Tabellen und ihre Beziehungen untereinander abbildet. Für gewöhnlich wird das Datenbankschema auf Basis von Entity-Relation(ER)-Diagrammen oder speziellen UML-Diagrammen entwickelt.
Liegt das Datenbankschema als abstrakte Beschreibung vor, wird die Datenbank-Struktur unter Nutzung der entsprechenden SQL-Befehle aufgebaut. Es werden Tabellen mit Spalten und ihren Typen definiert; etwaige Verknüpfungen zwischen Tabellen werden über „Foreign Keys“ (Fremdschlüssel) realisiert. Die Struktur lässt sich im Nachhinein durch Ausführen weiterer SQL-Befehle verändern. Wir zeigen die wichtigsten Befehle in der Übersicht:
Liegt das Datenbankschema als abstrakte Beschreibung vor, wird die Datenbank-Struktur unter Nutzung der entsprechenden SQL-Befehle aufgebaut. Es werden Tabellen mit Spalten und ihren Typen definiert; etwaige Verknüpfungen zwischen Tabellen werden über „Foreign Keys“ (Fremdschlüssel) realisiert. Die Struktur lässt sich im Nachhinein durch Ausführen weiterer SQL-Befehle verändern. Wir zeigen die wichtigsten 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 festgelegt. | CREATE TABLE Customers ( CustomerID INT UNSIGNED NOT NULL AUTO_INCREMENT, CustomerName VARCHAR(255) NOT NULL, Country VARCHAR(60) NOT NULL, PRIMARY KEY (CustomerID) ); |
ALTER TABLE | Existierende Tabelle verändern: Spalten hinzufü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 Tabellenstruktur beibehalten | TRUNCATE TABLE Customers; |
DROP TABLE | Tabelle vollständig 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 existierenden Spalte ändern | ALTER TABLE Customers ALTER COLUMN Email VARCHAR(255); |
DROP COLUMN | Spalte einer Tabelle vollständig löschen | ALTER TABLE customers DROP COLUMN Email; |
CREATE INDEX | Benannten Index für Spalten(n) in existierende Tabelle anlegen | CREATE INDEX IdxEmail ON Customers (Email); |
DROP INDEX | Existierenden Index entfernen | ALTER TABLE Customers DROP INDEX IdxEmail; |
Eine wichtige Eigenschaft eines Datenbank-Managementsystems (DBMS) besteht darin, die Konsistenz der Daten sicherzustellen. So lässt sich für einzelne Spalten festlegen, dass enthaltene Felder nicht leer sein dürfen bzw. dass sich die enthaltenen Werte innerhalb erlaubter Grenzen befinden. Man spricht dabei von Constraints (dt. „Einschränkungen“). Ferner lässt sich über Foreign Keys („Fremdschlüssel“) erzwingen, dass Verknüpfungen zwischen Tabellen korrekt hergestellt werden.
Um die Einschränkungen für einzelne Spalten festzulegen, kommt eine Reihe von Klauseln innerhalb von Datendefinitions-Anweisungen zum Einsatz. Wir zeigen diese hier ohne Beispiele:
Um die Einschränkungen für einzelne Spalten festzulegen, kommt eine Reihe von Klauseln innerhalb von Datendefinitions-Anweisungen zum Einsatz. Wir zeigen diese hier ohne Beispiele:
SQL-Befehl | Erklärung |
---|---|
NOT NULL | Definieren, dass der Wert des Feldes nicht NULL sein darf |
UNIQUE | Definieren, dass der Wert des Feldes innerhalb der Spalte nicht doppelt auftreten darf |
DEFAULT | Eine Vorgabe für das Feld setzen; wird beim Erzeugen des Datensatzes 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 Primärschlüssel enthält; impliziert UNIQUE und NOT NULL |
FOREIGN KEY | Festlegen, dass der Wert des Feldes ein Primärschlüssel einer anderen Tabelle sein muss |
SQL-Befehle für Datenmanipulation
Sind die Tabellen einer Datenbank bereits definiert, folgen Operationen auf einzelnen Datensätzen. Mittels geeigneter SQL-Befehle lassen sich Datensätze neu einfügen, ändern und löschen. Man spricht dabei auch von den grundlegenden CRUD-Operationen Erzeugen, Lesen, Ändern und Löschen („Create, Read, Update, Delete“), die sich ebenso bei NoSQL-Datenbanken finden:
SQL-Befehl | Erklärung | Beispiel |
---|---|---|
INSERT INTO | Datensatz in Tabelle einfügen | INSERT INTO Customers (CustomerName) VALUES('Tester'); |
UPDATE | Felder eines oder mehrerer Datensätze verändern | UPDATE Customers SET Email = 'test@example.com' WHERE CustomerName = 'Tester'; |
DELETE FROM | Datensätze aus einer Tabelle löschen | DELETE FROM Customers WHERE CustomerName = 'Tester'; |
Zu beachten ist, dass die in den Beispielen auftretenden Klauseln bzw. Funktionen ‚WHERE‘, ‚SET‘ und ‚VALUES‘ sich auch in anderen Kontexten wiederfinden. Trotz desselben Namens gelten dort jedoch ggf. leicht abweichende 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 enthaltenen Datensätze verändert bzw. gelöscht.
SQL-Befehle zum Abfragen von Daten
Der SQL-Befehl SELECT ist der wohl bekannteste Befehl der Sprache. Er dient dazu, Daten aus der Datenbank abzufragen. Dabei wird im Normalfall der Datenbestand nicht verändert. Der SELECT-Befehl ist daher oft für Analysten zugänglich. Betrachten wir die grundlegenden Komponenten des SQL-SELECT-Befehls:
SQL-Befehl | Erklärung | Beispiel |
---|---|---|
SELECT | Daten aus der Datenbank abfragen | SELECT CustomerName FROM Customers; |
WHERE | Abfrage auf Datensätze beschränken, die ein gegebenes Prädikat erfüllen | SELECT Email FROM Customers WHERE CustomerName = 'Tester'; |
AS | Alias für Tabelle oder Zeile innerhalb einer Abfrage definieren | SELECT CustomerID AS ID, CustomerName AS Customer FROM Customers; |
HAVING | Abfrage mit Aggregat-Funktion auf zutreffende Datensätze beschränken | SELECT COUNT(CustomerID), Country FROM Customers HAVING COUNT(CustomerID) >= 1; |
Auch wenn mit SELECT nur ein einzelner SQL-Befehl zum Abfragen von Daten bereitsteht, bieten sich vielfältige Einsatzmöglichkeiten. So existiert eine Reihe von Klauseln, die zum Filtern, Sortieren und Zusammenfassen der gelieferten Daten dienen. Diese schauen wir uns im Folgenden an.
SQL-Befehle zum Verfeinern von Abfragen
Der SELECT SQL-Befehl liefert ein sogenanntes Result Set (dt. „Ergebnismenge“) zurück. Konzeptuell kann man sich ein Result Set als Tabelle mit Spalten und enthaltenen Werten vorstellen. In der Praxis ist es oft notwendig, die Ergebnisse zu filtern, zu sortieren oder die Anzahl der gelieferten Datensätze zu begrenzen. Für all diese Anwendungsfälle existieren entsprechende Klauseln, die sich innerhalb eines SELECT SQL-Befehls nutzen lassen:
SQL-Befehl | Erklärung | Beispiel |
---|---|---|
DISTINCT | Duplikate aus der Ergebnismenge entfernen | SELECT DISTINCT Country FROM Customers; |
LIMIT | Die Ergebnismenge auf die obersten Ergebnisse beschränken | SELECT * FROM Customers LIMIT 5; |
GROUP BY | Ergebnismenge nach einem gemeinsamen Merkmal gruppieren | SELECT CustomerName, Country FROM Customers GROUP BY Country; |
ORDER BY | Ergebnismenge nach einem Merkmal sortieren | SELECT CustomerName, Email FROM Customers SORT BY CustomerName; |
ASC | Aufsteigende („ascending“) Sortierung verwenden | SELECT DISTINCT Country FROM Customers SORT BY Country ASC; |
DESC | Absteigende („descending“) Sortierung verwenden | SELECT DISTINCT Country FROM Customers SORT BY Country DESC; |
SQL-Befehle zum Verknüpfen von Abfragen
Neben dem Verfeinern der Ergebnismenge ist es möglich, Abfragen über mehrere Tabellen hinweg zu verknüpfen. Erinnern wir uns: Ein SELECT-SQL-Befehl liefert eine Ergebnismenge zurück. Konsequenterweise enthält SQL solche Befehle, die das Zusammenführen zweier Ergebnismengen nach den Regeln der relationalen Mengenlehre erlauben.
Um die SQL-Befehle zum Verknüpfen von Abfragen im Detail zu erklären, sind komplexere Beispiele mit mehreren definierten Tabellen notwendig. Darum verzichten wir hier auf den Beispiel-Code. Schauen wir uns die wichtigsten Mengenoperationen an:
Um die SQL-Befehle zum Verknüpfen von Abfragen im Detail zu erklären, sind komplexere Beispiele mit mehreren definierten Tabellen notwendig. Darum verzichten wir hier auf den Beispiel-Code. Schauen wir uns die wichtigsten Mengenoperationen an:
SQL-Befehl | Erklärung |
---|---|
UNION | Zwei Ergebnismengen vereinigen; die Ergebnismengen müssen über Spalten desselben Typs in derselben Reihenfolge verfügen. Ihre Zeilen werden zusammengefügt. |
INNER JOIN | Zwei Ergebnismengen nach einem gemeinsamen Kriterium filtern |
LEFT JOIN | Die Ergebnismenge der linken Abfrage mit passenden Ergebnissen der rechten Abfrage verknüpfen; nicht passende Felder werden auf NULL gesetzt. |
RIGHT JOIN | Die Ergebnismenge der rechten Abfrage mit passenden Ergebnissen der linken Abfrage verknüpfen; nicht passende Felder werden auf NULL gesetzt. |
FULL OUTER JOIN | Kombination eines LEFT JOIN und RIGHT JOIN |
SQL-Befehle zum Speichern und Wiederholen von Abfragen
Wie wir gesehen haben, fallen SQL-Abfragen u. U. recht komplex aus. In der Praxis ist es oft sinnvoll, Abfragen wiederholt auszuführen. Prinzipiell ist es möglich, die entsprechenden SQL-Befehle als Code zu speichern und bei Bedarf einzuspielen. Jedoch ist dies wenig effizient. Glücklicherweise gibt es spezielle SQL-Befehle, mit denen sich komplexe Abfragen als Einheit direkt im Datenbank-Managementsystem (DBMS) speichern lassen.
Betrachten wir zunächst die Sichten, auf Englisch „Views“ genannt. Eine Datenbank-Sicht entspricht in etwa einer gespeicherten Abfrage. Erinnern wir uns: Eine Abfrage liefert als Ergebnis eine tabellarische Ergebnismenge zurück. Anstatt diese wieder zu verwerfen, speichern wir sie als Sicht. Konsequenterweise werden Sichten auch als „virtuelle Tabellen“ bezeichnet. In der Regel besteht auf eine Sicht ausschließlich lesender Zugriff. Zum Arbeiten mit Sichten gibt es eine Handvoll SQL-Befehle:
Betrachten wir zunächst die Sichten, auf Englisch „Views“ genannt. Eine Datenbank-Sicht entspricht in etwa einer gespeicherten Abfrage. Erinnern wir uns: Eine Abfrage liefert als Ergebnis eine tabellarische Ergebnismenge zurück. Anstatt diese wieder zu verwerfen, speichern wir sie als Sicht. Konsequenterweise werden Sichten auch als „virtuelle Tabellen“ bezeichnet. In der Regel besteht auf eine Sicht ausschließ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 GermanCustomers AS SELECT CustomerName, Email FROM Customers WHERE Country = "DE"; |
ALTER VIEW | Eine existierende Sicht verändern | ALTER VIEW GermanCustomers AS SELECT * FROM Customers WHERE Country = "DE"; |
CREATE OR REPLACE VIEW | Eine neue Sicht erzeugen, bzw. eine ggf. existierende Sicht ersetzen | CREATE OR REPLACE VIEW GermanCustomers AS SELECT * FROM Customers WHERE Country = "DE"; |
SHOW CREATE VIEW | Den zum Erzeugen einer Sicht genutzten SQL-Befehl anzeigen | SHOW CREATE VIEW GermanCustomers; |
DROP VIEW | Eine existierende Sicht löschen | DROP VIEW GermanCustomers; |
Neben den Datenbank-Sichten gibt es die „gespeicherte Prozeduren“ (Stored Procedures). Gespeicherte Prozeduren dienen zum wiederholten Ausführen von Abfragen und sind komplexer als Sichten. Sie können Parameter entgegennehmen und damit Abfragen dynamisch zusammenbauen. Ferner ist es möglich, mit einer gespeicherten Prozedur schreibend auf die zugrundeliegenden Daten zuzugreifen. Wir geben einen Überblick der relevanten SQL-Befehle, wobei wir aus Platzgründen auf Beispiele verzichten:
SQL-Befehl | Erklärung |
---|---|
CREATE PROCEDURE | Eine neue Prozedur erzeugen |
ALTER PROCEDURE | Eine existierende Prozedur verändern |
CREATE OR REPLACE PROCEDURE | Eine neue Prozedur erzeugen, bzw. eine ggf. existierende Prozedur ersetzen |
DROP PROCEDURE | Eine existierende Prozedur löschen |
CALL | Eine gespeicherte Prozedur ausführen |
Der Einsatz von gespeicherten Prozeduren verlagert Code vom Client auf den Server. Die dabei erzielte Trennung der Belange führt zu höherer Sicherheit und besserer Performanz. Nachteilig wirkt sich ggf. aus, dass die innerhalb einer gespeicherten Prozedur enthaltene „Business Logic“ außerhalb des Versionskontrollsystems liegt. Da gespeicherte Prozeduren stark abhängig vom umgebenden DBMS sind, führt ein Anbieterwechsel im schlimmsten Fall zum Verlust der Funktionalität.
Stored Procedures sind nicht zu verwechseln mit den bekannten Prepared Statements. Beide Mechanismen dienen dazu, die Sicherheit zu erhöhen. Jedoch werden Prepared Statements auf Seite der Client-Anwendung definiert.
SQL-Befehle für Zugriffskontrolle
Ein einzelner Datenbankserver enthält ggf. mehrere Datenbanken. Um diese unabhängig voneinander zu verwalten, kommen Mechanismen für Zugriffskontrolle zum Einsatz. So lässt sich für einzelne Nutzer festlegen, mit welchen Rechten diese auf Datenbanken und darin enthaltene Tabellen zugreifen dürfen. Ferner lassen sich Usergruppen definieren und ihnen Nutzer und Nutzerinnen zuweisen. Es kommen zwei hauptsächliche SQL-Befehle zum Tragen:
SQL-Befehl | Erklärung | Beispiel |
---|---|---|
GRANT | Rechte vergeben | GRANT ALL ON SomeDB.* TO 'john'@'localhost'; |
REVOKE | Rechte entziehen | REVOKE INSERT ON *.* FROM 'john'@'localhost'; |
SQL-Befehle für Transaktionskontrolle
Einer der Vorteile bei der Nutzung relationaler Datenbank-Managementsysteme (RDBMS) ist die Garantie der „ACID“-Eigenschaften. Kurz gesagt wird so sichergestellt, dass die Daten immer in einem sauberen und wohldefinierten Zustand vorliegen. Auf technischer Ebene kommen sogenannte Transaktionen zum Einsatz, die als „atomic operation“ („atomare Operation“) unteilbar sind. Eine Transaktion wird entweder vollständig und ohne Fehler beendet, oder es ist ein Fehler aufgetreten. Dann werden die einzelnen Schritte rückgängig gemacht. Schauen wir uns die SQL-Befehle für Transaktionskontrolle an:
SQL-Befehl | Erklärung | Beispiel |
---|---|---|
START TRANSACTION | Den Beginn einer Transaktion markieren | START TRANSACTION; |
COMMIT | Eine begonnene Transaktion erfolgreich beenden | START TRANSACTION; TRUNCATE TABLE Customers; COMMIT; |
ROLLBACK | Eine begonnene Transaktion abbrechen und den Datenbestand zum Ausgangszustand zurückführen | START TRANSACTION; TRUNCATE TABLE Customers; ROLLBACK; |
SAVEPOINT | Innerhalb einer Transaktion einen benannten Speicherpunkt anlegen | START TRANSACTION; SAVEPOINT BeforeAddData; |
ROLLBACK TO | Zu einem benannten Speicherpunkt zurückspringen | ROLLBACK TO BeforeAddData; |
Die erwähnten ACID-Eigenschaften in der Übersicht:
ACID-Eigenschaft | Deutsche Entsprechung | Erklärung |
---|---|---|
Atomicity | Atomarität | Transaktionen sind „unteilbar“. Sie werden entweder ganz oder gar nicht ausgeführt. Wird eine atomare Transaktion abgebrochen, ist das System im Zustand vor dem Beginn der Transaktion. |
Consistency | Konsistenz | Nach Ausführung einer Transaktion liegt der Datenbestand wieder in einer konsistenten Form vor. |
Isolation | Isolation | Gleichzeitig ausgeführte Transaktionen dürfen sich nicht gegenseitig beeinflussen. |
Durability | Dauerhaftigkeit | Die Auswirkungen einer Transaktion müssen im Datenbestand dauerhaft bestehen bleiben. Die Effekte einer erfolgreichen Transaktion dürfen nicht verloren gehen, wenn z. B. das RDBMS abstürzt. |
Heften Sie den Digital Guide an Ihre Windows-Taskleiste an. So haben Sie unsere Artikel als Nachschlagewerk immer zur Hand. Wie Sie dabei vorgehen, erklären wir hier: