Wie Verwenden von Constraints in Multitable SQL-Datenbanken

EIN Zwang

Menu

das ist eine Anwendungsregel das DBMS in SQL erzwingt. Nachdem Sie eine Datenbank definieren, können Sie enthalten Einschränkungen (wie NICHT NULL) In einer Tabellendefinition. Das DBMS stellt sicher, dass Sie nie eine Transaktion verpflichten kann, die eine Einschränkung verletzt.

Sie haben drei Arten von Beschränkungen:

  • EIN Spalten-Constraint erlegt auf einer Spalte in einer Tabelle, die eine Bedingung.

  • EIN Tabellen-Constraint legt eine bestimmte Einschränkung für eine ganze Tabelle.

  • Ein Behauptung ist eine Einschränkung, die mehr als eine Tabelle beeinflussen.

Spalteneinschränkungen

Ein Beispiel für eine Spaltenbedingung wird in der folgenden Data Definition Language (DDL) Rechnung dargestellt:

CREATE TABLE-Client (Client CHAR (30) NOT NULL, Address1 CHAR (30), Address2 CHAR (30), CityCHAR (25), StateCHAR (2), Postal CHAR (10), PhoneCHAR (13), FaxCHAR (13), Contact CHAR (30)) -

Die Aussage gilt die Einschränkung NICHT NULL zum Kundenname Spalte angibt, dass Kundenname darf keine Nullwert annehmen. EINZIGARTIG ist eine weitere Einschränkung, die Sie auf eine Spalte anwenden können. Diese Einschränkung gibt an, dass jeder Wert in der Spalte eindeutig sein müssen. Das PRÜFEN Einschränkung ist besonders nützlich, weil es jeden gültigen Ausdruck als Argument nehmen. Betrachten Sie das folgende Beispiel:

CREATE TABLE-Tests (Testname CHAR (30) NOT NULL, StandardCharge NUMERIC (6,2) CHECK (StandardCharge> = 0.0AND StandardCharge lt; = 200,0)) -

VetLab die Standardgebühr für einen Test muss immer größer als oder gleich Null ist. Und keine der Standard-Tests kostet mehr als $ 200. Das PRÜFEN Klausel verweigert alle Einträge zu akzeptieren, die außerhalb des Bereichs fallen 0 lt; = StandardCharge lt; = 200. Eine andere Möglichkeit, die gleiche Einschränkung der Angabe ist wie folgt:

CHECK (StandardCharge zwischen 0,0 und 200,0)

Tabelle Einschränkungen

Das PRIMÄRSCHLÜSSEL Einschränkung gibt an, dass die Spalte für die sie gilt ein Primärschlüssel. Diese Einschränkung gilt für den gesamten Tisch und ist äquivalent zu einer Kombination des NICHT NULL und EINZIGARTIG Spalteneinschränkungen. Sie können diese Einschränkung in eine angeben ERSTELLEN Anweisung, wie im folgenden Beispiel gezeigt:

CREATE TABLE-Client (Client CHAR (30) PRIMARY KEY, Address1 CHAR (30), Address2 CHAR (30), CityCHAR (25), die staatliche CHAR (2), Postal CHAR (10), Telefon CHAR (13), FaxCHAR (13 ), Contact CHAR (30)) -

Benannte Integritätsregeln können einige zusätzliche Funktionen haben. Nehmen wir zum Beispiel, dass Sie eine Massenbelastung von mehreren tausend potenziellen Kunden in Ihr Interessent Tisch machen wollen. Sie haben eine Datei, die meist Aussichten in den Vereinigten Staaten enthält, aber mit ein paar kanadischen Aussichten in der gesamten Datei bestreut.

Normalerweise wollen Sie Ihr Interessent Tabelle zu beschränken nur US-Perspektiven aufzunehmen, aber Sie haben nicht diese Masse Last jedes Mal, ihn zu einem der kanadischen Aufzeichnungen trifft unterbrochen werden soll. (Kanadische Postleitzahlen sind Buchstaben und Zahlen, aber US-Postleitzahlen nur Zahlen enthalten.) Sie können wählen, um nicht eine Einschränkung erzwingen auf Postleitzahl bis die Masse Last abgeschlossen ist, und dann können Sie später Randbedingungserzwingung wiederherzustellen.

Zunächst wurde Ihr Interessent Tabelle mit den folgenden erstellt CREATE TABLE Erklärung:

CREATE TABLE PROSPECT (Client CHAR (30) PRIMARY KEY, Address1 CHAR (30), Address2 CHAR (30), CityCHAR (25), die staatliche CHAR (2), Postal CHAR (10), Telefon CHAR (13), FaxCHAR (13 ), Contact CHAR (30), CONSTRAINT Zip CHECK (Postal zwischen 0 und 99999)) -

Vor dem Massenladen können Sie die Durchsetzung der ausschalten Reißverschluss Zwang:

ALTER TABLE PROSPECTCONSTRAINT Zip NICHT ENFORCED-

Nach der Massenladen abgeschlossen ist, können Sie die Durchsetzung der Einschränkung wiederherzustellen:

ALTER TABLE PROSPECTCONSTRAINT Zip ENFORCED-

An dieser Stelle können Sie alle Zeilen zu beseitigen, die nicht die Bedingung erfüllen mit:

DELETE FROM PROSPECTWHERE Postal NICHT zwischen 0 und 99999 -

Assertions

Ein Behauptung legt eine Beschränkung für mehr als eine Tabelle. Das folgende Beispiel verwendet eine Suchbedingung aus zwei Tabellen gezogen, um eine Behauptung zu erstellen:

CREATE TABLE ORDERS (Auftragsnummer INTEGER NOT NULL, Client CHAR (30), TestOrdered CHAR (30), Verkäufer CHAR (30), Orderdate DATE) -create TABLE ERGEBNISSE (ResultNumber INTEGER NOT NULL, Auftragsnummer INTEGER, ResultCHAR (50), DateOrdered DATUM , PrelimFinal CHAR (1)) -create ASSERTIONCHECK (NICHT VORHANDEN (SELECT * FROM ORDERS, RESULTSWHERE ORDERS.OrderNumber = RESULTS.OrderNumberAND Orders.OrderDate> RESULTS.DateReported)) -

Diese Behauptung stellt sicher, dass die Testergebnisse werden nicht gemeldet, bevor der Test bestellt wird.

Menü