SQL i instrukcja CHECK
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 :)
wprowadzania danych przy pomocy instrukcji SELECT na poziomie samej bazy danych.
Powinno być chyba „INSERT” zamiast „SELECT”
oczywiście że INSERT, dzięki za uwagę :)