Wie man Einschränkungen in SQL verwendet
Einführung
Einschränkungen in SQL ermöglichen es Ihnen, Beschränkungen festzulegen, welche Daten in bestimmte Spalten einer Tabelle eingefügt werden können, wenn Sie eine Datenbank entwerfen. Durch das Anwenden von Einschränkungen stellt SQL sicher, dass jeder Versuch, Daten einzufügen, die nicht den definierten Regeln entsprechen, fehlschlägt. Dies ist eine wesentliche Funktion zur Wahrung der Datenintegrität und Genauigkeit.
Verschiedene SQL-Implementierungen können Einschränkungen in SQL auf unterschiedliche Weise behandeln. Dieser Leitfaden bietet einen umfassenden Überblick darüber, wie man Einschränkungen verwaltet, mit MySQL-Beispielen, die die Syntax veranschaulichen, die in vielen Datenbankverwaltungssystemen verwendet wird.
Voraussetzungen für Einschränkungen in SQL
Um diesem Leitfaden zu folgen, benötigen Sie einen Computer, auf dem ein relationales Datenbankverwaltungssystem (RDBMS) läuft, das SQL verwendet. Die Anweisungen und Beispiele in diesem Leitfaden wurden mit der folgenden Umgebung validiert:
- Ein Server, der Ubuntu 20.04 ausführt, mit einem Nicht-Root-Benutzer mit administrativen Rechten und einer Firewall, die mit UFW konfiguriert ist, wie in unserem initialen Server-Einrichtungsleitfaden für Ubuntu 20.04 beschrieben.
- MySQL ist auf dem Server installiert und gesichert, wie in „Wie man MySQL auf Ubuntu 20.04 installiert“ beschrieben. Dieser Leitfaden wurde mit einem neu erstellten Benutzer, wie in Schritt 3 beschrieben, validiert.
Hinweis: Beachten Sie, dass viele RDBMSs ihre eigenen, einzigartigen Implementierungen von SQL verwenden. Obwohl die in diesem Tutorial beschriebenen Befehle in den meisten RDBMSs funktionieren, kann sich die genaue Syntax oder Ausgabe unterscheiden, wenn Sie sie in einem anderen System als MySQL testen.
Es ist auch hilfreich, ein allgemeines Verständnis davon zu haben, was SQL-Einschränkungen sind und wie sie funktionieren. Eine Übersicht über dieses Konzept finden Sie in unserem Artikel „Verstehen von SQL-Einschränkungen“.
Sie benötigen außerdem eine Datenbank, die Sie zum Üben der Erstellung von Tabellen mit Einschränkungen verwenden können. Wenn Sie keine solche Testdatenbank haben, lesen Sie den Abschnitt „Verbindung zu MySQL herstellen und Beispieldatenbank einrichten“ für Details zur Erstellung einer.
Verbindung herstellen und Beispieldatenbank einrichten
Falls Ihr SQL-Datenbanksystem auf einem Remote-Server läuft, melden Sie sich per SSH von Ihrem lokalen Rechner beim Server an:
ssh sammy@your_server_ip
Öffnen Sie dann die MySQL-Server-Eingabeaufforderung, indem Sie sammy durch den Namen Ihres MySQL-Benutzerkontos ersetzen:
mysql -u sammy -p
Erstellen Sie eine Datenbank namens constraintsDB:
CREATE DATABASE constraintsDB;
Wenn die Datenbank erfolgreich erstellt wurde, erhalten Sie eine Ausgabe wie diese:
Query OK, 1 row affected (0.01 sec)
Um die constraintsDB-Datenbank auszuwählen, führen Sie die folgende USE-Anweisung aus:
USE constraintsDB;
Output
Database changed
Damit sind Sie bereit, den Rest des Leitfadens zu befolgen und zu lernen, wie man Einschränkungen in SQL erstellt und verwaltet.
Tabellen mit Einschränkungen in SQL erstellen
Normalerweise definieren Sie Einschränkungen während der Erstellung einer Tabelle. Die folgende CREATE TABLE-Syntax erstellt eine Tabelle namens employeeInfo mit drei Spalten: empId, empName und empPhoneNum. Die Anweisung wendet auch eine UNIQUE-Einschränkung auf die Spalte empId an. Dies verhindert, dass Zeilen in der Tabelle identische Werte in dieser Spalte haben:
CREATE TABLE employeeInfo (
empId int UNIQUE,
empName varchar(30),
empPhoneNum int
);
Diese Anweisung definiert die UNIQUE-Einschränkung direkt nach der Spalte empId, was bedeutet, dass die Einschränkung nur auf diese Spalte angewendet wird. Wenn Sie versuchen, Daten in diese Tabelle einzufügen, überprüft das DBMS den vorhandenen Inhalt von empId, um sicherzustellen, dass alle neuen Werte in empId tatsächlich einzigartig sind. Dies wird als Spaltenebeneinschränkung bezeichnet.
Sie können die Einschränkung auch außerhalb der Spaltendefinitionen anwenden. Das folgende Beispiel erstellt eine Tabelle namens racersInfo mit drei Spalten: racerId, racerName und finish. Unter den Spaltendefinitionen wendet es auch eine CHECK-Einschränkung auf die Spalte finish an, um sicherzustellen, dass jeder Rennfahrer eine Platzierung größer oder gleich 1 hat (da kein Rennfahrer unter dem ersten Platz liegen kann):
CREATE TABLE racersInfo (
racerId int,
finish int,
racerName varchar(30),
CHECK (finish > 0)
);
Da die Einschränkung außerhalb der Definition einer einzelnen Spalte angewendet wird, müssen Sie den Namen der Spalten angeben, auf die die Einschränkung angewendet werden soll. Jedes Mal, wenn Sie eine Einschränkung außerhalb der Definition einer einzelnen Spalte angeben, wird dies als Tabellenebeneinschränkung bezeichnet. Spaltenebeneinschränkungen gelten nur für einzelne Spalten, aber Tabelleneinschränkungen wie diese können auf mehrere Spalten angewendet oder sich auf sie beziehen.
Einschränkungen in SQL benennen
Jedes Mal, wenn Sie eine Einschränkung definieren, generiert Ihr RDBMS automatisch einen Namen dafür. Dieser Name wird verwendet, um in Fehlermeldungen auf die Einschränkung zu verweisen.
Manchmal ist es jedoch für Datenbankadministratoren praktisch, ihren eigenen Namen für eine Einschränkung bereitzustellen. Automatisch generierte Einschränkungsnamen sind im Allgemeinen nicht beschreibend, daher kann es hilfreich sein, selbst einen Namen zu vergeben, um sich an den Zweck der Einschränkung zu erinnern.
Um eine Einschränkung zu benennen, setzen Sie das Schlüsselwort CONSTRAINT vor den Typ der Einschränkung, gefolgt von dem Namen Ihrer Wahl. Diese Beispielanweisung erstellt die racersInfo-Tabelle neu, benennt sie in newRacersInfo um und fügt noNegativeFinish als Namen für die CHECK-Einschränkung hinzu:
CREATE TABLE newRacersInfo (
racerId int,
finish int,
racerName varchar(30),
CONSTRAINT noNegativeFinish
CHECK (finish >= 1)
);
Hinweis: Wenn Sie keinen Namen für eine Einschränkung festlegen oder ihn später vergessen, können Sie den Namen wahrscheinlich finden, indem Sie die Informationsschemas Ihres Datenbankverwaltungssystems konsultieren. Viele moderne Datenbanksysteme und Clients bieten sogar eine Abkürzung, um interne CREATE-Anweisungen anzuzeigen, die den Namen einer Einschränkung angeben.
Hier sind Links zur offiziellen Dokumentation für die relevante Abkürzung für MySQL und PostgreSQL:
- MySQL: MySQL enthält die Anweisung SHOW CREATE TABLE, die die gesamte CREATE TABLE-Anweisung zurückgibt, die die benannte Tabelle erstellt hat:
SHOW CREATE TABLE table_name;
- PostgreSQL: Der PostgreSQL-Client psql bietet eine Reihe von Optionen, mit denen Sie Informationen über eine bestimmte Tabelle anzeigen können. Die \d-Option gibt Metadaten der benannten Tabelle zurück:
\d table_name
Einschränkungen in SQL verwalten
In MySQL können Sie Einschränkungen sowohl zu bestehenden Tabellen hinzufügen als auch sie mit ALTER TABLE-Anweisungen löschen.
Zum Beispiel fügt der folgende Befehl eine UNIQUE-Einschränkung zur empName-Spalte in der zuvor erstellten employeeInfo-Tabelle hinzu:
ALTER TABLE employeeInfo ADD UNIQUE (empName);
Wenn Sie eine Einschränkung zu einer bestehenden Tabelle hinzufügen, können Sie auch das Schlüsselwort CONSTRAINT verwenden, um einen Namen zur Identifizierung der Einschränkung bereitzustellen. Dieses Beispiel fügt eine UNIQUE-Einschränkung namens uID zur Spalte racerId in der zuvor erstellten racersInfo-Tabelle hinzu:
ALTER TABLE racersInfo ADD CONSTRAINT uID UNIQUE (racerId);
Wenn Sie vor dem Hinzufügen einer Einschränkung wie dieser Datensätze eingefügt haben, die die Bedingung der neuen Einschränkung verletzen, schlägt die ALTER TABLE-Anweisung fehl.
Um eine Einschränkung zu löschen, verwenden Sie die Syntax DROP CONSTRAINT, gefolgt von dem Namen der Einschränkung, die Sie löschen möchten. Dieser Befehl löscht die racersPK-Einschränkung, die im vorherigen Befehl erstellt wurde:
ALTER TABLE racersInfo DROP CONSTRAINT uID;
Fazit
In diesem Leitfaden haben Sie gelernt, wie man Einschränkungen zu Spalten und Tabellen hinzufügt und löscht, indem man SQL verwendet. Die Befehle sollten in den meisten Datenbanken funktionieren, aber denken Sie daran, dass jede SQL-Datenbank ihre eigene, einzigartige Sprache hat. Sie sollten die offizielle Dokumentation Ihres DBMS konsultieren, um eine vollständigere Beschreibung jedes Befehls und deren vollständige Optionssätze zu erhalten.