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:

CREATE TABLE users(
    id SERIAL PRIMARY KEY,
    login VARCHAR(16),
    password VARCHAR(20) CHECK(LENGTH(password) BETWEEN 6 AND 14)
)

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:

CHECK(LENGTH(password) BETWEEN 6 AND 14);

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

INSERT INTO users (login, password) VALUES('snipe', 'bla');

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ć:

ALTER TABLE users
  ADD CONSTRAINT users_password_check CHECK (LENGTH(password) BETWEEN 6 AND 14);

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

ALTER TABLE users DROP CONSTRAINT users_password_check;

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 🙂

2 thoughts on “SQL i instrukcja CHECK

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *