SQLShack (Deutsch)

0 Comments

Im vorherigen Artikel Häufig verwendete SQL Server-Einschränkungen: NICHT NULL, EINDEUTIG und PRIMÄRSCHLÜSSEL, beschrieben wir im Detail, die ersten drei Arten der SQL Server-Einschränkungen; NICHT NULL, EINDEUTIG und PRIMÄRSCHLÜSSEL. In diesem Artikel werden wir die anderen drei Einschränkungen diskutieren; FREMDSCHLÜSSEL, CHECK und DEFAULT, indem wir jede kurz beschreiben und praktische Beispiele liefern.,

Fremdschlüsseleinschränkung

Ein Fremdschlüssel ist ein Datenbankschlüssel, der verwendet wird, um zwei Tabellen miteinander zu verknüpfen. Die Fremdschlüsseleinschränkung identifiziert die Beziehungen zwischen den Datenbanktabellen, indem auf eine Spalte oder einen Satz von Spalten in der untergeordneten Tabelle, die den Fremdschlüssel enthält, auf die Primärschlüsselspalte oder den Spaltensatz in der übergeordneten Tabelle verwiesen wird.

Die Beziehung zwischen den untergeordneten und den übergeordneten Tabellen wird beibehalten, indem die Fremdschlüsselwerte der untergeordneten Tabelle im PRIMÄRSCHLÜSSEL der referenzierten übergeordneten Tabelle überprüft werden, bevor diese Werte in die untergeordnete Tabelle eingefügt werden., Auf diese Weise erzwingt die Fremdschlüsseleinschränkung in der untergeordneten Tabelle, die auf den PRIMÄRSCHLÜSSEL in der übergeordneten Tabelle verweist, die datenbankreferenzielle Integrität. Die referenzielle Integrität stellt sicher, dass die Beziehung zwischen den Datenbanktabellen während des Dateneinfügevorgangs erhalten bleibt. Denken Sie daran, dass die Primärschlüsseleinschränkung garantiert, dass keine NULL-oder doppelten Werte für die ausgewählte Spalte oder Spalten in diese Tabelle eingefügt werden, wodurch die Entitätsintegrität für diese Tabelle erzwungen wird., Die durch den PRIMÄRSCHLÜSSEL erzwungene Entitätsintegrität und die durch den FREMDSCHLÜSSEL erzwungene referenzielle Integrität bilden zusammen die Schlüsselintegrität.

Die Fremdschlüsseleinschränkung unterscheidet sich von der Primärschlüsseleinschränkung dadurch, dass Sie nur einen PRIMÄRSCHLÜSSEL pro Tabelle erstellen können, mit der Möglichkeit, mehrere Fremdschlüsseleinschränkungen in jeder Tabelle zu erstellen, indem Sie auf mehrere übergeordnete Tabellen verweisen. Ein weiterer Unterschied besteht darin, dass der FREMDSCHLÜSSEL das Einfügen von Nullwerten zulässt, wenn für diesen Schlüssel keine NOT NULL-Einschränkung definiert ist, der PRIMÄRSCHLÜSSEL jedoch keine Nullen akzeptiert.,

Mit der Fremdschlüsseleinschränkung können Sie auch mithilfe der Klauseln ON UPDATE und ON DELETE steuern, welche Aktion ausgeführt wird, wenn der referenzierte Wert in der übergeordneten Tabelle aktualisiert oder gelöscht wird. Die unterstützten Aktionen, die beim Löschen oder Aktualisieren der Werte der übergeordneten Tabelle ausgeführt werden können, umfassen:

  • KEINE AKTION: Wenn die Klauseln ON UPDATE oder ON DELETE auf KEINE AKTION festgelegt sind, schlägt die ausgeführte Aktualisierungs-oder Löschoperation in der übergeordneten Tabelle fehl mit einem Fehler.,
  • CASCADE: Wenn Sie die ON UPDATE-oder ON DELETE-Klauseln auf CASCADE setzen, wird dieselbe Aktion, die für die referenzierten Werte der übergeordneten Tabelle ausgeführt wird, in den zugehörigen Werten in der untergeordneten Tabelle wiedergegeben. Wenn beispielsweise der referenzierte Wert in der übergeordneten Tabelle gelöscht wird, werden auch alle zugehörigen Zeilen in der untergeordneten Tabelle gelöscht.
  • SET NULL: Mit dieser ON UPDATE und ON DELETE Klauseln Option, wenn die referenzierten Werte in der übergeordneten Tabelle gelöscht oder geändert werden, werden alle zugehörigen Werte in der untergeordneten Tabelle auf NULL Wert gesetzt.,
  • STANDARD FESTLEGEN: Mit der Option STANDARD FESTLEGEN der Klauseln ON UPDATE und ON DELETE wird festgelegt, dass die zugehörigen Werte in der untergeordneten Tabelle mit Fremdschlüsselspalten auf den Standardwert gesetzt werden, wenn die referenzierten Werte in der übergeordneten Tabelle aktualisiert oder gelöscht werden.

