Клауза CONSTRAINT

Един ограничение прилича на индекс, въпреки че той може да се използва и за установяване на релация с друга таблица.

Можете да използвате клаузата CONSTRAINT в команди ALTER TABLE и CREATE TABLE за създаване или изтриване на ограничения. Има два типа клаузи CONSTRAINT: една за създаване на ограничение на едно поле и друга за създаване на ограничение на повече от едно поле.

Забележка : Ядрото на базата данни на Microsoft Access не поддържа използването на CONSTRAINT или команди на езика за дефиниране на данни с бази данни, които не са на ядрото на Microsoft Access. Вместо това използвайте методите Create (за създаване) в DAO.

Синтаксис

Ограничение на единично поле:

CONSTRAINT име {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES чуждатаблица [(външнополе1, външнополе2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Ограничение на няколко полета:

CONSTRAINT име
{PRIMARY KEY (първичен1[, първичен2 [, ...]]) |
UNIQUE (уникално1[, уникално2 [, ...]]) |
NOT NULL (непразно1[, непразно2 [, ...]]) |
FOREIGN KEY [NO INDEX] (препратка1[, препратка2 [, ...]]) REFERENCES външнатаблица [(външнатаблица1 [, външнатаблица2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Клаузата CONSTRAINT има следните части:

Част

Описание

име

Името на създаваното ограничение.

първичен1, първичен2

Името на полето или полетата, които ще бъдат обозначени от първичен ключ.

уникално1, уникално2

Името на полето или полетата, които ще бъдат обозначени като уникален ключ.

непразно1, непразно2

Името на полето или полетата, които ще бъдат ограничени до непразни стойности.

препратка1, препратка2

Името на поле на външен ключ или полета, които препращат към полета в друга таблица.

външнатаблица

Името на външна таблица, съдържащо полето или полетата, указани от външнополе.

външнополе1, външнополе2

Името на полето или полетата в външнатаблица, указани от препратка1, препратка2. Можете да пропуснете тази клауза, ако полето в препратката е първичният ключ на външнатаблица.


Забележки

Можете да използвате синтаксиса за ограничение на единично поле в клауза за дефиниция на единично поле в команди ALTER TABLE или CREATE TABLE – непосредствено след спецификацията на типа данни за полето.

Можете да използвате синтаксиса за ограничение за няколко полета винаги, когато използвате запазена дума CONSTRAINT извън клауза за дефиниция на поле в команди ALTER TABLE или CREATE TABLE.

Като използвате CONSTRAINT, можете да обозначите дадено поле като един от следните типове ограничения:

  • Можете да използвате запазената дума UNIQUE, за да обозначите дадено поле като уникален ключ. Това означава, че никои два записа в таблицата не могат да имат една и съща стойност в това поле. Можете да ограничите всяко поле или списък с полета, като уникални. Ако ограничението за няколко полета е обозначено като уникален ключ, комбинираните стойности на всички полета в индекса трябва да са уникални, дори ако два или повече записи имат една и съща стойност в само едно от полетата.

  • Можете да използвате запазените думи PRIMARY KEY, за да определите като първичен ключ единично поле или набор от полета в таблица. Всички стойности в първичния ключ трябва да са уникални и да не са Null, като може да има само един първичен ключ за таблицата.

    Забележка : Не задавайте ограничение PRIMARY KEY на таблица, която вече има първичен ключ; ако направите това, възниква грешка.

  • Можете да използвате запазените думи PRIMARY KEY, за да определите дадено поле като външен ключ. Ако първичният ключ на външна таблица се състои от повече от едно поле, трябва да използвате дефиницията за ограничение на няколко полета, съдържаща всички препращащи полета, името на външната таблица и имената на полетата във външната таблица, към които има препратка, в същия ред, в който са изброени препращащите полета. Ако тези полето или полетата, към които има препратки, са в първичния ключ на външната таблица, не се налага да указвате полетата, към която има препратка. По подразбиране ядрото на базата данни се държи както ако първичен ключ на външна таблица са полетата на препратка.

    Ограниченията на външния ключ дефинират изпълняването на определени действия, когато се промени стойността на съответния първичен ключ:

  • Можете да зададете кои действия да бъде извършени върху външната таблица въз основа на съответните действия, извършвани върху първичния ключ в таблицата, за която е дефинирана клаузата CONSTRAINT. Разгледайте например следната дефиниция за таблицата Customers:

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

Разгледайте следната дефиниция на таблицата Orders, която дефинира релация с външен ключ, препращащ към първичния ключ на таблицата Customers:

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

Двете клаузи ON UPDATE CASCADE и ON DELETE CASCADE се определят от външния ключ. Клаузата ON UPDATE CASCADE означава, че ако идентификаторът на клиент (CustId) се актуализира в таблицата Customer, актуализацията ще бъде каскадно прехвърлена през таблицата Orders. Всяка поръчка, съдържаща съответната стойност за идентификатор на клиента, ще се актуализира автоматично с новата стойност. Клаузата ON DELETE CASCADE означава, че ако от таблицата Customer бъде изтрит клиент, всички редове в таблицата Orders, съдържащи стойността на идентификатора на клиента, също ще бъдат изтрити.

Разгледайте следната различна дефиниция на таблицата Orders, използваща действието SET NULL вместо действието CASCADE:

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

Клаузата ON UPDATE SET NUL означава, че ако идентификаторът на клиент (CustId) се актуализира в таблицата Customer, съответните стойности на външни ключове в таблицата Orders автоматично ще бъдат направени NULL. Клаузата ON DELETE SET NUL означава, че ако идентификаторът на клиент (CustId) бъде изтрит от таблицата Customer, всички съответни стойности на външни ключове в таблицата Orders автоматично ще бъдат направени NULL.

За да забраните автоматичното създаване на индекси за външни ключове, трябва да използвате модификатора NO INDEX. Тази форма на дефиницията на външен ключ трябва да се използва само в случаите, когато получените стойности на индекса често ще се дублират. Когато стойностите в индекса на външен ключ често се дублират, използването на индекс може да бъде по-малко ефективно, отколкото простото сканиране на таблицата. Поддържането на този вид индекс при вмъкване и изтриване на редове от таблицата влошава производителността и не дава никакви предимства.



Разширете уменията си
Преглед на обучението
Получавайте първи новите функции
Присъединете се към участниците в Office Insider

Беше ли полезна тази информация?

Благодарим ви за обратната връзка!

Благодарим ви за вашата обратна връзка. Изглежда, че ще бъде полезно да ви свържем с един от нашите агенти по поддръжката на Office.

×