The Essence of Programming

SQL i instrukcja CHECK

27 maja 2008

Chciałbym poświęcić kilka słów na temat użycia SQL'a oraz jego instrukcji, które nie są zbyt często opisywane w różnych tutorialach i kursach. Dzisiejszy artykuł będzie pierwszym z cyklu "jak to działa" ;) Aby przetestować przykłady znajdujące się poniżej, musimy zaopatrzyć się w bazę PostgreSQL lub MS SQL.

Na potrzeby dzisiejszego kursu stworzymy tabelę users:

Tabela zawierać będzie 3 pola: id typu serial(INT IDENTITY(1,1) w MS SQL; INT AUTO_INCREMENT w MySQL), oraz login i password typu VARCHAR.

CHECK to instrukcja, którą możemy użyć podczas tworzenia/edycji tabeli za pomocą CREATE/ALTER. Polega ona na sprawdzeniu określonego warunku podczas wprowadzania danych przy pomocy instrukcji INSERT na poziomie samej bazy danych.

W naszej przed chwilą stworzonej tabeli postanowiliśmy, że długość hasła powinna mieścić się w przedziale od 6 do 14 liter:

Spróbujmy teraz wstawić nowy rekord i sprawdźmy czy to zadziała:

Konsola SQL powinna nam wypisać:

ERROR: new row for relation "users" violates check constraint "users_password_check"
Stan SQL:23514

SQL wyświetlił błąd pokazując, że nasz ogranicznik działa. Ten sam efekt możemy osiągnąć tworząc tabelę bez instrukcji CHECK, a następnie dodać:

Co nam to daje? Nazwanie ogranicznika umożliwia odwołanie się do niego później, np. w celu jego usunięcia:

W instrukcji CHECK możemy wprowadzać te same ograniczenia co podczas szukania w klauzuli WHERE, także nie powinniśmy mieć z tym najmniejszych problemów. Ograniczenia mogą być dosyć złożone, a jedyne co nas powstrzymuje to nasza wyobraźnia i określone potrzeby.

Jak zawsze, musi być jednak pewne ale...

Nie każdy system bazodanowy obsługuje instrukcję CHECK(choć znajduje się w standardzie SQL-92), w tym również jedna z częściej używanych baz danych - MySQL(przynajmniej do wersji 5.0.45). Zawsze pozostaje jednak jakaś alternatywa - w postaci np.: PostgreSQL i MS SQL.

W następnej części cyklu opowiem trochę o widokach :)

Komentarze:
Bigismall [10 grudnia 2007 22:13:31]

wprowadzania danych przy pomocy instrukcji SELECT na poziomie samej bazy danych.

Powinno być chyba „INSERT” zamiast „SELECT”

snipe [11 grudnia 2007 14:19:00]

oczywiście że INSERT, dzięki za uwagę :)

Kilka informacji o autorze

Programista, blogger, uwielbia białą czekoladę ;)