Sie können die Fremdschlüsseleinschränkung hinzufügen, während Sie die Spalte mit der Anweisung CREATE TABLE T-SQL definieren, oder sie nach der Tabellenerstellung mit der Anweisung ALTER TABLE T-SQL hinzufügen. Wir werden zwei neue Tabellen erstellen, um die Fremdschlüsseleinschränkungsfunktionalität zu verstehen., Die erste Tabelle fungiert als übergeordnete Tabelle, wobei die ID-Spalte als Primärschlüsselspalte definiert ist. Die zweite Tabelle fungiert als untergeordnete Tabelle, wobei die ID-Spalte als Fremdschlüsselspalte definiert ist, die auf die ID-Spalte in der übergeordneten Tabelle verweist.,> ID INT PRIMARY KEY,

Name VARCHAR(50) NULL
)
GO
CREATE TABLE ConstraintDemoChild
(
CID INT PRIMARY KEY,
ID INT FOREIGN KEY REFERENCES ConstraintDemoParent(ID)
)

Nach dem Erstellen der beiden Tabellen fügen wir drei Datensätze in die übergeordnete Tabelle und zwei Datensätze in die untergeordnete Tabelle mit den folgenden Einfügeanweisungen ein:

Das Ergebnis zeigt Ihnen, dass die drei Datensätze erfolgreich in die übergeordnete Tabelle eingefügt wurden., Der erste Datensatz, den wir in die untergeordnete Tabelle eingefügt haben, wird fehlerfrei eingefügt, da der ID-Wert 1 bereits in der übergeordneten Tabelle vorhanden ist.,da der ID-Wert von 4 in der übergeordneten Tabelle nicht vorhanden ist und Sie aufgrund der Fremdschlüsseleinschränkung keinen ID-Wert in die untergeordnete Tabelle einfügen können, der in der übergeordneten Tabelle nicht vorhanden ist:

Wenn Sie den Inhalt der übergeordneten und untergeordneten Tabellen überprüfen, sehen Sie, dass nur ein Datensatz in die untergeordnete Tabelle eingefügt wird, wie Sie unten sehen können:

Da wir den Fremdschlüsseleinschränkungsnamen beim Erstellen der untergeordneten Tabelle nicht erwähnt haben, weist SQL Server ihm einen eindeutigen Namen zu, den wir aus dem INFORMATION_SCHEMA abrufen können.,TABLE_CONSTRAINTS system view using the following query:

1
2
3
4
5
6
7
8

SELECT CONSTRAINT_NAME,
TABLE_SCHEMA ,
TABLE_NAME,
CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.,onstraintDemoChild
ADD CONSTRAINT FK__ConstraintDe__ID
FOREIGN KEY (ID) REFERENCES ConstraintDemoParent(ID);

Die Operation schlägt fehl, da der ID-Wert von 4 in der übergeordneten Tabelle nicht vorhanden ist und die referenzielle Integrität zwischen dem untergeordneten und übergeordnete Tabellen, wie in der folgenden Fehlermeldung zu sehen:

Um die Fremdschlüsseleinschränkung in der untergeordneten Tabelle erstellen zu können, müssen wir diesen Konflikt zuerst beseitigen, indem wir diesen Datensatz löschen oder aktualisieren., Here we will try to modify the ID value with the following UPDATE command:

1
2
3

UPDATE ., SET ID =2 WHERE ID = 4

Jetzt ist der FOREIGN KEY-Einschränkung erstellt wird erfolgreich ohne Fehler wie unten gezeigt:

EINE FOREIGN KEY-Einschränkung definiert werden können, mit der Hilfe des SQL Server Management Studio tool. Klicken Sie mit der rechten Maustaste auf die gewünschte Tabelle und wählen Sie die Option Design.,> Im angezeigten Fenster können Sie ganz einfach den Namen der Fremdschlüsseleinschränkung, die Tabellen und Spalten, die an dieser Beziehung teilnehmen, angeben, indem Sie auf die Tabellen-und Spaltenspezifikation klicken, wenn die Überprüfung der vorhandenen Daten erforderlich ist, und schließlich die Aktion, die ausgeführt wird, wenn der referenzierte Datensatz in der übergeordneten Tabelle gelöscht oder geändert wird, wie unten gezeigt:

CHECK Constraint

Eine Prüfeinschränkung wird für eine Spalte oder einen Satz von Spalten definiert, wertebereich, der mithilfe einer vordefinierten Bedingung in diese Spalten eingefügt werden kann., Die CHECK-Einschränkung wird ausgeführt, um die eingefügten oder geänderten Werte auszuwerten, wobei der Wert, der die Bedingung erfüllt, in die Tabelle eingefügt wird, andernfalls wird die Insert-Operation verworfen. Es ist erlaubt, mehrere Prüfbeschränkungen für dieselbe Spalte anzugeben.

