Klauzula CONSTRAINT

Element ograniczenie przypomina indeks, jednak można go także użyć do ustanowienia relacji z inną tabelą.

Klauzula CONSTRAINT użyta w instrukcji ALTER TABLE oraz CREATE TABLE służy do tworzenia lub usuwania ograniczeń. Istnieją dwa rodzaje klauzul CONSTRAINT: jedna służy do utworzenia ograniczenia w jednym polu, a druga do utworzenia ograniczenia w kilku polach.

Uwaga : Aparat bazy danych programu Microsoft Access nie obsługuje stosowania instrukcji CONSTRAINT ani żadnych innych instrukcji języka definicji danych z bazami danych innymi niż bazy programu Microsoft Access. Zamiast tego należy używać metod Create obiektów DAO.

Składnia

Ograniczenie w jednym polu:

CONSTRAINT nazwa {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES tabelaobca [(poleobce1, poleobce2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Ograniczenie w wielu polach:

CONSTRAINT nazwa
{PRIMARY KEY (klucz_podstawowy1[, klucz_podstawowy2 [, ...]]) |
UNIQUE (klucz_unikatowy1[, klucz_unikatowy2 [, ...]]) |
NOT NULL (pole_niepuste1[, pole_niepuste2 [, ...]]) |
FOREIGN KEY [NO INDEX] (odw1[, odw2 [, ...]]) REFERENCES tabelaobca [(pole_tabeli_obcej1 [, pole_tabeli_obcej2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Klauzula CONSTRAINT zawiera następujące segmenty:

Segment

Opis

nazwa

Nazwa ograniczenia, które ma zostać utworzone.

klucz_podstawowy1, klucz_podstawowy2

Nazwa pola lub pól, dla których ma zostać wyznaczony klucz podstawowy.

klucz_unikatowy1, klucz_unikatowy2

Nazwa pola lub pól, dla których ma zostać wyznaczony klucz unikatowy.

pole_niepuste1, pole_niepuste2

Nazwa pola lub pól, które są ograniczone do wartości różnych od null.

odw1, odw2

Nazwa pola lub pól klucza obcego, które odwołują się do pól w innej tabeli.

tabelaobca

Nazwa tabeli obcej zawierającej pole lub pola określone przez element pole_tabeli_obcej.

pole_tabeli_obcej1, pole_tabeli_obcej2

Nazwa pola lub pól w elemencie tabelaobca określonych przez elementy odw1 lub odw2. Jeśli pole, do którego prowadzi odwołanie, jest kluczem podstawowym elementu tabelaobca, można pominąć tę klauzulę.


Spostrzeżenia

W przypadku ograniczenia w jednym polu składni używa się w klauzuli definicji pola instrukcji ALTER TABLE lub CREATE TABLE bezpośrednio po specyfikacji typu danych pola.

W przypadku ograniczenia w wielu polach składni używa się zawsze, gdy wykorzystuje się słowo zastrzeżone CONSTRAINT poza klauzulą definicji pola w instrukcji ALTER TABLE lub CREATE TABLE.

Za pomocą elementu CONSTRAINT można zdefiniować pole jako jeden z następujących rodzajów ograniczeń:

  • Aby określić pole jako klucz unikatowy, można użyć wyrazu zastrzeżonego UNIQUE. Oznacza to, że dwa rekordy w tabeli nie mogą mieć takiej samej wartości w tym polu. Dowolne pole lub lista pól mogą być ograniczone jako unikatowe. Jeśli ograniczenie w wielu polach jest określone jako klucz unikatowy, połączone wartości wszystkich pól w indeksie muszą być unikatowe, nawet jeśli dwa lub więcej rekordów ma tę samą wartość tylko w jednym z pól.

  • Aby określić pole lub zestaw pól w tabeli jako klucz podstawowy, można użyć słów zastrzeżonych PRIMARY KEY. Wszystkie wartości w kluczu podstawowym muszą być unikatowe i muszą być różne od Null, a dla jednej tabeli może występować tylko jeden klucz podstawowy.

    Uwaga : Nie należy ustawiać ograniczenia PRIMARY KEY w tabeli, która już ma klucz podstawowy, ponieważ w przeciwnym razie wystąpi błąd.

  • Aby określić pole jako klucz obcy, można użyć słów zastrzeżonych FOREIGN KEY. Jeśli klucz podstawowy tabeli obcej składa się z więcej niż jednego pola, trzeba użyć definicji ograniczenia w wielu polach zawierającej wszystkie pola odwołań, nazwę tabeli obcej oraz nazwy pól odwołań w tabeli obcej w tej samej kolejności, w jakiej pola odwołań są umieszczone na liście. Jeśli pole lub pola, do których prowadzi odwołanie, są kluczem podstawowym tabeli obcej, nie trzeba określać pól, do których prowadzi odwołanie. Domyślnie aparat bazy danych zachowuje się tak, jakby kluczem podstawowym tabeli obcej były pola, do których prowadzi odwołanie.

    Ograniczenia klucza obcego definiują określone czynności do wykonania, gdy zmieniana jest wartość odpowiadającego klucza podstawowego:

  • Można określić czynności do wykonania na tabeli obcej w oparciu o odpowiadające im czynności wykonane na kluczu podstawowym w tabeli, dla której zdefiniowano element CONSTRAINT. Rozważ na przykład następującą definicję dla tabeli Customers (Kontrahenci):

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

Rozważ następującą definicję tabeli Orders (Zamówienia), która określa relację klucza obcego odnoszącego się do klucza podstawowego w tabeli Customers (Kontrahenci):

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

Obie klauzule ON UPDATE CASCADE oraz ON DELETE CASCADE są zdefiniowane przez klucz obcy. Klauzula ON UPDATE CASCADE oznacza, że jeśli identyfikator kontrahenta (CustId) zostanie zaktualizowany w tabeli Customers (Kontrahenci), aktualizacja jest kaskadowana do tabeli Orders (Zamówienia). Każde zamówienie zawierające odpowiednią wartość identyfikatora kontrahenta zostanie automatycznie zaktualizowane do nowej wartości. Klauzula ON DELETE CASCADE oznacza, że jeśli kontrahent zostanie usunięty z tabeli Customers (Kontrahenci), wszystkie wiersze tabeli Orders (Zamówienia) zawierające wartość identyfikatora tego kontrahenta również zostaną usunięte.

Rozważ następującą, inną definicję tabeli Orders (Zamówienia) przy użyciu akcji SET NULL zamiast akcji 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

Klauzula ON UPDATE SET NULL oznacza, że jeśli identyfikator kontrahenta (CustId) zostanie zaktualizowany w tabeli Customers (Kontrahenci), odpowiadająca wartość klucza obcego w tabeli Orders (Zamówienia) zostanie automatycznie ustawiona na wartość NULL. Podobnie klauzula ON DELETE SET NULL oznacza, że jeśli identyfikator kontrahenta (CustId) zostanie usunięty z tabeli Customers (Kontrahenci), wszystkie odpowiadające klucze obce w tabeli Orders (Zamówienia) zostaną automatycznie ustawione na wartość NULL.

Aby zapobiec automatycznemu tworzeniu indeksów dla kluczy obcych, można użyć modyfikatora NO INDEX. Ten formularz definicji klucza obcego powinien być używany tylko w przypadkach, gdy wynikowe wartości indeksu często by się powtarzały. Jeśli wartości w indeksie klucza obcego często się powtarzają, użycie indeksu może być mniej skuteczne niż wykonanie po prostu skanu tabeli. Utrzymywanie tego typu indeksu, ze wstawianymi i usuwanymi z tabeli wierszami, zmniejsza wydajność i nie dostarcza żadnych korzyści.



Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów pakietu Office

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×