Ihre Daten sind nur dann gut, wenn Sie ihnen vertrauen können. Verwenden Sie Datenbankeinschränkungen, um sicherzustellen, dass sie genau und zuverlässig sind und Ihr Datenmodell nicht beschädigen.
Die zentralen Thesen
- Verwenden Sie SQL-Einschränkungen, um die Datenintegrität aufrechtzuerhalten und die Einheitlichkeit in Ihrer Datenbank sicherzustellen. Die NOT NULL-Einschränkung zwingt Spalten dazu, NULL-Werte abzulehnen.
- Implementieren Sie Primärschlüsseleinschränkungen, um die Eindeutigkeit der Werte in einer Spalte oder einem Spaltensatz sicherzustellen. Dies verhindert doppelte Datensätze in einer Datenbanktabelle.
- Fremdschlüsseleinschränkungen stellen Beziehungen zwischen Tabellen her und verhindern Aktionen, die die Verknüpfungen zwischen ihnen zerstören würden. Sie stellen sicher, dass ein Datensatz in der untergeordneten Tabelle auf die übergeordnete Tabelle verweist.
Eine Datenbank ist für viele Anwendungen unerlässlich, aber es kann chaotisch werden, wenn Sie keine Richtlinien zum Speichern und Verarbeiten von Daten haben.
SQL-Einschränkungen legen Regeln zum Speichern von Daten in einer Tabelle fest. Wenn Sie Einschränkungen festlegen, gibt die Datenbank einen Fehler aus, wenn Sie versuchen, Daten zu speichern, die gegen diese Regeln verstoßen. Einschränkungen tragen dazu bei, die Datenintegrität aufrechtzuerhalten und die Einheitlichkeit in Ihrer Datenbank sicherzustellen.
Es gibt verschiedene Arten von SQL-Einschränkungen, die Sie verwenden können. Hier sind einige der nützlichsten.
1. NOT NULL-Einschränkung
Datenbankspalten akzeptieren standardmäßig Daten mit NULL-Werten. NULL bedeutet im Wesentlichen, dass kein Wert vorhanden ist. Die NOT NULL-Einschränkung zwingt eine Spalte, NULL-Werte abzulehnen.
Diese Einschränkung stellt sicher, dass jede Spalte einen Wert enthalten muss. Sie können der Datenbank keinen Datensatz hinzufügen, ohne Daten für Spalten mit der NOT NULL-Einschränkung anzugeben.
Nehmen Sie das Beispiel von a Kunden Tisch. Es gibt einige notwendige Details zu jedem Kunden, die Sie protokollieren möchten, wie zum Beispiel seinen Namen. Fügen Sie den Pflichtfeldern die Einschränkung NOT NULL hinzu, um sicherzustellen, dass Kunden diese Informationen angeben.
Hier ist ein Beispiel, das zeigt, wie Sie die NOT NULL-Einschränkung in a verwenden können PostgreSQL-Datenbank:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);
Wenn Sie versuchen, einen Kundendatensatz ohne das einzufügen Alter Feld, die Datenbank akzeptiert es ohne Fehler:
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);
Wenn Sie jedoch versuchen, einen Datensatz ohne das einzufügen Vorname Feld wird die Datenbank es mit einer Fehlermeldung ablehnen:
ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).
2. PRIMARY KEY-Einschränkung
Ein SCHLÜSSEL ist ein eindeutiges Attribut, das auf eine Spalte oder ein Feld festgelegt ist und das Tupel (oder einen Datensatz) einer Tabelle in Datenbanksystemen identifiziert. Eine PRIMARY KEY-Einschränkung stellt die Eindeutigkeit von Werten in einer Spalte oder einem Spaltensatz sicher. Es fungiert als eindeutiger Bezeichner in einer Zeile und verhindert doppelte Datensätze in einer Datenbanktabelle.
Primärschlüssel enthalten eindeutige Werte und dürfen keine NULL-Werte enthalten. Jede SQL-Datenbanktabelle darf nur einen Primärschlüssel haben. Der PRIMÄRSCHLÜSSEL kann ein- oder mehrspaltig sein.
Sie erstellen beispielsweise eine Datenbank mit Kundendatensätzen. Jeder Kunde muss seine ID-Nummern anders eingeben als alle anderen. Sie können die Primärschlüsseleinschränkung anwenden, um sicherzustellen, dass keiner Ihrer Kunden dieselbe ID-Nummer hat.
Der folgende Code zeigt, wie Sie eine Primärschlüsseleinschränkung in einer MySQL-Datenbank einführen können:
CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
Die Datenbank akzeptiert diesen Wert nicht, wenn ein Benutzer einen anderen Datensatz mit einer ähnlichen ID eingibt. Stattdessen wird ein Fehler ausgegeben, der auf eine Duplizierung hinweist. Im folgenden Beispiel versucht der Benutzer, zwei Datensätze mit derselben ID einzufügen:
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );
INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );
Die Datenbank zeigt eine Fehlermeldung an:
Duplicate entry '1' for key 'PRIMARY'
Wenn Sie jedoch die ID des zweiten Kunden ändern, übernimmt die Datenbank den Eintrag. Daher stellt der Primärschlüssel sicher, dass in Ihren Kundendatensätzen keine doppelten IDs vorhanden sind.
3. Fremdschlüssel-Einschränkung
Fremde Schlüssel Beziehungen zwischen zwei Tabellen herstellen. Sie können einem Feld/einer Spalte in einer Tabelle einen Fremdschlüssel hinzufügen, der auf den Primärschlüssel in einer anderen Tabelle verweist.
Die Tabelle mit dem Primärschlüssel ist die übergeordnete Tabelle, während die Tabelle mit dem Fremdschlüssel die untergeordnete Tabelle ist. Ohne einen Verweis auf die übergeordnete Tabelle kann dann kein Datensatz in der untergeordneten Tabelle existieren.
Die Fremdschlüsseleinschränkung verhindert Aktionen, die Verknüpfungen zwischen Tabellen zerstören würden. Das ist zum Beispiel nicht möglich FALLEN eine Tabelle, wenn sie über einen Fremdschlüssel mit einer anderen verknüpft ist. Sie müssen beide Tabellen gleichzeitig löschen.
Im Gegensatz zu einem Primärschlüssel können Sie einen Fremdschlüssel duplizieren und mehr als einen in einer einzelnen Tabelle haben. Es können auch Fremdschlüsselwerte sein NULL. Im folgenden Beispiel müssen Sie die verwenden Kundennummer um eine Bestellung zu erstellen.
CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');
INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');
Wenn Sie versuchen, eine Bestellung ohne bestehende zu erstellen Kundennummer, die Datenbank zeigt eine Fehlermeldung:
Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))
4. Einzigartige Beschränkung
Diese Einschränkung stellt sicher, dass keine zwei Zeilen dieselben Werte für eine bestimmte Spalte haben können. Wie Primärschlüssel wahrt eine Eindeutigkeitsbeschränkung die Datenintegrität und verhindert doppelte Einträge. Wenn Sie mit einer schlecht gestalteten Datenbank ohne die UNIQUE-Einschränkung arbeiten, muss dies möglicherweise der Fall sein Suchen und löschen Sie die Duplikate.
Im Gegensatz zu Primärschlüsseln können Sie viele UNIQUE-Einschränkungen für eine Tabelle haben. Zum Beispiel beim Erstellen eines Kunden In der Tabelle möchten Sie möglicherweise eindeutige IDs und Telefonnummern haben. Um eine solche Einschränkung mithilfe des MySQL-Servers hinzuzufügen, verwenden Sie diese Syntax:
CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Wenn Sie Datensätze mit derselben Mobiltelefonnummer in die Datenbank einfügen, wird eine Fehlermeldung angezeigt.
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );
INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );
Die Fehlermeldung wird etwa so aussehen:
Duplicate entry '254000000' for key 'Mobile_No'
Diese EINZIGARTIGE Einschränkung stellt sicher, dass die Datenbank keine Kunden mit denselben IDs oder Mobiltelefonnummern enthält.
5. CHECK-Einschränkung
Die CHECK-Einschränkung begrenzt den in eine Spalte eingegebenen Wertebereich. Durch das Hinzufügen einer CHECK-Einschränkung für eine Spalte werden nur angegebene Werte für diese Spalte zugelassen. Es erzwingt die Datenintegrität, indem es sicherstellt, dass ein Benutzer nur gültige Daten in eine Tabelle einfügt.
Die CHECK-Einschränkung muss für jede angegebene Zeile oder jeden angegebenen Tabelleneintrag einen Wert als TRUE oder UNKNOWN auswerten. Wenn der Wert FALSE ist, zeigt die Datenbank eine Fehlermeldung an.
Beispielsweise möchten Sie in der Tabelle „Kunden“ möglicherweise nur Kunden bedienen, die älter als 18 Jahre sind. Sie können eine CHECK-Einschränkung hinzufügen, um sicherzustellen, dass Sie keine minderjährigen Kunden bedienen. Sie können die Einschränkung in einer PostgreSQL-Datenbank hinzufügen, wie im folgenden Code gezeigt:
CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);
Wenn Sie nun versuchen, das Alter eines Kunden unter 18 Jahren einzugeben:
INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );
Die Datenbank zeigt eine Fehlermeldung wie diese an:
ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)
So fügen Sie SQL-Einschränkungen zu Datenbanken hinzu und entfernen sie
SQL-Einschränkungen sind nicht in Stein gemeißelt. Mit der ALTER TABLE-Anweisung können Sie Einschränkungen für vorhandene Tabellen hinzufügen oder entfernen. Mit der ALTER-Anweisung können Sie mit Einschränkungen arbeiten, die Ihren Datenanforderungen entsprechen.
Es gibt viele weitere SQL-Einschränkungen, die Sie lernen können, um eine Datenbank nach Ihren Wünschen zu entwerfen. Sie können mit den in diesem Artikel aufgeführten beginnen.