Das Definieren der Prüfeinschränkungsbedingung ähnelt in gewisser Weise dem Schreiben der WHERE Klausel einer Abfrage unter Verwendung der verschiedenen Vergleichsoperatoren wie AND, OR, BETWEEN, IN, LIKE und IST NULL, um seinen Booleschen Ausdruck zu schreiben, der TRUE, FALSE oder UNKNOWN zurückgibt., Die CHECK-Einschränkung gibt einen UNBEKANNTEN Wert zurück, wenn ein Nullwert in der Bedingung vorhanden ist. Die CHECK-Einschränkung wird hauptsächlich verwendet, um die Domänenintegrität zu erzwingen, indem die eingefügten Werte auf diejenigen beschränkt werden, die den definierten Werten, Bereichen oder Formatregeln folgen.

Lassen Sie uns eine neue einfache Tabelle mit drei Spalten erstellen.die ID-Spalte, die als PRIMÄRSCHLÜSSEL dieser Tabelle, Name und Gehalt betrachtet wird. In der Spalte Gehalt wird eine Prüfeinschränkung definiert, um sicherzustellen, dass keine Null-oder negativen Werte in diese Spalte eingefügt werden.,v>6

7
8
9
CREATE TABLE ConstraintDemo4
(
ID INT PRIMARY KEY,
Name VARCHAR(50) NULL,
Salary INT CHECK (Salary>0)
)
GO

Wenn Sie die folgenden drei INSERT-Anweisungen ausführen:

Aus dem generierten Ergebnis geht hervor, dass der erste Datensatz fehlerfrei eingefügt wird, da der angegebene Einfügewert die Prüfbedingung erfüllt.,rovided Gehalt-Werte entsprechen nicht den CHECK-Einschränkung Zustand durch das einfügen von null-und negativ-Gehalt Werte, wie Sie sehen können in die folgende Fehlermeldung:

Überprüfen Sie die die Daten der Tabelle zeigt, dass nur die erste Zeile, die verging, der CHECK-constraint-Bedingung wird in die Tabelle eingefügt, wie unten:

Wir früher in diesem Artikel erwähnt, dass die CHECK-Einschränkung ermöglicht das einfügen von NULL-Werten, wenn die beteiligten Spalten, die NULL zulassen, und die NULL-Werte werden bewertet als UNBEKANNT ist, ohne daß irgendwelche Fehler., Dies geht aus dem folgenden Datensatz hervor, der erfolgreich eingefügt wurde, obwohl der angegebene Wert der Gehaltsspalte NULL ist:

Wenn Sie die CHECK constraint-Definition in der vorherigen CREATE TABLE-Anweisung überprüfen, werden Sie feststellen, dass der Name der definierten Einschränkung nicht erwähnt wurde. In diesem Fall weist SQL Server einen eindeutigen Namen für diese Einschränkung zu, der durch Abfragen des INFORMATION_SCHEMA angezeigt werden kann.TABLE_CONSTRAINTS Systemansicht für die ConstraintDemo4 Tabelle., Das Ergebnis wird wie folgt angezeigt:

Die Prüfeinschränkung kann mit der Anweisung ALTER TABLE T-SQL gelöscht werden.,onstraint now, with the following ALTER DATABASE … ADD CONSTRAINT T-SQL statement:

1
2
3
4
5

ALTER TABLE ConstraintDemo4
ADD CONSTRAINT CK__Constrain__Salar
CHECK (Salary>0);

Adding the CHECK constraint will fail., Dies ist auf die Tatsache zurückzuführen, dass während der SQL Server die bereits vorhandenen Daten auf die Prüfeinschränkungsbedingung überprüft, ein oder mehrere Werte gefunden werden, die die Einschränkungsbedingung nicht erfüllen, wie Sie in der folgenden Fehlermeldung sehen können:

Um die Prüfeinschränkung erneut definieren zu können, sollten wir die Daten ändern oder löschen, die die Erstellung der Einschränkung verhindern.,de484761″>

1
2
3
UPDATE ConstraintDemo4 SET IN =300 WHERE ID IN (2,3)

Nun kann die Prüfeinschränkung ohne Probleme definiert werden, wie unten gezeigt:

Mit SQL Server können Sie die Prüfeinschränkung für Sonderfälle deaktivieren, z. B. das Einfügen einer großen Datenmenge, ohne sich darum zu kümmern, die Einschränkungsbedingung für Testzwecke zu erfüllen, oder aufgrund einer Änderung der Geschäftslogik., Dieser Fall gilt nur für die SCHECK – und Fremdschlüsseleinschränkungen, die Sie vorübergehend deaktivieren können.,riting den constraint Namen, wie in der T-SQL Befehl unten:

