Klauzula CONSTRAINT

ierobežojums ir līdzīgs kā indekss, bet to var izmantot arī, lai tiktu izveidota relācija ar citu tabulu.

Lai izveidotu un dzēstu ierobežojumu, ir jāizmanto klauzula CONSTRAINT priekšrakstos ALTER TABLE un CREATE TABLE. Ir divu tipu klauzulas CONSTRAINT: viena ierobežojuma izveidei atsevišķam laukam un otra ierobežojuma izveidei vairāk nekā vienam laukam.

Piezīme.: Microsoft Access datu bāzes programma neatbalsta CONSTRAINT un datu definīcijas valodu priekšrakstu lietošanu datu bāzēm, kas nav Microsoft Access datu bāzes. Tā vietā izmantojiet DAO Create metodes.

Sintakse

Ierobežojums vienam laukam:

CONSTRAINT nosaukums {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES ārējā_tabula [(ārējais_lauks_1, ārējais_lauks_2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Ierobežojums vairākiem laukiem:

CONSTRAINT nosaukums
{PRIMARY KEY (primārā_1[, primārā_2 [, ...]]) |
UNIQUE (unikāla_1[, unikāla_2 [, ...]]) |
NOT NULL (nav_null_1[, nav_null_2 [, ...]]) |
FOREIGN KEY [NO INDEX] (atsauce_1[, atsauce_2 [, ...]]) REFERENCES ārējā_tabula [(ārējais_lauks_1 [, ārējais_lauks_2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Klauzulai CONSTRAINT ir šādas daļas:

Daļa

Apraksts

nosaukums

Izveidojamā ierobežojuma nosaukums.

primārā_1, primārā_2

Tā lauka vai lauku nosaukums, kas jānorāda kā primārā atslēga.

unikāla_1, unikāla_2

Tā lauka vai lauku nosaukums, kas jānorāda kā unikāla atslēga.

nav_null_1, nav_null_2

Tā lauka vai lauku nosaukums, kuru ierobežojums ir izmantot tikai tādas vērtības, kas nav Null.

atsauce_1, atsauce_2

Tā lauka vai lauku nosaukums, kas ir ārējā atslēga un norāda uz laukiem citā tabulā.

ārējā_tabula

Tā vienuma ārējā tabula nosaukums, kas satur argumenta ārējais_lauks norādīto lauku vai laukus.

ārējais_lauks_1, ārējais_lauks_2

Lauka vai lauku nosaukums tabulā ārējā_tabula, ko norāda atsauce_1, atsauce_2. Šo klauzulu var izlaist, ja atsauces lauks ir tabulas ārējā_tabula primārā atslēga.


Piezīmes

Sintakse izmantojama viena lauka ierobežojumam priekšraksta ALTER TABLE vai CREATE TABLE lauka definīcijas klauzulā uzreiz aiz lauka datu tipa specifikācijas.

Sintakse izmantojama vairāku lauku ierobežojumam, ja rezervētais vārds CONSTRAINT tiek lietots ārpus lauka definīcijas klauzulas priekšrakstā ALTER TABLE vai CREATE TABLE.

Izmantojot CONSTRAINT, laukam var norādīt kāda tālāk norādītā tipa ierobežojumu.

  • Rezervēto vārdu UNIQUE var izmantot, lai norādītu lauku kā unikālu atslēgu. Tas nozīmē, ka diviem tabulas ierakstiem šajā laukā nevar būt vienādas vērtības. Jebkuram laukam vai lauku sarakstam var norādīt unikālas vērtības ierobežojumu. Ja vairākiem laukiem tiek piešķirts unikālas atslēgas ierobežojums, unikālām ir jābūt visu indeksa lauku kombinētajām vērtībām, pat ja diviem vai vairāk ierakstiem ir vienādas vērtības tikai vienā laukā.

  • Rezervētos vārdus PRIMARY KEY var izmantot, lai norādītu vienu tabulas lauku vai lauku kopu kā primāro atslēgu. Visām primārās atslēgas vērtībām ir jābūt unikālām, un tās nedrīkst būt Null; tabulā var būt tikai viena primārā atslēga.

    Piezīme.: Neiestatiet ierobežojumu PRIMARY KEY tabulā, kurā jau ir primārā atslēga; pretējā gadījumā rodas kļūda.

  • Rezervētos vārdus FOREIGN KEY var izmantot, lai lauku norādītu kā ārējo atslēgu. Ja ārējās tabulas primārā atslēga sastāv no vairāk nekā viena lauka, ir jāizmanto vairāku lauku ierobežojuma definīcija, norādot visus atsauces laukus, ārējās tabulas nosaukumu un atsauces lauku nosaukumus ārējā tabulā tādā pašā secībā, kā ir norādīti atsauces lauki. Ja atsauces lauks vai lauki ir ārējās tabulas primārā atslēga, atsauces lauki nav jānorāda. Pēc noklusējuma datu bāzes programma pieņem, ka atsauces lauki ir ārējās tabulas primārā atslēga.

    Ārējās atslēgas ierobežojumi definē noteiktas darbības, kas jāveic, ja tiek mainīta atbilstoša primārās atslēgas vērtība:

  • Var norādīt darbības, kas jāveic ārējā tabulā, balstoties uz atbilstošu darbību, kas veikta primārajai atslēgai tabulā, kurai ir definēts CONSTRAINT. Piemēram, apskatīsim šo definīciju tabulai Customers (Klienti):

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Ņemiet vērā tālāk redzamo definīciju tabulai Orders (Pasūtījumi); tā definē ārējās atslēgas relāciju, veidojot atsauci uz tabulas Customers (Klienti) primāro atslēgu:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Ārējai atslēgai ir definēta gan klauzula ON UPDATE CASCADE, gan ON DELETE CASCADE. Klauzula ON UPDATE CASCADE nozīmē: ja klienta identifikators (CustId) tiek atjaunināts tabulā Customers (Klienti), šīs izmaiņas tiek kaskadētas visā tabulā Orders (Pasūtījumi). Katrs pasūtījums, kurš satur atbilstošu klienta identifikatora vērtību, tiks automātiski atjaunināts ar jauno vērtību. Klauzula ON DELETE CASCADE nozīmē: ja klients tiek izdzēsts no tabulas Customers (Klienti), tiek izdzēstas arī visas tabulas Orders (Pasūtījumi) rindas, kas satur šo klienta identifikatora vērtību.

Ņemiet vērā šo atšķirīgo tabulas Orders definīciju, izmantojot darbību SET NULL darbības CASCADE vietā:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

Klauzula ON UPDATE SET NULL nozīmē: ja klienta identifikators (CustId) tiek atjaunināts tabulā Customers (Klienti), tad arī atbilstošajām ārējām atslēgām tabulā Orders (Pasūtījumi) tiek iestatīta vērtība NULL. Līdzīgi arī klauzula ON DELETE SET NULL nozīmē: ja klients tiek izdzēsts no tabulas Customers (Klienti), tad visām atbilstošajām ārējām atslēgām tabulā Orders (Pasūtījumi) tiek automātiski iestatīta vērtība NULL.

Lai nepieļautu automātisku indeksu izveidi ārējām atslēgām, var izmantot modifikatoru NO INDEX. Šāda veida ārējās atslēgas definīcija jāizmanto tikai tādos gadījumos, kad bieži varētu veidoties rezultāta indeksa vērtību dublikāti. Ja ārējās atslēgas indeksa vērtībām bieži tiek izveidoti dublikāti, indeksa izmantošana var būt mazāk efektīva par vienkāršas tabulas skenēšanas izpildi. Šāda tipa indeksa uzturēšana, kur tiek ievietotas un dzēstas tabulas rindas, samazina veiktspēju un nesniedz nekādas priekšrocības.



Paplašiniet savas Office prasmes
Iepazīties ar apmācību
Esiet pirmais, kas saņem jaunās iespējas
Pievienoties Office Insider programmai

Vai šī informācija bija noderīga?

Paldies par jūsu atsauksmēm!

Paldies par atsauksmēm! Šķiet, ka varētu būt noderīgi sazināties ar kādu no mūsu Office atbalsta aģentiem.

×