Ponieważ ograniczenia zgodne są z ANSI SQL, to obsługuje je wiele innych systemów zarządzania bazami danych oraz narzędzi programistycznych.
Ograniczenia definiuje się instrukcją CREATE TABLE lub ALTER TABLE. Ograniczenia te mogą opierać się na jednej lub wielu kolumnach, i mogą być dodawane do tabeli zawierającej dane. Jeli ograniczenie odnosi się do pojedynczej kolumny, to nazywa się je ograniczeniem na poziomie kolumny. Jeli ograniczenie odnosi się do wielu kolumn, to nazywa się je ograniczeniem na poziomie tabeli, nawet jeli nie odwołuje się do wszystkich kolumn w tabeli.
Poniżej opisane są różne typy ograniczeń.
Dziedzina DEFAULT Określa wartość, która zostanie wprowadzona do kolumny, gdy wartość ta nie zostanie podana jawnie w instrukcji INSERT
CHECK Okrela wartoci, które są dozwolone w danej kolumnie.
Jednostka PRIMARY KEY Jednoznacznie identyfikuje każdy wiersz-zapewnia, że użytkownicy nie wprowadzą powtarzających się wartoci, że nie będą wprowadzane wartoci null, oraz że utworzony jest indeks zwiększający wydajnoć.
UNIQUE Chroni przed powtórzeniami w dodatkowych (nie podstawowych) kluczach-zapewnia, że utworzony jest indeks zwiększający wydajnoć.
Referencja FOREIGN KEY Definiuje kolumnę lub zestaw kolumn, których wartoci muszą odpowiadać kluczowi podstawowemu tej samej lub innej tabeli.
ALTER TABLE sprzedaz
WITH NOCHECK
ADD CONSTRAINT poprawna_kwota
CHECK (kwota >=0)
Modyfikacje danych wykonane po dodaniu ograniczenia muszą spełniać wszystkie ograniczenia, także w kolumnach nie umieszczonych na licie modyfikowanych kolumn. Przykładowo, jeli dodajesz ograniczenie CHECK do kolumny Kol A z opcją WITH NOCHECK, istniejące wartoci w Kol A nie są sprawdzane. Jeli póniej modyfikujesz kolumnę Kol B, a Kol A nie spełnia warunku CHECK, to aktualizacja nie uda się.
Przy blokowaniu działania ograniczeń na istniejące dane należy wziąć pod uwagę następujące zalecenia:
Opcji tej należy używać tylko wtedy, jeli istniejące dane nie będą modyfikowane-są to na przykład dane archiwalne.
Nie należy używać tej opcji, jeli istniejące dane mają być zmieniane. Przy aktualizacji dane muszą spełniać warunek CHECK.
Warto upewnić się, czy potrzebne jest blokowanie działania ograniczenia. Przed podjęciem decyzji o dodaniu ograniczenia można sprawdzić istniejące dane przy pomocy kwerendy.
Blokowanie działania ograniczeń przy wprowadzaniu danych
Działanie ograniczenia może zostać zablokowane dla istniejących już ograniczeń CHECK i FOREIGN KEY, dzięki czemu wszystkie modyfikowane i dodawane dane nie będą sprawdzane przez te ograniczenia. Aby uniknąć przeciążenia sprawdzaniem ograniczeń, blokowanie ograniczeń może być potrzebne gdy:
Pewne jest, że dane spełniają warunki ograniczeń.
Wprowadzane dane nie spełniają warunków. Póniej, poprzez uruchomienie odpowiedniej kwerendy dane zostaną skorygowane, a ograniczenie ponownie uaktywnione.
Aktywacja ograniczenia, które zostało zablokowane wymaga wykonania kolejnej instrukcji ALTER TABLE, zawierającej klauzulę CHECK lub CHECK ALL.
Częciowa składnia:
ALTER TABLE tabela
{CHECK | NOCHECK} CONSTRAINT
{ALL | ograniczenie[,...n]}
Przykład:
ALTER TABLE sprzedaz
NOCHECK
CONSTRAINT poprawna_kwota
Aby sprawdzić, czy ograniczenie w tabeli jest aktywne, czy zablokowane, należy uruchomić systemową procedurę składowaną sp_help.
Blokowanie ograniczeń w tabeli nie wpływa na ograniczenia w innych powiązanych z nią tabelach. Modyfikacje w tabeli nadal mogą generować błędy przekroczenia ograniczenia