1
2
3
/div>
ALTER TABLE ConstraintDemo4 NOCHECK CONSTRAINT ALL

In der CHECK constraint Definition können Sie angeben, dass die Einschränkung erstellt wird, ohne vorhandene Zeilen zu überprüfen, aber die Einschränkung wird als nicht vertrauenswürdig markiert., kann alle Prüfeinschränkungen auf einmal mit dem folgenden Befehl T-SQL aktivieren:

1
2
3

ALTER TABLE ConstraintDemo4 CHECK CONSTRAINT ALL

Wenn Sie die vorherige CHECK-Einschränkung aktivieren, werden Sie feststellen,dass SQL Server sich nicht über die nicht aktivierten Daten beschwert, die die zwangsbedingung., In diesem Fall wird die Domänenintegrität der Daten nicht aufrechterhalten.

Um dieses Problem zu beheben, kann der Befehl DBCC CHECKCONSTRAINTS einfach verwendet werden, um die Daten zu identifizieren, die gegen die Einschränkungsbedingung in einer bestimmten Tabelle oder Einschränkung verstoßen, wobei zu berücksichtigen ist, dass dieser Befehl nicht in den Spitzenzeiten ausgeführt wird, da dies die SQL Server-Leistung beeinträchtigt, da kein Datenbank-Snapshot verwendet wird.,v id=“ff419aa09d“>

1
2
3

DBCC CHECKCONSTRAINTS(ConstraintDemo4)

Das Ergebnis zeigt Ihnen die beiden folgenden Werte, die die Bedingung CHECK constraint durchbrechen:

Mit Hilfe des SQL Server Management Studio-Tools kann auch eine CHECK constraint erstellt werden, indem Sie mit der rechten Maustaste auf die gewünschte Tabelle klicken und die Entwurfsoption auswählen., Klicken Sie im angezeigten Entwurfsfenster mit der rechten Maustaste und wählen Sie die Option Einschränkungen prüfen wie folgt aus:

Im Fenster Einschränkungen prüfen können Sie den Namen und den Ausdruck der Prüfeinschränkung angeben, und wenn die Überprüfung der vorhandenen Daten erforderlich ist, wie unten gezeigt:

Standardeinschränkung

Eine Standardeinschränkung wird verwendet, um ein Standardspaltenwert für die eingefügten Zeilen, wenn für diese Spalte in der Anweisung INSERT kein Wert angegeben ist., Die Standardeinschränkung hilft bei der Aufrechterhaltung der Domänenintegrität, indem sie korrekte Werte für die Spalte bereitstellt, falls der Benutzer keinen Wert dafür bereitstellt. Der Standardwert kann ein konstanter Wert, ein Systemfunktionswert oder NULL sein.,genannt:

1
2
3
4

ALTER TABLE ConstraintDemo5
Add Constraint DF__Einschränken__Emplo DEFAULT (GETDATE()) FÜR EmployeeDate

Auch die DEFAULT-Einschränkung definiert werden können, die mithilfe der SQL Server Management Studio, indem Sie mit der rechten Maustaste auf die gewünschte Tabelle und wählen Sie-Design-option., Wählen Sie dann die Spalte aus, für die Sie einen Standardwert zuweisen möchten, indem Sie das Fenster Spalteneigenschaften durchsuchen, wie unten gezeigt:

Ich hoffte, dass dieser Artikel und der vorherige dazu beigetragen haben, die sechs SQL Server-Einschränkungstypen zu erklären. Bitte zögern Sie nicht, Fragen in den Kommentaren unten zu stellen.,nur verwendet SQL Server Constraints: not NULL, UNIQUE-und PRIMARY KEY

Nützliche links

  • Create Check Constraints
  • Constraints
  • Standard
  • Erstellen von Fremdschlüssel-Beziehungen
  • CHECK Constraints

  • Autor
  • Recent Posts
Ahmad Yasin ist ein Microsoft-Big-Data-Ingenieur mit Kenntnissen und Erfahrungen in SQL BI, SQL Server-Datenbank-Verwaltung und Entwicklung von Feldern.,
Er ist ein Microsoft Certified Solution Expert in Data Management und Analytics, Microsoft Certified Solution Associate in SQL-Datenbankverwaltung und-entwicklung, Azure Developer Associate und Microsoft Certified Trainer.
Außerdem trägt er mit seinen SQL-Tipps in vielen Blogs bei.,
Alle Beiträge von Ahmad Yaseen anzeigen

Neueste Beiträge von Ahmad Yaseen (alle anzeigen)
  • So überwachen Sie Azure Data Factory – 15. – 8. Januar 2021


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.